From ca5b38fb6c7d3c00f7f37322fbf3fb47edd6fdf0 Mon Sep 17 00:00:00 2001 From: Gazeshooter <221618862+Gazeshooter@users.noreply.github.com> Date: Fri, 24 Jul 2026 07:53:21 +0100 Subject: [PATCH] fix(DB/GameObject): correct Higher Learning pooled respawn cycle (#26439) --- .../rev_1783977805714123300.sql | 28 +++++++++++++++++++ .../game/Entities/GameObject/GameObject.cpp | 5 +++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1783977805714123300.sql diff --git a/data/sql/updates/pending_db_world/rev_1783977805714123300.sql b/data/sql/updates/pending_db_world/rev_1783977805714123300.sql new file mode 100644 index 000000000..ed0b895a7 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1783977805714123300.sql @@ -0,0 +1,28 @@ +-- Higher Learning +UPDATE `smart_scripts` SET + `action_type` = 41, + `action_param1` = 0, + `action_param2` = 0, + `action_param3` = 0, + `action_param4` = 0, + `action_param5` = 0, + `action_param6` = 0, + `comment` = 'Higher Learning - Timed Event Triggered - Force Despawn' +WHERE `entryorguid` IN ( + 192708, 192706, 192871, 192905, + 192710, 192886, 192869, 192880, 192895, + 192713, 192889, 192890, 192894, 192884, + 192866, 192891, 192872, 192881, + 192709, 192883, 192651, 192888, + 192711, 192653, 192887, 192652, + 192865, 192874, 192868, 192870, 192885, + 192867, 192882, 192707, 192896 +) + AND `source_type` = 1 + AND `id` = 1 + AND `link` = 0 + AND `event_type` = 59 + AND `event_param1` = 1 + AND `action_type` = 99 + AND `action_param1` = 3 + AND `target_type` = 1; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index ff5984b1f..206d01e07 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -962,7 +962,10 @@ void GameObject::DespawnOrUnsummon(Milliseconds delay /*= 0ms*/, Seconds forceRe } uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool(m_spawnId) : 0; - if (poolid) + + // Keep the current pooled gameobject reserved until its respawn timer expires. + // GameObject::Update() will update the pool when the object is ready to respawn. + if (poolid && !m_respawnTime) { sPoolMgr->UpdatePool(poolid, m_spawnId); }