Skip to content

Commit 4be538f

Browse files
committed
Core/Pools: Remove ReSpawn1Object and optimize single object despawn case in DespawnObject
1 parent 3e6bbb8 commit 4be538f

File tree

2 files changed

+20
-41
lines changed

2 files changed

+20
-41
lines changed

src/server/game/Pools/PoolMgr.cpp

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -130,40 +130,27 @@ bool PoolGroup<T>::CheckPool() const
130130
}
131131

132132
// Main method to despawn a creature or gameobject in a pool
133-
// If no guid is passed, the pool is just removed (event end case)
134-
// If guid is filled, cache will be used and no removal will occur, it just fill the cache
135133
template<class T>
136134
void PoolGroup<T>::DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime)
137135
{
138-
for (size_t i=0; i < EqualChanced.size(); ++i)
136+
// if spawned
137+
if (spawns.IsActiveObject<T>(guid))
139138
{
140-
// if spawned
141-
if (spawns.IsActiveObject<T>(EqualChanced[i].guid))
142-
{
143-
if (!guid || EqualChanced[i].guid == guid)
144-
{
145-
Despawn1Object(EqualChanced[i].guid, alwaysDeleteRespawnTime);
146-
spawns.RemoveObject<T>(EqualChanced[i].guid, poolId);
147-
}
148-
}
149-
else if (alwaysDeleteRespawnTime)
150-
RemoveRespawnTimeFromDB(EqualChanced[i].guid);
139+
Despawn1Object(guid, alwaysDeleteRespawnTime);
140+
spawns.RemoveObject<T>(guid, poolId);
151141
}
142+
else if (alwaysDeleteRespawnTime)
143+
RemoveRespawnTimeFromDB(guid);
144+
}
152145

153-
for (size_t i = 0; i < ExplicitlyChanced.size(); ++i)
154-
{
155-
// spawned
156-
if (spawns.IsActiveObject<T>(ExplicitlyChanced[i].guid))
157-
{
158-
if (!guid || ExplicitlyChanced[i].guid == guid)
159-
{
160-
Despawn1Object(ExplicitlyChanced[i].guid, alwaysDeleteRespawnTime);
161-
spawns.RemoveObject<T>(ExplicitlyChanced[i].guid, poolId);
162-
}
163-
}
164-
else if (alwaysDeleteRespawnTime)
165-
RemoveRespawnTimeFromDB(ExplicitlyChanced[i].guid);
166-
}
146+
template <class T>
147+
void PoolGroup<T>::DespawnAllObjects(ActivePoolData& spawns, bool alwaysDeleteRespawnTime)
148+
{
149+
for (PoolObject& pooledObject : EqualChanced)
150+
DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime);
151+
152+
for (PoolObject& pooledObject : ExplicitlyChanced)
153+
DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime);
167154
}
168155

169156
// Method that is actualy doing the removal job on one creature
@@ -380,14 +367,6 @@ void PoolGroup<Pool>::Spawn1Object(PoolObject* obj)
380367
sPoolMgr->SpawnPool(obj->guid);
381368
}
382369

383-
// Method that does the respawn job on the specified object
384-
template <typename T>
385-
void PoolGroup<T>::ReSpawn1Object(PoolObject* obj)
386-
{
387-
Despawn1Object(obj->guid, false, false);
388-
Spawn1Object(obj);
389-
}
390-
391370
template <>
392371
void PoolGroup<Creature>::RemoveRespawnTimeFromDB(ObjectGuid::LowType guid)
393372
{
@@ -774,17 +753,17 @@ void PoolMgr::DespawnPool(uint32 pool_id, bool alwaysDeleteRespawnTime)
774753
{
775754
auto it = mPoolCreatureGroups.find(pool_id);
776755
if (it != mPoolCreatureGroups.end() && !it->second.isEmpty())
777-
it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime);
756+
it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime);
778757
}
779758
{
780759
auto it = mPoolGameobjectGroups.find(pool_id);
781760
if (it != mPoolGameobjectGroups.end() && !it->second.isEmpty())
782-
it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime);
761+
it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime);
783762
}
784763
{
785764
auto it = mPoolPoolGroups.find(pool_id);
786765
if (it != mPoolPoolGroups.end() && !it->second.isEmpty())
787-
it->second.DespawnObject(mSpawnedData, 0, alwaysDeleteRespawnTime);
766+
it->second.DespawnAllObjects(mSpawnedData, alwaysDeleteRespawnTime);
788767
}
789768
}
790769

src/server/game/Pools/PoolMgr.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ class TC_GAME_API PoolGroup
7272
bool isEmpty() const { return ExplicitlyChanced.empty() && EqualChanced.empty(); }
7373
void AddEntry(PoolObject& poolitem, uint32 maxentries);
7474
bool CheckPool() const;
75-
void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid=0, bool alwaysDeleteRespawnTime = false);
75+
void DespawnObject(ActivePoolData& spawns, ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime = false);
76+
void DespawnAllObjects(ActivePoolData& spawns, bool alwaysDeleteRespawnTime = false);
7677
void Despawn1Object(ObjectGuid::LowType guid, bool alwaysDeleteRespawnTime = false, bool saveRespawnTime = true);
7778
void SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 triggerFrom);
7879
void RemoveRespawnTimeFromDB(ObjectGuid::LowType guid);
7980

8081
void Spawn1Object(PoolObject* obj);
81-
void ReSpawn1Object(PoolObject* obj);
8282
void RemoveOneRelation(uint32 child_pool_id);
8383
uint32 GetFirstEqualChancedObjectId()
8484
{

0 commit comments

Comments
 (0)