19 for(
i = 0;
i <
n; ++
i)
35 int ringfirst, ringlast;
41 if(framenum < client->csqcentityframe_lastreset)
70 Con_DPrintf(
"CSQC entity DB: lost a frame too early to do any handling (resending ALL)...\n");
82 if(ringlast < ringfirst)
85 memset(recoversendflags, 0,
sizeof(recoversendflags));
87 for(j = ringfirst; j <= ringlast; ++j)
97 Con_Printf(
"CSQC entity DB encountered a frame from the past when recovering from PL...?\n");
102 for(
i = 0;
i < d->
num; ++
i)
107 recoversendflags[ent] |= -1;
109 recoversendflags[ent] |= sf;
115 for(
i = 0;
i < d->
num; ++
i)
121 recoversendflags[ent] = 0;
125 recoversendflags[ent] &= ~sf;
132 if(recoversendflags[
i] < 0)
158 Con_Printf(
"Trying to dealloc the wrong entity frame\n");
167 int num, number, end, sendflags, nonplayer_splitpoint, nonplayer_splitpoint_number, nonplayer_index;
168 qbool sectionstarted =
false;
169 const unsigned short *
n;
182 if (msg->
cursize + 32 >= maxsize)
189 for (num = 0,
n = numbers;num < numnumbers;num++,
n++)
192 for (;number < end;number++)
199 ed = prog->
edicts + number;
212 for (;number < end;number++)
224 for (number = 1;number < end;number++)
230 ed = prog->
edicts + number;
252 if (msg->
cursize + 17 >= maxsize)
286 nonplayer_splitpoint = rand() % nonplayer_index;
292 for (number = 1;number < end;number++)
298 ed = prog->
edicts + number;
308 if (nonplayer_index == nonplayer_splitpoint)
310 nonplayer_splitpoint_number = number;
319 for (num = 1;num < end;num++)
326 : (num - (
svs.
maxclients + 1) + nonplayer_splitpoint_number);
334 ed = prog->
edicts + number;
347 sendflags = 0xFFFFFF;
355 int oldcursize2 = msg->
cursize;
382 if (msg->
cursize + 17 >= maxsize)
408 if (msg->
cursize + 17 >= maxsize)
434 return sectionstarted;
void MSG_WriteShort(sizebuf_t *sb, int c)
void MSG_WriteByte(sizebuf_t *sb, int c)
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
#define PRVM_serverglobaledict(fieldname)
#define PRVM_serveredictfunction(ed, fieldname)
#define ENTITYSIZEPROFILING_START(msg, num, flags)
#define SCOPE_EXISTED_ONCE
#define SCOPE_ASSUMED_EXISTING
#define ENTITYSIZEPROFILING_END(msg, num, flags)
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
#define NUM_CSQCENTITIES_PER_FRAME
server_static_t svs
persistant server info
#define NUM_CSQCENTITYDB_FRAMES
int csqcentityframe_lastreset
csqcentityframedb_t csqcentityframehistory[NUM_CSQCENTITYDB_FRAMES]
unsigned char csqcentityscope[MAX_EDICTS]
unsigned int csqcentitysendflags[MAX_EDICTS]
int csqcentityframehistory_next
unsigned short entno[NUM_CSQCENTITIES_PER_FRAME]
int sendflags[NUM_CSQCENTITIES_PER_FRAME]
int num_edicts
copies of some vars that were former read from sv
void(* ExecuteProgram)(struct prvm_prog_s *prog, func_t fnum, const char *errormessage)
pointer to one of the *VM_ExecuteProgram functions
struct client_s * clients
client slots
int maxclients
number of svs.clients slots (updated by maxplayers command)
int writeentitiestoclient_cliententitynumber
int writeentitiestoclient_clientnumber
qbool overflowed
set to true if the buffer size failed
qbool allowoverflow
if false, do a Sys_Error
static void EntityFrameCSQC_LostAllFrames(client_t *client)
static void EntityFrameCSQC_DeallocFrame(client_t *client, int framenum)
cvar_t sv_sendentities_csqc_randomize_order
static int EntityFrameCSQC_AllocFrame(client_t *client, int framenum)
void EntityFrameCSQC_LostFrame(client_t *client, int framenum)
qbool EntityFrameCSQC_WriteFrame(sizebuf_t *msg, int maxsize, int numnumbers, const unsigned short *numbers, int framenum)