68 e = edict_num(this.
cnt + 1);
80 CS(e).latency_sum +=
CS(e).ping;
81 CS(e).latency_cnt += 1;
141 LOG_INFO(
"Waiting for _sv_init being set to 1 by initialization scripts...");
149 float n, i, adding, pureadding;
156 buf_cvarlist(h,
"",
"_");
162 for(i = 0; i < n; ++i)
164 k = bufstr_get(h, i);
166#define BADPREFIX_COND(p) (substring(k, 0, strlen(p)) == p)
167#define BADSUFFIX_COND(s) (substring(k, -strlen(s), -1) == s)
169#define BADPREFIX(p) if(BADPREFIX_COND(p)) continue
170#define BADPRESUFFIX(p, s) if(BADPREFIX_COND(p) && BADSUFFIX_COND(s)) continue
171#define BADCVAR(p) if(k == p) continue
172#define BADVALUE(p, val) if (k == p && v == val) continue
173#define BADPRESUFFIXVALUE(p, s, val) if(BADPREFIX_COND(p) && BADSUFFIX_COND(s) && v == val) continue
184 BADCVAR(
"sv_mapformat_is_quake2");
185 BADCVAR(
"sv_mapformat_is_quake3");
213 BADCVAR(
"mod_q3bsp_lightmapmergepower");
214 BADCVAR(
"mod_q3bsp_nolightmaps");
236 BADCVAR(
"sv_vote_master_password");
237 BADCVAR(
"sys_colortranslation");
238 BADCVAR(
"sys_specialcharactertranslation");
244 BADCVAR(
"g_playban_minigames");
269 BADCVAR(
"sv_allow_customplayermodels_idlist");
270 BADCVAR(
"sv_allow_customplayermodels_speciallist");
285 BADCVAR(
"g_domination_default_teams");
302 BADCVAR(
"g_race_qualifying_timelimit");
303 BADCVAR(
"g_race_qualifying_timelimit_override");
308 BADCVAR(
"g_survival_not_dm_maps");
323 BADCVAR(
"g_mapinfo_settemp_acl");
324 BADCVAR(
"g_mapinfo_ignore_warnings");
325 BADCVAR(
"g_maplist_ignore_sizes");
326 BADCVAR(
"g_maplist_sizes_count_bots");
331 BADCVAR(
"g_maplist_mostrecent");
333 BADCVAR(
"sv_termsofservice_url");
344 cvar_changes =
"// this server runs at modified server settings:\n";
349 cvar_changes =
"// too many settings have been changed to show them here\n";
357 BADCVAR(
"captureleadlimit_override");
358 BADCVAR(
"condump_stripcolors");
360 BADCVAR(
"g_allow_oldvortexbeam");
361 BADCVAR(
"g_balance_kill_delay");
362 BADCVAR(
"g_buffs_pickup_anyway");
364 BADCVAR(
"g_buffs_randomize_teamplay");
365 BADCVAR(
"g_campcheck_distance");
367 BADCVAR(
"g_ca_point_leadlimit");
369 BADCVAR(
"g_ca_spectate_enemies");
370 BADCVAR(
"g_ctf_captimerecord_always");
371 BADCVAR(
"g_ctf_flag_glowtrails");
372 BADCVAR(
"g_ctf_dynamiclights");
373 BADCVAR(
"g_ctf_flag_pickup_verbosename");
374 BADCVAR(
"g_ctf_flagcarrier_auto_helpme_damage");
377 BADCVAR(
"g_domination_point_leadlimit");
379 BADCVAR(
"g_freezetag_point_leadlimit");
380 BADCVAR(
"g_freezetag_point_limit");
384 BADCVAR(
"g_invasion_point_limit");
386 BADCVAR(
"g_keepaway_ballcarrier_effects");
387 BADCVAR(
"g_keepawayball_effects");
388 BADCVAR(
"g_keyhunt_point_leadlimit");
389 BADCVAR(
"g_nexball_goalleadlimit");
390 BADCVAR(
"g_new_toys_autoreplace");
391 BADCVAR(
"g_new_toys_use_pickupsound");
392 BADCVAR(
"g_physics_predictall");
394 BADCVAR(
"g_playerclip_collisions");
395 BADCVAR(
"g_spawn_alloweffects");
396 BADCVAR(
"g_tdm_point_leadlimit");
398 BADCVAR(
"g_mayhem_point_limit");
399 BADCVAR(
"g_mayhem_point_leadlimit");
400 BADCVAR(
"g_tmayhem_point_limit");
401 BADCVAR(
"g_tmayhem_point_leadlimit");
402 BADCVAR(
"leadlimit_and_fraglimit");
407 BADCVAR(
"sv_checkforpacketsduringsleep");
410 BADCVAR(
"sv_intermission_cdtrack");
414 BADCVAR(
"sv_precacheplayermodels");
419 BADCVAR(
"sv_weapons_modeloverride");
453 BADCVAR(
"capturelimit_override");
458 BADCVAR(
"g_balance_teams_queue");
459 BADCVAR(
"g_balance_teams_remove");
460 BADCVAR(
"g_balance_teams_remove_wait");
461 BADCVAR(
"g_balance_teams_prevent_imbalance");
462 BADCVAR(
"g_balance_teams_scorefactor");
463 BADCVAR(
"g_ban_sync_trusted_servers");
466 BADCVAR(
"g_ca_teams_override");
467 BADCVAR(
"g_ca_prevent_stalemate");
468 BADCVAR(
"g_ctf_fullbrightflags");
471 BADCVAR(
"g_domination_point_limit");
472 BADCVAR(
"g_domination_teams_override");
473 BADCVAR(
"g_freezetag_revive_spawnshield");
474 BADCVAR(
"g_freezetag_teams_override");
477 BADCVAR(
"g_fullbrightplayers");
478 BADCVAR(
"g_keyhunt_point_limit");
479 BADCVAR(
"g_keyhunt_teams_override");
480 BADCVAR(
"g_lms_lives_override");
485 BADCVAR(
"g_nexball_goallimit");
487 BADCVAR(
"g_physics_clientselect");
490 BADCVAR(
"g_powerups_drop_ondeath");
491 BADCVAR(
"g_player_brightness");
493 BADCVAR(
"g_rocket_flying_disabledelays");
497 BADCVAR(
"g_tdm_teams_override");
498 BADCVAR(
"g_tmayhem_teams_override");
505 BADCVAR(
"minplayers_per_team");
509 BADCVAR(
"rcon_restricted_commands");
510 BADCVAR(
"rcon_restricted_password");
515 BADCVAR(
"sv_defaultcharacter");
516 BADCVAR(
"sv_defaultcharacterskin");
517 BADCVAR(
"sv_defaultplayercolors");
518 BADCVAR(
"sv_defaultplayermodel");
519 BADCVAR(
"sv_defaultplayerskin");
530 BADCVAR(
"sv_vote_majority_factor");
532 BADCVAR(
"sv_vote_simple_majority_factor");
533 BADVALUE(
"sys_ticrate",
"0.0078125");
534 BADVALUE(
"sys_ticrate",
"0.015625");
557#undef BADPRESUFFIXVALUE
567 cvar_purechanges =
"// too many settings have been changed to show them here\n";
582 cvar_changes =
"// this server runs at default server settings\n";
625 e =
new(info_player_deathmatch);
628 for (
int i = 0, n = numentityfields(); i < n; ++i)
630 string k = entityfieldname(i);
631 if (k ==
"classname")
634 putentityfieldstring(i,
this,
"worldspawn");
713 for (
int i = 0, done = 0, n = numentityfields(); i < n; ++i)
715 string k = entityfieldname(i);
719 putentityfieldstring(i,
world, sprintf(
"%v", v));
720 if (++done == 2)
break;
734 LOG_INFO(
"The current map contains a potentially harmful fog setting, ignored");
750 cvar_set(
"_sv_vote_gametype_custom",
"");
762 string watermark_start =
cvar_string(
"sv_watermark_start");
763 if (watermark_start ==
"")
764 cvar_set(
"sv_watermark_start", WATERMARK);
765 else if (watermark_start != WATERMARK)
768 "\n^1 Warning: ^3the server QC program was updated without a full restart."
769 "\n^3 Please restart the Xonotic executable otherwise you may get random bugs."
787 bool wantrestart =
false;
793 string expect =
"csprogs.dat";
794 wantrestart =
cvar_string(
"csqc_progname") != expect;
802 string pk3csprogs =
"csprogs-" WATERMARK
".dat";
804 string select =
"csprogs.dat";
805 if (
fexists(pk3csprogs)) select = pk3csprogs;
816 string switchversion =
fgets(sentinel);
818 if (switchversion !=
"" && switchversion != WATERMARK)
820 LOG_INFOF(
"Switching progs: " WATERMARK
" -> %s", switchversion);
824 string newprogs = sprintf(
"progs-%s.dat", switchversion);
830 string newcsprogs = sprintf(
"csprogs-%s.dat", switchversion);
833 cvar_set(
"csqc_progname", newcsprogs);
848 error(
"world already spawned - you may have EXACTLY ONE worldspawn!");
869 lightstyle(1,
"mmnmmommommnonmmonqnmmo");
872 lightstyle(2,
"abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");
875 lightstyle(3,
"mmmmmaaaaammmmmaaaaaabcdefgabcdefg");
878 lightstyle(4,
"mamamamamama");
881 lightstyle(5,
"jklmnopqrstuvwxyzyxwvutsrqponmlkj");
884 lightstyle(6,
"nmonqnmomnmomomno");
887 lightstyle(7,
"mmmaaaabcdefgmmmmaaaammmaamm");
890 lightstyle(8,
"mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa");
893 lightstyle(9,
"aaaaaaaazzzzzzzz");
896 lightstyle(10,
"mmamammmmammamamaaamammma");
899 lightstyle(11,
"abcdefghijklmnopqrrqponmlkjihgfedcba");
955 if (music ||
world.noise)
965 while((s =
fgets(fd)))
972 string trackname =
argv(2);
973 LOG_INFO(
"Found ^1UNSUPPORTED^7 cd loop command in .cfg file; put this line in mapinfo instead:");
981 else if(
argv(0) ==
"fog")
983 LOG_INFO(
"Found ^1UNSUPPORTED^7 fog command in .cfg file; put this line in worldspawn in the .map/.bsp/.ent file instead:");
986 else if(
argv(0) ==
"set")
988 LOG_INFO(
"Found ^1UNSUPPORTED^7 set command in .cfg file; put this line in mapinfo instead:");
991 else if(
argv(0) !=
"//")
993 LOG_INFO(
"Found ^1UNSUPPORTED^7 set command in .cfg file; put this line in mapinfo instead:");
1009 bool records_available =
false;
1010 for(
int i = 0; i < 10; ++i)
1016 records_available =
true;
1019 if (!records_available)
1020 records_reply[0] =
"No records available for the current gametype.\n";
1036 string s =
"csprogs-" WATERMARK
".dat";
1040 string pkg =
argv(i);
1042 if (
endsWith(pkg,
"-serverpackage.txt"))
continue;
1043 if (
endsWith(pkg,
".serverpackage"))
continue;
1047 #define X(match) MACRO_BEGIN \
1048 int fd = search_begin(match, true, false); \
1051 for (int i = 0, j = search_getsize(fd); i < j; ++i) \
1053 s = cons(s, search_getfilename(fd, i)); \
1058 X(
"*-serverpackage.txt");
1059 X(
"*.serverpackage");
1061 cvar_set(
"sv_curl_serverpackages", s);
1087 string filename =
strcat(
"data/",
mapname,
"_scrshot_ent.txt");
1103 float m = e.dphitcontentsmask;
1104 e.dphitcontentsmask = goodcontents | badcontents;
1107 vector delta = boundmax - boundmin;
1112 for(j = 0; j < attempts; ++j)
1121 tracebox(start, e.mins, e.maxs, start -
'0 0 1' * delta.z,
MOVE_NORMAL, e);
1140 vector mstart = start + 0.5 * (e.mins + e.maxs);
1141 traceline(mstart, mstart +
'1 0 0' * delta.x,
MOVE_NORMAL, e);
1144 traceline(mstart, mstart -
'1 0 0' * delta.x,
MOVE_NORMAL, e);
1147 traceline(mstart, mstart +
'0 1 0' * delta.y,
MOVE_NORMAL, e);
1150 traceline(mstart, mstart -
'0 1 0' * delta.y,
MOVE_NORMAL, e);
1153 traceline(mstart, mstart +
'0 0 1' * delta.z,
MOVE_NORMAL, e);
1177 int items_checked = 0;
1187 if(items_checked >= attempts)
1202 tracebox(start, e.mins, e.maxs, end,
MOVE_NORMAL, e);
1219 e.dphitcontentsmask = m;
1223 setorigin(e, start);
1231float MoveToRandomMapLocation(
entity e,
float goodcontents,
float badcontents,
float badsurfaceflags,
float attempts,
float maxaboveground,
float minviewdistance)
1260 to_eventlog =
false;
1302 s =
strcat(s,
"spectator:");
1322 for(i = 1; i < 16; ++i)
1341 fputs(file,
":end\n");
1359 bprint(
playername(it.netname, it.team,
false),
" has been moved back to spectator");
1362 else if (fix_team &&
INGAME_JOINED(it) && it.(prev_team_field) && it.team != it.(prev_team_field))
1367 string pl_name =
playername(it.netname, it.team,
false);
1422 int winner_team = 0;
1429 winner_team = it.team;
1494 if(fraglimitreached)
1503 if(fraglimitreached)
1510 if(fraglimitreached)
1528 if(it.(field) == value)
1547 for (
int i = 1; i < 5; ++i)
1587 fragsleft =
max(fragsleft, leadingfragsleft);
1589 fragsleft =
min(fragsleft, leadingfragsleft);
1596 else if (fragsleft == 2)
1598 else if (fragsleft == 3)
1611 limit_reached = (fraglimit_reached && leadlimit_reached);
1613 limit_reached = (fraglimit_reached || leadlimit_reached);
1632 for (
int i = 1; i < 5; ++i)
1658 if(team1_score + team2_score + team3_score + team4_score == 0)
1663 else if(team1_score + team2_score + team3_score + team4_score == 1)
1668 else if(team2_score)
1670 else if(team3_score)
1724 if (leadlimit < 0) leadlimit = 0;
1746 int wantovertime = 0;
1761 if (timelimit &&
time >= timelimit)
1766 float playerswithlaps;
1768 totalplayers = playerswithlaps = readyplayers = 0;
1779 if(readyplayers || playerswithlaps >= 2)
1801 bprint(
"Hey! Someone ran out of spawns!\n");
1803 checkrules_status =
M_ARGV(0,
float);
1846 bool allow_mutatorblocked =
false;
1848 if(!weaponinfo.m_id)
1851 bool mutator_returnvalue =
MUTATOR_CALLHOOK(WantWeapon, weaponinfo, d, allguns, allow_mutatorblocked);
1853 allguns =
M_ARGV(2,
int);
1854 allow_mutatorblocked =
M_ARGV(3,
bool);
1858 else if(allguns == 2)
1860 else if(!mutator_returnvalue)
1861 d = !(!weaponinfo.weaponstart);
1866 float t = weaponinfo.weaponstartoverride;
1989 if (s ==
"0" || s ==
"")
1993 else if (s ==
"off")
1997 else if (s ==
"all" || s ==
"1")
2003 else if (s ==
"devall")
2009 else if (s ==
"most")
2015 else if (s ==
"all_available")
2023 else if (s ==
"devall_available")
2031 else if (s ==
"most_available")
2039 else if (s ==
"none")
2049 for (
int j = 0; j < t; ++j)
2086 if(
cvar(
"g_balance_superweapons_time") < 0)
2089 if(!
cvar(
"g_use_ammunition"))
2170 if(
cvar(
"sv_allow_fullbright"))
2174 if(
cvar(
"sv_forbid_pickuptimer"))
2179 if(
cvar(
"g_campaign"))
2213 if (!e || e.initialize_entity)
2217 e =
new(initialize_entity);
2221 e.initialize_entity = func;
2222 e.initialize_entity_order = order;
2228 if (!cur || cur.initialize_entity_order > order)
2232 prev.initialize_entity_next = e;
2235 e.initialize_entity_next = cur;
2239 cur = cur.initialize_entity_next;
2247 for (
entity e = startoflist; e; e = e.initialize_entity_next)
2249 e.remove_except_protected_forbidden = 1;
2251 for (
entity e = startoflist; e; )
2253 e.remove_except_protected_forbidden = 0;
2254 e.initialize_entity_order = 0;
2256 e.initialize_entity_next =
NULL;
2257 var
void(
entity this) func = e.initialize_entity;
2259 if (e.classname ==
"initialize_entity")
2261 entity wrappee = e.enemy;
2287 if(!
this || wasfreed(
this))
2289 LOG_WARN(
"DropToFloor_QC: can not modify free entity");
2322 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2324 LOG_WARNF(
"DropToFloor_QC at \"%v\": COULD NOT FIX badly placed entity \"%s\" before drop", this.
origin, this.
classname);
2325 else if (nudgeresult > 0)
2350 LOG_WARNF(
"DropToFloor_QC at \"%v\" (Quake compat): DELETING badly placed item \"%s\"", this.
origin, this.
classname);
2383 this.
mins = saved_mins;
2384 this.
maxs = saved_maxs;
2388 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2393 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2394 if (nudgeresult > 0)
2420 float oldtime =
time;
2422 for (
int iterations = 0; iterations < 128 && !wasfreed(
this); ++iterations)
2476 if(IS_CLIENT(it) || it.move_time || it.move_movetype == MOVETYPE_NONE || it.move_movetype == MOVETYPE_PHYSICS)
2478 Movetype_Physics_NoMatchTicrate(it, PHYS_INPUT_TIMELENGTH, false);
2491 if (e.typehitsound) {
2493 }
else if (e.killsound) {
2495 }
else if (e.hitsound_damage_dealt) {
2498 STAT(HITSOUND_DAMAGE_DEALT_TOTAL, it) +=
ceil(e.hitsound_damage_dealt);
2508 it.typehitsound =
false;
2509 it.hitsound_damage_dealt = 0;
2510 it.killsound =
false;
2517 it.maxs.z =
max(h, it.mins.z + 1);
2518 setsize(it, it.mins, it.maxs);
2527 antilag_record(it, it, altime);
2542 float clients_found;
2552 bprint(
"^3SERVER NOTICE:^7 restarting the server\n");
2565 LOG_INFO(
"Redirecting: sending connect command to ", it.netname);
2573 LOG_INFO(
"Redirecting: ",
ftos(clients_found),
" clients left.");
2576 localcmd(
"\nwait; wait; wait; quit\n");
2633 LOG_TRACE(
"Saving persistent data... done!");
2645 LOG_INFO(
"NOTE: crashed before even initializing the world, not saving persistent data");
void anticheat_endframe()
void antilag_record(entity e, entity store, float t)
float autocvar_g_antilag_nudge
bool bot_waypoints_for_items
bool autocvar_g_waypoints_for_items
#define MUTATOR_CALLHOOK(id,...)
#define BITSET(var, mask, flag)
void CheckEngineExtensions(void)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
void SetResource(entity e, Resource res_type, float amount)
Sets the current amount of resource the given entity will have.
float GetResource(entity e, Resource res_type)
Returns the current amount of resource the given entity has.
fields which are explicitly/manually set are marked with "M", fields set automatically are marked wit...
string netname
M: refname : reference name name.
const int IT_UNLIMITED_AMMO
const int IT_UNLIMITED_SUPERWEAPONS
#define PHYS_INPUT_TIMELENGTH
const int OVERTIME_SUDDENDEATH
vector weaponsInMapAll
all the weapons placed by the mapper (weaponreplace applied), ignores most filters
#define autocvar_timelimit
#define autocvar_fraglimit
int autocvar_sv_gameplayfix_delayprojectiles
string playername(string thename, int teamid, bool team_colorize)
void get_mi_min_max(float mode)
const int INITPRIO_GAMETYPE_FALLBACK
const float PL_CORPSE_SCALE
const int SERVERFLAG_FORBID_PICKUPTIMER
const int SERVERFLAG_ALLOW_FULLBRIGHT
const int INITPRIO_DROPTOFLOOR
const int INITPRIO_FINDTARGET
const float MOVE_NOMONSTERS
float trace_dphitcontents
string trace_dphittexturename
float checkpvs(vector viewpos, entity viewee)
float trace_dphitq3surfaceflags
ERASEABLE bool cvar_value_issafe(string s)
void defer(entity this, float fdelay, void(entity) func)
Execute func() after time + fdelay.
float MOVETYPE_USER_FIRST
ERASEABLE bool fexists(string f)
void GameLogEcho(string s)
int autocvar_sv_eventlog_files_counter
bool autocvar_sv_eventlog_console
bool autocvar_sv_eventlog
string getrecords(int page)
bool tracebox_hits_trigger_hurt(vector start, vector e_min, vector e_max, vector end)
void FixIntermissionClient(entity e)
float DoNextMapOverride(float reinit)
void Map_MarkAsRecent(string m)
void GotoNextMap(float reinit)
bool intermission_running
float intermission_exittime
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
ERASEABLE void IL_ENDFRAME()
#define IL_EACH(this, cond, body)
#define FOREACH(list, cond, body)
#define WriteHeader(to, id)
void Net_LinkEntity(entity e, bool docull, float dt, bool(entity this, entity to, int sendflags) sendfunc)
noref int autocvar_developer
ERASEABLE void db_close(int db)
ERASEABLE int db_load(string filename)
ERASEABLE int db_create()
ERASEABLE void db_save(int db, string filename)
ERASEABLE void db_dump(int db, string filename)
bool MapReadSizes(string map)
float MapInfo_FilterGametype(Gametype pGametype, int pFeatures, int pFlagsRequired, int pFlagsForbidden, bool pAbortOnGenerate)
int MapInfo_RequiredFlags()
Gametype MapInfo_CurrentGametype()
string _MapInfo_FindArenaFile(string pFilename, string extension)
int MapInfo_ForbiddenFlags()
int MapInfo_CurrentFeatures()
void MapInfo_LoadMapSettings(string s)
void MapInfo_ClearTemps()
string MapInfo_Map_clientstuff
void Movetype_Physics_NoMatchTicrate(entity this, float movedt, bool isclient)
const int MOVETYPE_FAKEPUSH
const int MOVETYPE_PHYSICS
const int MOVETYPE_QCENTITY
float move_suspendedinair
void TargetMusic_RestoreGame()
s1 s2 s1 s2 FLAG s1 s2 FLAG spree_cen s1 CPID_Null
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
void Kill_Notification(NOTIF broadcast, entity client, MSG net_type, CPID net_cpid)
#define new_pure(class)
purely logical entities (not linked to the area grid)
void PlayerStats_GameReport(bool finished)
void PlayerStats_GameReport_Init()
string GetTeamScoreString(int tm, float shortString)
float TeamScore_GetCompareValue(float t)
Returns a value indicating the team score (and higher is better).
void WinningConditionHelper(entity this)
Sets the following results for the current scores entities.
float TeamScore_AddToTeam(int t, float scorefield, float score)
Adds a score to the given team.
string GetPlayerScoreString(entity pl, float shortString)
Returns score strings for eventlog etc.
void ScoreRules_generic()
void CampaignPreIntermission()
void PutObserverInServer(entity this, bool is_forced, bool use_spawnpoint)
putting a client as observer in the server
float autocvar_g_player_alpha
int autocvar_g_maxplayers
const float TIMEOUT_ACTIVE
void ReadyRestart(bool forceWarmupEnd)
void VoteReset(bool verbose)
void remove_safely(entity e)
void Pause_TryPause_Dedicated(entity this)
void remove_unsafely(entity e)
string GetField_fullspawndata(entity e, string fieldname, bool vfspath)
Retrieves the value of a map entity field from fullspawndata.
void remove_except_protected(entity e)
bool autocvar_sv_autopause
void race_StartCompleting()
float WinningConditionHelper_secondscore
second highest score
entity scores_initialized
float WinningConditionHelper_winnerteam
the color of the winning team, or -1 if none
entity WinningConditionHelper_winner
the winning player, or NULL if none
float WinningConditionHelper_topscore
highest score
float WinningConditionHelper_equality
we have no winner
float WinningConditionHelper_lowerisbetter
lower is better, duh
float WinningConditionHelper_zeroisworst
zero is worst, duh
bool autocvar_g_spawn_useallspawns
bool some_spawn_has_been_used
IntrusiveList g_spawnpoints
IntrusiveList g_projectiles
#define __spawnfunc_spawn_all()
ClientState CS(Client this)
#define static_init_late()
#define STATIC_INIT_EARLY(func)
before worldspawn
#define static_init_precache()
#define endsWith(this, suffix)
#define VM_TEMPSTRING_MAXSIZE
#define startsWith(haystack, needle)
ERASEABLE string cons(string a, string b)
ERASEABLE string strftime_s()
void GameRules_limit_fallbacks()
Set any unspecified rules to their defaults.
void GameRules_teams(bool value)
int autocvar_leadlimit_and_fraglimit
#define GameRules_scoring_add(client, fld, value)
#define INGAME_STATUS_CLEAR(it)
#define INGAME_JOINED(it)
#define INGAME_JOINING(it)
var void delete_fn(entity e)
entity Team_GetTeam(int team_num)
Returns the global team entity that corresponds to the given TEAM_NUM value.
void Team_SetTeamScore(entity team_ent, float score)
Sets the score of the team.
float Team_GetTeamScore(entity team_ent)
Returns the score of the team.
entity TeamBalance_CheckAllowedTeams(entity for_whom)
Checks whether the player can join teams according to global configuration and mutator settings.
bool TeamBalance_IsTeamAllowed(entity balance, int index)
Returns whether the team change to the specified team is allowed.
entity Team_GetTeamFromIndex(int index)
Returns the global team entity at the given index.
void Player_SetForcedTeamIndex(entity player, int team_index)
Sets the index of the forced team of the given player.
bool MoveToTeam(entity client, int team_index, int type)
Moves player to the specified team.
@ TEAM_FORCE_DEFAULT
Don't force any team.
bool Team_IsValidTeam(int team_num)
Returns whether team value is valid.
int Team_TeamToIndex(int team_num)
Converts team value into team index.
#define Team_ColorName_Upper(teamid)
#define Team_ColoredFullName(teamid)
int Team_IndexToTeam(int index)
Converts team index into team value.
const int NUM_TEAMS
Number of teams in the game.
string Team_ColorCode(int teamid)
#define IS_REAL_CLIENT(v)
#define FOREACH_CLIENT(cond, body)
#define IS_BOT_CLIENT(v)
want: (IS_CLIENT(v) && !IS_REAL_CLIENT(v))
void WaypointSprite_Init()
Weapon Weapon_from_name(string s)
const int WEP_FLAG_MUTATORBLOCKED
const int WEP_FLAG_HIDDEN
const int WEP_FLAG_NORMAL
void WeaponStats_Shutdown()
int want_weapon(entity weaponinfo, int allguns)
void RunThink(entity this, float dt)
void RandomSeed_Think(entity this)
void DumpStats(float final)
int InitiateSuddenDeath()
void MatchEnd_RestoreSpectatorStatus()
float redirection_nextthink
void InitializeEntitiesRun()
void SetWinners(.float field, float value)
WepSet weapons_start()
Weapons the player normally starts with outside weapon arena.
void AddWinners(.float field, float value)
float WinningCondition_Scores(float limit, float leadlimit)
bool RandomSeed_Send(entity this, entity to, int sf)
void MatchEnd_RestoreSpectatorAndTeamStatus(.int prev_team_field)
void weaponarena_available_all_update(entity this)
bool MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, int attempts, float maxaboveground, float minviewdistance, bool frompos)
void PingPLReport_Think(entity this)
void GotoFirstMap(entity this)
void __init_dedicated_server_shutdown()
void DropToFloor_QC_DelayedInit(entity this)
float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
void weaponarena_available_devall_update(entity this)
float WinningCondition_RanOutOfSpawns()
float GetWinningCode(float fraglimitreached, float equality)
void GameplayMode_DelayedInit(entity this)
void weaponarena_available_most_update(entity this)
void readplayerstartcvars()
bool autocvar_sv_freezenonclients
const float SPAWNFLAG_NO_WAYPOINTS_FOR_ITEMS
void PingPLReport_Spawn()
float redirection_timeout
#define BADPRESUFFIX(p, s)
void InitializeEntity(entity e, void(entity this) func, int order)
bool autocvar_sv_gameplayfix_multiplethinksperframe
void DropToFloor_QC(entity this)
bool world_already_spawned
#define BADPRESUFFIXVALUE(p, s, val)
const float LATENCY_THINKRATE
entity initialize_entity_first
string loaded_gametype_custom_string
string autocvar_sv_termsofservice_url
float checkrules_suddendeathwarning
bool autocvar_sv_db_saveasdump
float warmup_start_ammo_cells
const int WINNING_STARTSUDDENDEATHOVERTIME
entity random_start_ammo
Entity that contains amount of ammo to give with random start weapons.
bool autocvar_sv_logscores_file
float warmup_start_ammo_rockets
float warmup_start_ammo_shells
bool gametype_custom_enabled
WepSet start_weapons_default
bool autocvar_sv_mapformat_is_quake3
float cvar_purechanges_count
int random_start_weapons_count
Number of random start weapons to give to players.
float warmup_start_ammo_nails
float autocvar_sv_mapchange_delay
float autocvar_timelimit_suddendeath
float default_weapon_alpha
int autocvar_g_warmup_allguns
int checkrules_overtimesadded
WepSet g_weaponarena_weapons
float checkrules_suddendeathend
float default_player_alpha
string cache_lastmutatormsg
IntrusiveList g_moveables
bool autocvar_sv_curl_serverpackages_auto
string autocvar_sessionid
float warmup_start_health
float checkrules_equality
bool autocvar_sv_dedicated
WepSet start_weapons_defaultmask
WepSet warmup_start_weapons_default
bool autocvar_sv_logscores_console
float autocvar_timelimit_overtime
WepSet warmup_start_weapons_defaultmask
WepSet warmup_start_weapons
int autocvar_timelimit_overtimes
float warmup_start_ammo_fuel
bool autocvar_sv_mapformat_is_quake2
string g_weaponarena_list
string autocvar__sv_vote_gametype_custom
float autocvar_quit_and_redirect_timer
bool sv_ready_restart_after_countdown
bool autocvar_sv_logscores_bots
string autocvar_sv_logscores_filename
float warmup_start_armorvalue
string sv_termsofservice_url_escaped
string redirection_target