aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Pools/PoolMgr.cpp57
-rw-r--r--src/server/game/Pools/PoolMgr.h4
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()
{