From ec9fd3f15b3ef528b2c9915df8a5f1bc6f2b62c9 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 20 Apr 2026 18:08:24 -0300 Subject: [PATCH] fix(Scripts/Eye): Kael'thas advisors fail to engage and aggro before being called (#25513) Co-authored-by: Claude Opus 4.7 (1M context) --- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 24 +++++++------ .../TempestKeep/Eye/instance_the_eye.cpp | 36 ------------------- 2 files changed, 14 insertions(+), 46 deletions(-) diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 8328802bd..0f28fcf5d 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -229,9 +229,6 @@ struct boss_kaelthas : public BossAI { advisor->Respawn(true); advisor->StopMovingOnCurrentPos(); - advisor->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - advisor->SetReactState(REACT_PASSIVE); - summons.Summon(advisor); } } } @@ -550,7 +547,7 @@ struct boss_kaelthas : public BossAI void IntroduceNewAdvisor(KTYells talkIntroduction, KTActions kaelAction) { std::chrono::milliseconds attackStartTimer = 0ms; - EyeNPCs advisorNPCId = NPC_THALADRED; + uint32 dataIdx = DATA_THALADRED; scheduler.Schedule(2s, [this, talkIntroduction](TaskContext) { Talk(talkIntroduction); @@ -560,26 +557,26 @@ struct boss_kaelthas : public BossAI { case ACTION_START_THALADRED: attackStartTimer = 7s; - advisorNPCId = NPC_THALADRED; + dataIdx = DATA_THALADRED; break; case ACTION_START_SANGUINAR: attackStartTimer = 14500ms; - advisorNPCId = NPC_LORD_SANGUINAR; + dataIdx = DATA_LORD_SANGUINAR; break; case ACTION_START_CAPERNIAN: attackStartTimer = 9s; - advisorNPCId = NPC_CAPERNIAN; + dataIdx = DATA_CAPERNIAN; break; case ACTION_START_TELONICUS: attackStartTimer = 10400ms; - advisorNPCId = NPC_TELONICUS; + dataIdx = DATA_TELONICUS; break; default: break; } - scheduler.Schedule(attackStartTimer, [this, advisorNPCId](TaskContext) + scheduler.Schedule(attackStartTimer, [this, dataIdx](TaskContext) { - if (Creature* advisor = summons.GetCreatureWithEntry(advisorNPCId)) + if (Creature* advisor = instance->GetCreature(dataIdx)) { advisor->SetReactState(REACT_AGGRESSIVE); advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); @@ -737,6 +734,13 @@ struct advisor_baseAI : public ScriptedAI scheduler.CancelAll(); } + void JustRespawned() override + { + ScriptedAI::JustRespawned(); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetReactState(REACT_PASSIVE); + } + void JustEngagedWith(Unit* /*who*/) override { ScheduleEvents(); } void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageEffectType*/, SpellSchoolMask /*spellSchoolMask*/) override diff --git a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp index 91d41787c..8f4950ace 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/instance_the_eye.cpp @@ -67,42 +67,10 @@ public: LoadBossBoundaries(boundaries); } - ObjectGuid ThaladredTheDarkenerGUID; - ObjectGuid LordSanguinarGUID; - ObjectGuid GrandAstromancerCapernianGUID; - ObjectGuid MasterEngineerTelonicusGUID; - ObjectGuid AlarGUID; - ObjectGuid KaelthasGUID; ObjectGuid BridgeWindowGUID; ObjectGuid KaelStateRightGUID; ObjectGuid KaelStateLeftGUID; - void OnCreatureCreate(Creature* creature) override - { - switch (creature->GetEntry()) - { - case NPC_ALAR: - AlarGUID = creature->GetGUID(); - break; - case NPC_KAELTHAS: - KaelthasGUID = creature->GetGUID(); - break; - case NPC_THALADRED: - ThaladredTheDarkenerGUID = creature->GetGUID(); - break; - case NPC_TELONICUS: - MasterEngineerTelonicusGUID = creature->GetGUID(); - break; - case NPC_CAPERNIAN: - GrandAstromancerCapernianGUID = creature->GetGUID(); - break; - case NPC_LORD_SANGUINAR: - LordSanguinarGUID = creature->GetGUID(); - break; - } - InstanceScript::OnCreatureCreate(creature); - } - void OnGameObjectCreate(GameObject* gobject) override { switch (gobject->GetEntry()) @@ -130,10 +98,6 @@ public: return KaelStateRightGUID; case GO_KAEL_STATUE_LEFT: return KaelStateLeftGUID; - case NPC_ALAR: - return AlarGUID; - case NPC_KAELTHAS: - return KaelthasGUID; } return ObjectGuid::Empty;