From ad66a0b768c0d3da13922e0a67951650a9eba942 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 19 Jul 2026 09:28:18 -0300 Subject: [PATCH] fix(Scripts/ZulGurub): reset Thekal encounter after a wipe (#26686) Co-authored-by: Claude Opus 4.8 --- .../EasternKingdoms/ZulGurub/boss_thekal.cpp | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index 1ddca06ed..35da38f49 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -204,14 +204,14 @@ struct boss_thekal : public BossAI void UpdateAI(uint32 diff) override { - if (me->IsInCombat() && !UpdateVictim()) + // Gate on IsEngaged, not IsInCombat: on a wipe the boss leaves combat while still engaged, + // and UpdateVictim must keep running to evade and clear the IN_PROGRESS state. + if (me->IsEngaged()) { - return; - } - else if (me->IsInCombat()) - { - scheduler.Update(diff, - std::bind(&BossAI::DoMeleeAttackIfReady, this)); + if (!UpdateVictim()) + return; + + scheduler.Update(diff, [this] { DoMeleeAttackIfReady(); }); } else { @@ -396,14 +396,12 @@ struct npc_zealot_lorkhan : public ScriptedAI void UpdateAI(uint32 diff) override { - if (me->IsInCombat() && !UpdateVictim()) + if (me->IsEngaged()) { - return; - } - else if (me->IsInCombat()) - { - _scheduler.Update(diff, - std::bind(&BossAI::DoMeleeAttackIfReady, this)); + if (!UpdateVictim()) + return; + + _scheduler.Update(diff, [this] { DoMeleeAttackIfReady(); }); } else { @@ -497,14 +495,12 @@ struct npc_zealot_zath : public ScriptedAI void UpdateAI(uint32 diff) override { - if (me->IsInCombat() && !UpdateVictim()) + if (me->IsEngaged()) { - return; - } - else if (me->IsInCombat()) - { - _scheduler.Update(diff, - std::bind(&BossAI::DoMeleeAttackIfReady, this)); + if (!UpdateVictim()) + return; + + _scheduler.Update(diff, [this] { DoMeleeAttackIfReady(); }); } else {