#include "teamplay.qh"
#include "client.qh"
+#include <server/gamelog.qh>
+#include <server/damage.qh>
#include "race.qh"
#include "scores.qh"
#include "scores_rules.qh"
{
// This is important when players join the game and one of their
// color matches the team color while other doesn't. For example
- // [BOT]Lion.
+ // [BOT]Lion: color 0 4.
SetPlayerColors(player, new_team - 1);
}
return true;
}
else
{
- if (!CS(this).just_joined)
+ if (!CS(player).just_joined)
{
Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_SPECTATE,
player.netname);
}
- else
- {
- CS(this).just_joined = false;
- }
}
KillPlayerForTeamChange(player);
if (!IS_BOT_CLIENT(player))
TeamBalance_AutoBalanceBots();
}
}
+ else if (team_index == -1)
+ {
+ if (!CS(player).just_joined && player.frags != FRAGS_SPECTATOR)
+ Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_SPECTATE, player.netname);
+ }
return true;
}
team_ent.m_num_bots = 0;
}
setthink(balance, TeamBalance_Destroy);
-
- int teams_mask = 0;
+ balance.nextthink = time;
+
+ int teams_mask = 0;
string teament_name = string_null;
bool mutator_returnvalue = MUTATOR_CALLHOOK(TeamBalance_CheckAllowedTeams,
teams_mask, teament_name, for_whom);
}
// TODO: Balance quantity of bots across > 2 teams when bot_vs_human is set (and remove next line)
- if (AvailableTeams() == 2)
- if (autocvar_bot_vs_human && for_whom)
+ if (autocvar_bot_vs_human && AvailableTeams() == 2 && for_whom)
{
if (autocvar_bot_vs_human > 0)
{
TeamBalance_IsTeamAllowedInternal(balance, i))
{
TeamBalance_BanTeamsExcept(balance, i);
+ break;
}
- break;
}
balance.m_team_balance_state = TEAM_BALANCE_TEAMS_CHECKED;
return balance;
void TeamBalance_AutoBalanceBots()
{
- if (!autocvar_g_balance_teams ||
- !autocvar_g_balance_teams_prevent_imbalance)
- {
- return;
- }
- //PrintToChatAll("TeamBalance_AutoBalanceBots");
+ // checks disabled because we always want auto-balanced bots
+ //if (!(autocvar_g_balance_teams && autocvar_g_balance_teams_prevent_imbalance))
+ // return;
+
entity balance = TeamBalance_CheckAllowedTeams(NULL);
TeamBalance_GetTeamCounts(balance, NULL);
int smallest_team_index = 0;
{
continue;
}
- int player_count = TeamBalanceTeam_GetNumberOfPlayers(team_);
+ int playercount = TeamBalanceTeam_GetNumberOfPlayers(team_);
if (smallest_team_index == 0)
{
smallest_team_index = i;
- smallest_team_player_count = player_count;
+ smallest_team_player_count = playercount;
}
- else if (player_count < smallest_team_player_count)
+ else if (playercount < smallest_team_player_count)
{
smallest_team_index = i;
- smallest_team_player_count = player_count;
+ smallest_team_player_count = playercount;
}
}
//PrintToChatAll(sprintf("Smallest team: %f", smallest_team_index));
{
continue;
}
- int player_count = TeamBalanceTeam_GetNumberOfPlayers(team_);
+ int playercount = TeamBalanceTeam_GetNumberOfPlayers(team_);
if (largest_team_index == 0)
{
largest_team_index = i;
- largest_team_player_count = player_count;
+ largest_team_player_count = playercount;
}
- else if (player_count > largest_team_player_count)
+ else if (playercount > largest_team_player_count)
{
largest_team_index = i;
- largest_team_player_count = player_count;
+ largest_team_player_count = playercount;
}
}
return largest_team_index;
{
return;
}
- GameLogEcho(sprintf(":team:%f:%f:%f", player_id, team_number, type));
+ GameLogEcho(sprintf(":team:%d:%d:%d", player_id, team_number, type));
}
void KillPlayerForTeamChange(entity player)