From dc4c874206ccd8d7266d8f034faa00e0acda0732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=BF?= <18535853+PkllonG@users.noreply.github.com> Date: Sat, 7 Sep 2024 18:05:18 +0800 Subject: [PATCH] fix(Scripts/BlackTemple): blade_of_azzinoth...and Possible crash (#19891) * Update boss_illidan.cpp * Update boss_illidan.cpp --- .../scripts/Outland/BlackTemple/boss_illidan.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index a07fc810d31c6b..e4de895c3511dd 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -1209,7 +1209,10 @@ enum WarbladeTear struct npc_blade_of_azzinoth : public ScriptedAI { - npc_blade_of_azzinoth(Creature* creature) : ScriptedAI(creature) { } + npc_blade_of_azzinoth(Creature* creature) : ScriptedAI(creature) + { + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + } void IsSummonedBy(WorldObject* /*summoner*/) override { @@ -1257,12 +1260,13 @@ enum FlameAzzinoth struct npc_flame_of_azzinoth : public ScriptedAI { - npc_flame_of_azzinoth(Creature* creature) : ScriptedAI(creature), _bladeSummoner(nullptr) { } + npc_flame_of_azzinoth(Creature* creature) : ScriptedAI(creature) { } void IsSummonedBy(WorldObject* /*summoner*/) override { // Flame is set to be Illidan's summon, so we check for nearest blade - _bladeSummoner = me->FindNearestCreature(NPC_BLADE_OF_AZZINOTH, 15.0f); + if (Creature* _blade = me->FindNearestCreature(NPC_BLADE_OF_AZZINOTH, 15.0f)) + _bladeGUID = _blade->GetGUID(); me->SetCorpseDelay(2); me->SetReactState(REACT_DEFENSIVE); @@ -1285,8 +1289,8 @@ struct npc_flame_of_azzinoth : public ScriptedAI void JustEngagedWith(Unit* /*who*/) override { ScheduleTimedEvent(10s, [&] { - if (_bladeSummoner) - if (Unit* target = _bladeSummoner->AI()->SelectTarget(SelectTargetMethod::Random, 0, 30.f, true)) + if (Creature* _blade = ObjectAccessor::GetCreature(*me, _bladeGUID)) + if (Unit* target = _blade->AI()->SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) DoCast(target, SPELL_CHARGE); }, 5s, 20s); @@ -1301,7 +1305,7 @@ struct npc_flame_of_azzinoth : public ScriptedAI } private: - Creature* _bladeSummoner; + ObjectGuid _bladeGUID; }; class spell_illidan_draw_soul : public SpellScript