fix(Scripts/UBRS): Warmaster Voone stances (#8972)

This commit is contained in:
Skjalf
2021-11-07 01:14:51 -03:00
committed by GitHub
parent babb7d6c69
commit e547f5c2b5
@@ -21,6 +21,7 @@
enum Spells enum Spells
{ {
SPELL_THRASH = 3391,
SPELL_SNAPKICK = 15618, SPELL_SNAPKICK = 15618,
SPELL_CLEAVE = 15284, SPELL_CLEAVE = 15284,
SPELL_UPPERCUT = 10966, SPELL_UPPERCUT = 10966,
@@ -32,11 +33,26 @@ enum Spells
enum Events enum Events
{ {
EVENT_SNAP_KICK = 1, EVENT_SNAP_KICK = 1,
EVENT_CLEAVE = 2, EVENT_CLEAVE,
EVENT_UPPERCUT = 3, EVENT_UPPERCUT,
EVENT_MORTAL_STRIKE = 4, EVENT_MORTAL_STRIKE,
EVENT_PUMMEL = 5, EVENT_PUMMEL,
EVENT_THROW_AXE = 6 EVENT_THROW_AXE,
EVENT_THRASH
};
enum Phases
{
PHASE_THRASHER = 1,
PHASE_BRAWLER,
PHASE_WARMASTER,
};
enum EventGroups
{
GROUP_THRASHER = 1,
GROUP_BRAWLER,
GROUP_WARMASTER
}; };
class boss_warmaster_voone : public CreatureScript class boss_warmaster_voone : public CreatureScript
@@ -48,68 +64,67 @@ public:
{ {
boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { } boss_warmastervooneAI(Creature* creature) : BossAI(creature, DATA_WARMASTER_VOONE) { }
void Reset() override
{
_Reset();
}
void EnterCombat(Unit* /*who*/) override void EnterCombat(Unit* /*who*/) override
{ {
_EnterCombat(); _EnterCombat();
events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS); events.SetPhase(PHASE_BRAWLER);
events.ScheduleEvent(EVENT_UPPERCUT, 20 * IN_MILLISECONDS); events.ScheduleEvent(EVENT_THRASH, 3 * IN_MILLISECONDS, GROUP_BRAWLER, PHASE_BRAWLER);
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12 * IN_MILLISECONDS); events.ScheduleEvent(EVENT_THROW_AXE, 1 * IN_MILLISECONDS, GROUP_BRAWLER, PHASE_BRAWLER);
events.ScheduleEvent(EVENT_PUMMEL, 32 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_THROW_AXE, 1 * IN_MILLISECONDS);
} }
void JustDied(Unit* /*killer*/) override void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override
{ {
_JustDied(); if (me->HealthBelowPctDamaged(65, damage) && events.IsInPhase(PHASE_BRAWLER))
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{ {
switch (eventId) events.SetPhase(PHASE_THRASHER);
{ events.CancelEventGroup(GROUP_BRAWLER);
case EVENT_SNAP_KICK: events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS, GROUP_THRASHER, PHASE_THRASHER);
DoCastVictim(SPELL_SNAPKICK); events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12 * IN_MILLISECONDS, GROUP_THRASHER, PHASE_THRASHER);
events.ScheduleEvent(EVENT_SNAP_KICK, 6 * IN_MILLISECONDS); }
break; else if (me->HealthBelowPctDamaged(40, damage) && events.IsInPhase(PHASE_THRASHER))
case EVENT_CLEAVE: {
DoCastVictim(SPELL_CLEAVE); events.SetPhase(PHASE_WARMASTER);
events.ScheduleEvent(EVENT_CLEAVE, 12 * IN_MILLISECONDS); events.CancelEventGroup(GROUP_THRASHER);
break; events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
case EVENT_UPPERCUT: events.ScheduleEvent(EVENT_UPPERCUT, 20 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
DoCastVictim(SPELL_UPPERCUT); events.ScheduleEvent(EVENT_PUMMEL, 32 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
events.ScheduleEvent(EVENT_UPPERCUT, 14 * IN_MILLISECONDS); }
break; }
case EVENT_MORTAL_STRIKE:
DoCastVictim(SPELL_MORTALSTRIKE); void ExecuteEvent(uint32 eventId) override
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10 * IN_MILLISECONDS); {
break; switch (eventId)
case EVENT_PUMMEL: {
DoCastVictim(SPELL_PUMMEL); case EVENT_SNAP_KICK:
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16 * IN_MILLISECONDS); DoCastVictim(SPELL_SNAPKICK);
break; events.RepeatEvent(6 * IN_MILLISECONDS);
case EVENT_THROW_AXE: break;
DoCastVictim(SPELL_THROWAXE); case EVENT_CLEAVE:
events.ScheduleEvent(EVENT_THROW_AXE, 8 * IN_MILLISECONDS); DoCastVictim(SPELL_CLEAVE);
break; events.RepeatEvent(12 * IN_MILLISECONDS);
} break;
case EVENT_UPPERCUT:
DoCastVictim(SPELL_UPPERCUT);
events.RepeatEvent(14 * IN_MILLISECONDS);
break;
case EVENT_MORTAL_STRIKE:
DoCastVictim(SPELL_MORTALSTRIKE);
events.RepeatEvent(10 * IN_MILLISECONDS);
break;
case EVENT_PUMMEL:
DoCastVictim(SPELL_PUMMEL);
events.RepeatEvent(16 * IN_MILLISECONDS);
break;
case EVENT_THROW_AXE:
DoCastRandomTarget(SPELL_THROWAXE);
events.RepeatEvent(8 * IN_MILLISECONDS);
break;
case EVENT_THRASH:
DoCastSelf(SPELL_THRASH);
events.RepeatEvent(10 * IN_MILLISECONDS);
break;
} }
DoMeleeAttackIfReady();
} }
}; };