fix(Scripts/MoltenCore): Ragnaros should change its main target to so… (#10758)
Fixes #10363
This commit is contained in:
@@ -78,7 +78,6 @@ enum Events
|
|||||||
EVENT_HAND_OF_RAGNAROS,
|
EVENT_HAND_OF_RAGNAROS,
|
||||||
EVENT_MIGHT_OF_RAGNAROS,
|
EVENT_MIGHT_OF_RAGNAROS,
|
||||||
EVENT_LAVA_BURST,
|
EVENT_LAVA_BURST,
|
||||||
EVENT_MAGMA_BLAST_MELEE_CHECK,
|
|
||||||
EVENT_MAGMA_BLAST,
|
EVENT_MAGMA_BLAST,
|
||||||
EVENT_SUBMERGE,
|
EVENT_SUBMERGE,
|
||||||
EVENT_LAVA_BURST_TRIGGER,
|
EVENT_LAVA_BURST_TRIGGER,
|
||||||
@@ -122,6 +121,7 @@ public:
|
|||||||
boss_ragnarosAI(Creature* creature) : BossAI(creature, DATA_RAGNAROS),
|
boss_ragnarosAI(Creature* creature) : BossAI(creature, DATA_RAGNAROS),
|
||||||
_isIntroDone(false),
|
_isIntroDone(false),
|
||||||
_hasYelledMagmaBurst(false),
|
_hasYelledMagmaBurst(false),
|
||||||
|
_processingMagmaBurst(false),
|
||||||
_hasSubmergedOnce(false),
|
_hasSubmergedOnce(false),
|
||||||
_isKnockbackEmoteAllowed(true)
|
_isKnockbackEmoteAllowed(true)
|
||||||
{
|
{
|
||||||
@@ -143,6 +143,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
_hasYelledMagmaBurst = false;
|
_hasYelledMagmaBurst = false;
|
||||||
|
_processingMagmaBurst = false;
|
||||||
_hasSubmergedOnce = false;
|
_hasSubmergedOnce = false;
|
||||||
_isKnockbackEmoteAllowed = true;
|
_isKnockbackEmoteAllowed = true;
|
||||||
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
|
||||||
@@ -231,6 +232,28 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EnterEvadeMode() override
|
||||||
|
{
|
||||||
|
if (!me->getThreatMgr().getThreatList().empty())
|
||||||
|
{
|
||||||
|
if (!_processingMagmaBurst)
|
||||||
|
{
|
||||||
|
// Boss try to evade, but still got some targets on threat list - it means that none of these targets are in melee range - cast magma blast
|
||||||
|
_processingMagmaBurst = true;
|
||||||
|
events.ScheduleEvent(EVENT_MAGMA_BLAST, 4000, PHASE_EMERGED, PHASE_EMERGED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BossAI::EnterEvadeMode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CanAIAttack(Unit const* victim) const override
|
||||||
|
{
|
||||||
|
return me->IsWithinMeleeRange(victim);
|
||||||
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
if (!extraEvents.Empty())
|
if (!extraEvents.Empty())
|
||||||
@@ -297,7 +320,10 @@ public:
|
|||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
{
|
{
|
||||||
return;
|
if (!_processingMagmaBurst)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events.Update(diff);
|
events.Update(diff);
|
||||||
@@ -340,38 +366,10 @@ public:
|
|||||||
DoCastAOE(SPELL_LAVA_BURST);
|
DoCastAOE(SPELL_LAVA_BURST);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_MAGMA_BLAST_MELEE_CHECK:
|
|
||||||
{
|
|
||||||
if (Unit* target = ObjectAccessor::GetUnit(*me, me->GetTarget()))
|
|
||||||
{
|
|
||||||
if (!target->IsAlive())
|
|
||||||
{
|
|
||||||
me->SetTarget(ObjectGuid::Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsVictimWithinMeleeRange())
|
|
||||||
{
|
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, [&](Unit* u) { return u && u->IsPlayer() && me->IsWithinMeleeRange(u); }))
|
|
||||||
{
|
|
||||||
me->AttackerStateUpdate(target);
|
|
||||||
me->SetTarget(target->GetGUID());
|
|
||||||
events.RepeatEvent(500);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
events.ScheduleEvent(EVENT_MAGMA_BLAST, 4000, PHASE_EMERGED, PHASE_EMERGED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_hasYelledMagmaBurst = false;
|
|
||||||
events.RepeatEvent(500);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case EVENT_MAGMA_BLAST:
|
case EVENT_MAGMA_BLAST:
|
||||||
{
|
{
|
||||||
|
_processingMagmaBurst = false;
|
||||||
|
|
||||||
if (!IsVictimWithinMeleeRange())
|
if (!IsVictimWithinMeleeRange())
|
||||||
{
|
{
|
||||||
DoCastRandomTarget(SPELL_MAGMA_BLAST);
|
DoCastRandomTarget(SPELL_MAGMA_BLAST);
|
||||||
@@ -383,7 +381,6 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events.RescheduleEvent(EVENT_MAGMA_BLAST_MELEE_CHECK, 500, PHASE_EMERGED, PHASE_EMERGED);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_MIGHT_OF_RAGNAROS:
|
case EVENT_MIGHT_OF_RAGNAROS:
|
||||||
@@ -444,6 +441,7 @@ public:
|
|||||||
EventMap extraEvents;
|
EventMap extraEvents;
|
||||||
bool _isIntroDone;
|
bool _isIntroDone;
|
||||||
bool _hasYelledMagmaBurst;
|
bool _hasYelledMagmaBurst;
|
||||||
|
bool _processingMagmaBurst;
|
||||||
bool _hasSubmergedOnce;
|
bool _hasSubmergedOnce;
|
||||||
bool _isKnockbackEmoteAllowed; // Prevents possible text overlap
|
bool _isKnockbackEmoteAllowed; // Prevents possible text overlap
|
||||||
|
|
||||||
@@ -480,7 +478,6 @@ public:
|
|||||||
events.RescheduleEvent(EVENT_WRATH_OF_RAGNAROS, 30000, PHASE_EMERGED, PHASE_EMERGED);
|
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_HAND_OF_RAGNAROS, 25000, PHASE_EMERGED, PHASE_EMERGED);
|
||||||
events.RescheduleEvent(EVENT_LAVA_BURST, 10000, PHASE_EMERGED, PHASE_EMERGED);
|
events.RescheduleEvent(EVENT_LAVA_BURST, 10000, 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_SUBMERGE, 180000, PHASE_EMERGED, PHASE_EMERGED);
|
||||||
events.RescheduleEvent(EVENT_MIGHT_OF_RAGNAROS, 11000, PHASE_EMERGED, PHASE_EMERGED);
|
events.RescheduleEvent(EVENT_MIGHT_OF_RAGNAROS, 11000, PHASE_EMERGED, PHASE_EMERGED);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user