X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fteamplay.qc;h=ec6f5afc3d16fc1fe1073452f467c6bbe3389a2a;hb=86a030f5ba6b51c42a20c930ba07470baf12221c;hp=bd5d3607c127e2178a62cce0241d72a09ae7c32f;hpb=dc891780036706390bcaa27975dcb71e499deeae;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index bd5d3607c..ec6f5afc3 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -1,20 +1,25 @@ -string cache_mutatormsg; -string cache_lastmutatormsg; +#include "teamplay.qh" +#include "_all.qh" -// client counts for each team -float c1, c2, c3, c4; -// # of bots on those teams -float cb1, cb2, cb3, cb4; +#include "cl_client.qh" +#include "race.qh" +#include "scores.qh" +#include "scores_rules.qh" -//float audit_teams_time; +#include "bot/bot.qh" + +#include "command/vote.qh" + +#include "mutators/mutators_include.qh" + +#include "../common/deathtypes.qh" +#include "../common/teams.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) @@ -36,6 +41,7 @@ void ActivateTeamplay() { serverflags |= SERVERFLAG_TEAMPLAY; teamplay = 1; + cvar_set("teamplay", "2"); // DP needs this for sending proper getstatus replies. } void InitGameplayMode() @@ -52,8 +58,9 @@ void InitGameplayMode() world.maxs = mi_max; MapInfo_LoadMapSettings(mapname); - teamplay = 0; serverflags &= ~SERVERFLAG_TEAMPLAY; + teamplay = 0; + cvar_set("teamplay", "0"); // DP needs this for sending proper getstatus replies. if (!cvar_value_issafe(world.fog)) { @@ -84,10 +91,9 @@ void InitGameplayMode() 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) @@ -95,12 +101,10 @@ void InitGameplayMode() 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) @@ -108,8 +112,8 @@ void InitGameplayMode() 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) @@ -126,9 +130,9 @@ void InitGameplayMode() 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) @@ -144,16 +148,16 @@ void InitGameplayMode() 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) @@ -173,11 +177,34 @@ void InitGameplayMode() } 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); } @@ -186,16 +213,17 @@ void InitGameplayMode() 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) @@ -234,31 +262,6 @@ void InitGameplayMode() 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); } @@ -599,11 +602,11 @@ float TeamSmallerEqThanTeam(float ta, float tb, entity e) // invalid if(ca < 0 || cb < 0) - return FALSE; + return false; // equal if(ta == tb) - return TRUE; + return true; if(IS_REAL_CLIENT(e)) { @@ -617,10 +620,10 @@ float TeamSmallerEqThanTeam(float ta, float tb, entity 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); @@ -739,7 +742,7 @@ float JoinBestTeam(entity pl, float only_return_best, float forcebestteam) // 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) { @@ -816,7 +819,7 @@ void SV_ChangeTeam(float _color) if(scolor == dcolor) { //bprint("same team change\n"); - SetPlayerTeam(self, dteam, steam, TRUE); + SetPlayerTeam(self, dteam, steam, true); return; } @@ -844,7 +847,7 @@ void SV_ChangeTeam(float _color) TeamchangeFrags(self); } - SetPlayerTeam(self, dteam, steam, FALSE); + SetPlayerTeam(self, dteam, steam, false); if(IS_PLAYER(self) && steam != dteam) { @@ -988,7 +991,7 @@ void ShufflePlayerOutOfTeam (float source_team) // 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');