From 6b50570247867bf50fd89adfd6f2d5548b4d1abb Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:56:13 -0300 Subject: [PATCH] refactor(Scripts/BlackTemple): Update Mother Sharahz script (#19378) * refactor(Scripts/BlackTemple): Update Mother Sharahz script * Update boss_mother_shahraz.cpp --- .../BlackTemple/boss_mother_shahraz.cpp | 164 +++++++----------- 1 file changed, 63 insertions(+), 101 deletions(-) diff --git a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp index eb642e0a5..c0e99e6ad 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_mother_shahraz.cpp @@ -57,118 +57,80 @@ enum Spells enum Misc { - EVENT_KILL_TALK = 1, - EVENT_CHECK_HEALTH = 2, - EVENT_RANDOM_TALK = 3, - EVENT_SPELL_ENRAGE = 4, - EVENT_SPELL_PRISMATIC_AURA = 5, - EVENT_SPELL_SILENCING_SHRIEK = 6, - EVENT_SPELL_FATAL_ATTRACTION = 7, - EVENT_SPELL_SABER_LASH = 8 + GROUP_ENRAGE = 1 }; -class boss_mother_shahraz : public CreatureScript +struct boss_mother_shahraz : public BossAI { -public: - boss_mother_shahraz() : CreatureScript("boss_mother_shahraz") { } + boss_mother_shahraz(Creature* creature) : BossAI(creature, DATA_MOTHER_SHAHRAZ), _canTalk(true) { } - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetBlackTempleAI(creature); + _Reset(); + me->m_Events.CancelEventGroup(GROUP_ENRAGE); + _canTalk = true; + + ScheduleHealthCheckEvent(10, [&] { + DoCastSelf(SPELL_FRENZY, true); + Talk(SAY_EMOTE_FRENZY); + }); } - struct boss_shahrazAI : public BossAI + void JustEngagedWith(Unit* who) override { - boss_shahrazAI(Creature* creature) : BossAI(creature, DATA_MOTHER_SHAHRAZ) + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + DoCastSelf(SPELL_SABER_LASH_AURA, true); + DoCastSelf(SPELL_RANDOM_PERIODIC, true); + + ScheduleTimedEvent(4s, [&] { + DoCastVictim(SPELL_SABER_LASH); + }, 30s); + + ScheduleTimedEvent(1min, [&] { + Talk(SAY_TAUNT); + }, 1min, 2min); + + ScheduleTimedEvent(0s, [&] { + DoCastSelf(RAND(SPELL_PRISMATIC_AURA_SHADOW, SPELL_PRISMATIC_AURA_FIRE, SPELL_PRISMATIC_AURA_NATURE, SPELL_PRISMATIC_AURA_ARCANE, SPELL_PRISMATIC_AURA_FROST, SPELL_PRISMATIC_AURA_HOLY)); + }, 15s); + + ScheduleTimedEvent(30s, [&] { + DoCastAOE(SPELL_SILENCING_SHRIEK); + }, 30s); + + ScheduleTimedEvent(50s, [&] { + Talk(SAY_SPELL); + me->CastCustomSpell(SPELL_FATAL_ATTRACTION, SPELLVALUE_MAX_TARGETS, 3, me, false); + }, 1min); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_ENRAGE, true); + Talk(SAY_ENRAGE); + }, 10min); + } + + void KilledUnit(Unit* /*victim*/) override + { + if (_canTalk) { + Talk(SAY_SLAY); + _canTalk = false; + + ScheduleUniqueTimedEvent(6s, [&] { + _canTalk = true; + }, 1); } + } - void Reset() override - { - BossAI::Reset(); - } + void JustDied(Unit* killer) override + { + BossAI::JustDied(killer); + Talk(SAY_DEATH); + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - - me->CastSpell(me, SPELL_SABER_LASH_AURA, true); - me->CastSpell(me, SPELL_RANDOM_PERIODIC, true); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_RANDOM_TALK, 60000); - events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 0); - events.ScheduleEvent(EVENT_SPELL_ENRAGE, 600000); - events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000); - events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 50000); - events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 4000); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); - } - } - - void JustDied(Unit* killer) override - { - BossAI::JustDied(killer); - Talk(SAY_DEATH); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_CHECK_HEALTH: - if (HealthBelowPct(10)) - { - me->CastSpell(me, SPELL_FRENZY, true); - Talk(SAY_EMOTE_FRENZY); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - break; - case EVENT_SPELL_ENRAGE: - me->CastSpell(me, SPELL_ENRAGE, true); - Talk(SAY_ENRAGE); - break; - case EVENT_RANDOM_TALK: - Talk(SAY_TAUNT); - events.ScheduleEvent(EVENT_RANDOM_TALK, urand(60000, 120000)); - break; - case EVENT_SPELL_SABER_LASH: - me->CastSpell(me->GetVictim(), SPELL_SABER_LASH, false); - events.ScheduleEvent(EVENT_SPELL_SABER_LASH, 30000); - break; - case EVENT_SPELL_PRISMATIC_AURA: - me->CastSpell(me, RAND(SPELL_PRISMATIC_AURA_SHADOW, SPELL_PRISMATIC_AURA_FIRE, SPELL_PRISMATIC_AURA_NATURE, SPELL_PRISMATIC_AURA_ARCANE, SPELL_PRISMATIC_AURA_FROST, SPELL_PRISMATIC_AURA_HOLY), false); - events.ScheduleEvent(EVENT_SPELL_PRISMATIC_AURA, 15000); - break; - case EVENT_SPELL_SILENCING_SHRIEK: - me->CastSpell(me, SPELL_SILENCING_SHRIEK, false); - events.ScheduleEvent(EVENT_SPELL_SILENCING_SHRIEK, 30000); - break; - case EVENT_SPELL_FATAL_ATTRACTION: - Talk(SAY_SPELL); - me->CastCustomSpell(SPELL_FATAL_ATTRACTION, SPELLVALUE_MAX_TARGETS, 3, me, false); - events.ScheduleEvent(EVENT_SPELL_FATAL_ATTRACTION, 60000); - break; - } - - DoMeleeAttackIfReady(); - } - }; + private: + bool _canTalk; }; class spell_mother_shahraz_random_periodic_aura : public AuraScript @@ -321,7 +283,7 @@ class spell_mother_shahraz_fatal_attraction_aura : public AuraScript void AddSC_boss_mother_shahraz() { - new boss_mother_shahraz(); + RegisterBlackTempleCreatureAI(boss_mother_shahraz); RegisterSpellScript(spell_mother_shahraz_random_periodic_aura); RegisterSpellScript(spell_mother_shahraz_beam_periodic_aura); RegisterSpellScript(spell_mother_shahraz_saber_lash_aura);