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 EVENT_ADD_ABILITY4 = 13
}; };
class boss_high_king_maulgar : public CreatureScript struct boss_high_king_maulgar : public BossAI
{ {
public: boss_high_king_maulgar(Creature* creature) : BossAI(creature, DATA_MAULGAR) { }
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) { }
void Reset() override void Reset() override
{ {
@@ -94,7 +89,7 @@ public:
{ {
if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0) if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0)
{ {
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5000); events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5s);
Talk(SAY_SLAY); Talk(SAY_SLAY);
} }
} }
@@ -131,10 +126,10 @@ public:
_EnterCombat(); _EnterCombat();
Talk(SAY_AGGRO); Talk(SAY_AGGRO);
events.ScheduleEvent(EVENT_ARCING_SMASH, 6000); events.ScheduleEvent(EVENT_ARCING_SMASH, 6s);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 20000); events.ScheduleEvent(EVENT_MIGHTY_BLOW, 20s);
events.ScheduleEvent(EVENT_WHIRLWIND, 30000); events.ScheduleEvent(EVENT_WHIRLWIND, 30s);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500); events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
} }
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
@@ -150,36 +145,36 @@ public:
{ {
case EVENT_ARCING_SMASH: case EVENT_ARCING_SMASH:
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false); me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.ScheduleEvent(EVENT_ARCING_SMASH, 10000); events.ScheduleEvent(EVENT_ARCING_SMASH, 10s);
break; break;
case EVENT_MIGHTY_BLOW: case EVENT_MIGHTY_BLOW:
me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false); me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16000); events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16s);
break; break;
case EVENT_WHIRLWIND: case EVENT_WHIRLWIND:
events.DelayEvents(15000); events.DelayEvents(15s);
me->CastSpell(me, SPELL_WHIRLWIND, false); me->CastSpell(me, SPELL_WHIRLWIND, false);
events.ScheduleEvent(EVENT_WHIRLWIND, 54000); events.ScheduleEvent(EVENT_WHIRLWIND, 54s);
break; break;
case EVENT_CHECK_HEALTH: case EVENT_CHECK_HEALTH:
if (me->HealthBelowPct(50)) if (me->HealthBelowPct(50))
{ {
Talk(SAY_ENRAGE); Talk(SAY_ENRAGE);
me->CastSpell(me, SPELL_FLURRY, true); me->CastSpell(me, SPELL_FLURRY, true);
events.ScheduleEvent(EVENT_CHARGING, 0); events.ScheduleEvent(EVENT_CHARGING, 0s);
events.ScheduleEvent(EVENT_ROAR, 3000); events.ScheduleEvent(EVENT_ROAR, 30s);
break; break;
} }
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500); events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
break; break;
case EVENT_ROAR: case EVENT_ROAR:
me->CastSpell(me, SPELL_ROAR, false); me->CastSpell(me, SPELL_ROAR, false);
events.ScheduleEvent(EVENT_ROAR, 40000); events.ScheduleEvent(EVENT_ROAR, 40s);
break; break;
case EVENT_CHARGING: case EVENT_CHARGING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_BERSERKER_C, false); me->CastSpell(target, SPELL_BERSERKER_C, false);
events.ScheduleEvent(EVENT_CHARGING, 35000); events.ScheduleEvent(EVENT_CHARGING, 35s);
break; break;
} }
@@ -187,20 +182,9 @@ public:
} }
}; };
CreatureAI* GetAI(Creature* creature) const override struct boss_olm_the_summoner : public ScriptedAI
{ {
return GetGruulsLairAI<boss_high_king_maulgarAI>(creature); boss_olm_the_summoner(Creature* creature) : ScriptedAI(creature), summons(me)
}
};
class boss_olm_the_summoner : public CreatureScript
{
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)
{ {
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
} }
@@ -230,9 +214,9 @@ public:
me->SetInCombatWithZone(); me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 10000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 15s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
} }
void JustDied(Unit* /*killer*/) override void JustDied(Unit* /*killer*/) override
@@ -258,16 +242,16 @@ public:
{ {
case EVENT_ADD_ABILITY1: case EVENT_ADD_ABILITY1:
DoCastVictim(SPELL_DARK_DECAY); DoCastVictim(SPELL_DARK_DECAY);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 7000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 7s);
break; break;
case EVENT_ADD_ABILITY2: case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SUMMON_WFH, false); me->CastSpell(me, SPELL_SUMMON_WFH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 30000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 30s);
break; break;
case EVENT_ADD_ABILITY3: case EVENT_ADD_ABILITY3:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
me->CastSpell(target, SPELL_DEATH_COIL, false); me->CastSpell(target, SPELL_DEATH_COIL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break; break;
} }
@@ -275,20 +259,9 @@ public:
} }
}; };
CreatureAI* GetAI(Creature* creature) const override struct boss_kiggler_the_crazed : public ScriptedAI
{ {
return GetGruulsLairAI<boss_olm_the_summonerAI>(creature); boss_kiggler_the_crazed(Creature* creature) : ScriptedAI(creature)
}
};
class boss_kiggler_the_crazed : public CreatureScript
{
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)
{ {
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
} }
@@ -307,10 +280,10 @@ public:
me->SetInCombatWithZone(); me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 5000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 5s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30000); events.ScheduleEvent(EVENT_ADD_ABILITY4, 30s);
} }
void JustDied(Unit* /*killer*/) override void JustDied(Unit* /*killer*/) override
@@ -332,20 +305,20 @@ public:
case EVENT_ADD_ABILITY1: case EVENT_ADD_ABILITY1:
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1)) if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1))
me->CastSpell(target, SPELL_GREATER_POLYMORPH, false); me->CastSpell(target, SPELL_GREATER_POLYMORPH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 20s);
break; break;
case EVENT_ADD_ABILITY2: case EVENT_ADD_ABILITY2:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_LIGHTNING_BOLT, false); me->CastSpell(target, SPELL_LIGHTNING_BOLT, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 1500ms);
break; break;
case EVENT_ADD_ABILITY3: case EVENT_ADD_ABILITY3:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_SHOCK, false); me->CastSpell(me->GetVictim(), SPELL_ARCANE_SHOCK, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break; break;
case EVENT_ADD_ABILITY4: case EVENT_ADD_ABILITY4:
me->CastSpell(me, SPELL_ARCANE_EXPLOSION, false); me->CastSpell(me, SPELL_ARCANE_EXPLOSION, false);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30000); events.ScheduleEvent(EVENT_ADD_ABILITY4, 30s);
break; break;
} }
@@ -353,20 +326,9 @@ public:
} }
}; };
CreatureAI* GetAI(Creature* creature) const override struct boss_blindeye_the_seer : public ScriptedAI
{ {
return GetGruulsLairAI<boss_kiggler_the_crazedAI>(creature); boss_blindeye_the_seer(Creature* creature) : ScriptedAI(creature)
}
};
class boss_blindeye_the_seer : public CreatureScript
{
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)
{ {
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
} }
@@ -385,9 +347,9 @@ public:
me->SetInCombatWithZone(); me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1700); events.ScheduleEvent(EVENT_ADD_ABILITY1, 1700ms);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
} }
void JustDied(Unit* /*killer*/) override void JustDied(Unit* /*killer*/) override
@@ -408,16 +370,16 @@ public:
{ {
case EVENT_ADD_ABILITY1: case EVENT_ADD_ABILITY1:
me->CastSpell(me, SPELL_GREATER_PW_SHIELD, false); me->CastSpell(me, SPELL_GREATER_PW_SHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 30000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 30s);
break; break;
case EVENT_ADD_ABILITY2: case EVENT_ADD_ABILITY2:
if (Unit* target = DoSelectLowestHpFriendly(60.0f, 50000)) if (Unit* target = DoSelectLowestHpFriendly(60.0f, 50000))
me->CastSpell(target, SPELL_HEAL, false); me->CastSpell(target, SPELL_HEAL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 25000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 25s);
break; break;
case EVENT_ADD_ABILITY3: case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_PRAYER_OH, false); me->CastSpell(me, SPELL_PRAYER_OH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 30000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 30s);
break; break;
} }
@@ -425,20 +387,9 @@ public:
} }
}; };
CreatureAI* GetAI(Creature* creature) const override struct boss_krosh_firehand : public ScriptedAI
{ {
return GetGruulsLairAI<boss_blindeye_the_seerAI>(creature); boss_krosh_firehand(Creature* creature) : ScriptedAI(creature)
}
};
class boss_krosh_firehand : public CreatureScript
{
public:
boss_krosh_firehand() : CreatureScript("boss_krosh_firehand") { }
struct boss_krosh_firehandAI : public ScriptedAI
{
boss_krosh_firehandAI(Creature* creature) : ScriptedAI(creature)
{ {
instance = creature->GetInstanceScript(); instance = creature->GetInstanceScript();
} }
@@ -466,9 +417,9 @@ public:
me->SetInCombatWithZone(); me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS); instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1000); events.ScheduleEvent(EVENT_ADD_ABILITY1, 1s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 5000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 5s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
} }
void JustDied(Unit* /*killer*/) override void JustDied(Unit* /*killer*/) override
@@ -489,15 +440,15 @@ public:
{ {
case EVENT_ADD_ABILITY1: case EVENT_ADD_ABILITY1:
me->CastSpell(me->GetVictim(), SPELL_GREATER_FIREBALL, false); me->CastSpell(me->GetVictim(), SPELL_GREATER_FIREBALL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500); events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500ms);
break; break;
case EVENT_ADD_ABILITY2: case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SPELLSHIELD, false); me->CastSpell(me, SPELL_SPELLSHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 40000); events.ScheduleEvent(EVENT_ADD_ABILITY2, 40s);
break; break;
case EVENT_ADD_ABILITY3: case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_BLAST_WAVE, false); me->CastSpell(me, SPELL_BLAST_WAVE, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000); events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break; break;
} }
@@ -505,17 +456,11 @@ public:
} }
}; };
CreatureAI* GetAI(Creature* creature) const override
{
return GetGruulsLairAI<boss_krosh_firehandAI>(creature);
}
};
void AddSC_boss_high_king_maulgar() void AddSC_boss_high_king_maulgar()
{ {
new boss_high_king_maulgar(); RegisterGruulsLairAI(boss_high_king_maulgar);
new boss_kiggler_the_crazed(); RegisterGruulsLairAI(boss_kiggler_the_crazed);
new boss_blindeye_the_seer(); RegisterGruulsLairAI(boss_blindeye_the_seer);
new boss_olm_the_summoner(); RegisterGruulsLairAI(boss_olm_the_summoner);
new boss_krosh_firehand(); RegisterGruulsLairAI(boss_krosh_firehand);
} }
@@ -55,4 +55,6 @@ inline AI* GetGruulsLairAI(T* obj)
return GetInstanceAI<AI>(obj, GruulsLairScriptName); return GetInstanceAI<AI>(obj, GruulsLairScriptName);
} }
#define RegisterGruulsLairAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetGruulsLairAI)
#endif // GRUULS_LAIR_H_ #endif // GRUULS_LAIR_H_