diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 01856a790..c2d279f7b 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -74,12 +74,13 @@ Battlefield::~Battlefield() CapturePoints.clear(); } -void Battlefield::RemovePlayerFromTracking(ObjectGuid playerGuid) +void Battlefield::RemovePlayerFromTracking(ObjectGuid playerGuid, bool removeFromQueue /*= true*/) { for (uint8 i = 0; i < PVP_TEAMS_COUNT; ++i) { InvitedPlayers[i].erase(playerGuid); - PlayersInQueue[i].erase(playerGuid); + if (removeFromQueue) + PlayersInQueue[i].erase(playerGuid); PlayersWillBeKick[i].erase(playerGuid); Players[i].erase(playerGuid); } @@ -152,7 +153,7 @@ void Battlefield::HandlePlayerLeaveZone(Player* player, uint32 /*zone*/) for (BfCapturePoint* cp : CapturePoints) cp->HandlePlayerLeave(player); - RemovePlayerFromTracking(player->GetGUID()); + RemovePlayerFromTracking(player->GetGUID(), /*removeFromQueue=*/false); SendRemoveWorldStates(player); RemovePlayerFromResurrectQueue(player->GetGUID()); OnPlayerLeaveZone(player); diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index c52d4207f..aba66db48 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -444,7 +444,7 @@ protected: /// Returns true if the player is already tracked as actively in the war or invited to join it. bool IsPlayerInWarOrInvited(Player* player) const; - void RemovePlayerFromTracking(ObjectGuid playerGuid); + void RemovePlayerFromTracking(ObjectGuid playerGuid, bool removeFromQueue = true); // Player-iteration helpers: resolve each GUID to a live Player* and call fn(player). // Using templates avoids std::function overhead and works naturally with lambdas.