From 61e99f9c444ef84daff059ed566e07ae4f211d6d Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 14 May 2026 09:58:16 -0300 Subject: [PATCH] fix(Core/Maps): fix pooled creature/GO respawn in instanced maps (#25826) Co-authored-by: Claude Sonnet 4.6 --- src/server/game/Maps/Map.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 324d19f13..7de49ba77 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2717,12 +2717,18 @@ void Map::ProcessRespawns() void Map::ProcessCreatureRespawn(ObjectGuid::LowType spawnId) { - // Pool members are handled entirely by PoolMgr - if (uint32 poolId = sPoolMgr->IsPartOfAPool(spawnId)) + // Pool members in non-instanced maps are handled entirely by PoolMgr. + // In instanced maps the pool system operates globally and Spawn1Object is + // a no-op for instanceable maps, so fall through to the normal per-instance + // respawn logic instead. + if (!Instanceable()) { - sPoolMgr->UpdatePool(poolId, spawnId); - RemoveCreatureRespawnTime(spawnId); - return; + if (uint32 poolId = sPoolMgr->IsPartOfAPool(spawnId)) + { + sPoolMgr->UpdatePool(poolId, spawnId); + RemoveCreatureRespawnTime(spawnId); + return; + } } CreatureData const* data = sObjectMgr->GetCreatureData(spawnId); @@ -2778,12 +2784,16 @@ void Map::ProcessCreatureRespawn(ObjectGuid::LowType spawnId) void Map::ProcessGameObjectRespawn(ObjectGuid::LowType spawnId) { - // Pool members are handled entirely by PoolMgr - if (uint32 poolId = sPoolMgr->IsPartOfAPool(spawnId)) + // Same rationale as ProcessCreatureRespawn: pool management via PoolMgr is + // only meaningful for non-instanced maps where Spawn1Object actually spawns. + if (!Instanceable()) { - sPoolMgr->UpdatePool(poolId, spawnId); - RemoveGORespawnTime(spawnId); - return; + if (uint32 poolId = sPoolMgr->IsPartOfAPool(spawnId)) + { + sPoolMgr->UpdatePool(poolId, spawnId); + RemoveGORespawnTime(spawnId); + return; + } } GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);