From 2c2b77ac3ba4e48d44c4ff08a5f9344ad74fb24d Mon Sep 17 00:00:00 2001 From: def Date: Fri, 26 Sep 2014 03:42:49 +0200 Subject: [PATCH] Check whether team has finished once a player in the team kills --- src/game/server/teams.cpp | 46 +++++++++++++++++++++++---------------- src/game/server/teams.h | 1 + 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/game/server/teams.cpp b/src/game/server/teams.cpp index 147eb5602..ef9a1bf8e 100644 --- a/src/game/server/teams.cpp +++ b/src/game/server/teams.cpp @@ -110,32 +110,37 @@ void CGameTeams::OnCharacterFinish(int ClientID) else { m_TeeFinished[ClientID] = true; - if (TeamFinished(m_Core.Team(ClientID))) + + CheckTeamFinished(m_Core.Team(ClientID)); + } +} + +void CGameTeams::CheckTeamFinished(int Team) +{ + if (TeamFinished(Team)) + { + ChangeTeamState(Team, TEAMSTATE_FINISHED); //TODO: Make it better + //ChangeTeamState(Team, TEAMSTATE_OPEN); + + CPlayer *TeamPlayers[MAX_CLIENTS]; + unsigned int PlayersCount = 0; + + for (int i = 0; i < MAX_CLIENTS; ++i) { - ChangeTeamState(m_Core.Team(ClientID), TEAMSTATE_FINISHED); //TODO: Make it better - //ChangeTeamState(m_Core.Team(ClientID), TEAMSTATE_OPEN); - - CPlayer *TeamPlayers[MAX_CLIENTS]; - unsigned int PlayersCount = 0; - - for (int i = 0; i < MAX_CLIENTS; ++i) + if (Team == m_Core.Team(i)) { - if (m_Core.Team(ClientID) == m_Core.Team(i)) + CPlayer* pPlayer = GetPlayer(i); + if (pPlayer && pPlayer->IsPlaying()) { - CPlayer* pPlayer = GetPlayer(i); - if (pPlayer && pPlayer->IsPlaying()) - { - OnFinish(pPlayer); - m_TeeFinished[i] = false; + OnFinish(pPlayer); + m_TeeFinished[i] = false; - TeamPlayers[PlayersCount++] = pPlayer; - } + TeamPlayers[PlayersCount++] = pPlayer; } } - - OnTeamFinish(TeamPlayers, PlayersCount); - } + + OnTeamFinish(TeamPlayers, PlayersCount); } } @@ -599,7 +604,10 @@ void CGameTeams::OnCharacterDeath(int ClientID, int Weapon) bool Locked = TeamLocked(Team) && Weapon != WEAPON_GAME; if (!Locked) + { SetForceCharacterTeam(ClientID, 0); + CheckTeamFinished(Team); + } else { SetForceCharacterTeam(ClientID, Team); diff --git a/src/game/server/teams.h b/src/game/server/teams.h index eaac1d2fd..f99a37506 100644 --- a/src/game/server/teams.h +++ b/src/game/server/teams.h @@ -48,6 +48,7 @@ public: void OnCharacterSpawn(int ClientID); void OnCharacterDeath(int ClientID, int Weapon); + void CheckTeamFinished(int ClientID); bool SetCharacterTeam(int ClientID, int Team); void ChangeTeamState(int Team, int State);