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