Skip to content

Commit 61e99f9

Browse files
Nyeriahclaude
andauthored
fix(Core/Maps): fix pooled creature/GO respawn in instanced maps (azerothcore#25826)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent b1e226d commit 61e99f9

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

src/server/game/Maps/Map.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2717,12 +2717,18 @@ void Map::ProcessRespawns()
27172717

27182718
void Map::ProcessCreatureRespawn(ObjectGuid::LowType spawnId)
27192719
{
2720-
// Pool members are handled entirely by PoolMgr
2721-
if (uint32 poolId = sPoolMgr->IsPartOfAPool<Creature>(spawnId))
2720+
// Pool members in non-instanced maps are handled entirely by PoolMgr.
2721+
// In instanced maps the pool system operates globally and Spawn1Object is
2722+
// a no-op for instanceable maps, so fall through to the normal per-instance
2723+
// respawn logic instead.
2724+
if (!Instanceable())
27222725
{
2723-
sPoolMgr->UpdatePool<Creature>(poolId, spawnId);
2724-
RemoveCreatureRespawnTime(spawnId);
2725-
return;
2726+
if (uint32 poolId = sPoolMgr->IsPartOfAPool<Creature>(spawnId))
2727+
{
2728+
sPoolMgr->UpdatePool<Creature>(poolId, spawnId);
2729+
RemoveCreatureRespawnTime(spawnId);
2730+
return;
2731+
}
27262732
}
27272733

27282734
CreatureData const* data = sObjectMgr->GetCreatureData(spawnId);
@@ -2778,12 +2784,16 @@ void Map::ProcessCreatureRespawn(ObjectGuid::LowType spawnId)
27782784

27792785
void Map::ProcessGameObjectRespawn(ObjectGuid::LowType spawnId)
27802786
{
2781-
// Pool members are handled entirely by PoolMgr
2782-
if (uint32 poolId = sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
2787+
// Same rationale as ProcessCreatureRespawn: pool management via PoolMgr is
2788+
// only meaningful for non-instanced maps where Spawn1Object actually spawns.
2789+
if (!Instanceable())
27832790
{
2784-
sPoolMgr->UpdatePool<GameObject>(poolId, spawnId);
2785-
RemoveGORespawnTime(spawnId);
2786-
return;
2791+
if (uint32 poolId = sPoolMgr->IsPartOfAPool<GameObject>(spawnId))
2792+
{
2793+
sPoolMgr->UpdatePool<GameObject>(poolId, spawnId);
2794+
RemoveGORespawnTime(spawnId);
2795+
return;
2796+
}
27872797
}
27882798

27892799
GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);

0 commit comments

Comments
 (0)