Xonotic
main.qc File Reference
+ Include dependency graph for main.qc:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define DP_CSQC_ENTITY_REMOVE_IS_B0RKED
 

Functions

string _getcommandkey (string cmd_name, string command, bool forcename)
 
void AuditLists ()
 
void CSQC_Ent_Remove (entity this)
 
void CSQC_Ent_Update (entity this, bool isnew)
 
void CSQC_Init ()
 
float CSQC_InputEvent (int bInputType, float nPrimary, float nSecondary)
 
void CSQC_Parse_CenterPrint (string strMessage)
 
void CSQC_Parse_Print (string strMessage)
 
void CSQC_Parse_StuffCmd (string strMessage)
 
bool CSQC_Parse_TempEntity ()
 
void Ent_Remove (entity this)
 
void Ent_RemovePlayerScore (entity this)
 
void Fog_Force ()
 
void Gamemode_Init ()
 
string GetSpeedUnit (int speed_unit)
 
float GetSpeedUnitFactor (int speed_unit)
 
entity GetTeam (int Team, bool add)
 
void MoveToLast (entity e)
 
 NET_HANDLE (ENT_CLIENT_SCORES, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_TEAMSCORES, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_CLIENTDATA, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_NAGGER, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_ELIMINATEDPLAYERS, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_RANDOMSEED, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_ACCURACY, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_SPAWNPOINT, bool is_new)
 
 NET_HANDLE (ENT_CLIENT_SPAWNEVENT, bool is_new)
 
 NET_HANDLE (ENT_CLIENT_SCORES_INFO, bool isnew)
 
 NET_HANDLE (ENT_CLIENT_INIT, bool isnew)
 
 NET_HANDLE (TE_CSQC_RACE, bool isNew)
 
 NET_HANDLE (TE_CSQC_TEAMNAGGER, bool isNew)
 
 NET_HANDLE (TE_CSQC_PINGPLREPORT, bool isNew)
 
 NET_HANDLE (TE_CSQC_WEAPONCOMPLAIN, bool isNew)
 
void Playerchecker_Think (entity this)
 
void PostInit ()
 
float RegisterPlayer (entity player)
 
float RegisterTeam (entity Team)
 
void RemovePlayer (entity player)
 
void RemoveTeam (entity Team)
 
bool SetTeam (entity o, int Team)
 
void Shutdown ()
 
void Spawn_Draw (entity this)
 
void URI_Get_Callback (int id, int status, string data)
 engine callback More...
 

Variables

string forcefog
 
float has_team
 

Macro Definition Documentation

◆ DP_CSQC_ENTITY_REMOVE_IS_B0RKED

#define DP_CSQC_ENTITY_REMOVE_IS_B0RKED

Definition at line 40 of file main.qc.

Function Documentation

◆ _getcommandkey()

string _getcommandkey ( string  cmd_name,
string  command,
bool  forcename 
)

Definition at line 1289 of file main.qc.

References argv(), autocvar_hud_showbinds, autocvar_hud_showbinds_limit, binddb, cmd_name, cvar(), db_get(), db_put(), keynumtostring(), stof(), strcat(), substring(), tokenize(), and translate_key().

1290 {
1291  string keys;
1292  float n, j, k, l = 0;
1293 
1295  return cmd_name;
1296 
1297  keys = db_get(binddb, command);
1298  if (keys == "")
1299  {
1300  bool joy_active = cvar("joy_active");
1301  n = tokenize(findkeysforcommand(command, 0)); // uses '...' strings
1302  for(j = 0; j < n; ++j)
1303  {
1304  k = stof(argv(j));
1305  if(k != -1)
1306  {
1307  string key = keynumtostring(k);
1308  if(!joy_active && substring(key, 0, 3) == "JOY")
1309  continue;
1310 
1311  key = translate_key(key);
1312 
1313  if (keys == "")
1314  keys = key;
1315  else
1316  keys = strcat(keys, ", ", key);
1317 
1318  ++l;
1320  break;
1321  }
1322 
1323  }
1324  if (keys == "")
1325  keys = "NO_KEY";
1326  db_put(binddb, command, keys);
1327  }
1328 
1329  if (keys == "NO_KEY") {
1330  if (autocvar_hud_showbinds > 1)
1331  return sprintf(_("%s (not bound)"), cmd_name);
1332  else
1333  return cmd_name;
1334  }
1335  else if (autocvar_hud_showbinds > 1 || forcename)
1336  return sprintf("%s (%s)", cmd_name, keys);
1337  else
1338  return keys;
1339 }
int binddb
Definition: main.qh:160
ERASEABLE void db_put(int db, string key, string value)
Definition: map.qh:101
bool autocvar_hud_showbinds_limit
Definition: main.qh:17
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
ERASEABLE string db_get(int db, string key)
Definition: map.qh:91
string translate_key(string key)
Definition: util.qc:1376
bool autocvar_hud_showbinds
Definition: main.qh:16
+ Here is the call graph for this function:

◆ AuditLists()

void AuditLists ( )

Definition at line 196 of file main.qc.

References entity(), error(), players, prev, strcat(), and teams.

Referenced by MoveToLast(), RegisterPlayer(), RegisterTeam(), RemovePlayer(), and RemoveTeam().

197 {
198  entity e;
199  entity prev;
200 
201  prev = players;
202  for(e = prev.sort_next; e; prev = e, e = e.sort_next)
203  {
204  if(prev != e.sort_prev)
205  error(strcat("sort list chain error\nplease submit the output of 'prvm_edicts client' to the developers"));
206  }
207 
208  prev = teams;
209  for(e = prev.sort_next; e; prev = e, e = e.sort_next)
210  {
211  if(prev != e.sort_prev)
212  error(strcat("sort list chain error\nplease submit the output of 'prvm_edicts client' to the developers"));
213  }
214 }
entity() spawn
prev
Definition: all.qh:66
entity teams
Definition: main.qh:44
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
entity players
Definition: main.qh:43
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CSQC_Ent_Remove()

void CSQC_Ent_Remove ( entity  this)

Definition at line 943 of file main.qc.

References autocvar_developer_csqcentities, Ent_Remove(), entnum, enttype, LOG_INFOF, and LOG_WARN.

944 {
945  if (autocvar_developer_csqcentities) LOG_INFOF("CSQC_Ent_Remove() with this=%i {.entnum=%d, .enttype=%d}", this, this.entnum, this.enttype);
946  if (wasfreed(this))
947  {
948  LOG_WARN("CSQC_Ent_Remove called for already removed entity. Packet loss?");
949  return;
950  }
951  if (this.enttype) Ent_Remove(this);
952  delete(this);
953 }
#define LOG_WARN(...)
Definition: log.qh:66
#define LOG_INFOF(...)
Definition: log.qh:71
void Ent_Remove(entity this)
Definition: main.qc:920
int enttype
Definition: main.qh:154
bool autocvar_developer_csqcentities
Definition: main.qh:19
float entnum
Definition: csprogsdefs.qc:94
+ Here is the call graph for this function:

◆ CSQC_Ent_Update()

void CSQC_Ent_Update ( entity  this,
bool  isnew 
)

Definition at line 861 of file main.qc.

References classname, clearentity(), Ent_Remove(), entnum, enttype, etof(), FOREACH, LOG_FATALF, LOG_INFOF, ONREMOVE(), serverdeltatime, serverprevtime, servertime, sourceLoc, STR, and time.

862 {
863  this.sourceLoc = __FILE__":"STR(__LINE__);
864  int t = ReadByte();
865 
866  // set up the "time" global for received entities to be correct for interpolation purposes
867  float savetime = time;
868  if(servertime)
869  {
870  time = servertime;
871  }
872  else
873  {
875  serverdeltatime = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE);
877  }
878 
879 #ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
880  if (this.enttype)
881  {
882  if (t != this.enttype || isnew)
883  {
884  LOG_INFOF("A CSQC entity changed its type! (edict: %d, server: %d, type: %d -> %d)", etof(this), this.entnum, this.enttype, t);
885  Ent_Remove(this);
886  ONREMOVE(this);
887  clearentity(this);
888  isnew = true;
889  }
890  }
891  else
892  {
893  if (!isnew)
894  {
895  LOG_INFOF("A CSQC entity appeared out of nowhere! (edict: %d, server: %d, type: %d)", etof(this), this.entnum, t);
896  isnew = true;
897  }
898  }
899 #endif
900  this.enttype = t;
901  bool done = false;
902  FOREACH(LinkedEntities, it.m_id == t, {
903  if (isnew) this.classname = it.netname;
904  if (autocvar_developer_csqcentities)
905  LOG_INFOF("CSQC_Ent_Update(%i, %d) at %f {.entnum=%d, .enttype=%d} t=%s (%d)", this, isnew, savetime, this.entnum, this.enttype, this.classname, t);
906  done = it.m_read(this, NULL, isnew);
907  MUTATOR_CALLHOOK(Ent_Update, this, isnew);
908  break;
909  });
910  time = savetime;
911  if (!done)
912  {
913  LOG_FATALF("CSQC_Ent_Update(%i, %d) at %f {.entnum=%d, .enttype=%d} t=%s (%d)", this, isnew, savetime, this.entnum, this.enttype, this.classname, t);
914  }
915 }
#define STR(it)
Definition: macro.qh:20
string sourceLoc
Location entity was spawned from in source.
Definition: oo.qh:21
string classname
Definition: csprogsdefs.qc:107
float serverdeltatime
Definition: main.qh:180
void clearentity(entity e)
Definition: oo.qh:85
#define LOG_INFOF(...)
Definition: log.qh:71
void Ent_Remove(entity this)
Definition: main.qc:920
void ONREMOVE(entity this)
#define LOG_FATALF(...)
Definition: log.qh:59
int enttype
Definition: main.qh:154
float servertime
Definition: main.qh:36
float serverprevtime
Definition: main.qh:180
float time
Definition: csprogsdefs.qc:16
#define FOREACH(list, cond, body)
Definition: iter.qh:19
float entnum
Definition: csprogsdefs.qc:94
+ Here is the call graph for this function:

◆ CSQC_Init()

void CSQC_Init ( )

Definition at line 45 of file main.qc.

References autocvar_cl_lockview, autocvar_cl_reticle, autocvar_hud_skin, binddb, calledhooks, ClientProgsDB, ConsoleCommand_macro_init(), cvar_set(), cvar_string(), db_create(), db_load(), draw_endBoldFont, gametype, GetTeam(), hud_skin_path, LoadMenuSkinValues(), LOG_TRACEF, maxclients, mi_center, mi_scale, minimapname, NULL, NUM_SPECTATOR, players, postinit, precache_pic(), prvm_language, registercvar(), shortmapname, Sort_Spawn(), static_init, static_init_late, static_init_precache, strcat(), strzone(), teams, tempdb, weapon_accuracy, WEP_FIRST, and WEP_LAST.

46 {
47  prvm_language = strzone(cvar_string("prvm_language"));
48 
49 #ifdef WATERMARK
50  LOG_TRACEF("^4CSQC Build information: ^1%s", WATERMARK);
51 #endif
52 
53  {
54  int i = 0;
55  for ( ; i < 255; ++i)
56  if (getplayerkeyvalue(i, "viewentity") == "")
57  break;
58  maxclients = i;
59  }
60 
61  ReplicateVars(REPLICATEVARS_SEND_ALL);
62 
63  // needs to be done so early because of the constants they create
64  static_init();
67 
68  binddb = db_create();
69  tempdb = db_create();
70  ClientProgsDB = db_load("client.db");
71 
73 
74  //registercommand("hud_configure");
75  //registercommand("hud_save");
76  //registercommand("menu_action");
77 
79 
80  registercvar("hud_usecsqc", "1");
81  registercvar("scoreboard_columns", "default");
82 
83  registercvar("cl_nade_type", "3");
84  registercvar("cl_pokenade_type", "zombie");
85 
86  registercvar("cl_jumpspeedcap_min", "");
87  registercvar("cl_jumpspeedcap_max", "");
88 
89  registercvar("cl_shootfromfixedorigin", "");
90 
91  registercvar("cl_multijump", "-1");
92 
93  registercvar("cl_dodging", "0");
94 
95  registercvar("cl_spawn_near_teammate", "1");
96 
97  registercvar("cl_weapon_switch_reload", "1");
98  registercvar("cl_weapon_switch_fallback_to_impulse", "1");
99 
100  registercvar("cl_allow_uidranking", "1");
101 
103  cvar_set("cl_lockview", "0");
104 
105  gametype = NULL;
106 
107  postinit = false;
108 
109  calledhooks = 0;
110 
111  teams = Sort_Spawn();
112  players = Sort_Spawn();
113 
114  GetTeam(NUM_SPECTATOR, true); // add specs first
115 
116  for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w)
117  weapon_accuracy[w] = -1;
118 
119  // precaches
120 
122  {
123  precache_pic("gfx/reticle_normal");
124  // weapon reticles are precached in weapon files
125  }
126 
127  {
128  get_mi_min_max_texcoords(1); // try the CLEVER way first
129  minimapname = strcat("gfx/", mi_shortname, "_radar");
130  shortmapname = mi_shortname;
131 
132  if (precache_pic(minimapname) == "")
133  {
134  // but maybe we have a non-clever minimap
135  minimapname = strcat("gfx/", mi_shortname, "_mini");
136  if (precache_pic(minimapname) == "")
137  minimapname = ""; // FAIL
138  else
139  get_mi_min_max_texcoords(0); // load new texcoords
140  }
141 
142  mi_center = (mi_min + mi_max) * 0.5;
143  mi_scale = mi_max - mi_min;
145  }
146 
149 }
int binddb
Definition: main.qh:160
ERASEABLE int db_create()
Definition: map.qh:25
string shortmapname
Definition: main.qh:172
#define draw_endBoldFont()
Definition: draw.qh:5
const int NUM_SPECTATOR
Definition: teams.qh:23
const int WEP_FIRST
Definition: all.qh:304
ERASEABLE entity Sort_Spawn()
Definition: sortlist.qc:4
ERASEABLE int db_load(string filename)
Definition: map.qh:35
#define static_init()
Definition: static.qh:33
#define static_init_precache()
Definition: static.qh:43
float maxclients
Definition: csprogsdefs.qc:21
int ClientProgsDB
Definition: main.qh:176
#define WEP_LAST
Definition: all.qh:305
int tempdb
Definition: main.qh:175
int calledhooks
Definition: main.qh:134
bool autocvar_cl_lockview
Definition: view.qh:20
bool autocvar_cl_reticle
Definition: crosshair.qh:3
entity teams
Definition: main.qh:44
string hud_skin_path
Definition: hud.qh:133
void LoadMenuSkinValues()
Definition: hud.qc:42
vector mi_center
Definition: main.qh:24
void ConsoleCommand_macro_init()
Definition: cl_cmd.qc:579
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
vector mi_scale
Definition: main.qh:25
#define NULL
Definition: post.qh:17
entity gametype
Definition: main.qh:30
#define LOG_TRACEF(...)
Definition: log.qh:82
bool postinit
Definition: main.qh:29
entity players
Definition: main.qh:43
string prvm_language
Definition: i18n.qh:8
string minimapname
Definition: main.qh:27
string autocvar_hud_skin
Definition: hud.qh:200
int weapon_accuracy[REGISTRY_MAX(Weapons)]
Definition: hud.qh:110
#define static_init_late()
Definition: static.qh:38
entity GetTeam(int Team, bool add)
Definition: main.qc:303
+ Here is the call graph for this function:

◆ CSQC_InputEvent()

float CSQC_InputEvent ( int  bInputType,
float  nPrimary,
float  nSecondary 
)

Definition at line 452 of file main.qc.

References HUD_Minigame_InputEvent(), HUD_Panel_Chat_InputEvent(), HUD_Panel_InputEvent(), HUD_Radar_InputEvent(), MapVote_InputEvent(), QuickMenu_InputEvent(), and TC.

453 {
454  TC(int, bInputType);
455  bool override = false;
456 
457  override |= HUD_Panel_InputEvent(bInputType, nPrimary, nSecondary);
458  if (override)
459  return true;
460 
461  override |= HUD_Panel_Chat_InputEvent(bInputType, nPrimary, nSecondary);
462 
463  override |= QuickMenu_InputEvent(bInputType, nPrimary, nSecondary);
464 
465  override |= HUD_Radar_InputEvent(bInputType, nPrimary, nSecondary);
466 
467  override |= MapVote_InputEvent(bInputType, nPrimary, nSecondary);
468 
469  override |= HUD_Minigame_InputEvent(bInputType, nPrimary, nSecondary);
470 
471  if(override)
472  return true;
473 
474  return false;
475 }
float HUD_Radar_InputEvent(float bInputType, float nPrimary, float nSecondary)
bool QuickMenu_InputEvent(int bInputType, float nPrimary, float nSecondary)
Definition: quickmenu.qc:432
float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary)
Definition: mapvoting.qc:796
#define TC(T, sym)
Definition: _all.inc:82
float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary)
float HUD_Panel_Chat_InputEvent(float bInputType, float nPrimary, float nSecondary)
Definition: chat.qc:14
float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
Definition: hud_config.qc:511
+ Here is the call graph for this function:

◆ CSQC_Parse_CenterPrint()

void CSQC_Parse_CenterPrint ( string  strMessage)

Definition at line 978 of file main.qc.

References autocvar_developer_csqcentities, centerprint_AddStandard(), and LOG_INFOF.

979 {
980  if (autocvar_developer_csqcentities) LOG_INFOF("CSQC_Parse_CenterPrint(\"%s\")", strMessage);
981  centerprint_AddStandard(strMessage);
982 }
#define LOG_INFOF(...)
Definition: log.qh:71
void centerprint_AddStandard(string strMessage)
Definition: centerprint.qc:132
bool autocvar_developer_csqcentities
Definition: main.qh:19
+ Here is the call graph for this function:

◆ CSQC_Parse_Print()

void CSQC_Parse_Print ( string  strMessage)

Definition at line 971 of file main.qc.

References autocvar_developer_csqcentities, ColorTranslateRGB(), LOG_INFOF, and print().

972 {
973  if (autocvar_developer_csqcentities) LOG_INFOF("CSQC_Parse_Print(\"%s\")", strMessage);
974  print(ColorTranslateRGB(strMessage));
975 }
#define LOG_INFOF(...)
Definition: log.qh:71
ERASEABLE string ColorTranslateRGB(string s)
Definition: string.qh:177
bool autocvar_developer_csqcentities
Definition: main.qh:19
+ Here is the call graph for this function:

◆ CSQC_Parse_StuffCmd()

void CSQC_Parse_StuffCmd ( string  strMessage)

Definition at line 965 of file main.qc.

References autocvar_developer_csqcentities, localcmd, and LOG_INFOF.

966 {
967  if (autocvar_developer_csqcentities) LOG_INFOF("CSQC_Parse_StuffCmd(\"%s\")", strMessage);
968  localcmd(strMessage);
969 }
#define LOG_INFOF(...)
Definition: log.qh:71
bool autocvar_developer_csqcentities
Definition: main.qh:19

◆ CSQC_Parse_TempEntity()

bool CSQC_Parse_TempEntity ( )

Definition at line 987 of file main.qc.

References autocvar_developer_csqcentities, FOREACH, and LOG_INFOF.

988 {
989  // Acquire TE ID
990  int nTEID = ReadByte();
991 
992  FOREACH(TempEntities, it.m_id == nTEID, {
993  if (autocvar_developer_csqcentities)
994  LOG_INFOF("CSQC_Parse_TempEntity() nTEID=%s (%d)", it.netname, nTEID);
995  return it.m_read(NULL, NULL, true);
996  });
997 
999  LOG_INFOF("CSQC_Parse_TempEntity() with nTEID=%d", nTEID);
1000 
1001  // No special logic for this temporary entity; return 0 so the engine can handle it
1002  return false;
1003 }
#define LOG_INFOF(...)
Definition: log.qh:71
bool autocvar_developer_csqcentities
Definition: main.qh:19
#define FOREACH(list, cond, body)
Definition: iter.qh:19

◆ Ent_Remove()

void Ent_Remove ( entity  this)

Definition at line 920 of file main.qc.

References autocvar_cl_jetpack_attenuation, classname, enttype, func_null(), skeletonindex, snd_looping, sound, and VOL_BASE.

Referenced by CSQC_Ent_Remove(), CSQC_Ent_Update(), and NET_HANDLE().

921 {
922  if(this.entremove) this.entremove(this);
923 
924  if(this.skeletonindex)
925  {
926  skel_delete(this.skeletonindex);
927  this.skeletonindex = 0;
928  }
929 
930  if(this.snd_looping > 0)
931  {
933  this.snd_looping = 0;
934  }
935 
936  this.enttype = 0;
937  this.classname = "";
938  this.draw = func_null;
939  this.entremove = func_null;
940  // TODO possibly set more stuff to defaults
941 }
float autocvar_cl_jetpack_attenuation
string classname
Definition: csprogsdefs.qc:107
float skeletonindex
const float VOL_BASE
Definition: sound.qh:36
int enttype
Definition: main.qh:154
#define sound(e, c, s, v, a)
Definition: sound.qh:52
var void func_null()
int snd_looping
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Ent_RemovePlayerScore()

void Ent_RemovePlayerScore ( entity  this)

Definition at line 483 of file main.qc.

References FOREACH, owner, and SetTeam().

Referenced by NET_HANDLE().

484 {
485  if(this.owner) {
486  SetTeam(this.owner, -1);
487  this.owner.gotscores = 0;
488  FOREACH(Scores, true, {
489  this.owner.(scores(it)) = 0; // clear all scores
490  });
491  }
492 }
entity owner
Definition: main.qh:73
bool SetTeam(entity o, int Team)
Definition: main.qc:319
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Fog_Force()

void Fog_Force ( )

Definition at line 1006 of file main.qc.

References autocvar_cl_orthoview, autocvar_cl_orthoview_nofog, forcefog, and localcmd.

Referenced by CSQC_UpdateView().

1007 {
1009  localcmd("\nr_drawfog 0\n");
1010  else if (forcefog != "")
1011  localcmd(sprintf("\nfog %s\nr_fog_exp2 0\nr_drawfog 1\n", forcefog));
1012 }
string forcefog
Definition: main.qc:1005
bool autocvar_cl_orthoview
Definition: view.qh:21
bool autocvar_cl_orthoview_nofog
Definition: view.qh:22
+ Here is the caller graph for this function:

◆ Gamemode_Init()

void Gamemode_Init ( )

Definition at line 955 of file main.qc.

References calledhooks, gametype, HOOK_START, isdemo(), localcmd, and MapInfo_Type_ToString().

Referenced by NET_HANDLE().

956 {
957  if (!isdemo())
958  {
959  if(!(calledhooks & HOOK_START))
960  localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n");
962  }
963 }
string MapInfo_Type_ToString(Gametype t)
Definition: mapinfo.qc:616
int calledhooks
Definition: main.qh:134
entity gametype
Definition: main.qh:30
const int HOOK_START
Definition: main.qh:135
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetSpeedUnit()

string GetSpeedUnit ( int  speed_unit)

Definition at line 1076 of file main.qc.

References strcat().

Referenced by HUD_Physics(), and HUD_StrafeHUD().

1077 {
1078  switch(speed_unit)
1079  {
1080  // translator-friendly strings without the initial space
1081  default:
1082  case 1: return strcat(" ", _("qu/s"));
1083  case 2: return strcat(" ", _("m/s"));
1084  case 3: return strcat(" ", _("km/h"));
1085  case 4: return strcat(" ", _("mph"));
1086  case 5: return strcat(" ", _("knots"));
1087  }
1088 }
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetSpeedUnitFactor()

float GetSpeedUnitFactor ( int  speed_unit)

Definition at line 1063 of file main.qc.

Referenced by HUD_Physics(), and HUD_StrafeHUD().

1064 {
1065  switch(speed_unit)
1066  {
1067  default:
1068  case 1: return 1.0;
1069  case 2: return 0.0254;
1070  case 3: return 0.0254 * 3.6;
1071  case 4: return 0.0254 * 3.6 * 0.6213711922;
1072  case 5: return 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h
1073  }
1074 }
+ Here is the caller graph for this function:

◆ GetTeam()

entity GetTeam ( int  Team,
bool  add 
)

Definition at line 303 of file main.qc.

References entity(), new_pure, NULL, NUM_SPECTATOR, RegisterTeam(), TC, team, and teamslots.

Referenced by CSQC_Init(), NET_HANDLE(), and SetTeam().

304 {
305  TC(int, Team); TC(bool, add);
306  int num = (Team == NUM_SPECTATOR) ? 16 : Team;
307  if(teamslots[num])
308  return teamslots[num];
309  if (!add)
310  return NULL;
311  entity tm = new_pure(team);
312  tm.team = Team;
313  teamslots[num] = tm;
314  RegisterTeam(tm);
315  return tm;
316 }
const int NUM_SPECTATOR
Definition: teams.qh:23
entity teamslots[17]
Definition: main.qh:71
int team
Definition: main.qh:157
float RegisterTeam(entity Team)
Definition: main.qc:263
entity() spawn
#define NULL
Definition: post.qh:17
#define TC(T, sym)
Definition: _all.inc:82
#define new_pure(class)
purely logical entities (.origin doesn&#39;t work)
Definition: oo.qh:62
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MoveToLast()

void MoveToLast ( entity  e)

Definition at line 251 of file main.qc.

References AuditLists(), entity(), and SORT_SWAP.

252 {
253  AuditLists();
254  entity ent = e.sort_next;
255  while(ent)
256  {
257  SORT_SWAP(ent, e);
258  ent = e.sort_next;
259  }
260  AuditLists();
261 }
entity() spawn
void AuditLists()
Definition: main.qc:196
#define SORT_SWAP(a, b)
Swap two neighbours in a sortlist.
Definition: sortlist.qh:14
+ Here is the call graph for this function:

◆ NET_HANDLE() [1/15]

NET_HANDLE ( ENT_CLIENT_SCORES  ,
bool  isnew 
)

Definition at line 494 of file main.qc.

References classname, Ent_Remove(), Ent_RemovePlayerScore(), entity(), etof(), FOREACH, LOG_INFOF, make_pure, new_pure, owner, playerslots, Scoreboard_UpdatePlayerPos(), and sv_entnum.

495 {
496  make_pure(this);
497  entity o;
498 
499  // damnit -.- don't want to go change every single .sv_entnum in hud.qc AGAIN
500  // (no I've never heard of M-x replace-string, sed, or anything like that)
501  bool isNew = !this.owner; // workaround for DP bug
502  int n = ReadByte()-1;
503 
504 #ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED
505  if(!isNew && n != this.sv_entnum)
506  {
507  //print("A CSQC entity changed its owner!\n");
508  LOG_INFOF("A CSQC entity changed its owner! (edict: %d, classname: %s)", etof(this), this.classname);
509  isNew = true;
510  Ent_Remove(this);
511  }
512 #endif
513 
514  this.sv_entnum = n;
515 
516  o = playerslots[this.sv_entnum];
517  if (!o)
518  {
519  o = playerslots[this.sv_entnum] = new_pure(playerslot);
520  }
521  this.owner = o;
522  o.sv_entnum = this.sv_entnum;
523  o.gotscores = 1;
524 
525  //if (!o.sort_prev)
526  // RegisterPlayer(o);
527  //playerchecker will do this for us later, if it has not already done so
528 
529  int sf = ReadShort();
530  int lf = ReadShort();
531  FOREACH(Scores, true, {
532  int p = 1 << (i % 16);
533  if (sf & p)
534  {
535  if (lf & p)
536  o.(scores(it)) = ReadInt24_t();
537  else
538  o.(scores(it)) = ReadChar();
539  }
540  });
541 
542  return = true;
543 
544  if(o.sort_prev)
545  Scoreboard_UpdatePlayerPos(o); // if not registered, we cannot do this yet!
546 
547  this.entremove = Ent_RemovePlayerScore;
548 }
void Ent_RemovePlayerScore(entity this)
Definition: main.qc:483
entity() spawn
int sv_entnum
Definition: main.qh:155
entity playerslots[255]
Definition: main.qh:70
string classname
Definition: csprogsdefs.qc:107
entity owner
Definition: main.qh:73
#define LOG_INFOF(...)
Definition: log.qh:71
void Scoreboard_UpdatePlayerPos(entity player)
Definition: scoreboard.qc:298
#define make_pure(e)
Definition: oo.qh:12
void Ent_Remove(entity this)
Definition: main.qc:920
#define new_pure(class)
purely logical entities (.origin doesn&#39;t work)
Definition: oo.qh:62
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:

◆ NET_HANDLE() [2/15]

NET_HANDLE ( ENT_CLIENT_TEAMSCORES  ,
bool  isnew 
)

Definition at line 550 of file main.qc.

References BIT, entity(), GetTeam(), make_pure, MAX_TEAMSCORE, owner, Scoreboard_UpdateTeamPos(), and team.

551 {
552  make_pure(this);
553  int i;
554 
555  this.team = ReadByte();
556  entity o = this.owner = GetTeam(this.team, true); // these team numbers can always be trusted
557 
558 #if MAX_TEAMSCORE <= 8
559  int sf = ReadByte();
560  int lf = ReadByte();
561 #else
562  int sf = ReadShort();
563  int lf = ReadShort();
564 #endif
565  for(i = 0; i < MAX_TEAMSCORE; ++i)
566  if(sf & BIT(i))
567  {
568  if(lf & BIT(i))
569  o.(teamscores(i)) = ReadInt24_t();
570  else
571  o.(teamscores(i)) = ReadChar();
572  }
573 
574  return = true;
575 
577 }
int team
Definition: main.qh:157
entity() spawn
entity owner
Definition: main.qh:73
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
Definition: bits.qh:8
#define MAX_TEAMSCORE
Definition: scores.qh:142
#define make_pure(e)
Definition: oo.qh:12
void Scoreboard_UpdateTeamPos(entity Team)
Definition: scoreboard.qc:344
entity GetTeam(int Team, bool add)
Definition: main.qc:303
+ Here is the call graph for this function:

◆ NET_HANDLE() [3/15]

NET_HANDLE ( ENT_CLIENT_CLIENTDATA  ,
bool  isnew 
)

Definition at line 579 of file main.qc.

References autocvar_hud_panel_healtharmor_progressbar_gfx, BIT, hud_dynamic_shake_factor, make_pure, MAX_SPECTATORS, min(), num_spectators, player_localnum, prev_health, prev_p_health, race_checkpointtime, race_laptime, scoreboard_showscores_force, spectatee_status, spectatee_status_changed_time, spectatorbutton_zoom, spectatorlist, and time.

580 {
581  make_pure(this);
582  float newspectatee_status;
583 
584  int f = ReadByte();
585 
586  scoreboard_showscores_force = (f & BIT(0));
587 
588  if(f & BIT(1))
589  {
590  newspectatee_status = ReadByte();
591  if(newspectatee_status == player_localnum + 1)
592  newspectatee_status = -1; // observing
593  }
594  else
595  newspectatee_status = 0;
596 
597  spectatorbutton_zoom = (f & BIT(2));
598 
599  if(f & BIT(4))
600  {
601  num_spectators = ReadByte();
602 
603  float i, slot;
604 
605  for(i = 0; i < MAX_SPECTATORS; ++i)
606  spectatorlist[i] = 0; // reset list first
607 
608  int limit = min(num_spectators, MAX_SPECTATORS);
609  for(i = 0; i < limit; ++i)
610  {
611  slot = ReadByte();
612  spectatorlist[i] = slot - 1;
613  }
614  }
615  else
616  {
617  for(int j = 0; j < MAX_SPECTATORS; ++j)
618  spectatorlist[j] = 0; // reset list if showspectators has been turned off
619  num_spectators = 0;
620  }
621 
622  return = true;
623 
624  if(newspectatee_status != spectatee_status)
625  {
626  // clear race stuff
627  race_laptime = 0;
631  }
633  {
634  if ( (spectatee_status == -1 && newspectatee_status > 0) //before observing, now spectating
635  || (spectatee_status > 0 && newspectatee_status > 0 && spectatee_status != newspectatee_status) //changed spectated player
636  )
637  prev_p_health = -1;
638  else if(spectatee_status && !newspectatee_status) //before observing/spectating, now playing
639  prev_health = -1;
640  }
641  spectatee_status = newspectatee_status;
642 
643  // we could get rid of spectatee_status, and derive it from player_localentnum and player_localnum
644 }
bool autocvar_hud_panel_healtharmor_progressbar_gfx
Definition: healtharmor.qh:18
const int MAX_SPECTATORS
Definition: main.qh:146
float hud_dynamic_shake_factor
Definition: hud.qh:209
float scoreboard_showscores_force
Definition: racetimer.qh:40
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
Definition: bits.qh:8
int prev_health
Definition: hud.qh:238
int num_spectators
Definition: main.qh:145
#define make_pure(e)
Definition: oo.qh:12
int prev_p_health
Definition: hud.qh:246
float race_checkpointtime
Definition: racetimer.qh:11
float spectatee_status
Definition: main.qh:166
float spectatee_status_changed_time
Definition: main.qh:167
float time
Definition: csprogsdefs.qc:16
int spectatorlist[MAX_SPECTATORS]
Definition: main.qh:147
float player_localnum
Definition: csprogsdefs.qc:20
float race_laptime
Definition: racetimer.qh:10
bool spectatorbutton_zoom
Definition: main.qh:98
+ Here is the call graph for this function:

◆ NET_HANDLE() [4/15]

NET_HANDLE ( ENT_CLIENT_NAGGER  ,
bool  isnew 
)

Definition at line 646 of file main.qc.

References BIT, make_pure, maxclients, playerslots, ReadString, ready_waiting, ready_waiting_for_me, strcpy, strfree, vote_active, vote_called_vote, vote_highlighted, vote_needed, vote_nocount, vote_waiting, vote_waiting_for_me, vote_yescount, and warmup_stage.

647 {
648  make_pure(this);
649  int i, j, b, f;
650 
651  int nags = ReadByte(); // NAGS NAGS NAGS NAGS NAGS NAGS NADZ NAGS NAGS NAGS
652 
653  if(!(nags & BIT(2)))
654  {
656  vote_active = 0;
657  }
658  else
659  {
660  vote_active = 1;
661  }
662 
663  if(nags & BIT(6))
664  {
665  vote_yescount = ReadByte();
666  vote_nocount = ReadByte();
667  vote_needed = ReadByte();
668  vote_highlighted = ReadChar();
669  }
670 
671  if(nags & BIT(7))
672  {
674  }
675 
676  if(nags & 1)
677  {
678  for(j = 0; j < maxclients; ++j)
679  if(playerslots[j])
680  playerslots[j].ready = true;
681  for(i = 1; i <= maxclients; i += 8)
682  {
683  f = ReadByte();
684  for(j = i-1, b = BIT(0); b < BIT(8); b <<= 1, ++j)
685  if (!(f & b))
686  if(playerslots[j])
687  playerslots[j].ready = false;
688  }
689  }
690 
691  return = true;
692 
693  ready_waiting = (nags & BIT(0));
694  ready_waiting_for_me = (nags & BIT(1));
695  vote_waiting = (nags & BIT(2));
696  vote_waiting_for_me = (nags & BIT(3));
697  warmup_stage = (nags & BIT(4));
698 }
int vote_yescount
Definition: hud.qh:92
int vote_highlighted
Definition: hud.qh:95
#define ReadString
bool warmup_stage
Definition: main.qh:103
bool vote_waiting_for_me
Definition: main.qh:115
float maxclients
Definition: csprogsdefs.qc:21
entity playerslots[255]
Definition: main.qh:70
int vote_active
Definition: hud.qh:97
int vote_needed
Definition: hud.qh:94
#define strcpy(this, s)
Definition: string.qh:49
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
Definition: bits.qh:8
string vote_called_vote
Definition: main.qh:111
bool vote_waiting
Definition: main.qh:114
bool ready_waiting_for_me
Definition: main.qh:113
bool ready_waiting
Definition: main.qh:112
#define make_pure(e)
Definition: oo.qh:12
#define strfree(this)
Definition: string.qh:56
int vote_nocount
Definition: hud.qh:93

◆ NET_HANDLE() [5/15]

NET_HANDLE ( ENT_CLIENT_ELIMINATEDPLAYERS  ,
bool  isnew 
)

Definition at line 700 of file main.qc.

References BIT, make_pure, maxclients, playerslots, and serialize.

701 {
702  make_pure(this);
703  int sf = 0;
704  serialize(byte, 0, sf);
705  if (sf & 1) {
706  for (int j = 0; j < maxclients; ++j) {
707  if (playerslots[j]) {
708  playerslots[j].eliminated = true;
709  }
710  }
711  for (int i = 1; i <= maxclients; i += 8) {
712  int f = 0;
713  serialize(byte, 0, f);
714  for (int b = 0; b < 8; ++b) {
715  if (f & BIT(b)) continue;
716  int j = i - 1 + b;
717  if (playerslots[j]) {
718  playerslots[j].eliminated = false;
719  }
720  }
721  }
722  }
723  return true;
724 }
float maxclients
Definition: csprogsdefs.qc:21
entity playerslots[255]
Definition: main.qh:70
#define BIT(n)
Only ever assign into the first 24 bits in QC (so max is BIT(23)).
Definition: bits.qh:8
#define serialize(T, stream,...)
Definition: net.qh:238
#define make_pure(e)
Definition: oo.qh:12

◆ NET_HANDLE() [6/15]

NET_HANDLE ( ENT_CLIENT_RANDOMSEED  ,
bool  isnew 
)

Definition at line 726 of file main.qc.

References make_pure, prandom_debug, and psrandom().

727 {
728  make_pure(this);
729  prandom_debug();
730  float s = ReadShort();
731  psrandom(s);
732  return true;
733 }
#define prandom_debug()
Definition: random.qh:31
void psrandom(float seed)
Definition: random.qc:128
#define make_pure(e)
Definition: oo.qh:12
+ Here is the call graph for this function:

◆ NET_HANDLE() [7/15]

NET_HANDLE ( ENT_CLIENT_ACCURACY  ,
bool  isnew 
)

Definition at line 735 of file main.qc.

References make_pure, weapon_accuracy, WEP_FIRST, and WEP_LAST.

736 {
737  make_pure(this);
738  int sf = ReadInt24_t();
739  if (sf == 0) {
740  for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w)
741  weapon_accuracy[w] = -1;
742  return true;
743  }
744 
745  int f = 1;
746  for (int w = 0; w <= WEP_LAST - WEP_FIRST; ++w) {
747  if (sf & f) {
748  int b = ReadByte();
749  if (b == 0)
750  weapon_accuracy[w] = -1;
751  else if (b == 255)
752  weapon_accuracy[w] = 1.0; // no better error handling yet, sorry
753  else
754  weapon_accuracy[w] = (b - 1.0) / 100.0;
755  }
756  f = (f == 0x800000) ? 1 : f * 2;
757  }
758  return true;
759 }
const int WEP_FIRST
Definition: all.qh:304
#define WEP_LAST
Definition: all.qh:305
#define make_pure(e)
Definition: oo.qh:12
int weapon_accuracy[REGISTRY_MAX(Weapons)]
Definition: hud.qh:110

◆ NET_HANDLE() [8/15]

NET_HANDLE ( ENT_CLIENT_SPAWNPOINT  ,
bool  is_new 
)

Definition at line 774 of file main.qc.

References g_drawables, IL_PUSH(), origin, Spawn_Draw(), team, and vector().

775 {
776  float teamnum = (ReadByte() - 1);
777  vector spn_origin = ReadVector();
778 
779  this.team = (teamnum + 1);
780 
781  //if(is_new)
782  //{
783  this.origin = spn_origin;
784  setsize(this, PL_MIN_CONST, PL_MAX_CONST);
785  //droptofloor();
786 
787  /*if(autocvar_cl_spawn_point_model) // needs a model first
788  {
789  this.mdl = "models/spawnpoint.md3";
790  this.colormod = Team_ColorRGB(teamnum);
791  precache_model(this.mdl);
792  setmodel(this, this.mdl);
793  this.drawmask = MASK_NORMAL;
794  //this.move_movetype = MOVETYPE_NOCLIP;
795  //this.draw = Spawn_Draw;
796  IL_PUSH(g_drawables, this);
797  }*/
798  this.draw = Spawn_Draw;
799  if (is_new) IL_PUSH(g_drawables, this);
800  //}
801 
802  //printf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d, effect = %d\n", is_new, vtos(this.origin), teamnum, this.cnt);
803  return true;
804 }
int team
Definition: main.qh:157
origin
Definition: ent_cs.qc:114
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
vector(float skel, float bonenum) _skel_get_boneabs_hidden
void Spawn_Draw(entity this)
Definition: main.qc:761
IntrusiveList g_drawables
Definition: main.qh:77
+ Here is the call graph for this function:

◆ NET_HANDLE() [9/15]

NET_HANDLE ( ENT_CLIENT_SPAWNEVENT  ,
bool  is_new 
)

Definition at line 806 of file main.qc.

References ATTEN_NORM, autocvar_cl_lockview, autocvar_cl_spawn_event_particles, autocvar_cl_spawn_event_sound, autocvar_cl_spawnzoom, autocvar_cl_spawnzoom_factor, autocvar_cl_unpress_zoom_on_spawn, bound(), button_zoom, CH_TRIGGER, current_viewzoom, entnum, HUD_Radar_Hide_Maximized(), localcmd, NUM_TEAM_1, NUM_TEAM_2, NUM_TEAM_3, NUM_TEAM_4, origin, player_localentnum, pointparticles, sound, VOL_BASE, and zoomin_effect.

807 {
808  // If entnum is 0, ONLY do the local spawn actions
809  // this way the server can disable the sending of
810  // spawn origin or such to clients if wanted.
811  float entnum = ReadByte();
812 
813  if(entnum)
814  {
815  this.origin = ReadVector();
816 
817  if(is_new)
818  {
819  float teamnum = entcs_GetTeam(entnum - 1);
820 
822  {
823  switch(teamnum)
824  {
825  case NUM_TEAM_1: pointparticles(EFFECT_SPAWN_RED, this.origin, '0 0 0', 1); break;
826  case NUM_TEAM_2: pointparticles(EFFECT_SPAWN_BLUE, this.origin, '0 0 0', 1); break;
827  case NUM_TEAM_3: pointparticles(EFFECT_SPAWN_YELLOW, this.origin, '0 0 0', 1); break;
828  case NUM_TEAM_4: pointparticles(EFFECT_SPAWN_PINK, this.origin, '0 0 0', 1); break;
829  default: pointparticles(EFFECT_SPAWN_NEUTRAL, this.origin, '0 0 0', 1); break;
830  }
831  }
833  {
834  sound(this, CH_TRIGGER, SND_SPAWN, VOL_BASE, ATTEN_NORM);
835  }
836  }
837  }
838  return = true;
839 
840  // local spawn actions
841  if(is_new && (!entnum || (entnum == player_localentnum)))
842  {
844  {
845  zoomin_effect = 1;
847  }
848 
850  {
851  localcmd("-zoom\n");
852  button_zoom = false;
853  }
855  }
856  //printf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(this.origin), entnum, player_localentnum);
857 }
const int NUM_TEAM_2
Definition: teams.qh:19
float current_viewzoom
Definition: main.qh:101
origin
Definition: ent_cs.qc:114
bool autocvar_cl_lockview
Definition: view.qh:20
bool autocvar_cl_spawn_event_sound
Definition: main.qh:8
const int CH_TRIGGER
Definition: sound.qh:12
#define pointparticles
Definition: csprogsdefs.qh:13
const float VOL_BASE
Definition: sound.qh:36
bool autocvar_cl_unpress_zoom_on_spawn
Definition: main.qh:12
const float ATTEN_NORM
Definition: sound.qh:30
float player_localentnum
Definition: csprogsdefs.qc:19
bool button_zoom
Definition: main.qh:97
const int NUM_TEAM_4
Definition: teams.qh:21
float autocvar_cl_spawnzoom_factor
Definition: view.qh:25
bool autocvar_cl_spawn_event_particles
Definition: main.qh:7
const int NUM_TEAM_1
Definition: teams.qh:18
#define sound(e, c, s, v, a)
Definition: sound.qh:52
void HUD_Radar_Hide_Maximized()
Definition: radar.qc:56
float zoomin_effect
Definition: main.qh:102
bool autocvar_cl_spawnzoom
Definition: view.qh:23
float entnum
Definition: csprogsdefs.qc:94
const int NUM_TEAM_3
Definition: teams.qh:20
+ Here is the call graph for this function:

◆ NET_HANDLE() [10/15]

NET_HANDLE ( ENT_CLIENT_SCORES_INFO  ,
bool  isnew 
)

Definition at line 1014 of file main.qc.

References _MapInfo_GetTeamPlayBool(), FOREACH, Gamemode_Init(), gametype, HUD_ModIcons_SetFunc(), make_pure, MAX_TEAMSCORE, ReadRegistered, ReadString, Scoreboard_InitScores(), scores_flags, scores_label, strcpy, teamplay, teamscores_flags, and teamscores_label.

1015 {
1016  make_pure(this);
1017  gametype = ReadRegistered(Gametypes);
1020  FOREACH(Scores, true, {
1021  strcpy(scores_label(it), ReadString());
1022  scores_flags(it) = ReadByte();
1023  });
1024  for (int i = 0; i < MAX_TEAMSCORE; ++i)
1025  {
1027  teamscores_flags(i) = ReadByte();
1028  }
1029  return = true;
1031  Gamemode_Init();
1032 }
void Scoreboard_InitScores()
Definition: scoreboard.qc:172
#define ReadString
float _MapInfo_GetTeamPlayBool(Gametype t)
Definition: mapinfo.qc:507
void Gamemode_Init()
Definition: main.qc:955
#define strcpy(this, s)
Definition: string.qh:49
#define teamscores_label(i)
Definition: scores.qh:147
#define MAX_TEAMSCORE
Definition: scores.qh:142
entity gametype
Definition: main.qh:30
#define make_pure(e)
Definition: oo.qh:12
float teamplay
Definition: progsdefs.qc:31
#define scores_flags(this)
Definition: scores.qh:140
#define ReadRegistered(r)
Definition: net.qh:293
void HUD_ModIcons_SetFunc()
Definition: modicons.qc:19
#define scores_label(this)
Definition: scores.qh:139
#define teamscores_flags(i)
Definition: scores.qh:149
#define FOREACH(list, cond, body)
Definition: iter.qh:19
+ Here is the call graph for this function:

◆ NET_HANDLE() [11/15]

NET_HANDLE ( ENT_CLIENT_INIT  ,
bool  isnew 
)

Definition at line 1034 of file main.qc.

References armorblockpercent, damagepush_speedfactor, decompressShotOrigin(), forcefog, g_trueaim_minrange, hook_shotorigin, MUTATOR_CALLHOOK, nb_pb_period, postinit, PostInit(), ReadString, serverflags, and strcpy.

1035 {
1036  nb_pb_period = ReadByte() / 32; //Accuracy of 1/32th
1037 
1038  hook_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
1039  hook_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
1040  hook_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
1041  hook_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
1042  arc_shotorigin[0] = decompressShotOrigin(ReadInt24_t());
1043  arc_shotorigin[1] = decompressShotOrigin(ReadInt24_t());
1044  arc_shotorigin[2] = decompressShotOrigin(ReadInt24_t());
1045  arc_shotorigin[3] = decompressShotOrigin(ReadInt24_t());
1046 
1048 
1049  armorblockpercent = ReadByte() / 255.0;
1050  damagepush_speedfactor = ReadByte() / 255.0;
1051 
1052  serverflags = ReadByte();
1053 
1054  g_trueaim_minrange = ReadCoord();
1055 
1056  return = true;
1057 
1058  MUTATOR_CALLHOOK(Ent_Init);
1059 
1060  if (!postinit) PostInit();
1061 }
int serverflags
Definition: main.qh:184
#define ReadString
vector hook_shotorigin[4]
Definition: main.qh:177
vector decompressShotOrigin(int f)
Definition: util.qc:1143
#define strcpy(this, s)
Definition: string.qh:49
string forcefog
Definition: main.qc:1005
float damagepush_speedfactor
Definition: main.qh:131
bool postinit
Definition: main.qh:29
float nb_pb_period
Definition: cl_nexball.qh:7
void PostInit()
Definition: main.qc:434
#define MUTATOR_CALLHOOK(id,...)
Definition: base.qh:140
float armorblockpercent
Definition: main.qh:130
float g_trueaim_minrange
Definition: main.qh:140
+ Here is the call graph for this function:

◆ NET_HANDLE() [12/15]

NET_HANDLE ( TE_CSQC_RACE  ,
bool  isNew 
)

Definition at line 1090 of file main.qc.

References autocvar_cl_race_cptimes_onlyself, race_checkpoint, race_checkpointtime, race_laptime, race_mybesttime, race_mycheckpoint, race_mycheckpointdelta, race_mycheckpointenemy, race_mycheckpointlapsdelta, race_mycheckpointtime, race_mypreviousbesttime, RACE_NET_CHECKPOINT_CLEAR, RACE_NET_CHECKPOINT_HIT_QUALIFYING, RACE_NET_CHECKPOINT_HIT_RACE, RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT, RACE_NET_CHECKPOINT_NEXT_QUALIFYING, RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING, RACE_NET_PENALTY_QUALIFYING, RACE_NET_PENALTY_RACE, race_nextbestname, race_nextbesttime, race_nextcheckpoint, race_othercheckpoint, race_othercheckpointdelta, race_othercheckpointenemy, race_othercheckpointlapsdelta, race_othercheckpointtime, race_penaltyaccumulator, race_penaltyeventtime, race_penaltytime, race_previousbestname, race_previousbesttime, race_time, ReadString, strcpy, and time.

1091 {
1092  int b = ReadByte();
1093 
1094  switch (b)
1095  {
1097  race_checkpoint = ReadByte();
1098  race_time = ReadInt24_t();
1099  race_previousbesttime = ReadInt24_t();
1100  race_mypreviousbesttime = ReadInt24_t();
1101  string pbestname = ReadString();
1103  {
1107  }
1108  else
1109  strcpy(race_previousbestname, pbestname);
1110 
1112 
1113  if(race_checkpoint == 0 || race_checkpoint == 254)
1114  {
1116  race_laptime = time; // valid
1117  }
1118  break;
1119 
1121  race_laptime = 0;
1122  race_checkpointtime = 0;
1123  break;
1124 
1126  race_laptime = ReadCoord();
1127  race_checkpointtime = -99999;
1128  // fall through
1130  race_nextcheckpoint = ReadByte();
1131 
1132  race_nextbesttime = ReadInt24_t();
1133  if(b != RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING) // not while spectating (matches server)
1134  race_mybesttime = ReadInt24_t();
1135  string newname = ReadString();
1137  {
1139  race_mybesttime = 0;
1141  }
1142  else
1143  strcpy(race_nextbestname, newname);
1144  break;
1145 
1147  race_mycheckpoint = ReadByte();
1149  race_mycheckpointdelta = ReadInt24_t();
1150  race_mycheckpointlapsdelta = ReadByte();
1151  if(race_mycheckpointlapsdelta >= 128)
1153  int who = ReadByte();
1154  if(who)
1155  strcpy(race_mycheckpointenemy, entcs_GetName(who - 1));
1156  else
1157  strcpy(race_mycheckpointenemy, ""); // TODO: maybe string_null works fine here?
1158  break;
1159 
1161  race_othercheckpoint = ReadByte();
1163  race_othercheckpointdelta = ReadInt24_t();
1164  race_othercheckpointlapsdelta = ReadByte();
1167  int what = ReadByte();
1168  if(what)
1169  strcpy(race_othercheckpointenemy, entcs_GetName(what - 1));
1170  else
1171  strcpy(race_othercheckpointenemy, ""); // TODO: maybe string_null works fine here?
1172  break;
1173 
1174  case RACE_NET_PENALTY_RACE:
1177  race_penaltytime = ReadShort();
1178  string reason = ReadString();
1179  if (reason == "missing a checkpoint")
1180  reason = _("missing a checkpoint");
1181  strcpy(race_penaltyreason, reason);
1182  if (b == RACE_NET_PENALTY_QUALIFYING)
1184  break;
1185 
1187  race_server_record = ReadInt24_t();
1188  break;
1189  case RACE_NET_SPEED_AWARD:
1192  break;
1196  break;
1197  case RACE_NET_RANKINGS_CNT:
1198  RANKINGS_DISPLAY_CNT = ReadByte();
1199  break;
1201  float prevpos, del;
1202  int pos = ReadShort();
1203  prevpos = ReadShort();
1204  del = ReadShort();
1205 
1206  // move other rankings out of the way
1207  int i;
1208  if (prevpos) {
1209  int m = min(prevpos, RANKINGS_DISPLAY_CNT);
1210  for (i=m-1; i>pos-1; --i) {
1211  grecordtime[i] = grecordtime[i-1];
1213  }
1214  } else if (del) { // a record has been deleted by the admin
1215  for (i=pos-1; i<= RANKINGS_DISPLAY_CNT-1; ++i) {
1216  if (i == RANKINGS_DISPLAY_CNT-1) { // clear out last record
1217  grecordtime[i] = 0;
1218  strfree(grecordholder[i]);
1219  }
1220  else {
1221  grecordtime[i] = grecordtime[i+1];
1223  }
1224  }
1225  } else { // player has no ranked record yet
1226  for (i=RANKINGS_DISPLAY_CNT-1;i>pos-1;--i) {
1227  grecordtime[i] = grecordtime[i-1];
1229  }
1230  }
1231 
1233  // kick off the player who fell from the last displayed position
1235  strfree(grecordholder[RANKINGS_DISPLAY_CNT]);
1236  }
1237 
1238  // store new ranking
1239  strcpy(grecordholder[pos-1], ReadString());
1240  grecordtime[pos-1] = ReadInt24_t();
1241  if(strdecolorize(grecordholder[pos-1]) == strdecolorize(entcs_GetName(player_localnum)))
1242  race_myrank = pos;
1243  break;
1245  race_status = ReadShort();
1247  }
1248  return true;
1249 }
const int RACE_NET_CHECKPOINT_HIT_QUALIFYING
Definition: net_linked.qh:10
float race_myrank
Definition: racetimer.qh:43
float race_mycheckpointdelta
Definition: racetimer.qh:32
#define ReadString
float race_checkpoint
Definition: racetimer.qh:8
const int RACE_NET_CHECKPOINT_NEXT_QUALIFYING
Definition: net_linked.qh:12
float race_mybesttime
Definition: racetimer.qh:17
float race_othercheckpointdelta
Definition: racetimer.qh:37
float race_status
Definition: racetimer.qh:41
const int RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING
Definition: net_linked.qh:15
float race_server_record
Definition: racetimer.qh:23
const int RACE_NET_SPEED_AWARD
Definition: net_linked.qh:19
float race_nextcheckpoint
Definition: racetimer.qh:15
const int RACE_NET_SERVER_RECORD
Definition: net_linked.qh:18
const int RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT
Definition: net_linked.qh:14
float grecordtime[RANKINGS_CNT]
Definition: main.qh:68
#define strcpy(this, s)
Definition: string.qh:49
float race_previousbesttime
Definition: racetimer.qh:12
const int RACE_NET_CHECKPOINT_HIT_RACE
Definition: net_linked.qh:13
string race_speedaward_alltimebest_holder
Definition: racetimer.qh:27
string grecordholder[RANKINGS_CNT]
Definition: main.qh:67
float race_nextbesttime
Definition: racetimer.qh:16
float GetSpeedUnitFactor(int speed_unit)
Definition: main.qc:1063
const int RACE_NET_RANKINGS_CNT
Definition: net_linked.qh:25
const int RACE_NET_SERVER_RANKINGS
Definition: net_linked.qh:21
string race_nextbestname
Definition: racetimer.qh:18
float race_othercheckpointlapsdelta
Definition: racetimer.qh:38
const int RACE_NET_PENALTY_QUALIFYING
Definition: net_linked.qh:17
const int RACE_NET_SPEED_AWARD_BEST
Definition: net_linked.qh:20
const int RACE_NET_SERVER_STATUS
Definition: net_linked.qh:22
int autocvar_hud_panel_physics_speed_unit
Definition: physics.qh:17
float race_speedaward
Definition: racetimer.qh:24
float race_mycheckpointtime
Definition: racetimer.qh:31
float race_time
Definition: racetimer.qh:9
string race_status_name
Definition: racetimer.qh:42
bool autocvar_cl_race_cptimes_onlyself
Definition: main.qh:20
float race_checkpointtime
Definition: racetimer.qh:11
const int RACE_NET_PENALTY_RACE
Definition: net_linked.qh:16
float race_penaltytime
Definition: racetimer.qh:21
string race_previousbestname
Definition: racetimer.qh:14
float race_othercheckpoint
Definition: racetimer.qh:35
float race_mycheckpointlapsdelta
Definition: racetimer.qh:33
string race_penaltyreason
Definition: racetimer.qh:22
float race_mycheckpoint
Definition: racetimer.qh:30
float race_othercheckpointtime
Definition: racetimer.qh:36
#define strfree(this)
Definition: string.qh:56
float race_penaltyeventtime
Definition: racetimer.qh:20
float race_mypreviousbesttime
Definition: racetimer.qh:13
float RANKINGS_DISPLAY_CNT
Definition: main.qh:66
float time
Definition: csprogsdefs.qc:16
string race_mycheckpointenemy
Definition: racetimer.qh:34
float race_penaltyaccumulator
Definition: racetimer.qh:19
const int RACE_NET_CHECKPOINT_CLEAR
Definition: net_linked.qh:11
float player_localnum
Definition: csprogsdefs.qc:20
float race_laptime
Definition: racetimer.qh:10
string race_othercheckpointenemy
Definition: racetimer.qh:39
float race_speedaward_alltimebest
Definition: racetimer.qh:26
string race_speedaward_holder
Definition: racetimer.qh:25

◆ NET_HANDLE() [13/15]

NET_HANDLE ( TE_CSQC_TEAMNAGGER  ,
bool  isNew 
)

Definition at line 1251 of file main.qc.

References teamnagger.

1252 {
1253  teamnagger = 1;
1254  return true;
1255 }
float teamnagger
Definition: hud.qh:124

◆ NET_HANDLE() [14/15]

NET_HANDLE ( TE_CSQC_PINGPLREPORT  ,
bool  isNew 
)

Definition at line 1257 of file main.qc.

References entity(), and playerslots.

1258 {
1259  int i = ReadByte();
1260  int pi = ReadShort();
1261  int pl = ReadByte();
1262  int ml = ReadByte();
1263  return = true;
1264  entity e = playerslots[i];
1265  if (!e) return;
1266  e.ping = pi;
1267  e.ping_packetloss = pl / 255.0;
1268  e.ping_movementloss = ml / 255.0;
1269 }
entity() spawn
entity playerslots[255]
Definition: main.qh:70
+ Here is the call graph for this function:

◆ NET_HANDLE() [15/15]

NET_HANDLE ( TE_CSQC_WEAPONCOMPLAIN  ,
bool  isNew 
)

Definition at line 1271 of file main.qc.

References complain_weapon, complain_weapon_time, complain_weapon_type, Local_Notification(), REGISTRY_GET, time, and weapontime.

1272 {
1273  int weapon_id = ReadByte();
1274  complain_weapon = REGISTRY_GET(Weapons, weapon_id);
1275  complain_weapon_type = ReadByte();
1276  return = true;
1277 
1279  weapontime = time; // ping the weapon panel
1280 
1281  switch(complain_weapon_type)
1282  {
1283  case 0: Local_Notification(MSG_MULTI, ITEM_WEAPON_NOAMMO, weapon_id); break;
1284  case 1: Local_Notification(MSG_MULTI, ITEM_WEAPON_DONTHAVE, weapon_id); break;
1285  default: Local_Notification(MSG_MULTI, ITEM_WEAPON_UNAVAILABLE, weapon_id); break;
1286  }
1287 }
float weapontime
Definition: hud.qh:121
#define REGISTRY_GET(id, i)
Definition: registry.qh:43
entity complain_weapon
Definition: hud.qh:112
float complain_weapon_time
Definition: hud.qh:114
int complain_weapon_type
Definition: hud.qh:113
void Local_Notification(MSG net_type, Notification net_name,...count)
Definition: all.qc:1185
float time
Definition: csprogsdefs.qc:16
+ Here is the call graph for this function:

◆ Playerchecker_Think()

void Playerchecker_Think ( entity  this)

Definition at line 392 of file main.qc.

References entity(), maxclients, new_pure, nextthink, NULL, playerslots, RegisterPlayer(), RemovePlayer(), Scoreboard_UpdatePlayerPos(), SetTeam(), and time.

Referenced by PostInit().

393 {
394  int i;
395  entity e;
396  for(i = 0; i < maxclients; ++i)
397  {
398  e = playerslots[i];
399  if(entcs_GetName(i) == "")
400  {
401  if(e.sort_prev)
402  {
403  // player disconnected
404  SetTeam(e, -1);
405  RemovePlayer(e);
406  e.sort_prev = NULL;
407  //e.gotscores = 0;
408  }
409  }
410  else
411  {
412  if (!e.sort_prev)
413  {
414  // player connected
415  if (!e)
416  {
417  playerslots[i] = e = new_pure(playerslot);
418  }
419  e.sv_entnum = i;
420  e.ping = 0;
421  e.ping_packetloss = 0;
422  e.ping_movementloss = 0;
423  //e.gotscores = 0; // we might already have the scores...
424  int t = entcs_GetScoreTeam(i);
425  if (t) SetTeam(e, t); // will not hurt; later updates come with Scoreboard_UpdatePlayerTeams
426  RegisterPlayer(e);
428  }
429  }
430  }
431  this.nextthink = time + 0.2;
432 }
float RegisterPlayer(entity player)
Definition: main.qc:216
entity() spawn
float maxclients
Definition: csprogsdefs.qc:21
entity playerslots[255]
Definition: main.qh:70
#define NULL
Definition: post.qh:17
void Scoreboard_UpdatePlayerPos(entity player)
Definition: scoreboard.qc:298
float nextthink
Definition: csprogsdefs.qc:121
bool SetTeam(entity o, int Team)
Definition: main.qc:319
#define new_pure(class)
purely logical entities (.origin doesn&#39;t work)
Definition: oo.qh:62
float time
Definition: csprogsdefs.qc:16
void RemovePlayer(entity player)
Definition: main.qc:232
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ PostInit()

void PostInit ( )

Definition at line 434 of file main.qc.

References entity(), new_pure, Playerchecker_Think(), postinit, setthink, time, and TrueAim_Init().

Referenced by CSQC_UpdateView(), and NET_HANDLE().

435 {
436  entity playerchecker = new_pure(playerchecker);
437  setthink(playerchecker, Playerchecker_Think);
438  playerchecker.nextthink = time + 0.2;
439 
440  TrueAim_Init();
441 
442  postinit = true;
443 }
entity() spawn
void TrueAim_Init()
Definition: crosshair.qc:46
bool postinit
Definition: main.qh:29
void Playerchecker_Think(entity this)
Definition: main.qc:392
#define new_pure(class)
purely logical entities (.origin doesn&#39;t work)
Definition: oo.qh:62
#define setthink(e, f)
float time
Definition: csprogsdefs.qc:16
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RegisterPlayer()

float RegisterPlayer ( entity  player)

Definition at line 216 of file main.qc.

References AuditLists(), entity(), error(), and players.

Referenced by Playerchecker_Think().

217 {
218  entity pl;
219  AuditLists();
220  for(pl = players.sort_next; pl; pl = pl.sort_next)
221  if(pl == player)
222  error("Player already registered!");
223  player.sort_next = players.sort_next;
224  player.sort_prev = players;
225  if(players.sort_next)
226  players.sort_next.sort_prev = player;
227  players.sort_next = player;
228  AuditLists();
229  return true;
230 }
entity() spawn
void AuditLists()
Definition: main.qc:196
entity players
Definition: main.qh:43
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RegisterTeam()

float RegisterTeam ( entity  Team)

Definition at line 263 of file main.qc.

References assert_once, AuditLists(), entity(), eprint(), error(), NUM_SPECTATOR, team_count, and teams.

Referenced by GetTeam().

264 {
265  assert_once(Team.team, eprint(Team));
266  entity tm;
267  AuditLists();
268  for(tm = teams.sort_next; tm; tm = tm.sort_next)
269  if(tm == Team)
270  error("Team already registered!");
271  Team.sort_next = teams.sort_next;
272  Team.sort_prev = teams;
273  if(teams.sort_next)
274  teams.sort_next.sort_prev = Team;
275  teams.sort_next = Team;
276  if(Team.team && Team.team != NUM_SPECTATOR)
277  ++team_count;
278  AuditLists();
279  return true;
280 }
const int NUM_SPECTATOR
Definition: teams.qh:23
entity() spawn
void AuditLists()
Definition: main.qc:196
#define assert_once(expr,...)
Definition: log.qh:11
entity teams
Definition: main.qh:44
float team_count
Definition: main.qh:45
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RemovePlayer()

void RemovePlayer ( entity  player)

Definition at line 232 of file main.qc.

References AuditLists(), entity(), error(), parent, and players.

Referenced by Playerchecker_Think().

233 {
234  entity pl, parent;
235  AuditLists();
236  parent = players;
237  for(pl = players.sort_next; pl && pl != player; pl = pl.sort_next)
238  parent = pl;
239 
240  if(!pl)
241  {
242  error("Trying to remove a player which is not in the playerlist!");
243  return;
244  }
245  parent.sort_next = player.sort_next;
246  if(player.sort_next)
247  player.sort_next.sort_prev = parent;
248  AuditLists();
249 }
entity parent
Definition: animhost.qc:7
entity() spawn
void AuditLists()
Definition: main.qc:196
entity players
Definition: main.qh:43
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RemoveTeam()

void RemoveTeam ( entity  Team)

Definition at line 282 of file main.qc.

References AuditLists(), entity(), LOG_INFO, parent, and teams.

283 {
284  entity tm, parent;
285  AuditLists();
286  parent = teams;
287  for(tm = teams.sort_next; tm && tm != Team; tm = tm.sort_next)
288  parent = tm;
289 
290  if(!tm)
291  {
292  LOG_INFO(_("Trying to remove a team which is not in the teamlist!"));
293  return;
294  }
295  parent.sort_next = Team.sort_next;
296  if(Team.sort_next)
297  Team.sort_next.sort_prev = parent;
298  if(Team.team && Team.team != NUM_SPECTATOR)
299  --team_count;
300  AuditLists();
301 }
const int NUM_SPECTATOR
Definition: teams.qh:23
entity parent
Definition: animhost.qc:7
entity() spawn
void AuditLists()
Definition: main.qc:196
entity teams
Definition: main.qh:44
#define LOG_INFO(...)
Definition: log.qh:70
float team_count
Definition: main.qh:45
+ Here is the call graph for this function:

◆ SetTeam()

bool SetTeam ( entity  o,
int  Team 
)

Definition at line 319 of file main.qc.

References entity(), GetTeam(), LOG_TRACEF, NULL, NUM_SPECTATOR, NUM_TEAM_1, NUM_TEAM_2, NUM_TEAM_3, NUM_TEAM_4, TC, and teamplay.

Referenced by Ent_RemovePlayerScore(), Playerchecker_Think(), and Scoreboard_UpdatePlayerTeams().

320 {
321  TC(int, Team);
322  //devassert_once(Team);
323  entity tm;
324  if(teamplay)
325  {
326  switch(Team)
327  {
328  case -1:
329  case NUM_TEAM_1:
330  case NUM_TEAM_2:
331  case NUM_TEAM_3:
332  case NUM_TEAM_4:
333  break;
334  default:
335  if(GetTeam(Team, false) == NULL)
336  {
337  LOG_TRACEF("trying to switch to unsupported team %d", Team);
338  Team = NUM_SPECTATOR;
339  }
340  break;
341  }
342  }
343  else
344  {
345  switch(Team)
346  {
347  case -1:
348  case 0:
349  break;
350  default:
351  if(GetTeam(Team, false) == NULL)
352  {
353  LOG_TRACEF("trying to switch to unsupported team %d", Team);
354  Team = NUM_SPECTATOR;
355  }
356  break;
357  }
358  }
359  if(Team == -1) // leave
360  {
361  if(o.has_team)
362  {
363  tm = GetTeam(o.team, false);
364  tm.team_size -= 1;
365  o.has_team = 0;
366  return true;
367  }
368  }
369  else
370  {
371  if (!o.has_team)
372  {
373  o.team = Team;
374  tm = GetTeam(Team, true);
375  tm.team_size += 1;
376  o.has_team = 1;
377  return true;
378  }
379  else if(Team != o.team)
380  {
381  tm = GetTeam(o.team, false);
382  tm.team_size -= 1;
383  o.team = Team;
384  tm = GetTeam(Team, true);
385  tm.team_size += 1;
386  return true;
387  }
388  }
389  return false;
390 }
const int NUM_SPECTATOR
Definition: teams.qh:23
const int NUM_TEAM_2
Definition: teams.qh:19
entity() spawn
#define NULL
Definition: post.qh:17
#define LOG_TRACEF(...)
Definition: log.qh:82
#define TC(T, sym)
Definition: _all.inc:82
float teamplay
Definition: progsdefs.qc:31
const int NUM_TEAM_4
Definition: teams.qh:21
const int NUM_TEAM_1
Definition: teams.qh:18
entity GetTeam(int Team, bool add)
Definition: main.qc:303
const int NUM_TEAM_3
Definition: teams.qh:20
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Shutdown()

void Shutdown ( )

Definition at line 152 of file main.qc.

153 {
155 
156  delete(teams);
157  delete(players);
158  db_close(binddb);
159  db_close(tempdb);
161  db_dump(ClientProgsDB, "client.db");
162  else
163  db_save(ClientProgsDB, "client.db");
165 
166  if(camera_active)
167  cvar_set("chase_active",ftos(chase_active_backup));
168 
169  // unset the event chasecam's chase_active
170  if(autocvar_chase_active < 0)
171  cvar_set("chase_active", "0");
172 
173  if (autocvar_r_drawviewmodel < 0)
174  cvar_set("r_drawviewmodel", "0");
175 
176  cvar_set("slowmo", cvar_defstring("slowmo")); // reset it back to 'default'
177 
178  if (!isdemo())
179  {
180  if (!(calledhooks & HOOK_START))
181  localcmd("\n_cl_hook_gamestart nop\n");
182  if (!(calledhooks & HOOK_END))
183  localcmd("\ncl_hook_gameend\n");
184  }
185 
186  localcmd("\ncl_hook_shutdown\n");
187 
188  localcmd("\n-button12\n");
189 
192 
193  ReplicateVars(REPLICATEVARS_DESTROY);
194 }
int binddb
Definition: main.qh:160
ERASEABLE void db_close(int db)
Definition: map.qh:84
void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger)
int ClientProgsDB
Definition: main.qh:176
int tempdb
Definition: main.qh:175
int calledhooks
Definition: main.qh:134
entity teams
Definition: main.qh:44
void deactivate_minigame()
Definition: cl_minigames.qc:83
void WarpZone_Shutdown()
Definition: client.qc:290
ERASEABLE void db_save(int db, string filename)
Definition: map.qh:8
ERASEABLE void db_dump(int db, string filename)
Definition: map.qh:69
#define NULL
Definition: post.qh:17
float chase_active_backup
Definition: main.qh:124
const int HOOK_END
Definition: main.qh:136
const int HOOK_START
Definition: main.qh:135
entity players
Definition: main.qh:43
bool autocvar_r_drawviewmodel
Definition: view.qh:94
float camera_active
Definition: main.qh:123
int autocvar_chase_active
Definition: view.qh:17
bool autocvar_cl_db_saveasdump
Definition: main.qh:6

◆ Spawn_Draw()

void Spawn_Draw ( entity  this)

Definition at line 761 of file main.qc.

References autocvar_cl_spawn_point_dist_max, autocvar_cl_spawn_point_particles, bound(), EFFECT_SPAWNPOINT(), frametime, origin, pointparticles, team, teamplay, vdist, vector(), and VF_ORIGIN.

Referenced by NET_HANDLE().

762 {
763  bool dodraw = autocvar_cl_spawn_point_particles;
765  {
766  vector org = getpropertyvec(VF_ORIGIN);
767  dodraw = vdist(org - this.origin, <, autocvar_cl_spawn_point_dist_max);
768  }
769 
770  if(dodraw)
771  pointparticles(((!teamplay) ? EFFECT_SPAWNPOINT_NEUTRAL : EFFECT_SPAWNPOINT(this.team - 1)), this.origin + '0 0 28', '0 0 2', bound(0, frametime, 0.1));
772 }
entity EFFECT_SPAWNPOINT(int teamid)
Definition: all.inc:148
int team
Definition: main.qh:157
origin
Definition: ent_cs.qc:114
float autocvar_cl_spawn_point_dist_max
Definition: main.qh:11
#define pointparticles
Definition: csprogsdefs.qh:13
float frametime
Definition: csprogsdefs.qc:17
float teamplay
Definition: progsdefs.qc:31
vector(float skel, float bonenum) _skel_get_boneabs_hidden
#define vdist(v, cmp, f)
Vector distance comparison, avoids sqrt()
Definition: vector.qh:8
bool autocvar_cl_spawn_point_particles
Definition: main.qh:10
const float VF_ORIGIN
Definition: csprogsdefs.qc:182
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ URI_Get_Callback()

void URI_Get_Callback ( int  id,
int  status,
string  data 
)

engine callback

Definition at line 1342 of file main.qc.

References Curl_URI_Get_Callback(), LOG_INFOF, TC, URI_GET_CURL, URI_GET_CURL_END, URI_GET_DISCARD, and url_URI_Get_Callback().

1343 {
1344  TC(int, id); TC(int, status);
1345  if(url_URI_Get_Callback(id, status, data))
1346  {
1347  // handled
1348  }
1349  else if (id == URI_GET_DISCARD)
1350  {
1351  // discard
1352  }
1353  else if (id >= URI_GET_CURL && id <= URI_GET_CURL_END)
1354  {
1355  // sv_cmd curl
1356  Curl_URI_Get_Callback(id, status, data);
1357  }
1358  else
1359  {
1360  LOG_INFOF("Received HTTP request data for an invalid id %d.", id);
1361  }
1362 }
void Curl_URI_Get_Callback(int id, float status, string data)
Definition: generic.qc:31
ERASEABLE float url_URI_Get_Callback(int id, float status, string data)
Definition: urllib.qc:28
const int URI_GET_DISCARD
Definition: urllib.qh:4
const int URI_GET_CURL
Definition: urllib.qh:7
#define LOG_INFOF(...)
Definition: log.qh:71
#define TC(T, sym)
Definition: _all.inc:82
const int URI_GET_CURL_END
Definition: urllib.qh:8
+ Here is the call graph for this function:

Variable Documentation

◆ forcefog

string forcefog

Definition at line 1005 of file main.qc.

Referenced by Fog_Force(), and NET_HANDLE().

◆ has_team

float has_team

Definition at line 318 of file main.qc.