From cc5082d6abb23b219cae238ba35cef05be08848a Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 23 Jun 2016 19:57:33 +1000 Subject: [PATCH] Use a bitflag to count how many teams are available (allows support for some strange maps) --- .../gamemodes/gamemode/nexball/nexball.qc | 14 +++++---- .../gamemodes/gamemode/onslaught/onslaught.qc | 7 ++++- .../mutators/mutator/gamemode_assault.qc | 6 +++- qcsrc/server/mutators/mutator/gamemode_ca.qc | 16 +++++++--- qcsrc/server/mutators/mutator/gamemode_ctf.qc | 30 ++++++++++++------- .../mutators/mutator/gamemode_domination.qc | 11 +++++-- .../mutators/mutator/gamemode_freezetag.qc | 16 +++++++--- .../mutators/mutator/gamemode_invasion.qc | 11 ++++++- .../mutators/mutator/gamemode_keyhunt.qc | 10 ++++++- .../server/mutators/mutator/gamemode_race.qc | 8 +++++ qcsrc/server/mutators/mutator/gamemode_tdm.qc | 10 ++++++- qcsrc/server/scores.qc | 10 +++---- qcsrc/server/scores_rules.qc | 16 ++++++++-- qcsrc/server/scores_rules.qh | 3 +- qcsrc/server/teamplay.qc | 10 +++---- 15 files changed, 133 insertions(+), 45 deletions(-) diff --git a/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc b/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc index 46b4e0345..d06c48a44 100644 --- a/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc +++ b/qcsrc/common/gamemodes/gamemode/nexball/nexball.qc @@ -72,7 +72,7 @@ float OtherTeam(float t) //works only if there are two teams on the map! const float ST_NEXBALL_GOALS = 1; const float SP_NEXBALL_GOALS = 4; const float SP_NEXBALL_FAULTS = 5; -void nb_ScoreRules(float teams) +void nb_ScoreRules(int teams) { ScoreRules_basics(teams, 0, 0, true); ScoreInfo_SetLabel_TeamScore( ST_NEXBALL_GOALS, "goals", SFL_SORT_PRIO_PRIMARY); @@ -376,7 +376,7 @@ void GoalTouch(entity this) EXACTTRIGGER_TOUCH; - if(nb_teams == 2) + if(NumTeams(nb_teams) == 2) otherteam = OtherTeam(ball.team); else otherteam = 0; @@ -395,7 +395,7 @@ void GoalTouch(entity this) else if(this.team == GOAL_FAULT) { LogNB("fault", ball.pusher); - if(nb_teams == 2) + if(NumTeams(nb_teams) == 2) bprint(Team_ColoredFullName(otherteam), " gets a point due to ", pname, "^7's silliness.\n"); else bprint(Team_ColoredFullName(ball.team), " loses a point due to ", pname, "^7's silliness.\n"); @@ -421,7 +421,7 @@ void GoalTouch(entity this) if(ball.team && pscore) { - if(nb_teams == 2 && pscore < 0) + if(NumTeams(nb_teams) == 2 && pscore < 0) TeamScore_AddToTeam(otherteam, ST_NEXBALL_GOALS, -pscore); else TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore); @@ -466,7 +466,7 @@ void nb_spawnteam(string teamname, float teamcolor) e.netname = teamname; e.cnt = teamcolor; e.team = e.cnt + 1; - nb_teams += 1; + //nb_teams += 1; } void nb_spawnteams() @@ -481,6 +481,7 @@ void nb_spawnteams() if(!t_red) { nb_spawnteam("Red", e.team-1) ; + nb_teams |= BIT(0); t_red = true; } break; @@ -489,6 +490,7 @@ void nb_spawnteams() { nb_spawnteam("Blue", e.team-1) ; t_blue = true; + nb_teams |= BIT(1); } break; case NUM_TEAM_3: @@ -496,6 +498,7 @@ void nb_spawnteams() { nb_spawnteam("Yellow", e.team-1); t_yellow = true; + nb_teams |= BIT(2); } break; case NUM_TEAM_4: @@ -503,6 +506,7 @@ void nb_spawnteams() { nb_spawnteam("Pink", e.team-1) ; t_pink = true; + nb_teams |= BIT(3); } break; } diff --git a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc index 9a30445ac..a62b63942 100644 --- a/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc +++ b/qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qc @@ -2251,7 +2251,12 @@ spawnfunc(onslaught_generator) void ons_ScoreRules() { CheckAllowedTeams(NULL); - ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, 0, true); + int teams = 0; + if(c1 >= 0) teams |= BIT(0); + if(c2 >= 0) teams |= BIT(1); + if(c3 >= 0) teams |= BIT(2); + if(c4 >= 0) teams |= BIT(3); + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, 0, true); ScoreInfo_SetLabel_TeamScore (ST_ONS_CAPS, "destroyed", SFL_SORT_PRIO_PRIMARY); ScoreInfo_SetLabel_PlayerScore(SP_ONS_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); ScoreInfo_SetLabel_PlayerScore(SP_ONS_TAKES, "takes", 0); diff --git a/qcsrc/server/mutators/mutator/gamemode_assault.qc b/qcsrc/server/mutators/mutator/gamemode_assault.qc index 20b3b54c0..6c6d74a02 100644 --- a/qcsrc/server/mutators/mutator/gamemode_assault.qc +++ b/qcsrc/server/mutators/mutator/gamemode_assault.qc @@ -683,7 +683,11 @@ MUTATOR_HOOKFUNCTION(as, OnEntityPreSpawn) // scoreboard setup void assault_ScoreRules() { - ScoreRules_basics(2, SFL_SORT_PRIO_SECONDARY, SFL_SORT_PRIO_SECONDARY, true); + int teams = 0; + teams |= BIT(0); + teams |= BIT(1); // always red vs blue + + ScoreRules_basics(teams, SFL_SORT_PRIO_SECONDARY, SFL_SORT_PRIO_SECONDARY, true); ScoreInfo_SetLabel_TeamScore( ST_ASSAULT_OBJECTIVES, "objectives", SFL_SORT_PRIO_PRIMARY); ScoreInfo_SetLabel_PlayerScore(SP_ASSAULT_OBJECTIVES, "objectives", SFL_SORT_PRIO_PRIMARY); ScoreRules_basics_end(); diff --git a/qcsrc/server/mutators/mutator/gamemode_ca.qc b/qcsrc/server/mutators/mutator/gamemode_ca.qc index 2a8da29c2..1d6f78884 100644 --- a/qcsrc/server/mutators/mutator/gamemode_ca.qc +++ b/qcsrc/server/mutators/mutator/gamemode_ca.qc @@ -36,7 +36,15 @@ REGISTER_MUTATOR(ca, false) if (ca_teams < 2) ca_teams = autocvar_g_ca_teams; ca_teams = bound(2, ca_teams, 4); - ScoreRules_basics(ca_teams, SFL_SORT_PRIO_PRIMARY, 0, true); + int teams = 0; + if(ca_teams >= 1) teams |= BIT(0); + if(ca_teams >= 2) teams |= BIT(1); + if(ca_teams >= 3) teams |= BIT(2); + if(ca_teams >= 4) teams |= BIT(3); + + ca_teams = teams; // now set it? + + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, 0, true); ScoreInfo_SetLabel_TeamScore(ST_CA_ROUNDS, "rounds", SFL_SORT_PRIO_PRIMARY); ScoreRules_basics_end(); @@ -117,7 +125,7 @@ float CA_GetWinnerTeam() void nades_Clear(entity player); #define CA_ALIVE_TEAMS() ((redalive > 0) + (bluealive > 0) + (yellowalive > 0) + (pinkalive > 0)) -#define CA_ALIVE_TEAMS_OK() (CA_ALIVE_TEAMS() == ca_teams) +#define CA_ALIVE_TEAMS_OK() (CA_ALIVE_TEAMS() == NumTeams(ca_teams)) float CA_CheckWinner() { if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0) @@ -180,8 +188,8 @@ bool CA_CheckTeams() return false; } int missing_teams_mask = (!redalive) + (!bluealive) * 2; - if(ca_teams >= 3) missing_teams_mask += (!yellowalive) * 4; - if(ca_teams >= 4) missing_teams_mask += (!pinkalive) * 8; + if(NumTeams(ca_teams) >= 3) missing_teams_mask += (!yellowalive) * 4; + if(NumTeams(ca_teams) >= 4) missing_teams_mask += (!pinkalive) * 8; if(prev_missing_teams_mask != missing_teams_mask) { Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_MISSING_TEAMS, missing_teams_mask); diff --git a/qcsrc/server/mutators/mutator/gamemode_ctf.qc b/qcsrc/server/mutators/mutator/gamemode_ctf.qc index a184e68df..b9e1dcde6 100644 --- a/qcsrc/server/mutators/mutator/gamemode_ctf.qc +++ b/qcsrc/server/mutators/mutator/gamemode_ctf.qc @@ -2383,8 +2383,8 @@ MUTATOR_HOOKFUNCTION(ctf, SV_ParseClientCommand) { case "red": _team = NUM_TEAM_1; break; case "blue": _team = NUM_TEAM_2; break; - case "yellow": if(ctf_teams >= 3) _team = NUM_TEAM_3; break; - case "pink": if(ctf_teams >= 4) _team = NUM_TEAM_4; break; + case "yellow": if(NumTeams(ctf_teams) >= 3) _team = NUM_TEAM_3; break; + case "pink": if(NumTeams(ctf_teams) >= 4) _team = NUM_TEAM_4; break; } } @@ -2567,27 +2567,37 @@ void ctf_SpawnTeam (string teamname, int teamcolor) void ctf_DelayedInit(entity this) // Do this check with a delay so we can wait for teams to be set up. { - ctf_teams = 2; + ctf_teams = 0; entity tmp_entity; for(tmp_entity = ctf_worldflaglist; tmp_entity; tmp_entity = tmp_entity.ctf_worldflagnext) { - if(tmp_entity.team == NUM_TEAM_3) { ctf_teams = max(3, ctf_teams); } - if(tmp_entity.team == NUM_TEAM_4) { ctf_teams = max(4, ctf_teams); } + //if(tmp_entity.team == NUM_TEAM_3) { ctf_teams = max(3, ctf_teams); } + //if(tmp_entity.team == NUM_TEAM_4) { ctf_teams = max(4, ctf_teams); } + + switch(tmp_entity.team) + { + case NUM_TEAM_1: ctf_teams |= BIT(0); break; + case NUM_TEAM_2: ctf_teams |= BIT(1); break; + case NUM_TEAM_3: ctf_teams |= BIT(2); break; + case NUM_TEAM_4: ctf_teams |= BIT(3); break; + } if(tmp_entity.team == 0) { ctf_oneflag = true; } } - ctf_teams = bound(2, ctf_teams, 4); + //ctf_teams = bound(2, ctf_teams, 4); // if no teams are found, spawn defaults if(find(NULL, classname, "ctf_team") == NULL) { LOG_TRACE("No \"ctf_team\" entities found on this map, creating them anyway.\n"); - ctf_SpawnTeam("Red", NUM_TEAM_1); - ctf_SpawnTeam("Blue", NUM_TEAM_2); - if(ctf_teams >= 3) + if(ctf_teams & BIT(0)) + ctf_SpawnTeam("Red", NUM_TEAM_1); + if(ctf_teams & BIT(1)) + ctf_SpawnTeam("Blue", NUM_TEAM_2); + if(ctf_teams & BIT(2)) ctf_SpawnTeam("Yellow", NUM_TEAM_3); - if(ctf_teams >= 4) + if(ctf_teams & BIT(3)) ctf_SpawnTeam("Pink", NUM_TEAM_4); } diff --git a/qcsrc/server/mutators/mutator/gamemode_domination.qc b/qcsrc/server/mutators/mutator/gamemode_domination.qc index 6bbbaee99..1a67e3aae 100644 --- a/qcsrc/server/mutators/mutator/gamemode_domination.qc +++ b/qcsrc/server/mutators/mutator/gamemode_domination.qc @@ -600,7 +600,7 @@ spawnfunc(dom_team) } // scoreboard setup -void ScoreRules_dom(float teams) +void ScoreRules_dom(int teams) { if(domination_roundbased) { @@ -684,7 +684,14 @@ void dom_DelayedInit(entity this) // Do this check with a delay so we can wait f } CheckAllowedTeams(NULL); - domination_teams = ((c4>=0) ? 4 : (c3>=0) ? 3 : 2); + //domination_teams = ((c4>=0) ? 4 : (c3>=0) ? 3 : 2); + + int teams = 0; + if(c1 >= 0) teams |= BIT(0); + if(c2 >= 0) teams |= BIT(1); + if(c3 >= 0) teams |= BIT(2); + if(c4 >= 0) teams |= BIT(3); + domination_teams = teams; domination_roundbased = autocvar_g_domination_roundbased; diff --git a/qcsrc/server/mutators/mutator/gamemode_freezetag.qc b/qcsrc/server/mutators/mutator/gamemode_freezetag.qc index 4f8f0fde7..25fe34336 100644 --- a/qcsrc/server/mutators/mutator/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/mutator/gamemode_freezetag.qc @@ -62,7 +62,7 @@ int autocvar_g_freezetag_teams_override; float autocvar_g_freezetag_warmup; const float SP_FREEZETAG_REVIVALS = 4; -void freezetag_ScoreRules(float teams) +void freezetag_ScoreRules(int teams) { ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); // SFL_SORT_PRIO_PRIMARY ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS, "revivals", 0); @@ -91,7 +91,7 @@ void freezetag_count_alive_players() eliminatedPlayers.SendFlags |= 1; } #define FREEZETAG_ALIVE_TEAMS() ((redalive > 0) + (bluealive > 0) + (yellowalive > 0) + (pinkalive > 0)) -#define FREEZETAG_ALIVE_TEAMS_OK() (FREEZETAG_ALIVE_TEAMS() == freezetag_teams) +#define FREEZETAG_ALIVE_TEAMS_OK() (FREEZETAG_ALIVE_TEAMS() == NumTeams(freezetag_teams)) float freezetag_CheckTeams() { @@ -111,8 +111,8 @@ float freezetag_CheckTeams() return 0; } float missing_teams_mask = (!redalive) + (!bluealive) * 2; - if(freezetag_teams >= 3) missing_teams_mask += (!yellowalive) * 4; - if(freezetag_teams >= 4) missing_teams_mask += (!pinkalive) * 8; + if(NumTeams(freezetag_teams) >= 3) missing_teams_mask += (!yellowalive) * 4; + if(NumTeams(freezetag_teams) >= 4) missing_teams_mask += (!pinkalive) * 8; if(prev_missing_teams_mask != missing_teams_mask) { Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_MISSING_TEAMS, missing_teams_mask); @@ -617,6 +617,14 @@ void freezetag_Initialize() if(freezetag_teams < 2) freezetag_teams = autocvar_g_freezetag_teams; freezetag_teams = bound(2, freezetag_teams, 4); + + int teams = 0; + if(freezetag_teams >= 1) teams |= BIT(0); + if(freezetag_teams >= 2) teams |= BIT(1); + if(freezetag_teams >= 3) teams |= BIT(2); + if(freezetag_teams >= 4) teams |= BIT(3); + + freezetag_teams = teams; // now set it? freezetag_ScoreRules(freezetag_teams); round_handler_Spawn(freezetag_CheckTeams, freezetag_CheckWinner, func_null); diff --git a/qcsrc/server/mutators/mutator/gamemode_invasion.qc b/qcsrc/server/mutators/mutator/gamemode_invasion.qc index 9d31506e6..de1aa5a2d 100644 --- a/qcsrc/server/mutators/mutator/gamemode_invasion.qc +++ b/qcsrc/server/mutators/mutator/gamemode_invasion.qc @@ -479,7 +479,7 @@ MUTATOR_HOOKFUNCTION(inv, AllowMobButcher) return true; } -void invasion_ScoreRules(float inv_teams) +void invasion_ScoreRules(int inv_teams) { if(inv_teams) { CheckAllowedTeams(NULL); } ScoreRules_basics(inv_teams, 0, 0, false); @@ -491,7 +491,16 @@ void invasion_ScoreRules(float inv_teams) void invasion_DelayedInit(entity this) // Do this check with a delay so we can wait for teams to be set up. { if(autocvar_g_invasion_teams) + { invasion_teams = bound(2, autocvar_g_invasion_teams, 4); + int teams = 0; + if(invasion_teams >= 1) teams |= BIT(0); + if(invasion_teams >= 2) teams |= BIT(1); + if(invasion_teams >= 3) teams |= BIT(2); + if(invasion_teams >= 4) teams |= BIT(3); + + invasion_teams = teams; // now set it? + } else invasion_teams = 0; diff --git a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc index 448a2bbc7..759831d39 100644 --- a/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc +++ b/qcsrc/server/mutators/mutator/gamemode_keyhunt.qc @@ -144,7 +144,7 @@ const float SP_KH_DESTROYS = 6; const float SP_KH_PICKUPS = 7; const float SP_KH_KCKILLS = 8; const float SP_KH_LOSSES = 9; -void kh_ScoreRules(float teams) +void kh_ScoreRules(int teams) { ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); ScoreInfo_SetLabel_TeamScore( ST_KH_CAPS, "caps", SFL_SORT_PRIO_SECONDARY); @@ -1056,6 +1056,14 @@ void kh_Initialize() // sets up th KH environment kh_teams = autocvar_g_keyhunt_teams; kh_teams = bound(2, kh_teams, 4); + int teams = 0; + if(kh_teams >= 1) teams |= BIT(0); + if(kh_teams >= 2) teams |= BIT(1); + if(kh_teams >= 3) teams |= BIT(2); + if(kh_teams >= 4) teams |= BIT(3); + + kh_teams = teams; // now set it? + // make a KH entity for controlling the game kh_controller = spawn(); setthink(kh_controller, kh_Controller_Think); diff --git a/qcsrc/server/mutators/mutator/gamemode_race.qc b/qcsrc/server/mutators/mutator/gamemode_race.qc index 132eba162..3db96f754 100644 --- a/qcsrc/server/mutators/mutator/gamemode_race.qc +++ b/qcsrc/server/mutators/mutator/gamemode_race.qc @@ -463,6 +463,14 @@ void rc_SetLimits() { ActivateTeamplay(); race_teams = bound(2, autocvar_g_race_teams, 4); + int teams = 0; + if(race_teams >= 1) teams |= BIT(0); + if(race_teams >= 2) teams |= BIT(1); + if(race_teams >= 3) teams |= BIT(2); + if(race_teams >= 4) teams |= BIT(3); + + race_teams = teams; // now set it? + have_team_spawns = -1; // request team spawns } else diff --git a/qcsrc/server/mutators/mutator/gamemode_tdm.qc b/qcsrc/server/mutators/mutator/gamemode_tdm.qc index 787412908..7b1644c6a 100644 --- a/qcsrc/server/mutators/mutator/gamemode_tdm.qc +++ b/qcsrc/server/mutators/mutator/gamemode_tdm.qc @@ -79,8 +79,16 @@ void tdm_DelayedInit(entity this) if(numteams < 2) { numteams = autocvar_g_tdm_teams; } numteams = bound(2, numteams, 4); + int teams = 0; + if(numteams >= 1) teams |= BIT(0); + if(numteams >= 2) teams |= BIT(1); + if(numteams >= 3) teams |= BIT(2); + if(numteams >= 4) teams |= BIT(3); + + //numteams = teams; // now set it? + float i; - for(i = 1; i <= numteams; ++i) + for(i = 1; i <= numteams && (teams & BIT(numteams)); ++i) tdm_SpawnTeam(Team_ColorName(Team_NumberToTeam(i)), Team_NumberToTeam(i) - 1); } } diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index aa108dd98..89815b71b 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -203,7 +203,7 @@ bool ScoreInfo_SendEntity(entity this, entity to, int sf) return true; } -void ScoreInfo_Init(float teams) +void ScoreInfo_Init(int teams) { if(scores_initialized) { @@ -214,13 +214,13 @@ void ScoreInfo_Init(float teams) scores_initialized = new_pure(ent_client_scoreinfo); Net_LinkEntity(scores_initialized, false, 0, ScoreInfo_SendEntity); } - if(teams >= 1) + if(teams & BIT(0)) TeamScore_Spawn(NUM_TEAM_1, "Red"); - if(teams >= 2) + if(teams & BIT(1)) TeamScore_Spawn(NUM_TEAM_2, "Blue"); - if(teams >= 3) + if(teams & BIT(2)) TeamScore_Spawn(NUM_TEAM_3, "Yellow"); - if(teams >= 4) + if(teams & BIT(3)) TeamScore_Spawn(NUM_TEAM_4, "Pink"); } diff --git a/qcsrc/server/scores_rules.qc b/qcsrc/server/scores_rules.qc index 72eeb9a1c..b6846934f 100644 --- a/qcsrc/server/scores_rules.qc +++ b/qcsrc/server/scores_rules.qc @@ -5,10 +5,15 @@ void CheckAllowedTeams (entity for_whom); +int NumTeams(int teams) +{ + return (teams & BIT(0)) + (teams & BIT(1)) + (teams & BIT(2)) + (teams & BIT(3)); +} + // NOTE: SP_ constants may not be >= MAX_SCORE; ST_constants may not be >= MAX_TEAMSCORE // scores that should be in all modes: -float ScoreRules_teams; -void ScoreRules_basics(float teams, float sprio, float stprio, float score_enabled) +int ScoreRules_teams; +void ScoreRules_basics(int teams, float sprio, float stprio, float score_enabled) { float i; for(i = 0; i < MAX_SCORE; ++i) @@ -44,7 +49,12 @@ void ScoreRules_generic() if(teamplay) { CheckAllowedTeams(NULL); - ScoreRules_basics(((c4>=0) ? 4 : (c3>=0) ? 3 : 2), SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); + int teams = 0; + if(c1 >= 0) teams |= BIT(0); + if(c2 >= 0) teams |= BIT(1); + if(c3 >= 0) teams |= BIT(2); + if(c4 >= 0) teams |= BIT(3); + ScoreRules_basics(teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); } else ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, true); diff --git a/qcsrc/server/scores_rules.qh b/qcsrc/server/scores_rules.qh index 1d2646bb8..451d3f603 100644 --- a/qcsrc/server/scores_rules.qh +++ b/qcsrc/server/scores_rules.qh @@ -1,5 +1,6 @@ #pragma once -void ScoreRules_basics(float teams, float sprio, float stprio, float score_enabled); +int NumTeams(int teams); +void ScoreRules_basics(int teams, float sprio, float stprio, float score_enabled); void ScoreRules_basics_end(); void ScoreRules_generic(); diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 3dda784eb..742b9ef6d 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -219,12 +219,10 @@ void CheckAllowedTeams (entity for_whom) if(!mutator_returnvalue) { - if(dm >= 4) - c1 = c2 = c3 = c4 = 0; - else if(dm >= 3) - c1 = c2 = c3 = 0; - else - c1 = c2 = 0; + if(dm & BIT(0)) c1 = 0; + if(dm & BIT(1)) c2 = 0; + if(dm & BIT(2)) c3 = 0; + if(dm & BIT(3)) c4 = 0; } // find out what teams are allowed if necessary -- 2.39.2