diff options
-rw-r--r-- | src/server/game/Pools/PoolMgr.cpp | 57 | ||||
-rw-r--r-- | src/server/game/Pools/PoolMgr.h | 4 |
2 files changed, 20 insertions, 41 deletions
diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index b0a57206b31..5d5a3d52728 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -130,40 +130,27 @@ bool PoolGroup<T>::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<class T> void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime) { - for (size_t i=0; i < EqualChanced.size(); ++i) + // if spawned + if (spawns.IsActiveObject<T>(guid)) { - // if spawned - if (spawns.IsActiveObject<T>(EqualChanced[i].guid)) - { - if (!guid || EqualChanced[i].guid == guid) - { - Despawn1Object(EqualChanced[i].guid, alwaysDeleteRespawnTime); - spawns.RemoveObject<T>(EqualChanced[i].guid, poolId); - } - } - else if (alwaysDeleteRespawnTime) - RemoveRespawnTimeFromDB(EqualChanced[i].guid); + Despawn1Object(guid, alwaysDeleteRespawnTime); + spawns.RemoveObject<T>(guid, poolId); } + else if (alwaysDeleteRespawnTime) + RemoveRespawnTimeFromDB(guid); +} - for (size_t i = 0; i < ExplicitlyChanced.size(); ++i) - { - // spawned - if (spawns.IsActiveObject<T>(ExplicitlyChanced[i].guid)) - { - if (!guid || ExplicitlyChanced[i].guid == guid) - { - Despawn1Object(ExplicitlyChanced[i].guid, alwaysDeleteRespawnTime); - spawns.RemoveObject<T>(ExplicitlyChanced[i].guid, poolId); - } - } - else if (alwaysDeleteRespawnTime) - RemoveRespawnTimeFromDB(ExplicitlyChanced[i].guid); - } +template <class T> +void PoolGroup<T>::DespawnAllObjects(ActivePoolData& 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 @@ -380,14 +367,6 @@ void PoolGroup<Pool>::Spawn1Object(PoolObject* obj) sPoolMgr->SpawnPool(obj->guid); } -// Method that does the respawn job on the specified object -template <typename T> -void PoolGroup<T>::ReSpawn1Object(PoolObject* obj) -{ - Despawn1Object(obj->guid, false, false); - Spawn1Object(obj); -} - template <> void PoolGroup<Creature>::RemoveRespawnTimeFromDB(ObjectGuid::LowType guid) { @@ -774,17 +753,17 @@ void PoolMgr::DespawnPool(uint32 pool_id, bool alwaysDeleteRespawnTime) { auto it = mPoolCreatureGroups.find(pool_id); if (it != mPoolCreatureGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime); } { auto it = mPoolGameobjectGroups.find(pool_id); if (it != mPoolGameobjectGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime); } { auto it = mPoolPoolGroups.find(pool_id); if (it != mPoolPoolGroups.end() && !it->second.isEmpty()) - it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime); + it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime); } } diff --git a/src/server/game/Pools/PoolMgr.h b/src/server/game/Pools/PoolMgr.h index 350385d0141..c49be720cef 100644 --- a/src/server/game/Pools/PoolMgr.h +++ b/src/server/game/Pools/PoolMgr.h @@ -72,13 +72,13 @@ class TC_GAME_API PoolGroup bool isEmpty() const { return ExplicitlyChanced.empty() && EqualChanced.empty(); } void AddEntry(PoolObject& poolitem, uint32 maxentries); bool CheckPool() const; - void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid=0, bool alwaysDeleteRespawnTime = false); + void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime = false); + void DespawnAllObjects(ActivePoolData& spawns, bool alwaysDeleteRespawnTime = false); void Despawn1Object(ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime = false, bool saveRespawnTime = true); void SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 triggerFrom); void RemoveRespawnTimeFromDB(ObjectGuid::LowType guid); void Spawn1Object(PoolObject* obj); - void ReSpawn1Object(PoolObject* obj); void RemoveOneRelation(uint32 child_pool_id); uint32 GetFirstEqualChancedObjectId() { |