From 47f405e1607f341d6883b4f1e613fb3adab93db6 Mon Sep 17 00:00:00 2001 From: Learath Date: Wed, 12 Apr 2017 10:33:02 +0200 Subject: [PATCH] Remove tees that don't belong --- src/game/server/score/sql_score.cpp | 45 ++++++++++++++++++----------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/game/server/score/sql_score.cpp b/src/game/server/score/sql_score.cpp index a0270f584..8e309dce5 100644 --- a/src/game/server/score/sql_score.cpp +++ b/src/game/server/score/sql_score.cpp @@ -1525,29 +1525,40 @@ bool CSqlScore::LoadTeamThread(CSqlServer* pSqlServer, const CSqlData *pGameData } int TeamCount = pController->m_Teams.Count(Team); - if(TeamCount != SavedTeam.GetMembersCount()) + if(TeamCount < SavedTeam.GetMembersCount()) // Not enough { - pData->GameServer()->SendChatTarget(pData->m_ClientID, "All saved tees must be present to load."); // Also list the missing tees I guess + pData->GameServer()->SendChatTarget(pData->m_ClientID, "All saved tees must be present to load"); // Also list the missing tees I guess goto end; } - int64_t TeamMask = pController->m_Teams.TeamMask(Team); - - int Found = 0; - for(int i = 0; i < SavedTeam.GetMembersCount(); i++) { - int CID = pData->Server()->GetClientID(SavedTeam.SavedTees[i]); - if(CID >= 0 && pController->m_Teams.m_Core.Team(CID) == Team) - Found++; - else - break; - } - if(Found != SavedTeam.GetMembersCount()) - { - pData->GameServer()->SendChatTarget(pData->m_ClientID, "All saved tees must be present to load."); // Also list the missing tees I guess - goto end; - } + int Found = 0; + bool Removed = false; + for (int i = 0; i < MAX_CLIENTS; ++i) + { + if(pController->m_Teams.m_Core.Team(i) == Team) + { + bool Allowed = false; + for(int j = 0; !Allowed && j < SavedTeam.GetMembersCount(); i++) + if(!str_comp(pData->Server()->ClientName(i), SavedTeam.SavedTees[j])) + Allowed = true; + if(!Allowed) + pController->m_Teams.SetForceCharacterTeam(i, TEAM_FLOCK); + + Found += Allowed; + Removed |= !Allowed; + } + } + if(Found != SavedTeam.GetMembersCount()) + { + pData->GameServer()->SendChatTarget(pData->m_ClientID, "All saved tees must be present to load"); // Also list the missing tees I guess + goto end; + } + if(Removed) + pData->GameServer()->SendChatTarget(pData->m_ClientID, "Tees that don't belong to the save have been removed"); + } + if(!SavedTeam.load(Team)) { pData->GameServer()->SendChatTeam(Team, "Loading successfully done");