diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-08-19 11:57:53 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-08-19 13:10:17 +0200 |
commit | 4be538f521a9ebbbb1d054d05bd87bc4df4e5ee0 (patch) | |
tree | 387b57422c884b0294783fd20508bc1876421bf5 /src | |
parent | 3e6bbb827de4013578af65a343af7aa979a186b5 (diff) |
Core/Pools: Remove ReSpawn1Object and optimize single object despawn case in DespawnObject
Diffstat (limited to 'src')
-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() { |