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",
"");
764 string msg =
"world already spawned - your map may have EXACTLY ONE worldspawn!";
778 string watermark_start =
cvar_string(
"sv_watermark_start");
779 if (watermark_start ==
"")
780 cvar_set(
"sv_watermark_start", WATERMARK);
781 else if (watermark_start != WATERMARK)
784 "\n^1 Warning: ^3the server QC program was updated without a full restart."
785 "\n^3 Please restart the Xonotic executable otherwise you may get random bugs."
803 bool wantrestart =
false;
809 string expect =
"csprogs.dat";
810 wantrestart =
cvar_string(
"csqc_progname") != expect;
818 string pk3csprogs =
"csprogs-" WATERMARK
".dat";
820 string select =
"csprogs.dat";
821 if (
fexists(pk3csprogs)) select = pk3csprogs;
832 string switchversion =
fgets(sentinel);
834 if (switchversion !=
"" && switchversion != WATERMARK)
836 LOG_INFOF(
"Switching progs: " WATERMARK
" -> %s", switchversion);
840 string newprogs = sprintf(
"progs-%s.dat", switchversion);
846 string newcsprogs = sprintf(
"csprogs-%s.dat", switchversion);
849 cvar_set(
"csqc_progname", newcsprogs);
881 lightstyle(1,
"mmnmmommommnonmmonqnmmo");
884 lightstyle(2,
"abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");
887 lightstyle(3,
"mmmmmaaaaammmmmaaaaaabcdefgabcdefg");
890 lightstyle(4,
"mamamamamama");
893 lightstyle(5,
"jklmnopqrstuvwxyzyxwvutsrqponmlkj");
896 lightstyle(6,
"nmonqnmomnmomomno");
899 lightstyle(7,
"mmmaaaabcdefgmmmmaaaammmaamm");
902 lightstyle(8,
"mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa");
905 lightstyle(9,
"aaaaaaaazzzzzzzz");
908 lightstyle(10,
"mmamammmmammamamaaamammma");
911 lightstyle(11,
"abcdefghijklmnopqrrqponmlkjihgfedcba");
967 if (music ||
world.noise)
977 while((s =
fgets(fd)))
984 string trackname =
argv(2);
985 LOG_INFO(
"Found ^1UNSUPPORTED^7 cd loop command in .cfg file; put this line in mapinfo instead:");
993 else if(
argv(0) ==
"fog")
995 LOG_INFO(
"Found ^1UNSUPPORTED^7 fog command in .cfg file; put this line in worldspawn in the .map/.bsp/.ent file instead:");
998 else if(
argv(0) ==
"set")
1000 LOG_INFO(
"Found ^1UNSUPPORTED^7 set command in .cfg file; put this line in mapinfo instead:");
1003 else if(
argv(0) !=
"//")
1005 LOG_INFO(
"Found ^1UNSUPPORTED^7 set command in .cfg file; put this line in mapinfo instead:");
1021 bool records_available =
false;
1022 for(
int i = 0; i < 10; ++i)
1028 records_available =
true;
1031 if (!records_available)
1032 records_reply[0] =
"No records available for the current gametype.\n";
1048 string s =
"csprogs-" WATERMARK
".dat";
1052 string pkg =
argv(i);
1054 if (
endsWith(pkg,
"-serverpackage.txt"))
continue;
1055 if (
endsWith(pkg,
".serverpackage"))
continue;
1059 #define X(match) MACRO_BEGIN \
1060 int fd = search_begin(match, true, false); \
1063 for (int i = 0, j = search_getsize(fd); i < j; ++i) \
1065 s = cons(s, search_getfilename(fd, i)); \
1070 X(
"*-serverpackage.txt");
1071 X(
"*.serverpackage");
1073 cvar_set(
"sv_curl_serverpackages", s);
1099 string filename =
strcat(
"data/",
mapname,
"_scrshot_ent.txt");
1115 float m = e.dphitcontentsmask;
1116 e.dphitcontentsmask = goodcontents | badcontents;
1119 vector delta = boundmax - boundmin;
1124 for(j = 0; j < attempts; ++j)
1133 tracebox(start, e.mins, e.maxs, start -
'0 0 1' * delta.z,
MOVE_NORMAL, e);
1152 vector mstart = start + 0.5 * (e.mins + e.maxs);
1153 traceline(mstart, mstart +
'1 0 0' * delta.x,
MOVE_NORMAL, e);
1156 traceline(mstart, mstart -
'1 0 0' * delta.x,
MOVE_NORMAL, e);
1159 traceline(mstart, mstart +
'0 1 0' * delta.y,
MOVE_NORMAL, e);
1162 traceline(mstart, mstart -
'0 1 0' * delta.y,
MOVE_NORMAL, e);
1165 traceline(mstart, mstart +
'0 0 1' * delta.z,
MOVE_NORMAL, e);
1192 int items_checked = 0;
1202 if(items_checked >= attempts)
1210 float vlen_delta =
vlen(delta);
1215 end = start +
normalize(end - start) * vlen_delta;
1218 tracebox(start, e.mins, e.maxs, end,
MOVE_NORMAL, e);
1235 e.dphitcontentsmask = m;
1239 setorigin(e, start);
1247float MoveToRandomMapLocation(
entity e,
float goodcontents,
float badcontents,
float badsurfaceflags,
float attempts,
float maxaboveground,
float minviewdistance)
1276 to_eventlog =
false;
1318 s =
strcat(s,
"spectator:");
1338 for(i = 1; i < 16; ++i)
1357 fputs(file,
":end\n");
1375 bprint(
playername(it.netname, it.team,
false),
" has been moved back to spectator");
1378 else if (fix_team &&
INGAME_JOINED(it) && it.(prev_team_field) && it.team != it.(prev_team_field))
1383 string pl_name =
playername(it.netname, it.team,
false);
1438 int winner_team = 0;
1445 winner_team = it.team;
1510 if(fraglimitreached)
1519 if(fraglimitreached)
1526 if(fraglimitreached)
1544 if(it.(field) == value)
1563 for (
int i = 1; i < 5; ++i)
1603 fragsleft =
max(fragsleft, leadingfragsleft);
1605 fragsleft =
min(fragsleft, leadingfragsleft);
1612 else if (fragsleft == 2)
1614 else if (fragsleft == 3)
1627 limit_reached = (fraglimit_reached && leadlimit_reached);
1629 limit_reached = (fraglimit_reached || leadlimit_reached);
1648 for (
int i = 1; i < 5; ++i)
1674 if(team1_score + team2_score + team3_score + team4_score == 0)
1679 else if(team1_score + team2_score + team3_score + team4_score == 1)
1684 else if(team2_score)
1686 else if(team3_score)
1740 if (leadlimit < 0) leadlimit = 0;
1762 int wantovertime = 0;
1777 if (timelimit &&
time >= timelimit)
1782 float playerswithlaps;
1784 totalplayers = playerswithlaps = readyplayers = 0;
1795 if(readyplayers || playerswithlaps >= 2)
1817 bprint(
"Hey! Someone ran out of spawns!\n");
1819 checkrules_status =
M_ARGV(0,
float);
1862 bool allow_mutatorblocked =
false;
1864 if(!weaponinfo.m_id)
1867 bool mutator_returnvalue =
MUTATOR_CALLHOOK(WantWeapon, weaponinfo, d, allguns, allow_mutatorblocked);
1869 allguns =
M_ARGV(2,
int);
1870 allow_mutatorblocked =
M_ARGV(3,
bool);
1874 else if(allguns == 2)
1876 else if(!mutator_returnvalue)
1877 d = !(!weaponinfo.weaponstart);
1882 float t = weaponinfo.weaponstartoverride;
2005 if (s ==
"0" || s ==
"")
2009 else if (s ==
"off")
2013 else if (s ==
"all" || s ==
"1")
2019 else if (s ==
"devall")
2025 else if (s ==
"most")
2031 else if (s ==
"all_available")
2039 else if (s ==
"devall_available")
2047 else if (s ==
"most_available")
2055 else if (s ==
"none")
2065 for (
int j = 0; j < t; ++j)
2102 if(
cvar(
"g_balance_superweapons_time") < 0)
2105 if(!
cvar(
"g_use_ammunition"))
2186 if(
cvar(
"sv_allow_fullbright"))
2190 if(
cvar(
"sv_forbid_pickuptimer"))
2195 if(
cvar(
"g_campaign"))
2229 if (!e || e.initialize_entity)
2233 e =
new(initialize_entity);
2237 e.initialize_entity = func;
2238 e.initialize_entity_order = order;
2244 if (!cur || cur.initialize_entity_order > order)
2248 prev.initialize_entity_next = e;
2251 e.initialize_entity_next = cur;
2255 cur = cur.initialize_entity_next;
2263 for (
entity e = startoflist; e; e = e.initialize_entity_next)
2265 e.remove_except_protected_forbidden = 1;
2267 for (
entity e = startoflist; e; )
2269 e.remove_except_protected_forbidden = 0;
2270 e.initialize_entity_order = 0;
2272 e.initialize_entity_next =
NULL;
2273 var
void(
entity this) func = e.initialize_entity;
2275 if (e.classname ==
"initialize_entity")
2277 entity wrappee = e.enemy;
2303 if(!
this || wasfreed(
this))
2305 LOG_WARN(
"DropToFloor_QC: can not modify free entity");
2338 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2340 LOG_WARNF(
"DropToFloor_QC at \"%v\": COULD NOT FIX badly placed entity \"%s\" before drop", this.
origin, this.
classname);
2341 else if (nudgeresult > 0)
2366 LOG_WARNF(
"DropToFloor_QC at \"%v\" (Quake compat): DELETING badly placed item \"%s\"", this.
origin, this.
classname);
2399 this.
mins = saved_mins;
2400 this.
maxs = saved_maxs;
2404 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2409 nudgeresult = nudgeoutofsolid_OrFallback(
this);
2410 if (nudgeresult > 0)
2436 float oldtime =
time;
2438 for (
int iterations = 0; iterations < 128 && !wasfreed(
this); ++iterations)
2492 if(IS_CLIENT(it) || it.move_time || it.move_movetype == MOVETYPE_NONE || it.move_movetype == MOVETYPE_PHYSICS)
2494 Movetype_Physics_NoMatchTicrate(it, PHYS_INPUT_TIMELENGTH, false);
2507 if (e.typehitsound) {
2509 }
else if (e.killsound) {
2511 }
else if (e.hitsound_damage_dealt) {
2514 STAT(HITSOUND_DAMAGE_DEALT_TOTAL, it) +=
ceil(e.hitsound_damage_dealt);
2524 it.typehitsound =
false;
2525 it.hitsound_damage_dealt = 0;
2526 it.killsound =
false;
2533 it.maxs.z =
max(h, it.mins.z + 1);
2534 setsize(it, it.mins, it.maxs);
2543 antilag_record(it, it, altime);
2558 float clients_found;
2568 bprint(
"^3SERVER NOTICE:^7 restarting the server\n");
2581 LOG_INFO(
"Redirecting: sending connect command to ", it.netname);
2589 LOG_INFO(
"Redirecting: ",
ftos(clients_found),
" clients left.");
2592 localcmd(
"\nwait; wait; wait; quit\n");
2649 LOG_TRACE(
"Saving persistent data... done!");
2661 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