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,69 +64,68 @@ 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))
{
events.SetPhase(PHASE_THRASHER);
events.CancelEventGroup(GROUP_BRAWLER);
events.ScheduleEvent(EVENT_CLEAVE, 14 * IN_MILLISECONDS, GROUP_THRASHER, PHASE_THRASHER);
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 12 * IN_MILLISECONDS, GROUP_THRASHER, PHASE_THRASHER);
}
else if (me->HealthBelowPctDamaged(40, damage) && events.IsInPhase(PHASE_THRASHER))
{
events.SetPhase(PHASE_WARMASTER);
events.CancelEventGroup(GROUP_THRASHER);
events.ScheduleEvent(EVENT_SNAP_KICK, 8 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
events.ScheduleEvent(EVENT_UPPERCUT, 20 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
events.ScheduleEvent(EVENT_PUMMEL, 32 * IN_MILLISECONDS, GROUP_WARMASTER, PHASE_WARMASTER);
}
} }
void UpdateAI(uint32 diff) override void ExecuteEvent(uint32 eventId) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{ {
switch (eventId) switch (eventId)
{ {
case EVENT_SNAP_KICK: case EVENT_SNAP_KICK:
DoCastVictim(SPELL_SNAPKICK); DoCastVictim(SPELL_SNAPKICK);
events.ScheduleEvent(EVENT_SNAP_KICK, 6 * IN_MILLISECONDS); events.RepeatEvent(6 * IN_MILLISECONDS);
break; break;
case EVENT_CLEAVE: case EVENT_CLEAVE:
DoCastVictim(SPELL_CLEAVE); DoCastVictim(SPELL_CLEAVE);
events.ScheduleEvent(EVENT_CLEAVE, 12 * IN_MILLISECONDS); events.RepeatEvent(12 * IN_MILLISECONDS);
break; break;
case EVENT_UPPERCUT: case EVENT_UPPERCUT:
DoCastVictim(SPELL_UPPERCUT); DoCastVictim(SPELL_UPPERCUT);
events.ScheduleEvent(EVENT_UPPERCUT, 14 * IN_MILLISECONDS); events.RepeatEvent(14 * IN_MILLISECONDS);
break; break;
case EVENT_MORTAL_STRIKE: case EVENT_MORTAL_STRIKE:
DoCastVictim(SPELL_MORTALSTRIKE); DoCastVictim(SPELL_MORTALSTRIKE);
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10 * IN_MILLISECONDS); events.RepeatEvent(10 * IN_MILLISECONDS);
break; break;
case EVENT_PUMMEL: case EVENT_PUMMEL:
DoCastVictim(SPELL_PUMMEL); DoCastVictim(SPELL_PUMMEL);
events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16 * IN_MILLISECONDS); events.RepeatEvent(16 * IN_MILLISECONDS);
break; break;
case EVENT_THROW_AXE: case EVENT_THROW_AXE:
DoCastVictim(SPELL_THROWAXE); DoCastRandomTarget(SPELL_THROWAXE);
events.ScheduleEvent(EVENT_THROW_AXE, 8 * IN_MILLISECONDS); events.RepeatEvent(8 * IN_MILLISECONDS);
break;
case EVENT_THRASH:
DoCastSelf(SPELL_THRASH);
events.RepeatEvent(10 * IN_MILLISECONDS);
break; break;
} }
} }
DoMeleeAttackIfReady();
}
}; };
CreatureAI* GetAI(Creature* creature) const override CreatureAI* GetAI(Creature* creature) const override