refactor(Scripts/GruulsLair): Modernize High King Maulgar script (#14870)

This commit is contained in:
Kitzunu
2023-02-05 13:37:03 +01:00
committed by GitHub
parent 409c7356ea
commit 287de7d96f
2 changed files with 336 additions and 389 deletions
@@ -75,14 +75,9 @@ enum HKMEvents
EVENT_ADD_ABILITY4 = 13
};
class boss_high_king_maulgar : public CreatureScript
struct boss_high_king_maulgar : public BossAI
{
public:
boss_high_king_maulgar() : CreatureScript("boss_high_king_maulgar") { }
struct boss_high_king_maulgarAI : public BossAI
{
boss_high_king_maulgarAI(Creature* creature) : BossAI(creature, DATA_MAULGAR) { }
boss_high_king_maulgar(Creature* creature) : BossAI(creature, DATA_MAULGAR) { }
void Reset() override
{
@@ -94,7 +89,7 @@ public:
{
if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0)
{
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5000);
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5s);
Talk(SAY_SLAY);
}
}
@@ -131,10 +126,10 @@ public:
_EnterCombat();
Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_ARCING_SMASH, 6000);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 20000);
events.ScheduleEvent(EVENT_WHIRLWIND, 30000);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
events.ScheduleEvent(EVENT_ARCING_SMASH, 6s);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 20s);
events.ScheduleEvent(EVENT_WHIRLWIND, 30s);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
}
void UpdateAI(uint32 diff) override
@@ -150,57 +145,46 @@ public:
{
case EVENT_ARCING_SMASH:
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.ScheduleEvent(EVENT_ARCING_SMASH, 10000);
events.ScheduleEvent(EVENT_ARCING_SMASH, 10s);
break;
case EVENT_MIGHTY_BLOW:
me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16000);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16s);
break;
case EVENT_WHIRLWIND:
events.DelayEvents(15000);
events.DelayEvents(15s);
me->CastSpell(me, SPELL_WHIRLWIND, false);
events.ScheduleEvent(EVENT_WHIRLWIND, 54000);
events.ScheduleEvent(EVENT_WHIRLWIND, 54s);
break;
case EVENT_CHECK_HEALTH:
if (me->HealthBelowPct(50))
{
Talk(SAY_ENRAGE);
me->CastSpell(me, SPELL_FLURRY, true);
events.ScheduleEvent(EVENT_CHARGING, 0);
events.ScheduleEvent(EVENT_ROAR, 3000);
events.ScheduleEvent(EVENT_CHARGING, 0s);
events.ScheduleEvent(EVENT_ROAR, 30s);
break;
}
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
break;
case EVENT_ROAR:
me->CastSpell(me, SPELL_ROAR, false);
events.ScheduleEvent(EVENT_ROAR, 40000);
events.ScheduleEvent(EVENT_ROAR, 40s);
break;
case EVENT_CHARGING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_BERSERKER_C, false);
events.ScheduleEvent(EVENT_CHARGING, 35000);
events.ScheduleEvent(EVENT_CHARGING, 35s);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_high_king_maulgarAI>(creature);
}
};
class boss_olm_the_summoner : public CreatureScript
struct boss_olm_the_summoner : public ScriptedAI
{
public:
boss_olm_the_summoner() : CreatureScript("boss_olm_the_summoner") { }
struct boss_olm_the_summonerAI : public ScriptedAI
{
boss_olm_the_summonerAI(Creature* creature) : ScriptedAI(creature), summons(me)
boss_olm_the_summoner(Creature* creature) : ScriptedAI(creature), summons(me)
{
instance = creature->GetInstanceScript();
}
@@ -230,9 +214,9 @@ public:
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 10000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
@@ -258,37 +242,26 @@ public:
{
case EVENT_ADD_ABILITY1:
DoCastVictim(SPELL_DARK_DECAY);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 7000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 7s);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SUMMON_WFH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 30000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 30s);
break;
case EVENT_ADD_ABILITY3:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
me->CastSpell(target, SPELL_DEATH_COIL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_olm_the_summonerAI>(creature);
}
};
class boss_kiggler_the_crazed : public CreatureScript
struct boss_kiggler_the_crazed : public ScriptedAI
{
public:
boss_kiggler_the_crazed() : CreatureScript("boss_kiggler_the_crazed") { }
struct boss_kiggler_the_crazedAI : public ScriptedAI
{
boss_kiggler_the_crazedAI(Creature* creature) : ScriptedAI(creature)
boss_kiggler_the_crazed(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
@@ -307,10 +280,10 @@ public:
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 5000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 5s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30s);
}
void JustDied(Unit* /*killer*/) override
@@ -332,41 +305,30 @@ public:
case EVENT_ADD_ABILITY1:
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1))
me->CastSpell(target, SPELL_GREATER_POLYMORPH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 20s);
break;
case EVENT_ADD_ABILITY2:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_LIGHTNING_BOLT, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 1500ms);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_SHOCK, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break;
case EVENT_ADD_ABILITY4:
me->CastSpell(me, SPELL_ARCANE_EXPLOSION, false);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30000);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30s);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_kiggler_the_crazedAI>(creature);
}
};
class boss_blindeye_the_seer : public CreatureScript
struct boss_blindeye_the_seer : public ScriptedAI
{
public:
boss_blindeye_the_seer() : CreatureScript("boss_blindeye_the_seer") { }
struct boss_blindeye_the_seerAI : public ScriptedAI
{
boss_blindeye_the_seerAI(Creature* creature) : ScriptedAI(creature)
boss_blindeye_the_seer(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
@@ -385,9 +347,9 @@ public:
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1700);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1700ms);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
@@ -408,37 +370,26 @@ public:
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me, SPELL_GREATER_PW_SHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 30000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 30s);
break;
case EVENT_ADD_ABILITY2:
if (Unit* target = DoSelectLowestHpFriendly(60.0f, 50000))
me->CastSpell(target, SPELL_HEAL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 25000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 25s);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_PRAYER_OH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 30000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 30s);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_blindeye_the_seerAI>(creature);
}
};
class boss_krosh_firehand : public CreatureScript
struct boss_krosh_firehand : public ScriptedAI
{
public:
boss_krosh_firehand() : CreatureScript("boss_krosh_firehand") { }
struct boss_krosh_firehandAI : public ScriptedAI
{
boss_krosh_firehandAI(Creature* creature) : ScriptedAI(creature)
boss_krosh_firehand(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
@@ -466,9 +417,9 @@ public:
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 5000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 5s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
@@ -489,33 +440,27 @@ public:
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me->GetVictim(), SPELL_GREATER_FIREBALL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500ms);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SPELLSHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 40000);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 40s);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_BLAST_WAVE, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_krosh_firehandAI>(creature);
}
};
void AddSC_boss_high_king_maulgar()
{
new boss_high_king_maulgar();
new boss_kiggler_the_crazed();
new boss_blindeye_the_seer();
new boss_olm_the_summoner();
new boss_krosh_firehand();
RegisterGruulsLairAI(boss_high_king_maulgar);
RegisterGruulsLairAI(boss_kiggler_the_crazed);
RegisterGruulsLairAI(boss_blindeye_the_seer);
RegisterGruulsLairAI(boss_olm_the_summoner);
RegisterGruulsLairAI(boss_krosh_firehand);
}
@@ -55,4 +55,6 @@ inline AI* GetGruulsLairAI(T* obj)
return GetInstanceAI<AI>(obj, GruulsLairScriptName);
}
#define RegisterGruulsLairAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetGruulsLairAI)
#endif // GRUULS_LAIR_H_