Core/Pools: Remove ReSpawn1Object and optimize single object despawn case in DespawnObject

This commit is contained in:
Shauren
2025-08-19 11:57:53 +02:00
parent 3e6bbb827d
commit 4be538f521
2 changed files with 20 additions and 41 deletions

View File

@@ -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);
}
}

View File

@@ -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()
{