From 910ebc22bd70d4582cc6c9f3fe90e93c670e63e6 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 28 Nov 2021 10:33:58 -0300 Subject: [PATCH] =?UTF-8?q?fix(Scripts/MoltenCore):=20Ragnaros=20target=20?= =?UTF-8?q?selector=20and=20remove=20submerge=E2=80=A6=20(#9335)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MoltenCore/boss_ragnaros.cpp | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 874b7657c..d2abb5967 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -58,6 +58,7 @@ enum Events EVENT_HAND_OF_RAGNAROS, EVENT_MIGHT_OF_RAGNAROS, EVENT_LAVA_BURST, + EVENT_MAGMA_BLAST_MELEE_CHECK, EVENT_MAGMA_BLAST, EVENT_SUBMERGE, @@ -270,15 +271,31 @@ public: events.RepeatEvent(10000); break; } + case EVENT_MAGMA_BLAST_MELEE_CHECK: + { + if (!IsVictimWithinMeleeRange()) + { + if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, [&](Unit* u) { return u && u->IsPlayer() && me->IsWithinMeleeRange(u); })) + { + me->AttackerStateUpdate(target); + } + else + { + events.RescheduleEvent(EVENT_MAGMA_BLAST, 4000, PHASE_EMERGED, PHASE_EMERGED); + } + } + else + { + _hasYelledMagmaBurst = false; + events.RepeatEvent(500); + } + break; + } case EVENT_MAGMA_BLAST: { - Unit const* victim = me->GetVictim(); - if (victim && !me->IsWithinMeleeRange(victim)) + if (!IsVictimWithinMeleeRange()) { - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) - { - DoCast(target, SPELL_MAGMA_BLAST); - } + DoCastRandomTarget(SPELL_MAGMA_BLAST); if (!_hasYelledMagmaBurst) { @@ -286,12 +303,8 @@ public: _hasYelledMagmaBurst = true; } } - else if (_hasYelledMagmaBurst) - { - _hasYelledMagmaBurst = false; - } - events.RepeatEvent(500); + events.RescheduleEvent(EVENT_MAGMA_BLAST_MELEE_CHECK, 500, PHASE_EMERGED, PHASE_EMERGED); break; } case EVENT_MIGHT_OF_RAGNAROS: @@ -381,6 +394,8 @@ public: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + me->RemoveAurasDueToSpell(SPELL_RAGNA_SUBMERGE_VISUAL); + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) { AttackStart(target); @@ -393,10 +408,15 @@ public: events.RescheduleEvent(EVENT_WRATH_OF_RAGNAROS, 30000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_HAND_OF_RAGNAROS, 25000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_LAVA_BURST, 10000, PHASE_EMERGED, PHASE_EMERGED); - events.RescheduleEvent(EVENT_MAGMA_BLAST, 500, PHASE_EMERGED, PHASE_EMERGED); + events.RescheduleEvent(EVENT_MAGMA_BLAST_MELEE_CHECK, 10000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_SUBMERGE, 180000, PHASE_EMERGED, PHASE_EMERGED); events.RescheduleEvent(EVENT_MIGHT_OF_RAGNAROS, 11000, PHASE_EMERGED, PHASE_EMERGED); } + + bool IsVictimWithinMeleeRange() const + { + return me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()); + } }; CreatureAI* GetAI(Creature* creature) const override