From 328405e4a7bbf11ea6a905c7719a51c36f4833f5 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 5 Apr 2023 13:30:03 -0300 Subject: [PATCH] =?UTF-8?q?fix(Scripts/Arcatraz):=20Fix=20Harbringer=20Sky?= =?UTF-8?q?riss=20not=20splitting=20if=20castin=E2=80=A6=20(#15811)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(Scripts/Arcatraz): Fix Harbringer Skyriss not splitting if casting abilities * Update boss_harbinger_skyriss.cpp * Update boss_harbinger_skyriss.cpp * scheduler update * Update boss_harbinger_skyriss.cpp --- .../arcatraz/boss_harbinger_skyriss.cpp | 192 +++++++----------- 1 file changed, 74 insertions(+), 118 deletions(-) diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index e16d23003..f6a634d97 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -45,142 +45,98 @@ enum Spells enum Misc { - NPC_HARBINGER_SKYRISS_66 = 21466, - - EVENT_SUMMON_IMAGE1 = 1, - EVENT_SUMMON_IMAGE2 = 2, - EVENT_SPELL_MIND_REND = 3, - EVENT_SPELL_FEAR = 4, - EVENT_SPELL_DOMINATION = 5, - EVENT_SPELL_MANA_BURN = 6 + NPC_HARBINGER_SKYRISS_66 = 21466 }; -class boss_harbinger_skyriss : public CreatureScript +struct boss_harbinger_skyriss : public BossAI { -public: - boss_harbinger_skyriss() : CreatureScript("boss_harbinger_skyriss") { } - - struct boss_harbinger_skyrissAI : public ScriptedAI + boss_harbinger_skyriss(Creature* creature) : BossAI(creature, DATA_WARDEN_MELLICHAR) { - boss_harbinger_skyrissAI(Creature* creature) : ScriptedAI(creature), summons(me) + scheduler.SetValidator([this] { - instance = creature->GetInstanceScript(); - } + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } - InstanceScript* instance; - SummonList summons; - EventMap events; + void Reset() override + { + _Reset(); + me->SetImmuneToAll(false); - void Reset() override + ScheduleHealthCheckEvent(66, [&] { + Talk(SAY_IMAGE); + DoCastSelf(SPELL_66_ILLUSION, true); + }); + + ScheduleHealthCheckEvent(33, [&] { + Talk(SAY_IMAGE); + DoCastSelf(SPELL_33_ILLUSION, true); + }); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + me->SetInCombatWithZone(); + + scheduler.Schedule(10s, [this](TaskContext context) { - events.Reset(); - summons.DespawnAll(); - me->SetImmuneToAll(false); - } - - void JustEngagedWith(Unit* /*who*/) override + DoCastRandomTarget(SPELL_MIND_REND, 0, 50.0f); + context.Repeat(10s); + }).Schedule(15s, [this](TaskContext context) { - Talk(SAY_AGGRO); - me->SetInCombatWithZone(); - - events.ScheduleEvent(EVENT_SUMMON_IMAGE1, 1000); - events.ScheduleEvent(EVENT_SUMMON_IMAGE2, 1000); - events.ScheduleEvent(EVENT_SPELL_MIND_REND, 10000); - events.ScheduleEvent(EVENT_SPELL_FEAR, 15000); - events.ScheduleEvent(EVENT_SPELL_DOMINATION, 30000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_MANA_BURN, 25000); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - summons.DespawnAll(); - } - - void JustSummoned(Creature* summon) override - { - summon->SetHealth(summon->CountPctFromMaxHealth(summon->GetEntry() == NPC_HARBINGER_SKYRISS_66 ? 66 : 33)); - summons.Summon(summon); - summon->SetInCombatWithZone(); - me->UpdatePosition(*summon, true); - me->SendMovementFlagUpdate(); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_KILL); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + if (DoCastRandomTarget(SPELL_FEAR, 1, 20.0f) == SPELL_CAST_OK) { - case EVENT_SUMMON_IMAGE1: - if (HealthBelowPct(67)) - { - Talk(SAY_IMAGE); - me->CastSpell(me, SPELL_66_ILLUSION, false); - break; - } - events.ScheduleEvent(EVENT_SUMMON_IMAGE1, 1000); - break; - case EVENT_SUMMON_IMAGE2: - if (HealthBelowPct(34)) - { - Talk(SAY_IMAGE); - me->CastSpell(me, SPELL_33_ILLUSION, false); - break; - } - events.ScheduleEvent(EVENT_SUMMON_IMAGE2, 1000); - break; - case EVENT_SPELL_MIND_REND: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f)) - me->CastSpell(target, SPELL_MIND_REND, false); - events.ScheduleEvent(EVENT_SPELL_MIND_REND, 10000); - break; - case EVENT_SPELL_FEAR: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 20.0f)) - { - Talk(SAY_FEAR); - me->CastSpell(target, SPELL_FEAR, false); - } - events.ScheduleEvent(EVENT_SPELL_FEAR, 25000); - break; - case EVENT_SPELL_DOMINATION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 30.0f)) - { - Talk(SAY_MIND); - me->CastSpell(target, SPELL_DOMINATION, false); - } - events.ScheduleEvent(EVENT_SPELL_DOMINATION, 30000); - break; - case EVENT_SPELL_MANA_BURN: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, PowerUsersSelector(me, POWER_MANA, 40.0f, false))) - me->CastSpell(target, SPELL_MANA_BURN, false); - events.ScheduleEvent(EVENT_SPELL_MANA_BURN, 30000); - break; + Talk(SAY_FEAR); } + context.Repeat(25s); + }).Schedule(30s, [this](TaskContext context) + { + if (DoCastRandomTarget(SPELL_DOMINATION, 1, 30.0f) == SPELL_CAST_OK) + { + Talk(SAY_MIND); + } + context.Repeat(); + }); - DoMeleeAttackIfReady(); + if (IsHeroic()) + { + scheduler.Schedule(25s, [this](TaskContext context) + { + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, PowerUsersSelector(me, POWER_MANA, 40.0f, false))) + { + DoCast(target, SPELL_MANA_BURN); + } + + context.Repeat(30s); + }); } - }; + } - CreatureAI* GetAI(Creature* creature) const override + void JustDied(Unit* /*killer*/) override { - return GetArcatrazAI(creature); + _JustDied(); + Talk(SAY_DEATH); + } + + void JustSummoned(Creature* summon) override + { + summon->SetHealth(summon->CountPctFromMaxHealth(summon->GetEntry() == NPC_HARBINGER_SKYRISS_66 ? 66 : 33)); + me->UpdatePosition(*summon, true); + me->SendMovementFlagUpdate(); + BossAI::JustSummoned(summon); + } + + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) + { + Talk(SAY_KILL); + } } }; void AddSC_boss_harbinger_skyriss() { - new boss_harbinger_skyriss(); + RegisterArcatrazCreatureAI(boss_harbinger_skyriss); }