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);