-string cache_mutatormsg;
-string cache_lastmutatormsg;
-
-// client counts for each team
-float c1, c2, c3, c4;
-// # of bots on those teams
-float cb1, cb2, cb3, cb4;
-
-//float audit_teams_time;
+#include "teamplay.qh"
void TeamchangeFrags(entity e)
{
PlayerScore_Clear(e);
}
-void entcs_init();
-
void LogTeamchange(float player_id, float team_number, float type)
{
if(!autocvar_sv_eventlog)
ActivateTeamplay();
fraglimit_override = autocvar_g_tdm_point_limit;
leadlimit_override = autocvar_g_tdm_point_leadlimit;
- MUTATOR_ADD(gamemode_tdm);
-
if(autocvar_g_tdm_team_spawns)
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_tdm);
}
if(g_domination)
ActivateTeamplay();
fraglimit_override = autocvar_g_domination_point_limit;
leadlimit_override = autocvar_g_domination_point_leadlimit;
- MUTATOR_ADD(gamemode_domination);
-
if(autocvar_g_domination_roundbased && autocvar_g_domination_roundbased_point_limit)
fraglimit_override = autocvar_g_domination_roundbased_point_limit;
-
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_domination);
}
if(g_ctf)
ActivateTeamplay();
fraglimit_override = autocvar_capturelimit_override;
leadlimit_override = autocvar_captureleadlimit_override;
- MUTATOR_ADD(gamemode_ctf);
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_ctf);
}
if(g_lms)
ActivateTeamplay();
fraglimit_override = autocvar_g_ca_point_limit;
leadlimit_override = autocvar_g_ca_point_leadlimit;
- MUTATOR_ADD(gamemode_ca);
if(autocvar_g_ca_team_spawns)
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_ca);
}
if(g_keyhunt)
ActivateTeamplay();
fraglimit_override = autocvar_g_freezetag_point_limit;
leadlimit_override = autocvar_g_freezetag_point_leadlimit;
- MUTATOR_ADD(gamemode_freezetag);
if(autocvar_g_freezetag_team_spawns)
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_freezetag);
}
if(g_assault)
{
ActivateTeamplay();
- MUTATOR_ADD(gamemode_assault);
have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_assault);
}
if(g_onslaught)
}
else
race_teams = 0;
-
qualifying_override = autocvar_g_race_qualifying_timelimit_override;
fraglimit_override = autocvar_g_race_laps_limit;
leadlimit_override = 0; // currently not supported by race
+ // we need to find out the correct value for g_race_qualifying
+ float want_qualifying = ((qualifying_override >= 0) ? qualifying_override : autocvar_g_race_qualifying_timelimit) > 0;
+
+ if(autocvar_g_campaign)
+ {
+ g_race_qualifying = 1;
+ independent_players = 1;
+ }
+ else if(!autocvar_g_campaign && want_qualifying)
+ {
+ g_race_qualifying = 2;
+ independent_players = 1;
+ race_fraglimit = (race_fraglimit >= 0) ? fraglimit_override : autocvar_fraglimit;
+ race_leadlimit = (race_leadlimit >= 0) ? leadlimit_override : autocvar_leadlimit;
+ race_timelimit = (race_timelimit >= 0) ? timelimit_override : autocvar_timelimit;
+ fraglimit_override = 0;
+ leadlimit_override = 0;
+ timelimit_override = autocvar_g_race_qualifying_timelimit;
+ }
+ else
+ {
+ g_race_qualifying = 0;
+ }
+
MUTATOR_ADD(gamemode_race);
}
g_race_qualifying = 1;
fraglimit_override = 0;
leadlimit_override = 0;
+ independent_players = 1;
MUTATOR_ADD(gamemode_cts);
}
if(g_nexball)
{
- fraglimit_override = autocvar_g_nexball_goallimit;
- leadlimit_override = autocvar_g_nexball_goalleadlimit;
- ActivateTeamplay();
- have_team_spawns = -1; // request team spawns
- MUTATOR_ADD(gamemode_nexball);
+ fraglimit_override = autocvar_g_nexball_goallimit;
+ leadlimit_override = autocvar_g_nexball_goalleadlimit;
+ ActivateTeamplay();
+ have_team_spawns = -1; // request team spawns
+ MUTATOR_ADD(gamemode_nexball);
}
if(g_keepaway)
cvar_set("g_race_qualifying_timelimit", ftos(qualifying_override));
}
- if(g_race)
- {
- // we need to find out the correct value for g_race_qualifying
- if(autocvar_g_campaign)
- {
- g_race_qualifying = 1;
- }
- else if(!autocvar_g_campaign && autocvar_g_race_qualifying_timelimit > 0)
- {
- g_race_qualifying = 2;
- race_fraglimit = autocvar_fraglimit;
- race_leadlimit = autocvar_leadlimit;
- race_timelimit = autocvar_timelimit;
- cvar_set("fraglimit", "0");
- cvar_set("leadlimit", "0");
- cvar_set("timelimit", ftos(autocvar_g_race_qualifying_timelimit));
- }
- else
- g_race_qualifying = 0;
- }
-
- if(g_race || g_cts)
- if(g_race_qualifying)
- independent_players = 1;
-
InitializeEntity(world, default_delayedinit, INITPRIO_GAMETYPE_FALLBACK);
}
FOR_EACH_CLIENT(head)
{
float t;
- if(IS_PLAYER(head))
+ if(IS_PLAYER(head) || head.caplayer)
t = head.team;
else if(head.team_forced > 0)
t = head.team_forced; // reserve the spot
// invalid
if(ca < 0 || cb < 0)
- return FALSE;
+ return false;
// equal
if(ta == tb)
- return TRUE;
+ return true;
if(IS_REAL_CLIENT(e))
{
// keep teams alive (teams of size 0 always count as smaller, ignoring score)
if(ca < 1)
if(cb >= 1)
- return TRUE;
+ return true;
if(ca >= 1)
if(cb < 1)
- return FALSE;
+ return false;
// first, normalize
f = max(ca, cb, 1);
// otherwise end up on the smallest team (handled below)
}
- smallest = FindSmallestTeam(pl, TRUE);
+ smallest = FindSmallestTeam(pl, true);
if(!only_return_best && !pl.bot_forced_team)
{
if(scolor == dcolor)
{
//bprint("same team change\n");
- SetPlayerTeam(self, dteam, steam, TRUE);
+ SetPlayerTeam(self, dteam, steam, true);
return;
}
TeamchangeFrags(self);
}
- SetPlayerTeam(self, dteam, steam, FALSE);
+ SetPlayerTeam(self, dteam, steam, false);
if(IS_PLAYER(self) && steam != dteam)
{
// move the player to the new team
TeamchangeFrags(selected);
- SetPlayerTeam(selected, smallestteam, source_team, FALSE);
+ SetPlayerTeam(selected, smallestteam, source_team, false);
if(selected.deadflag == DEAD_NO)
Damage(selected, selected, selected, 100000, DEATH_AUTOTEAMCHANGE, selected.origin, '0 0 0');