icculus quake2 doxygen  1.0 dev
sv_user.c File Reference
#include "server.h"

Go to the source code of this file.

Classes

struct  ucmd_t
 

Macros

#define MAX_STRINGCMDS   8
 

Functions

void SV_BeginDemoserver (void)
 
void SV_New_f (void)
 
void SV_Configstrings_f (void)
 
void SV_Baselines_f (void)
 
void SV_Begin_f (void)
 
void SV_NextDownload_f (void)
 
void SV_BeginDownload_f (void)
 
void SV_Disconnect_f (void)
 
void SV_ShowServerinfo_f (void)
 
void SV_Nextserver (void)
 
void SV_Nextserver_f (void)
 
void SV_ExecuteUserCommand (char *s)
 
void SV_ClientThink (client_t *cl, usercmd_t *cmd)
 
void SV_ExecuteClientMessage (client_t *cl)
 

Variables

edict_tsv_player
 
ucmd_t ucmds []
 

Macro Definition Documentation

◆ MAX_STRINGCMDS

#define MAX_STRINGCMDS   8

Definition at line 531 of file sv_user.c.

Function Documentation

◆ SV_Baselines_f()

void SV_Baselines_f ( void  )

Definition at line 179 of file sv_user.c.

180 {
181  int start;
182  entity_state_t nullstate;
183  entity_state_t *base;
184 
185  Com_DPrintf ("Baselines() from %s\n", sv_client->name);
186 
187  if (sv_client->state != cs_connected)
188  {
189  Com_Printf ("baselines not valid -- already spawned\n");
190  return;
191  }
192 
193  // handle the case of a level changing while a client was connecting
194  if ( atoi(Cmd_Argv(1)) != svs.spawncount )
195  {
196  Com_Printf ("SV_Baselines_f from different level\n");
197  SV_New_f ();
198  return;
199  }
200 
201  start = atoi(Cmd_Argv(2));
202 
203  memset (&nullstate, 0, sizeof(nullstate));
204 
205  // write a packet full of data
206 
208  && start < MAX_EDICTS)
209  {
210  base = &sv.baselines[start];
211  if (base->modelindex || base->sound || base->effects)
212  {
214  MSG_WriteDeltaEntity (&nullstate, base, &sv_client->netchan.message, true, true);
215  }
216  start++;
217  }
218 
219  // send next command
220 
221  if (start == MAX_EDICTS)
222  {
224  MSG_WriteString (&sv_client->netchan.message, va("precache %i\n", svs.spawncount) );
225  }
226  else
227  {
229  MSG_WriteString (&sv_client->netchan.message, va("cmd baselines %i %i\n",svs.spawncount, start) );
230  }
231 }

◆ SV_Begin_f()

void SV_Begin_f ( void  )

Definition at line 238 of file sv_user.c.

239 {
240  Com_DPrintf ("Begin() from %s\n", sv_client->name);
241 
242  // handle the case of a level changing while a client was connecting
243  if ( atoi(Cmd_Argv(1)) != svs.spawncount )
244  {
245  Com_Printf ("SV_Begin_f from different level\n");
246  SV_New_f ();
247  return;
248  }
249 
251 
252  // call the game begin function
254 
256 }

◆ SV_BeginDemoserver()

void SV_BeginDemoserver ( void  )

Definition at line 40 of file sv_user.c.

41 {
42  char name[MAX_OSPATH];
43 
44  Com_sprintf (name, sizeof(name), "demos/%s", sv.name);
46  if (!sv.demofile)
47  Com_Error (ERR_DROP, "Couldn't open %s\n", name);
48 }

Referenced by SV_New_f().

◆ SV_BeginDownload_f()

void SV_BeginDownload_f ( void  )

Definition at line 302 of file sv_user.c.

303 {
304  char *name;
305  extern cvar_t *allow_download;
309  extern cvar_t *allow_download_maps;
310  extern int file_from_pak; // ZOID did file come from pak?
311  int offset = 0;
312 
313  name = Cmd_Argv(1);
314 
315  if (Cmd_Argc() > 2)
316  offset = atoi(Cmd_Argv(2)); // downloaded offset
317 
318  // hacked by zoid to allow more conrol over download
319  // first off, no .. or global allow check
320  if (strstr (name, "..") || !allow_download->value
321  // leading dot is no good
322  || *name == '.'
323  // leading slash bad as well, must be in subdir
324  || *name == '/'
325  // next up, skin check
326  || (strncmp(name, "players/", 6) == 0 && !allow_download_players->value)
327  // now models
328  || (strncmp(name, "models/", 6) == 0 && !allow_download_models->value)
329  // now sounds
330  || (strncmp(name, "sound/", 6) == 0 && !allow_download_sounds->value)
331  // now maps (note special case for maps, must not be in pak)
332  || (strncmp(name, "maps/", 6) == 0 && !allow_download_maps->value)
333  // MUST be in a subdirectory
334  || !strstr (name, "/") )
335  { // don't allow anything with .. path
339  return;
340  }
341 
342 
343  if (sv_client->download)
345 
347  sv_client->downloadcount = offset;
348 
349  if (offset > sv_client->downloadsize)
351 
352  if (!sv_client->download
353  // special check for maps, if it came from a pak file, don't allow
354  // download ZOID
355  || (strncmp(name, "maps/", 5) == 0 && file_from_pak))
356  {
357  Com_DPrintf ("Couldn't download %s to %s\n", name, sv_client->name);
358  if (sv_client->download) {
361  }
362 
366  return;
367  }
368 
370  Com_DPrintf ("Downloading %s to %s\n", name, sv_client->name);
371 }

◆ SV_ClientThink()

void SV_ClientThink ( client_t cl,
usercmd_t cmd 
)

Definition at line 515 of file sv_user.c.

517 {
518  cl->commandMsec -= cmd->msec;
519 
520  if (cl->commandMsec < 0 && sv_enforcetime->value )
521  {
522  Com_DPrintf ("commandMsec underflow from %s\n", cl->name);
523  return;
524  }
525 
526  ge->ClientThink (cl->edict, cmd);
527 }

Referenced by SV_ExecuteClientMessage().

◆ SV_Configstrings_f()

void SV_Configstrings_f ( void  )

Definition at line 124 of file sv_user.c.

125 {
126  int start;
127 
128  Com_DPrintf ("Configstrings() from %s\n", sv_client->name);
129 
130  if (sv_client->state != cs_connected)
131  {
132  Com_Printf ("configstrings not valid -- already spawned\n");
133  return;
134  }
135 
136  // handle the case of a level changing while a client was connecting
137  if ( atoi(Cmd_Argv(1)) != svs.spawncount )
138  {
139  Com_Printf ("SV_Configstrings_f from different level\n");
140  SV_New_f ();
141  return;
142  }
143 
144  start = atoi(Cmd_Argv(2));
145 
146  // write a packet full of data
147 
149  && start < MAX_CONFIGSTRINGS)
150  {
151  if (sv.configstrings[start][0])
152  {
156  }
157  start++;
158  }
159 
160  // send next command
161 
162  if (start == MAX_CONFIGSTRINGS)
163  {
165  MSG_WriteString (&sv_client->netchan.message, va("cmd baselines %i 0\n",svs.spawncount) );
166  }
167  else
168  {
170  MSG_WriteString (&sv_client->netchan.message, va("cmd configstrings %i %i\n",svs.spawncount, start) );
171  }
172 }

◆ SV_Disconnect_f()

void SV_Disconnect_f ( void  )

Definition at line 385 of file sv_user.c.

386 {
387 // SV_EndRedirect ();
389 }

◆ SV_ExecuteClientMessage()

void SV_ExecuteClientMessage ( client_t cl)

Definition at line 539 of file sv_user.c.

540 {
541  int c;
542  char *s;
543 
544  usercmd_t nullcmd;
545  usercmd_t oldest, oldcmd, newcmd;
546  int net_drop;
547  int stringCmdCount;
548  int checksum, calculatedChecksum;
549  int checksumIndex;
550  qboolean move_issued;
551  int lastframe;
552 
553  sv_client = cl;
555 
556  // only allow one move command
557  move_issued = false;
558  stringCmdCount = 0;
559 
560  while (1)
561  {
563  {
564  Com_Printf ("SV_ReadClientMessage: badread\n");
565  SV_DropClient (cl);
566  return;
567  }
568 
569  c = MSG_ReadByte (&net_message);
570  if (c == -1)
571  break;
572 
573  switch (c)
574  {
575  default:
576  Com_Printf ("SV_ReadClientMessage: unknown command char\n");
577  SV_DropClient (cl);
578  return;
579 
580  case clc_nop:
581  break;
582 
583  case clc_userinfo:
584  strncpy (cl->userinfo, MSG_ReadString (&net_message), sizeof(cl->userinfo)-1);
586  break;
587 
588  case clc_move:
589  if (move_issued)
590  return; // someone is trying to cheat...
591 
592  move_issued = true;
593  checksumIndex = net_message.readcount;
594  checksum = MSG_ReadByte (&net_message);
595  lastframe = MSG_ReadLong (&net_message);
596  if (lastframe != cl->lastframe) {
597  cl->lastframe = lastframe;
598  if (cl->lastframe > 0) {
599  cl->frame_latency[cl->lastframe&(LATENCY_COUNTS-1)] =
600  svs.realtime - cl->frames[cl->lastframe & UPDATE_MASK].senttime;
601  }
602  }
603 
604  memset (&nullcmd, 0, sizeof(nullcmd));
605  MSG_ReadDeltaUsercmd (&net_message, &nullcmd, &oldest);
606  MSG_ReadDeltaUsercmd (&net_message, &oldest, &oldcmd);
607  MSG_ReadDeltaUsercmd (&net_message, &oldcmd, &newcmd);
608 
609  if ( cl->state != cs_spawned )
610  {
611  cl->lastframe = -1;
612  break;
613  }
614 
615  // if the checksum fails, ignore the rest of the packet
616  calculatedChecksum = COM_BlockSequenceCRCByte (
617  net_message.data + checksumIndex + 1,
618  net_message.readcount - checksumIndex - 1,
619  cl->netchan.incoming_sequence);
620 
621  if (calculatedChecksum != checksum)
622  {
623  Com_DPrintf ("Failed command checksum for %s (%d != %d)/%d\n",
624  cl->name, calculatedChecksum, checksum,
625  cl->netchan.incoming_sequence);
626  return;
627  }
628 
629  if (!sv_paused->value)
630  {
631  net_drop = cl->netchan.dropped;
632  if (net_drop < 20)
633  {
634 
635 //if (net_drop > 2)
636 
637 // Com_Printf ("drop %i\n", net_drop);
638  while (net_drop > 2)
639  {
640  SV_ClientThink (cl, &cl->lastcmd);
641 
642  net_drop--;
643  }
644  if (net_drop > 1)
645  SV_ClientThink (cl, &oldest);
646 
647  if (net_drop > 0)
648  SV_ClientThink (cl, &oldcmd);
649 
650  }
651  SV_ClientThink (cl, &newcmd);
652  }
653 
654  cl->lastcmd = newcmd;
655  break;
656 
657  case clc_stringcmd:
659 
660  // malicious users may try using too many string commands
661  if (++stringCmdCount < MAX_STRINGCMDS)
663 
664  if (cl->state == cs_zombie)
665  return; // disconnect command
666  break;
667  }
668  }
669 }

Referenced by SV_ReadPackets().

◆ SV_ExecuteUserCommand()

void SV_ExecuteUserCommand ( char *  s)

Definition at line 477 of file sv_user.c.

478 {
479  ucmd_t *u;
480 
481  /*******
482  * Security Fix... This is being set to false so that client's can't
483  * macro expand variables on the server. It seems unlikely that a
484  * client ever ought to need to be able to do this...
485  * old line = Cmd_TokenizeString (s, true);
486  *******/
487  Cmd_TokenizeString(s, false);
489 
490 // SV_BeginRedirect (RD_CLIENT);
491 
492  for (u=ucmds ; u->name ; u++)
493  if (!strcmp (Cmd_Argv(0), u->name) )
494  {
495  u->func ();
496  break;
497  }
498 
499  if (!u->name && sv.state == ss_game)
501 
502 // SV_EndRedirect ();
503 }

Referenced by SV_ExecuteClientMessage().

◆ SV_New_f()

void SV_New_f ( void  )

Definition at line 58 of file sv_user.c.

59 {
60  char *gamedir;
61  int playernum;
62  edict_t *ent;
63 
64  Com_DPrintf ("New() from %s\n", sv_client->name);
65 
67  {
68  Com_Printf ("New not valid -- already spawned\n");
69  return;
70  }
71 
72  // demo servers just dump the file message
73  if (sv.state == ss_demo)
74  {
76  return;
77  }
78 
79  //
80  // serverdata needs to go over for all types of servers
81  // to make sure the protocol is right, and to set the gamedir
82  //
83  gamedir = Cvar_VariableString ("gamedir");
84 
85  // send the serverdata
91 
92  if (sv.state == ss_cinematic || sv.state == ss_pic)
93  playernum = -1;
94  else
95  playernum = sv_client - svs.clients;
96  MSG_WriteShort (&sv_client->netchan.message, playernum);
97 
98  // send full levelname
100 
101  //
102  // game server
103  //
104  if (sv.state == ss_game)
105  {
106  // set up the entity for the client
107  ent = EDICT_NUM(playernum+1);
108  ent->s.number = playernum+1;
109  sv_client->edict = ent;
110  memset (&sv_client->lastcmd, 0, sizeof(sv_client->lastcmd));
111 
112  // begin fetching configstrings
114  MSG_WriteString (&sv_client->netchan.message, va("cmd configstrings %i 0\n",svs.spawncount) );
115  }
116 
117 }

Referenced by SV_Baselines_f(), SV_Begin_f(), and SV_Configstrings_f().

◆ SV_NextDownload_f()

void SV_NextDownload_f ( void  )

Definition at line 265 of file sv_user.c.

266 {
267  int r;
268  int percent;
269  int size;
270 
271  if (!sv_client->download)
272  return;
273 
275  if (r > 1024)
276  r = 1024;
277 
280 
282  size = sv_client->downloadsize;
283  if (!size)
284  size = 1;
285  percent = sv_client->downloadcount*100/size;
286  MSG_WriteByte (&sv_client->netchan.message, percent);
289 
291  return;
292 
295 }

Referenced by SV_BeginDownload_f().

◆ SV_Nextserver()

void SV_Nextserver ( void  )

Definition at line 405 of file sv_user.c.

406 {
407  char *v;
408 
409  //ZOID, ss_pic can be nextserver'd in coop mode
410  if (sv.state == ss_game || (sv.state == ss_pic && !Cvar_VariableValue("coop")))
411  return; // can't nextserver while playing a normal game
412 
413  svs.spawncount++; // make sure another doesn't sneak in
414  v = Cvar_VariableString ("nextserver");
415  if (!v[0])
416  Cbuf_AddText ("killserver\n");
417  else
418  {
419  Cbuf_AddText (v);
420  Cbuf_AddText ("\n");
421  }
422  Cvar_Set ("nextserver","");
423 }

Referenced by SV_DemoCompleted(), and SV_Nextserver_f().

◆ SV_Nextserver_f()

void SV_Nextserver_f ( void  )

Definition at line 433 of file sv_user.c.

434 {
435  if ( atoi(Cmd_Argv(1)) != svs.spawncount ) {
436  Com_DPrintf ("Nextserver() from wrong level, from %s\n", sv_client->name);
437  return; // leftover from last server
438  }
439 
440  Com_DPrintf ("Nextserver() from %s\n", sv_client->name);
441 
442  SV_Nextserver ();
443 }

◆ SV_ShowServerinfo_f()

void SV_ShowServerinfo_f ( void  )

Definition at line 399 of file sv_user.c.

400 {
402 }

Variable Documentation

◆ sv_player

edict_t* sv_player

Definition at line 24 of file sv_user.c.

Referenced by SV_Begin_f(), SV_ExecuteClientMessage(), SV_ExecuteUserCommand(), and SV_SetPlayer().

◆ ucmds

ucmd_t ucmds[]
Initial value:
=
{
{"new", SV_New_f},
{"configstrings", SV_Configstrings_f},
{"baselines", SV_Baselines_f},
{"begin", SV_Begin_f},
{"nextserver", SV_Nextserver_f},
{"disconnect", SV_Disconnect_f},
{"download", SV_BeginDownload_f},
{"nextdl", SV_NextDownload_f},
}

Definition at line 451 of file sv_user.c.

Referenced by SV_ExecuteUserCommand().

cs_zombie
@ cs_zombie
Definition: server.h:76
sv
server_t sv
Definition: sv_init.c:24
edict_s::s
entity_state_t s
Definition: g_local.h:964
sv_player
edict_t * sv_player
Definition: sv_user.c:24
SV_ExecuteUserCommand
void SV_ExecuteUserCommand(char *s)
Definition: sv_user.c:477
server_static_t::spawncount
int spawncount
Definition: server.h:165
client_state_t::frames
frame_t frames[UPDATE_BACKUP]
Definition: client.h:138
allow_download
cvar_t * allow_download
Definition: sv_main.c:37
file_from_pak
int file_from_pak
Definition: files.c:204
net_message
sizebuf_t net_message
Definition: net_chan.c:82
v
GLdouble v
Definition: qgl_win.c:143
entity_state_s
Definition: q_shared.h:1169
netchan_t::message
sizebuf_t message
Definition: qcommon.h:600
allow_download_maps
cvar_t * allow_download_maps
Definition: sv_main.c:41
server_static_t::realtime
int realtime
Definition: server.h:161
sizebuf_s::readcount
int readcount
Definition: qcommon.h:82
qboolean
qboolean
Definition: q_shared.h:56
cs_connected
@ cs_connected
Definition: server.h:78
SV_Disconnect_f
void SV_Disconnect_f(void)
Definition: sv_user.c:385
client_s::downloadcount
int downloadcount
Definition: server.h:127
game_export_t::ClientThink
void(* ClientThink)(edict_t *ent, usercmd_t *cmd)
Definition: game.h:211
MSG_WriteLong
void MSG_WriteLong(sizebuf_t *sb, int c)
Definition: common.c:349
client_s::name
char name[32]
Definition: server.h:115
SV_Nextserver_f
void SV_Nextserver_f(void)
Definition: sv_user.c:433
client_s::state
client_state_t state
Definition: server.h:97
CS_NAME
#define CS_NAME
Definition: q_shared.h:1125
sizebuf_s::data
byte * data
Definition: qcommon.h:79
server_t::demofile
FILE * demofile
Definition: server.h:65
MAX_STRINGCMDS
#define MAX_STRINGCMDS
Definition: sv_user.c:531
SZ_Write
void SZ_Write(sizebuf_t *buf, void *data, int length)
Definition: common.c:940
cvar_s
Definition: q_shared.h:317
FS_FOpenFile
int FS_FOpenFile(char *filename, FILE **file)
Definition: files.c:206
entity_state_s::effects
unsigned int effects
Definition: q_shared.h:1180
Cmd_TokenizeString
void Cmd_TokenizeString(char *text, qboolean macroExpand)
Definition: cmd.c:620
entity_state_s::sound
int sound
Definition: q_shared.h:1185
Cmd_Argv
char * Cmd_Argv(int arg)
Definition: cmd.c:517
va
char * va(char *format,...)
Definition: q_shared.c:1050
server_t::baselines
entity_state_t baselines[MAX_EDICTS]
Definition: server.h:57
Cmd_Argc
int Cmd_Argc(void)
Definition: cmd.c:507
game_export_t::ClientCommand
void(* ClientCommand)(edict_t *ent)
Definition: game.h:210
SV_Begin_f
void SV_Begin_f(void)
Definition: sv_user.c:238
server_static_t::clients
client_t * clients
Definition: server.h:168
client_s::netchan
netchan_t netchan
Definition: server.h:134
Cbuf_InsertFromDefer
void Cbuf_InsertFromDefer(void)
Definition: cmd.c:159
ss_cinematic
@ ss_cinematic
Definition: server.h:36
SV_NextDownload_f
void SV_NextDownload_f(void)
Definition: sv_user.c:265
SV_BeginDemoserver
void SV_BeginDemoserver(void)
Definition: sv_user.c:40
Info_Print
void Info_Print(char *s)
Definition: common.c:1068
edict_s
Definition: g_local.h:962
sv_enforcetime
cvar_t * sv_enforcetime
Definition: sv_main.c:30
ucmd_t
Definition: sv_user.c:445
r
GLdouble GLdouble r
Definition: qgl_win.c:336
client_s::download
byte * download
Definition: server.h:125
COM_BlockSequenceCRCByte
byte COM_BlockSequenceCRCByte(byte *base, int length, int sequence)
Definition: common.c:1361
ge
game_export_t * ge
Definition: sv_game.c:24
ss_demo
@ ss_demo
Definition: server.h:37
PROTOCOL_VERSION
#define PROTOCOL_VERSION
Definition: qcommon.h:180
FS_LoadFile
int FS_LoadFile(char *path, void **buffer)
Definition: files.c:394
client_s::lastcmd
usercmd_t lastcmd
Definition: server.h:102
sv_client
client_t * sv_client
Definition: sv_main.c:25
SV_DropClient
void SV_DropClient(client_t *drop)
Definition: sv_main.c:70
Cbuf_AddText
void Cbuf_AddText(char *text)
Definition: cmd.c:90
cvar_s::value
float value
Definition: q_shared.h:324
MSG_ReadByte
int MSG_ReadByte(sizebuf_t *msg_read)
Definition: common.c:722
allow_download_players
cvar_t * allow_download_players
Definition: sv_main.c:38
MAX_OSPATH
#define MAX_OSPATH
Definition: q_shared.h:74
ucmds
ucmd_t ucmds[]
Definition: sv_user.c:451
MSG_WriteString
void MSG_WriteString(sizebuf_t *sb, char *s)
Definition: common.c:375
entity_state_s::number
int number
Definition: q_shared.h:1171
NULL
#define NULL
Definition: q_shared.h:60
MSG_WriteShort
void MSG_WriteShort(sizebuf_t *sb, int c)
Definition: common.c:335
server_t::attractloop
qboolean attractloop
Definition: server.h:47
MSG_WriteByte
void MSG_WriteByte(sizebuf_t *sb, int c)
Definition: common.c:322
ucmd_t::func
void(* func)(void)
Definition: sv_user.c:448
Com_Error
void Com_Error(int code, char *fmt,...)
Definition: common.c:203
clc_userinfo
@ clc_userinfo
Definition: qcommon.h:242
SV_BeginDownload_f
void SV_BeginDownload_f(void)
Definition: sv_user.c:302
allow_download_models
cvar_t * allow_download_models
Definition: sv_main.c:39
ERR_DROP
#define ERR_DROP
Definition: qcommon.h:736
svs
server_static_t svs
Definition: sv_init.c:23
SV_Configstrings_f
void SV_Configstrings_f(void)
Definition: sv_user.c:124
MAX_CONFIGSTRINGS
#define MAX_CONFIGSTRINGS
Definition: q_shared.h:1143
svc_serverdata
@ svc_serverdata
Definition: qcommon.h:221
name
cvar_t * name
Definition: cl_main.c:94
MAX_EDICTS
#define MAX_EDICTS
Definition: q_shared.h:80
MAX_MSGLEN
#define MAX_MSGLEN
Definition: qcommon.h:527
ucmd_t::name
char * name
Definition: sv_user.c:447
SV_UserinfoChanged
void SV_UserinfoChanged(client_t *cl)
Definition: sv_main.c:901
cs_spawned
@ cs_spawned
Definition: server.h:79
MSG_ReadLong
int MSG_ReadLong(sizebuf_t *msg_read)
Definition: common.c:750
usercmd_s
Definition: q_shared.h:513
MSG_ReadString
char * MSG_ReadString(sizebuf_t *msg_read)
Definition: common.c:792
svc_configstring
@ svc_configstring
Definition: qcommon.h:222
SV_Nextserver
void SV_Nextserver(void)
Definition: sv_user.c:405
MSG_ReadDeltaUsercmd
void MSG_ReadDeltaUsercmd(sizebuf_t *msg_read, usercmd_t *from, usercmd_t *move)
Definition: common.c:854
ss_game
@ ss_game
Definition: server.h:35
SV_ShowServerinfo_f
void SV_ShowServerinfo_f(void)
Definition: sv_user.c:399
entity_state_s::modelindex
int modelindex
Definition: q_shared.h:1176
server_t::state
server_state_t state
Definition: server.h:45
sizebuf_s::cursize
int cursize
Definition: qcommon.h:81
Cvar_Set
cvar_t * Cvar_Set(char *var_name, char *value)
Definition: cvar.c:278
sv_paused
cvar_t * sv_paused
Definition: sv_main.c:27
Com_DPrintf
void Com_DPrintf(char *fmt,...)
Definition: common.c:155
usercmd_s::msec
byte msec
Definition: q_shared.h:515
SV_New_f
void SV_New_f(void)
Definition: sv_user.c:58
FS_FreeFile
void FS_FreeFile(void *buffer)
Definition: files.c:433
SV_Baselines_f
void SV_Baselines_f(void)
Definition: sv_user.c:179
client_s::downloadsize
int downloadsize
Definition: server.h:126
svc_download
@ svc_download
Definition: qcommon.h:225
Com_Printf
void Com_Printf(char *fmt,...)
Definition: common.c:102
EDICT_NUM
#define EDICT_NUM(n)
Definition: server.h:69
game_export_t::ClientBegin
void(* ClientBegin)(edict_t *ent)
Definition: game.h:207
svc_spawnbaseline
@ svc_spawnbaseline
Definition: qcommon.h:223
clc_stringcmd
@ clc_stringcmd
Definition: qcommon.h:243
server_t::configstrings
char configstrings[MAX_CONFIGSTRINGS][MAX_QPATH]
Definition: server.h:56
allow_download_sounds
cvar_t * allow_download_sounds
Definition: sv_main.c:40
clc_move
@ clc_move
Definition: qcommon.h:241
Cvar_VariableString
char * Cvar_VariableString(char *var_name)
Definition: cvar.c:79
MSG_WriteDeltaEntity
void MSG_WriteDeltaEntity(entity_state_t *from, entity_state_t *to, sizebuf_t *msg, qboolean force, qboolean newentity)
Definition: common.c:502
ss_pic
@ ss_pic
Definition: server.h:38
SV_ClientThink
void SV_ClientThink(client_t *cl, usercmd_t *cmd)
Definition: sv_user.c:515
svc_stufftext
@ svc_stufftext
Definition: qcommon.h:220
UPDATE_MASK
#define UPDATE_MASK
Definition: qcommon.h:192
cl
client_state_t cl
Definition: cl_main.c:106
Cvar_Serverinfo
char * Cvar_Serverinfo(void)
Definition: cvar.c:510
clc_nop
@ clc_nop
Definition: qcommon.h:240
Com_sprintf
void Com_sprintf(char *dest, int size, char *fmt,...)
Definition: q_shared.c:1236
server_t::name
char name[MAX_QPATH]
Definition: server.h:53
LATENCY_COUNTS
#define LATENCY_COUNTS
Definition: server.h:92
client_s::edict
edict_t * edict
Definition: server.h:114
Cvar_VariableValue
float Cvar_VariableValue(char *var_name)
Definition: cvar.c:63