Core/Pools: Remove ReSpawn1Object and optimize single object despawn case in DespawnObject
(cherry picked from commit 4be538f521a9ebbbb1d054d05bd87bc4df4e5ee0)
This commit is contained in:
@@ -182,40 +182,27 @@ bool PoolGroup<T>::CheckPool() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Main method to despawn a creature or gameobject in a pool
|
// 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>
|
template<class T>
|
||||||
void PoolGroup<T>::DespawnObject(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime)
|
void PoolGroup<T>::DespawnObject(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime)
|
||||||
{
|
{
|
||||||
for (size_t i=0; i < EqualChanced.size(); ++i)
|
// if spawned
|
||||||
|
if (spawns.IsSpawnedObject<T>(guid))
|
||||||
{
|
{
|
||||||
// if spawned
|
Despawn1Object(spawns, guid, alwaysDeleteRespawnTime);
|
||||||
if (spawns.IsSpawnedObject<T>(EqualChanced[i].guid))
|
spawns.RemoveSpawn<T>(guid, poolId);
|
||||||
{
|
|
||||||
if (!guid || EqualChanced[i].guid == guid)
|
|
||||||
{
|
|
||||||
Despawn1Object(spawns, EqualChanced[i].guid, alwaysDeleteRespawnTime);
|
|
||||||
spawns.RemoveSpawn<T>(EqualChanced[i].guid, poolId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (alwaysDeleteRespawnTime)
|
|
||||||
RemoveRespawnTimeFromDB(spawns, EqualChanced[i].guid);
|
|
||||||
}
|
}
|
||||||
|
else if (alwaysDeleteRespawnTime)
|
||||||
|
RemoveRespawnTimeFromDB(spawns, guid);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < ExplicitlyChanced.size(); ++i)
|
template <class T>
|
||||||
{
|
void PoolGroup<T>::DespawnAllObjects(SpawnedPoolData& spawns, bool alwaysDeleteRespawnTime)
|
||||||
// spawned
|
{
|
||||||
if (spawns.IsSpawnedObject<T>(ExplicitlyChanced[i].guid))
|
for (PoolObject& pooledObject : EqualChanced)
|
||||||
{
|
DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime);
|
||||||
if (!guid || ExplicitlyChanced[i].guid == guid)
|
|
||||||
{
|
for (PoolObject& pooledObject : ExplicitlyChanced)
|
||||||
Despawn1Object(spawns, ExplicitlyChanced[i].guid, alwaysDeleteRespawnTime);
|
DespawnObject(spawns, pooledObject.guid, alwaysDeleteRespawnTime);
|
||||||
spawns.RemoveSpawn<T>(ExplicitlyChanced[i].guid, poolId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (alwaysDeleteRespawnTime)
|
|
||||||
RemoveRespawnTimeFromDB(spawns, ExplicitlyChanced[i].guid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Method that is actualy doing the removal job on one creature
|
// Method that is actualy doing the removal job on one creature
|
||||||
@@ -390,14 +377,6 @@ void PoolGroup<Pool>::Spawn1Object(SpawnedPoolData& spawns, PoolObject* obj)
|
|||||||
sPoolMgr->SpawnPool(spawns, obj->guid);
|
sPoolMgr->SpawnPool(spawns, obj->guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Method that does the respawn job on the specified object
|
|
||||||
template <typename T>
|
|
||||||
void PoolGroup<T>::ReSpawn1Object(SpawnedPoolData& spawns, PoolObject* obj)
|
|
||||||
{
|
|
||||||
Despawn1Object(spawns, obj->guid, false, false);
|
|
||||||
Spawn1Object(spawns, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
void PoolGroup<Creature>::RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid)
|
void PoolGroup<Creature>::RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid)
|
||||||
{
|
{
|
||||||
@@ -803,17 +782,17 @@ void PoolMgr::DespawnPool(SpawnedPoolData& spawnedPoolData, uint32 pool_id, bool
|
|||||||
{
|
{
|
||||||
auto it = mPoolCreatureGroups.find(pool_id);
|
auto it = mPoolCreatureGroups.find(pool_id);
|
||||||
if (it != mPoolCreatureGroups.end() && !it->second.isEmpty())
|
if (it != mPoolCreatureGroups.end() && !it->second.isEmpty())
|
||||||
it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime);
|
it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto it = mPoolGameobjectGroups.find(pool_id);
|
auto it = mPoolGameobjectGroups.find(pool_id);
|
||||||
if (it != mPoolGameobjectGroups.end() && !it->second.isEmpty())
|
if (it != mPoolGameobjectGroups.end() && !it->second.isEmpty())
|
||||||
it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime);
|
it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto it = mPoolPoolGroups.find(pool_id);
|
auto it = mPoolPoolGroups.find(pool_id);
|
||||||
if (it != mPoolPoolGroups.end() && !it->second.isEmpty())
|
if (it != mPoolPoolGroups.end() && !it->second.isEmpty())
|
||||||
it->second.DespawnObject(spawnedPoolData, 0, alwaysDeleteRespawnTime);
|
it->second.DespawnAllObjects(spawnedPoolData, alwaysDeleteRespawnTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,13 +101,13 @@ class TC_GAME_API PoolGroup
|
|||||||
bool isEmptyDeepCheck() const;
|
bool isEmptyDeepCheck() const;
|
||||||
void AddEntry(PoolObject& poolitem, uint32 maxentries);
|
void AddEntry(PoolObject& poolitem, uint32 maxentries);
|
||||||
bool CheckPool() const;
|
bool CheckPool() const;
|
||||||
void DespawnObject(SpawnedPoolData& spawns, uint64 guid=0, bool alwaysDeleteRespawnTime = false);
|
void DespawnObject(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime = false);
|
||||||
|
void DespawnAllObjects(SpawnedPoolData& spawns, bool alwaysDeleteRespawnTime = false);
|
||||||
void Despawn1Object(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime = false, bool saveRespawnTime = true);
|
void Despawn1Object(SpawnedPoolData& spawns, uint64 guid, bool alwaysDeleteRespawnTime = false, bool saveRespawnTime = true);
|
||||||
void SpawnObject(SpawnedPoolData& spawns, uint32 limit, uint64 triggerFrom);
|
void SpawnObject(SpawnedPoolData& spawns, uint32 limit, uint64 triggerFrom);
|
||||||
void RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid);
|
void RemoveRespawnTimeFromDB(SpawnedPoolData& spawns, uint64 guid);
|
||||||
|
|
||||||
void Spawn1Object(SpawnedPoolData& spawns, PoolObject* obj);
|
void Spawn1Object(SpawnedPoolData& spawns, PoolObject* obj);
|
||||||
void ReSpawn1Object(SpawnedPoolData& spawns, PoolObject* obj);
|
|
||||||
void RemoveOneRelation(uint32 child_pool_id);
|
void RemoveOneRelation(uint32 child_pool_id);
|
||||||
uint32 GetPoolId() const { return poolId; }
|
uint32 GetPoolId() const { return poolId; }
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user