Newly joined player should not immediately be subtracted from team 0

This commit is contained in:
def 2020-05-31 00:34:29 +02:00
parent d3b6df97f8
commit 88b65b6def
2 changed files with 24 additions and 15 deletions

View file

@ -269,6 +269,21 @@ void CGameTeams::SetForceCharacterTeam(int ClientID, int Team)
m_MembersCount[m_Core.Team(ClientID)]--; m_MembersCount[m_Core.Team(ClientID)]--;
} }
SetForceCharacterNewTeam(ClientID, Team);
if (OldTeam != Team)
{
for(int LoopClientID = 0; LoopClientID < MAX_CLIENTS; ++LoopClientID)
if(GetPlayer(LoopClientID))
SendTeamsState(LoopClientID);
if(GetPlayer(ClientID))
GetPlayer(ClientID)->m_VotedForPractice = false;
}
}
void CGameTeams::SetForceCharacterNewTeam(int ClientID, int Team)
{
m_Core.Team(ClientID, Team); m_Core.Team(ClientID, Team);
if (m_Core.Team(ClientID) != TEAM_SUPER) if (m_Core.Team(ClientID) != TEAM_SUPER)
@ -287,16 +302,6 @@ void CGameTeams::SetForceCharacterTeam(int ClientID, int Team)
} }
} }
} }
if (OldTeam != Team)
{
for(int LoopClientID = 0; LoopClientID < MAX_CLIENTS; ++LoopClientID)
if(GetPlayer(LoopClientID))
SendTeamsState(LoopClientID);
if(GetPlayer(ClientID))
GetPlayer(ClientID)->m_VotedForPractice = false;
}
} }
void CGameTeams::ForceLeaveTeam(int ClientID) void CGameTeams::ForceLeaveTeam(int ClientID)
@ -670,7 +675,10 @@ void CGameTeams::OnCharacterSpawn(int ClientID)
m_Core.SetSolo(ClientID, false); m_Core.SetSolo(ClientID, false);
if (m_Core.Team(ClientID) >= TEAM_SUPER || !m_TeamLocked[m_Core.Team(ClientID)]) if (m_Core.Team(ClientID) >= TEAM_SUPER || !m_TeamLocked[m_Core.Team(ClientID)])
SetForceCharacterTeam(ClientID, 0); // Important to only set a new team here, don't remove from an existing
// team since a newly joined player does by definition not have an old team
// to remove from. Doing so would destroy the count in m_MembersCount.
SetForceCharacterNewTeam(ClientID, 0);
} }
void CGameTeams::OnCharacterDeath(int ClientID, int Weapon) void CGameTeams::OnCharacterDeath(int ClientID, int Weapon)

View file

@ -65,13 +65,14 @@ public:
int Count(int Team) const; int Count(int Team) const;
//need to be very careful using this method //need to be very careful using this method. SERIOUSLY...
void SetForceCharacterTeam(int id, int Team); void SetForceCharacterTeam(int ClientID, int Team);
void ForceLeaveTeam(int id); void SetForceCharacterNewTeam(int ClientID, int Team);
void ForceLeaveTeam(int ClientID);
void Reset(); void Reset();
void SendTeamsState(int Cid); void SendTeamsState(int ClientID);
void SetTeamLock(int Team, bool Lock); void SetTeamLock(int Team, bool Lock);
void ResetInvited(int Team); void ResetInvited(int Team);
void SetClientInvited(int Team, int ClientID, bool Invited); void SetClientInvited(int Team, int ClientID, bool Invited);