-#define LATENCY_THINKRATE 10
+#include "g_world.qh"
+#include "_all.qh"
+
+#include "anticheat.qh"
+#include "antilag.qh"
+#include "bot/bot.qh"
+#include "campaign.qh"
+#include "cheats.qh"
+#include "cl_client.qh"
+#include "command/common.qh"
+#include "command/getreplies.qh"
+#include "command/sv_cmd.qh"
+#include "command/vote.qh"
+#include "g_hook.qh"
+#include "ipban.qh"
+#include "mapvoting.qh"
+#include "mutators/mutators_include.qh"
+#include "race.qh"
+#include "scores.qh"
+#include "teamplay.qh"
+#include "waypointsprites.qh"
+#include "weapons/weaponstats.qh"
+#include "../common/buffs.qh"
+#include "../common/constants.qh"
+#include "../common/deathtypes.qh"
+#include "../common/mapinfo.qh"
+#include "../common/monsters/all.qh"
+#include "../common/monsters/sv_monsters.qh"
+#include "../common/notifications.qh"
+#include "../common/playerstats.qh"
+#include "../common/stats.qh"
+#include "../common/teams.qh"
+#include "../common/util.qh"
+#include "../common/items/all.qh"
+#include "../common/weapons/all.qh"
+
+const float LATENCY_THINKRATE = 10;
.float latency_sum;
.float latency_cnt;
.float latency_time;
WriteByte(MSG_BROADCAST, 0);
WriteByte(MSG_BROADCAST, 0);
}
- self.cnt = mod(self.cnt + 1, maxclients);
+ self.cnt = (self.cnt + 1) % maxclients;
}
void PingPLReport_Spawn()
{
float world_initialized;
string GetGametype();
-void GotoNextMap(float reinit);
void ShuffleMaplist();
-float(float reinit) DoNextMapOverride;
void SetDefaultAlpha()
{
buf_cvarlist(h, "", "_"); // exclude all _ cvars as they are temporary
n = buf_getsize(h);
- adding = TRUE;
- pureadding = TRUE;
+ adding = true;
+ pureadding = true;
for(i = 0; i < n; ++i)
{
BADCVAR("g_configversion");
BADCVAR("g_maplist_index");
BADCVAR("halflifebsp");
+ BADCVAR("sv_mapformat_is_quake2");
+ BADCVAR("sv_mapformat_is_quake3");
BADPREFIX("sv_world");
// client
BADCVAR("g_domination_default_teams");
BADCVAR("g_freezetag");
BADCVAR("g_freezetag_teams");
+ BADCVAR("g_invasion_teams");
BADCVAR("g_keepaway");
BADCVAR("g_keyhunt");
BADCVAR("g_keyhunt_teams");
// does nothing visible
BADCVAR("captureleadlimit_override");
BADCVAR("g_balance_kill_delay");
+ BADCVAR("g_ca_point_limit");
BADCVAR("g_ca_point_leadlimit");
BADCVAR("g_ctf_captimerecord_always");
BADCVAR("g_ctf_flag_glowtrails");
BADCVAR("g_ctf_flag_pickup_verbosename");
BADCVAR("g_domination_point_leadlimit");
BADCVAR("g_forced_respawn");
+ BADCVAR("g_freezetag_point_limit");
+ BADCVAR("g_freezetag_point_leadlimit");
BADCVAR("g_keyhunt_point_leadlimit");
BADPREFIX("g_mod_");
+ BADCVAR("g_invasion_point_limit");
BADCVAR("g_nexball_goalleadlimit");
+ BADCVAR("g_tdm_point_limit");
+ BADCVAR("g_tdm_point_leadlimit");
BADCVAR("leadlimit_and_fraglimit");
BADCVAR("leadlimit_override");
BADCVAR("pausable");
BADCVAR("g_ca_teams_override");
BADCVAR("g_ctf_ignore_frags");
BADCVAR("g_domination_point_limit");
+ BADCVAR("g_domination_teams_override");
BADCVAR("g_freezetag_teams_override");
BADCVAR("g_friendlyfire");
BADCVAR("g_fullbrightitems");
BADCVAR("g_nexball_goallimit");
BADCVAR("g_powerups");
BADCVAR("g_start_delay");
+ BADCVAR("g_tdm_teams_override");
BADCVAR("g_warmup");
BADCVAR("g_weapon_stay"); BADPRESUFFIX("g_", "_weapon_stay");
BADCVAR("hostname");
vector o, v;
float i;
- for(;;)
+ for (;;)
{
o = world.mins;
- o_x += random() * (world.maxs_x - world.mins_x);
- o_y += random() * (world.maxs_y - world.mins_y);
- o_z += random() * (world.maxs_z - world.mins_z);
+ o.x += random() * (world.maxs.x - world.mins.x);
+ o.y += random() * (world.maxs.y - world.mins.y);
+ o.z += random() * (world.maxs.z - world.mins.z);
tracebox(o, PL_MIN, PL_MAX, o - '0 0 32768', MOVE_WORLDONLY, world);
if(trace_fraction == 1)
}
entity randomseed;
-float RandomSeed_Send(entity to, float sf)
+float RandomSeed_Send(entity to, int sf)
{
WriteByte(MSG_ENTITY, ENT_CLIENT_RANDOMSEED);
WriteShort(MSG_ENTITY, self.cnt);
- return TRUE;
+ return true;
}
void RandomSeed_Think()
{
{
randomseed = spawn();
randomseed.think = RandomSeed_Think;
- Net_LinkEntity(randomseed, FALSE, 0, RandomSeed_Send);
+ Net_LinkEntity(randomseed, false, 0, RandomSeed_Send);
entity oldself;
oldself = self;
// needs to be done so early because of the constants they create
CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
CALL_ACCUMULATED_FUNCTION(RegisterMonsters);
+ CALL_ACCUMULATED_FUNCTION(RegisterItems);
CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
void ClientInit_Spawn();
void WeaponStats_Init();
void WeaponStats_Shutdown();
+void Physics_AddStats();
void spawnfunc_worldspawn (void)
{
- float fd, l, i, j, n;
+ float fd, l, j, n;
string s;
cvar = cvar_normal;
if(world_already_spawned)
error("world already spawned - you may have EXACTLY ONE worldspawn!");
- world_already_spawned = TRUE;
+ world_already_spawned = true;
remove = remove_safely; // during spawning, watch what you remove!
head = nextent(head);
}
- server_is_dedicated = (stof(cvar_defstring("is_dedicated")) ? TRUE : FALSE);
+ server_is_dedicated = (stof(cvar_defstring("is_dedicated")) ? true : false);
// needs to be done so early because of the constants they create
CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
CALL_ACCUMULATED_FUNCTION(RegisterMonsters);
+ CALL_ACCUMULATED_FUNCTION(RegisterItems);
CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
// character set: ASCII 33-126 without the following characters: : ; ' " \ $
if(autocvar_sv_eventlog)
{
- s = sprintf("%d.%s.%06d", ftos(autocvar_sv_eventlog_files_counter), strftime(FALSE, "%s"), floor(random() * 1000000));
+ s = sprintf("%d.%s.%06d", itos(autocvar_sv_eventlog_files_counter), strftime(false, "%s"), floor(random() * 1000000));
matchid = strzone(s);
GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
WeaponStats_Init();
WepSet_AddStat();
+ WepSet_AddStat_InMap();
addstat(STAT_SWITCHWEAPON, AS_INT, switchweapon);
addstat(STAT_SWITCHINGWEAPON, AS_INT, switchingweapon);
addstat(STAT_GAMESTARTTIME, AS_FLOAT, stat_game_starttime);
addstat(STAT_VORTEX_CHARGEPOOL, AS_FLOAT, vortex_chargepool_ammo);
addstat(STAT_HAGAR_LOAD, AS_INT, hagar_load);
-
+
addstat(STAT_ARC_HEAT, AS_FLOAT, arc_heat_percent);
// freeze attacks
addstat(STAT_FROZEN, AS_INT, frozen);
addstat(STAT_REVIVE_PROGRESS, AS_FLOAT, revive_progress);
- // g_movementspeed hack
- addstat(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW, AS_FLOAT, stat_sv_airspeedlimit_nonqw);
- addstat(STAT_MOVEVARS_MAXSPEED, AS_FLOAT, stat_sv_maxspeed);
- addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw);
- addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw);
+ // physics
+ Physics_AddStats();
+
+ // new properties
+ addstat(STAT_MOVEVARS_JUMPVELOCITY, AS_FLOAT, stat_sv_jumpvelocity);
+ addstat(STAT_MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, AS_FLOAT, stat_sv_airaccel_qw_stretchfactor);
+ addstat(STAT_MOVEVARS_MAXAIRSTRAFESPEED, AS_FLOAT, stat_sv_maxairstrafespeed);
+ addstat(STAT_MOVEVARS_MAXAIRSPEED, AS_FLOAT, stat_sv_maxairspeed);
+ addstat(STAT_MOVEVARS_AIRSTRAFEACCELERATE, AS_FLOAT, stat_sv_airstrafeaccelerate);
+ addstat(STAT_MOVEVARS_WARSOWBUNNY_TURNACCEL, AS_FLOAT, stat_sv_warsowbunny_turnaccel);
+ addstat(STAT_MOVEVARS_AIRACCEL_SIDEWAYS_FRICTION, AS_FLOAT, stat_sv_airaccel_sideways_friction);
+ addstat(STAT_MOVEVARS_AIRCONTROL, AS_FLOAT, stat_sv_aircontrol);
+ addstat(STAT_MOVEVARS_AIRCONTROL_POWER, AS_FLOAT, stat_sv_aircontrol_power);
+ addstat(STAT_MOVEVARS_AIRCONTROL_PENALTY, AS_FLOAT, stat_sv_aircontrol_penalty);
+ addstat(STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, AS_FLOAT, stat_sv_warsowbunny_airforwardaccel);
+ addstat(STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED, AS_FLOAT, stat_sv_warsowbunny_topspeed);
+ addstat(STAT_MOVEVARS_WARSOWBUNNY_ACCEL, AS_FLOAT, stat_sv_warsowbunny_accel);
+ addstat(STAT_MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, AS_FLOAT, stat_sv_warsowbunny_backtosideratio);
+ addstat(STAT_MOVEVARS_FRICTION, AS_FLOAT, stat_sv_friction);
+ addstat(STAT_MOVEVARS_ACCELERATE, AS_FLOAT, stat_sv_accelerate);
+ addstat(STAT_MOVEVARS_STOPSPEED, AS_FLOAT, stat_sv_stopspeed);
+ addstat(STAT_MOVEVARS_AIRACCELERATE, AS_FLOAT, stat_sv_airaccelerate);
+ addstat(STAT_MOVEVARS_AIRSTOPACCELERATE, AS_FLOAT, stat_sv_airstopaccelerate);
// secrets
addstat(STAT_SECRETS_TOTAL, AS_FLOAT, stat_secrets_total);
maplist_reply = strzone(getmaplist());
lsmaps_reply = strzone(getlsmaps());
monsterlist_reply = strzone(getmonsterlist());
- for(i = 0; i < 10; ++i)
+ for(int i = 0; i < 10; ++i)
{
s = getrecords(i);
if (s)
{
s = "";
n = tokenize_console(cvar_string("sv_curl_serverpackages"));
- for(i = 0; i < n; ++i)
+ for(int i = 0; i < n; ++i)
if(substring(argv(i), -18, -1) != "-serverpackage.txt")
if(substring(argv(i), -14, -1) != ".serverpackage") // OLD legacy
s = strcat(s, " ", argv(i));
- fd = search_begin("*-serverpackage.txt", TRUE, FALSE);
+ fd = search_begin("*-serverpackage.txt", true, false);
if(fd >= 0)
{
j = search_getsize(fd);
- for(i = 0; i < j; ++i)
+ for(int i = 0; i < j; ++i)
s = strcat(s, " ", search_getfilename(fd, i));
search_end(fd);
}
- fd = search_begin("*.serverpackage", TRUE, FALSE);
+ fd = search_begin("*.serverpackage", true, false);
if(fd >= 0)
{
j = search_getsize(fd);
- for(i = 0; i < j; ++i)
+ for(int i = 0; i < j; ++i)
s = strcat(s, " ", search_getfilename(fd, i));
search_end(fd);
}
if(!fexists(strcat("maps/", map, ".waypoints")))
{
dprint(": no waypoints\n");
- return FALSE;
+ return false;
}
dprint(": has waypoints\n");
}
if(player_count < mapmin)
{
dprint("not enough\n");
- return FALSE;
+ return false;
}
if(player_count > mapmax)
{
dprint("too many\n");
- return FALSE;
+ return false;
}
dprint("right size\n");
- return TRUE;
+ return true;
}
dprint(": not found\n");
- return TRUE;
+ return true;
}
string Map_Filename(float position)
for(i = 1; i < Map_Count; ++i)
{
float mapindex;
- mapindex = mod(i + Map_Current, Map_Count);
+ mapindex = (i + Map_Current) % Map_Count;
if(Map_Check(mapindex, pass))
return mapindex;
}
for(i = 0; i <= imax; ++i)
{
float mapindex;
- mapindex = mod(Map_Current + floor(random() * (Map_Count - 1) + 1), Map_Count); // any OTHER map
+ mapindex = (Map_Current + floor(random() * (Map_Count - 1) + 1)) % Map_Count; // any OTHER map
if(Map_Check(mapindex, 1))
return mapindex;
}
if(autocvar_g_campaign)
{
CampaignPostIntermission();
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
if(autocvar_quit_when_empty)
{
if(player_count <= currentbots)
{
localcmd("quit\n");
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
}
if(autocvar_quit_and_redirect != "")
{
redirection_target = strzone(autocvar_quit_and_redirect);
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
if (!reinit && autocvar_samelevel) // if samelevel is set, stay on same level
{
localcmd("restart\n");
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
if(autocvar_nextmap != "")
{
string m;
m = GameTypeVote_MapInfo_FixName(autocvar_nextmap);
cvar_set("nextmap",m);
-
+
if(!m || gametypevote)
- return FALSE;
+ return false;
if(autocvar_sv_vote_gametype)
{
Map_Goto_SetStr(m);
- return FALSE;
+ return false;
}
-
+
if(MapInfo_CheckMap(m))
{
Map_Goto_SetStr(m);
Map_Goto(reinit);
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
}
if(!reinit && autocvar_lastlevel)
{
cvar_settemp_restore();
localcmd("set lastlevel 0\ntogglemenu 1\n");
- alreadychangedlevel = TRUE;
- return TRUE;
+ alreadychangedlevel = true;
+ return true;
}
- return FALSE;
+ return false;
}
void GotoNextMap(float reinit)
//string s;
if (alreadychangedlevel)
return;
- alreadychangedlevel = TRUE;
+ alreadychangedlevel = true;
string nextMap;
&& ((self.autoscreenshot > 0) && (time > self.autoscreenshot)) )
{
self.autoscreenshot = -1;
- if(IS_REAL_CLIENT(self)) { stuffcmd(self, sprintf("\nscreenshot screenshots/autoscreenshot/%s-%s.jpg; echo \"^5A screenshot has been taken at request of the server.\"\n", GetMapname(), strftime(FALSE, "%s"))); }
+ if(IS_REAL_CLIENT(self)) { stuffcmd(self, sprintf("\nscreenshot screenshots/autoscreenshot/%s-%s.jpg; echo \"^5A screenshot has been taken at request of the server.\"\n", GetMapname(), strftime(false, "%s"))); }
return;
}
if(!final)
{
- to_console = TRUE; // always print printstats replies
- to_eventlog = FALSE; // but never print them to the event log
+ to_console = true; // always print printstats replies
+ to_eventlog = false; // but never print them to the event log
}
if(to_eventlog)
if(autocvar_sv_eventlog_console)
- to_console = FALSE; // otherwise we get the output twice
+ to_console = false; // otherwise we get the output twice
if(final)
s = ":scores:";
{
file = fopen(autocvar_sv_logscores_filename, FILE_APPEND);
if(file == -1)
- to_file = FALSE;
+ to_file = false;
else
fputs(file, strcat(s, "\n"));
}
*/
void NextLevel()
{
- gameover = TRUE;
+ gameover = true;
intermission_running = 1;
VoteReset();
- DumpStats(TRUE);
+ DumpStats(true);
// send statistics
- PlayerStats_GameReport(TRUE);
+ PlayerStats_GameReport(true);
WeaponStats_Shutdown();
Kill_Notification(NOTIF_ALL, world, MSG_CENTER, 0); // kill all centerprints now
// (div0: and that in CheckRules_World please)
}
-float checkrules_equality;
-float checkrules_suddendeathwarning;
-float checkrules_suddendeathend;
-float checkrules_overtimesadded; //how many overtimes have been already added
-
-const float WINNING_NO = 0; // no winner, but time limits may terminate the game
-const float WINNING_YES = 1; // winner found
-const float WINNING_NEVER = 2; // no winner, enter overtime if time limit is reached
-const float WINNING_STARTSUDDENDEATHOVERTIME = 3; // no winner, enter suddendeath overtime NOW
float InitiateSuddenDeath()
{
{
entity head;
FOR_EACH_PLAYER(head)
- head.winning = (head.field == value);
+ head.winning = (head.(field) == value);
}
// set the .winning flag for those players with a given field value
{
entity head;
FOR_EACH_PLAYER(head)
- if(head.field == value)
+ if (head.(field) == value)
head.winning = 1;
}
float have_players;
float l;
- have_player = FALSE;
- have_players = FALSE;
+ have_player = false;
+ have_players = false;
l = LMS_NewPlayerLives();
head = find(world, classname, "player");
if(head)
- have_player = TRUE;
+ have_player = true;
head2 = find(head, classname, "player");
if(head2)
- have_players = TRUE;
+ have_players = true;
if(have_player)
{
ClearWinners();
if(WinningConditionHelper_winner)
- WinningConditionHelper_winner.winning = TRUE;
+ WinningConditionHelper_winner.winning = true;
if(WinningConditionHelper_topscore == WinningConditionHelper_secondscore)
return WINNING_NEVER;
}
}
- limitreached = FALSE;
+ limitreached = false;
if(limit)
if(WinningConditionHelper_topscore >= limit)
- limitreached = TRUE;
+ limitreached = true;
if(leadlimit)
{
float leadlimitreached;
if(have_team_spawns <= 0)
return WINNING_NO;
- if(autocvar_g_spawn_useallspawns <= 0)
+ if(!autocvar_g_spawn_useallspawns)
return WINNING_NO;
if(!some_spawn_has_been_used)
ClearWinners();
if(team1_score + team2_score + team3_score + team4_score == 0)
{
- checkrules_equality = TRUE;
+ checkrules_equality = true;
return WINNING_YES;
}
else if(team1_score + team2_score + team3_score + team4_score == 1)
Exit deathmatch games upon conditions
============
*/
-void ReadyRestart();
void CheckRules_World()
{
float timelimit;
{
if(!checkrules_suddendeathwarning)
{
- checkrules_suddendeathwarning = TRUE;
+ checkrules_suddendeathwarning = true;
if(g_race && !g_race_qualifying)
Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_RACE_FINISHLAP);
else
// needed!
FOR_EACH_CLIENT(self)
{
- self.typehitsound = FALSE;
+ self.typehitsound = false;
self.damage_dealt = 0;
antilag_record(self, altime);
}
/*
* RedirectionThink:
- * returns TRUE if redirecting
+ * returns true if redirecting
*/
float redirection_timeout;
float redirection_nextthink;
float clients_found;
if(redirection_target == "")
- return FALSE;
+ return false;
if(!redirection_timeout)
{
}
if(time < redirection_nextthink)
- return TRUE;
+ return true;
redirection_nextthink = time + 1;
if(time > redirection_timeout || clients_found == 0)
localcmd("\nwait; wait; wait; quit\n");
- return TRUE;
+ return true;
}
void TargetMusic_RestoreGame();
Ban_SaveBans();
// playerstats with unfinished match
- PlayerStats_GameReport(FALSE);
+ PlayerStats_GameReport(false);
if(!cheatcount_total)
{