fix(Core/Script): Anomalus (#3325)

* Correct rift spawning/ empowering timings and Rift Shield cancellation

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>
This commit is contained in:
Petric
2020-09-04 08:44:09 +01:00
committed by GitHub
parent 1e2ebb3fe1
commit 7a4a409cae
2 changed files with 59 additions and 17 deletions

View File

@@ -31,7 +31,9 @@ enum Events
{
EVENT_ANOMALUS_SPARK = 1,
EVENT_ANOMALUS_HEALTH = 2,
EVENT_ANOMALUS_ARCANE_ATTRACTION = 3
EVENT_ANOMALUS_ARCANE_ATTRACTION = 3,
EVENT_ANOMALUS_SPAWN_RIFT = 4,
EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED = 5
};
class ChargeRifts : public BasicEvent
@@ -69,6 +71,7 @@ class boss_anomalus : public CreatureScript
}
bool achievement;
uint16 activeRifts;
void Reset()
{
@@ -88,8 +91,12 @@ class boss_anomalus : public CreatureScript
{
if (type == me->GetEntry())
{
me->RemoveAura(SPELL_RIFT_SHIELD);
me->InterruptNonMeleeSpells(false);
if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD))
{
events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000);
me->RemoveAura(SPELL_RIFT_SHIELD);
me->InterruptNonMeleeSpells(false);
}
achievement = false;
}
}
@@ -97,6 +104,7 @@ class boss_anomalus : public CreatureScript
void JustSummoned(Creature* summon)
{
summons.Summon(summon);
activeRifts++;
}
void EnterCombat(Unit* who)
@@ -104,9 +112,11 @@ class boss_anomalus : public CreatureScript
Talk(SAY_AGGRO);
BossAI::EnterCombat(who);
activeRifts = 0;
events.SetTimer(45000);
events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000);
events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000);
events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000);
if (IsHeroic())
events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8000);
}
@@ -129,29 +139,43 @@ class boss_anomalus : public CreatureScript
switch (events.ExecuteEvent())
{
case EVENT_ANOMALUS_HEALTH:
if (me->HealthBelowPct(51))
{
Talk(SAY_RIFT);
Talk(EMOTE_RIFT);
me->CastSpell(me, SPELL_CREATE_RIFT, false);
me->CastSpell(me, SPELL_RIFT_SHIELD, true);
me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000));
events.DelayEvents(46000);
break;
}
events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000);
break;
case EVENT_ANOMALUS_SPARK:
me->CastSpell(me->GetVictim(), SPELL_SPARK, false);
events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000);
break;
case EVENT_ANOMALUS_HEALTH:
if (me->HealthBelowPct(51))
{
//First time we reach 51%, the next rift going to be empowered following timings.
events.CancelEvent(EVENT_ANOMALUS_SPAWN_RIFT);
events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1000);
break;
}
events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000);
break;
case EVENT_ANOMALUS_ARCANE_ATTRACTION:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 50.0f, true))
me->CastSpell(target, SPELL_ARCANE_ATTRACTION, false);
events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15000);
break;
case EVENT_ANOMALUS_SPAWN_RIFT:
Talk(SAY_RIFT);
Talk(EMOTE_RIFT);
me->CastSpell(me, SPELL_CREATE_RIFT, false);
//Once we hit 51% hp mark, after each rift we spawn an empowered
events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000);
break;
case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED:
Talk(SAY_RIFT);
Talk(EMOTE_RIFT);
me->CastSpell(me, SPELL_CREATE_RIFT, false);
me->CastSpell(me, SPELL_RIFT_SHIELD, true);
me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000));
events.DelayEvents(46000);
//As we just spawned an empowered spawn a normal one
events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000);
break;
}
DoMeleeAttackIfReady();