From 9c2054849f6f09ac4210727490b5b8ce3027e5f9 Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 27 Feb 2009 18:41:17 +0000 Subject: [PATCH] more teamplay fixes git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6014 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 3 +- data/qcsrc/server/defs.qh | 2 + data/qcsrc/server/teamplay.qc | 119 +++++++++++++++++---------------- 3 files changed, 65 insertions(+), 59 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index a4ffaac48..d2cdfce20 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -722,6 +722,7 @@ void PutClientInServer (void) self.campingrifle_bulletcounter = 0; self.classname = "player"; + self.wasplayer = TRUE; self.iscreature = TRUE; self.movetype = MOVETYPE_WALK; self.solid = SOLID_SLIDEBOX; @@ -1913,7 +1914,7 @@ void ShowRespawnCountdown() void LeaveSpectatorMode() { if(isJoinAllowed()) { - if(!teams_matter || cvar("g_campaign") || cvar("g_balance_teams")) { + if(!teams_matter || cvar("g_campaign") || cvar("g_balance_teams") || (self.wasplayer && cvar("g_changeteam_banned"))) { self.classname = "player"; if(cvar("g_campaign") || cvar("g_balance_teams") || cvar("g_balance_teams_force")) JoinBestTeam(self, FALSE, TRUE); diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index 1508c2f4c..8093a9686 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -541,3 +541,5 @@ vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons // the QC VM sucks #define BITXOR(v,b) ((v) + (b) - 2 * ((v) & (b))) #define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b)))) + +.float wasplayer; diff --git a/data/qcsrc/server/teamplay.qc b/data/qcsrc/server/teamplay.qc index 2d201f2ab..4d31ee09d 100644 --- a/data/qcsrc/server/teamplay.qc +++ b/data/qcsrc/server/teamplay.qc @@ -945,76 +945,79 @@ void SV_ChangeTeam(float _color) return; } - if(teams_matter) + if(cvar("g_campaign")) { - if(cvar("g_campaign") || cvar("g_changeteam_banned")) - { - sprint(self, "Team changes not allowed\n"); - return; // changing teams is not allowed - } + sprint(self, "Team changes not allowed\n"); + return; // changing teams is not allowed + } - if(!cvar("g_campaign") && cvar("g_balance_teams_prevent_imbalance")) - { - // only allow changing to a smaller or equal size team + if(cvar("g_changeteam_banned") && self.wasplayer) + { + sprint(self, "Team changes not allowed\n"); + return; + } - // find out what teams are available - //CheckAllowedTeams(); - // count how many players on each team - GetTeamCounts(world); + if(cvar("g_balance_teams_prevent_imbalance")) + { + // only allow changing to a smaller or equal size team - // get desired team - if(dteam == 1 && c1 >= 0)//dcolor == COLOR_TEAM1 - 1) - { - dcount = c1; - dbotcount = cb1; - } - else if(dteam == 2 && c2 >= 0)//dcolor == COLOR_TEAM2 - 1) - { - dcount = c2; - dbotcount = cb2; - } - else if(dteam == 3 && c3 >= 0)//dcolor == COLOR_TEAM3 - 1) - { - dcount = c3; - dbotcount = cb3; - } - else if(dteam == 4 && c4 >= 0)//dcolor == COLOR_TEAM4 - 1) - { - dcount = c4; - dbotcount = cb4; - } - else - { - sprint(self, "Cannot change to an invalid team\n"); + // find out what teams are available + //CheckAllowedTeams(); + // count how many players on each team + GetTeamCounts(world); - return; - } + // get desired team + if(dteam == 1 && c1 >= 0)//dcolor == COLOR_TEAM1 - 1) + { + dcount = c1; + dbotcount = cb1; + } + else if(dteam == 2 && c2 >= 0)//dcolor == COLOR_TEAM2 - 1) + { + dcount = c2; + dbotcount = cb2; + } + else if(dteam == 3 && c3 >= 0)//dcolor == COLOR_TEAM3 - 1) + { + dcount = c3; + dbotcount = cb3; + } + else if(dteam == 4 && c4 >= 0)//dcolor == COLOR_TEAM4 - 1) + { + dcount = c4; + dbotcount = cb4; + } + else + { + sprint(self, "Cannot change to an invalid team\n"); - // get starting team - if(steam == 1)//scolor == COLOR_TEAM1 - 1) - scount = c1; - else if(steam == 2)//scolor == COLOR_TEAM2 - 1) - scount = c2; - else if(steam == 3)//scolor == COLOR_TEAM3 - 1) - scount = c3; - else if(steam == 4)//scolor == COLOR_TEAM4 - 1) - scount = c4; - - if(scount) // started at a valid, nonempty team + return; + } + + // get starting team + if(steam == 1)//scolor == COLOR_TEAM1 - 1) + scount = c1; + else if(steam == 2)//scolor == COLOR_TEAM2 - 1) + scount = c2; + else if(steam == 3)//scolor == COLOR_TEAM3 - 1) + scount = c3; + else if(steam == 4)//scolor == COLOR_TEAM4 - 1) + scount = c4; + + if(scount) // started at a valid, nonempty team + { + // check if we're trying to change to a larger team that doens't have bots to swap with + if(dcount >= scount && dbotcount <= 0) { - // check if we're trying to change to a larger team that doens't have bots to swap with - if(dcount >= scount && dbotcount <= 0) - { - sprint(self, "Cannot change to a larger team\n"); - return; // can't change to a larger team - } + sprint(self, "Cannot change to a larger team\n"); + return; // can't change to a larger team } } } // bprint("allow change teams from ", ftos(steam), " to ", ftos(dteam), "\n"); - if(teams_matter && self.classname == "player" && steam != dteam) + if(self.classname == "player" && steam != dteam) { // reduce frags during a team change TeamchangeFrags(self); @@ -1022,7 +1025,7 @@ void SV_ChangeTeam(float _color) SetPlayerTeam(self, dteam, steam, FALSE); - if(teams_matter && self.classname == "player" && steam != dteam) + if(self.classname == "player" && steam != dteam) { // kill player when changing teams if(self.deadflag == DEAD_NO) -- 2.39.2