From 3319c3b140a0143d5db6d6ae46619bf5f5f4c9c7 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 10 Jun 2026 19:44:00 -0300 Subject: [PATCH] fix(Core/Battlefield): keep queued players in queue when leaving the zone (#26140) Co-authored-by: Claude Opus 4.8 --- src/server/game/Battlefield/Battlefield.cpp | 7 ++++--- src/server/game/Battlefield/Battlefield.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) 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.