accuracy_resend(this);
if (this.team < 0)
- JoinBestTeam(this, false, true);
+ JoinBestTeam(this, true);
entity spot = SelectSpawnPoint(this, false);
if (!spot) {
{
if(this.killindicator_teamchange == -1)
{
- JoinBestTeam( this, false, true );
+ JoinBestTeam( this, true );
}
else if(this.killindicator_teamchange == -2)
{
{
int id = this.playerid;
this.playerid = 0; // silent
- JoinBestTeam(this, false, false); // if the team number is valid, keep it
+ JoinBestTeam(this, false); // if the team number is valid, keep it
this.playerid = id;
}
if(!this.team_selected)
if(autocvar_g_campaign || autocvar_g_balance_teams)
- JoinBestTeam(this, false, true);
+ JoinBestTeam(this, true);
if(autocvar_g_campaign)
campaign_bots_may_start = true;
bool IsTeamSmallerThanTeam(int team_a, int team_b, entity player,
bool use_score)
{
+ if (!Team_IsValidNumber(team_a))
+ {
+ LOG_FATALF("IsTeamSmallerThanTeam: team_a is invalid: %f", team_a);
+ }
+ if (!Team_IsValidNumber(team_b))
+ {
+ LOG_FATALF("IsTeamSmallerThanTeam: team_b is invalid: %f", team_b);
+ }
if (team_a == team_b)
{
return false;
bool IsTeamEqualToTeam(int team_a, int team_b, entity player, bool use_score)
{
+ if (!Team_IsValidNumber(team_a))
+ {
+ LOG_FATALF("IsTeamEqualToTeam: team_a is invalid: %f", team_a);
+ }
+ if (!Team_IsValidNumber(team_b))
+ {
+ LOG_FATALF("IsTeamEqualToTeam: team_b is invalid: %f", team_b);
+ }
if (team_a == team_b)
{
return true;
return RandomSelection_chosen_float;
}
-int JoinBestTeam(entity this, bool only_return_best, bool force_best_team)
+void JoinBestTeam(entity this, bool force_best_team)
{
// don't join a team if we're not playing a team game
if (!teamplay)
{
- return 0;
+ return;
}
// find out what teams are available
CheckAllowedTeams(this);
- // if we don't care what team he ends up on, put him on whatever team he entered as.
- // if he's not on a valid team, then let other code put him on the smallest team
+ // if we don't care what team they ends up on, put them on whatever team they entered as.
+ // if they're not on a valid team, then let other code put them on the smallest team
if (!force_best_team)
{
int selected_team;
- if( c1 >= 0 && this.team == NUM_TEAM_1)
+ if ((c1 >= 0) && (this.team == NUM_TEAM_1))
+ {
selected_team = this.team;
- else if(c2 >= 0 && this.team == NUM_TEAM_2)
+ }
+ else if ((c2 >= 0) && (this.team == NUM_TEAM_2))
+ {
selected_team = this.team;
- else if(c3 >= 0 && this.team == NUM_TEAM_3)
+ }
+ else if ((c3 >= 0) && (this.team == NUM_TEAM_3))
+ {
selected_team = this.team;
- else if(c4 >= 0 && this.team == NUM_TEAM_4)
+ }
+ else if ((c4 >= 0) && (this.team == NUM_TEAM_4))
+ {
selected_team = this.team;
+ }
else
+ {
selected_team = -1;
+ }
if (selected_team > 0)
{
- if (!only_return_best)
- {
- SetPlayerTeamSimple(this, selected_team);
-
- // when JoinBestTeam is called by client.qc/ClientKill_Now_TeamChange the players team is -1 and thus skipped
- // when JoinBestTeam is called by client.qc/ClientConnect the player_id is 0 the log attempt is rejected
- LogTeamchange(this.playerid, this.team, 99);
- }
- return selected_team;
+ SetPlayerTeamSimple(this, selected_team);
+ LogTeamchange(this.playerid, this.team, 99);
+ return;
}
- // otherwise end up on the smallest team (handled below)
}
-
- int best_team = FindSmallestTeam(this, true);
- if (only_return_best || this.bot_forced_team)
+ // otherwise end up on the smallest team (handled below)
+ if (this.bot_forced_team)
{
- return best_team;
+ return;
}
+ int best_team = FindSmallestTeam(this, true);
best_team = Team_NumberToTeam(best_team);
if (best_team == -1)
{
TeamchangeFrags(this);
SetPlayerTeamSimple(this, best_team);
LogTeamchange(this.playerid, this.team, 2); // log auto join
- if (!IS_BOT_CLIENT(this))
+ if ((old_team != -1) && !IS_BOT_CLIENT(this))
{
AutoBalanceBots(old_team, Team_TeamToNumber(best_team));
}
KillPlayerForTeamChange(this);
- return best_team;
}
void SV_ChangeTeam(entity this, float _color)
void AutoBalanceBots(int source_team, int destination_team)
{
- if ((source_team == -1) || (destination_team == -1))
+ if (!Team_IsValidNumber(source_team))
+ {
+ LOG_WARNF("AutoBalanceBots: Source team is invalid: %f", source_team);
+ return;
+ }
+ if (!Team_IsValidNumber(destination_team))
{
+ LOG_WARNF("AutoBalanceBots: Destination team is invalid: %f",
+ destination_team);
return;
}
if (!autocvar_g_balance_teams ||