diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 98e4dc8b2e..0ec46770f8 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -182,40 +182,27 @@ bool PoolGroup::CheckPool() const } // Main method to despawn a creature or gameobject in a pool -// If no guid is passed, the pool is just removed (event end case) -// If guid is filled, cache will be used and no removal will occur, it just fill the cache template void PoolGroup::DespawnObject(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime) { - for (size_t i=0; i < EqualChanced.size(); ++i) + // if spawned + if (spawns.IsSpawnedObject(guid)) { - // if spawned - if (spawns.IsSpawnedObject(EqualChanced[i].guid)) - { - if (!guid || EqualChanced[i].guid == guid) - { - Despawn1Object(spawns, EqualChanced[i].guid, alwaysDeleteRespawnTime); - spawns.RemoveSpawn(EqualChanced[i].guid, poolId); - } - } - else if (alwaysDeleteRespawnTime) - RemoveRespawnTimeFromDB(spawns, EqualChanced[i].guid); + Despawn1Object(spawns, guid, alwaysDeleteRespawnTime); + spawns.RemoveSpawn(guid, poolId); } + else if (alwaysDeleteRespawnTime) + RemoveRespawnTimeFromDB(spawns, guid); +} - for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) - { - // spawned - if (spawns.IsSpawnedObject(ExplicitlyChanced[i].guid)) - { - if (!guid || ExplicitlyChanced[i].guid == guid) - { - Despawn1Object(spawns, ExplicitlyChanced[i].guid, alwaysDeleteRespawnTime); - spawns.RemoveSpawn(ExplicitlyChanced[i].guid, poolId); - } - } - else if (alwaysDeleteRespawnTime) - RemoveRespawnTimeFromDB(spawns, ExplicitlyChanced[i].guid); - } +template +void PoolGroup::DespawnAllObjects(SpawnedPoolData& spawns, bool alwaysDeleteRespawnTime) +{ + for (PoolObject& pooledObject : EqualChanced) + DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime); + + for (PoolObject& pooledObject : ExplicitlyChanced) + DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime); } // Method that is actualy doing the removal job on one creature @@ -390,14 +377,6 @@ void PoolGroup::Spawn1Object(SpawnedPoolData& spawns, PoolObject* obj) sPoolMgr->SpawnPool(spawns, obj->guid); } -// Method that does the respawn job on the specified object -template -void PoolGroup::ReSpawn1Object(SpawnedPoolData& spawns, PoolObject* obj) -{ - Despawn1Object(spawns, obj->guid, false, false); - Spawn1Object(spawns, obj); -} - template <> void PoolGroup::RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid) { @@ -803,17 +782,17 @@ void PoolMgr::DespawnPool(SpawnedPoolData& spawnedPoolData, uint32 pool_id, bool { auto it = mPoolCreatureGroups.find(pool_id); if (it != mPoolCreatureGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime); } { auto it = mPoolGameobjectGroups.find(pool_id); if (it != mPoolGameobjectGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime); } { auto it = mPoolPoolGroups.find(pool_id); if (it != mPoolPoolGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime); } } diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h index 30dce09ffc..1822dd116e 100644 --- a/src/server/game/Pools/PoolMgr.h +++ b/src/server/game/Pools/PoolMgr.h @@ -101,13 +101,13 @@ class TC_GAME_API PoolGroup bool isEmptyDeepCheck() const; void AddEntry(PoolObject& poolitem, uint32 maxentries); bool CheckPool() const; - void DespawnObject(SpawnedPoolData& spawns, uint64 guid=0, bool alwaysDeleteRespawnTime = false); + void DespawnObject(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime = false); + void DespawnAllObjects(SpawnedPoolData& spawns, bool alwaysDeleteRespawnTime = false); void Despawn1Object(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime = false, bool saveRespawnTime = true); void SpawnObject(SpawnedPoolData& spawns, uint32 limit, uint64 triggerFrom); void RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid); void Spawn1Object(SpawnedPoolData& spawns, PoolObject* obj); - void ReSpawn1Object(SpawnedPoolData& spawns, PoolObject* obj); void RemoveOneRelation(uint32 child_pool_id); uint32 GetPoolId() const { return poolId; } private: