void IGameController::DoTeamChange(CPlayer *pPlayer, int Team, bool DoChatMsg) { Team = ClampTeam(Team); if(Team == pPlayer->GetTeam()) return; int OldTeam = pPlayer->GetTeam(); pPlayer->SetTeam(Team); int ClientID = pPlayer->GetCID(); // notify clients CNetMsg_Sv_Team Msg; Msg.m_ClientID = ClientID; Msg.m_Team = Team; Msg.m_Silent = DoChatMsg ? 0 : 1; Msg.m_CooldownTick = pPlayer->m_TeamChangeTick; Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, -1); char aBuf[128]; str_format(aBuf, sizeof(aBuf), "team_join player='%d:%s' m_Team=%d", ClientID, Server()->ClientName(ClientID), Team); GameServer()->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "game", aBuf); // update effected game settings if(OldTeam != TEAM_SPECTATORS) { --m_aTeamSize[OldTeam]; m_UnbalancedTick = TBALANCE_CHECK; } if(Team != TEAM_SPECTATORS) { ++m_aTeamSize[Team]; m_UnbalancedTick = TBALANCE_CHECK; if(m_GameState == IGS_WARMUP_GAME && HasEnoughPlayers()) SetGameState(IGS_WARMUP_GAME, 0); pPlayer->m_IsReadyToPlay = !IsPlayerReadyMode(); if(m_GameFlags&GAMEFLAG_SURVIVAL) pPlayer->m_RespawnDisabled = GetStartRespawnState(); } OnPlayerInfoChange(pPlayer); GameServer()->OnClientTeamChange(ClientID); }
void IGameController::DoTeamChange(CPlayer *pPlayer, int Team, bool DoChatMsg) { Team = ClampTeam(Team); if(Team == pPlayer->GetTeam()) return; int OldTeam = pPlayer->GetTeam(); pPlayer->SetTeam(Team); int ClientID = pPlayer->GetCID(); char aBuf[128]; if(DoChatMsg) { str_format(aBuf, sizeof(aBuf), "'%s' joined the %s", Server()->ClientName(ClientID), GetTeamName(Team)); GameServer()->SendChat(-1, CGameContext::CHAT_ALL, aBuf); } str_format(aBuf, sizeof(aBuf), "team_join player='%d:%s' m_Team=%d", ClientID, Server()->ClientName(ClientID), Team); GameServer()->Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "game", aBuf); // update effected game settings if(OldTeam != TEAM_SPECTATORS) { --m_aTeamSize[OldTeam]; m_UnbalancedTick = TBALANCE_CHECK; } if(Team != TEAM_SPECTATORS) { ++m_aTeamSize[Team]; m_UnbalancedTick = TBALANCE_CHECK; if(m_GameState == IGS_WARMUP_GAME && HasEnoughPlayers()) SetGameState(IGS_WARMUP_GAME, 0); pPlayer->m_IsReadyToPlay = !IsPlayerReadyMode(); if(m_GameFlags&GAMEFLAG_SURVIVAL) pPlayer->m_RespawnDisabled = GetStartRespawnState(); } OnPlayerInfoChange(pPlayer); GameServer()->OnClientTeamChange(ClientID); }