From 9144031ed92e0a1b48f9c7fb2c25ed5438d1fc62 Mon Sep 17 00:00:00 2001 From: Anton Popovichenko Date: Wed, 28 Aug 2024 13:14:08 +0200 Subject: [PATCH] fix(Core/Pool): Fix degradation of pools over time (#19750) --- src/server/game/Pools/PoolMgr.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/server/game/Pools/PoolMgr.cpp b/src/server/game/Pools/PoolMgr.cpp index 247cbf343..ed4378aa3 100644 --- a/src/server/game/Pools/PoolMgr.cpp +++ b/src/server/game/Pools/PoolMgr.cpp @@ -330,7 +330,7 @@ void PoolGroup::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 trig // Triggering object is marked as spawned at this time and can be also rolled (respawn case) // so this need explicit check for this case - if (roll < 0 && (/*obj.guid == triggerFrom ||*/ !spawns.IsActiveObject(obj.guid))) + if (roll < 0 && (obj.guid == triggerFrom || !spawns.IsActiveObject(obj.guid))) { rolledObjects.push_back(obj); break; @@ -340,9 +340,9 @@ void PoolGroup::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 trig if (!EqualChanced.empty() && rolledObjects.empty()) { - std::copy_if(EqualChanced.begin(), EqualChanced.end(), std::back_inserter(rolledObjects), [/*triggerFrom, */&spawns](PoolObject const& object) + std::copy_if(EqualChanced.begin(), EqualChanced.end(), std::back_inserter(rolledObjects), [triggerFrom, &spawns](PoolObject const& object) { - return /*object.guid == triggerFrom ||*/ !spawns.IsActiveObject(object.guid); + return object.guid == triggerFrom || !spawns.IsActiveObject(object.guid); }); Acore::Containers::RandomResize(rolledObjects, count); @@ -527,16 +527,18 @@ void PoolGroup::SpawnObject(ActivePoolData& spawns, uint32 limit, uint32 // Method that does the respawn job on the specified creature template <> -void PoolGroup::ReSpawn1Object(PoolObject* /*obj*/) +void PoolGroup::ReSpawn1Object(PoolObject* obj) { - // Creature is still on map, nothing to do + Despawn1Object(obj->guid); + Spawn1Object(obj); } // Method that does the respawn job on the specified gameobject template <> -void PoolGroup::ReSpawn1Object(PoolObject* /*obj*/) +void PoolGroup::ReSpawn1Object(PoolObject* obj) { - // Gameobject is still on map, nothing to do + Despawn1Object(obj->guid); + Spawn1Object(obj); } // Nothing to do for a child Pool