mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
Core/Pools: Remove ReSpawn1Object and optimize single object despawn case in DespawnObject
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user