@@ -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
135133template <class T >
136134void 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-
391370template <>
392371void 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
0 commit comments