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

View File

@@ -75,447 +75,392 @@ 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") { }
boss_high_king_maulgar(Creature* creature) : BossAI(creature, DATA_MAULGAR) { }
struct boss_high_king_maulgarAI : public BossAI
void Reset() override
{
boss_high_king_maulgarAI(Creature* creature) : BossAI(creature, DATA_MAULGAR) { }
_Reset();
me->SetLootMode(0);
}
void Reset() override
void KilledUnit(Unit* /*victim*/) override
{
if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0)
{
_Reset();
me->SetLootMode(0);
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5s);
Talk(SAY_SLAY);
}
}
void KilledUnit(Unit* /*victim*/) override
{
if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0)
{
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5000);
Talk(SAY_SLAY);
}
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
if (instance->GetData(DATA_ADDS_KILLED) == MAX_ADD_NUMBER)
_JustDied();
}
void JustDied(Unit* /*killer*/) override
void DoAction(int32 actionId) override
{
if (me->IsAlive())
{
Talk(SAY_DEATH);
if (instance->GetData(DATA_ADDS_KILLED) == MAX_ADD_NUMBER)
_JustDied();
}
void DoAction(int32 actionId) override
{
if (me->IsAlive())
{
Talk(SAY_OGRE_DEATH);
if (actionId == MAX_ADD_NUMBER)
{
me->AddLootMode(1);
}
}
else if (actionId == MAX_ADD_NUMBER)
Talk(SAY_OGRE_DEATH);
if (actionId == MAX_ADD_NUMBER)
{
me->AddLootMode(1);
me->loot.clear();
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, me->GetLootMode(), me);
me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
_JustDied();
}
}
void EnterCombat(Unit* /*who*/) override
else if (actionId == MAX_ADD_NUMBER)
{
_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);
me->AddLootMode(1);
me->loot.clear();
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, me->GetLootMode(), me);
me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
_JustDied();
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ARCING_SMASH:
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.ScheduleEvent(EVENT_ARCING_SMASH, 10000);
break;
case EVENT_MIGHTY_BLOW:
me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16000);
break;
case EVENT_WHIRLWIND:
events.DelayEvents(15000);
me->CastSpell(me, SPELL_WHIRLWIND, false);
events.ScheduleEvent(EVENT_WHIRLWIND, 54000);
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);
break;
}
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
break;
case EVENT_ROAR:
me->CastSpell(me, SPELL_ROAR, false);
events.ScheduleEvent(EVENT_ROAR, 40000);
break;
case EVENT_CHARGING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_BERSERKER_C, false);
events.ScheduleEvent(EVENT_CHARGING, 35000);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void EnterCombat(Unit* /*who*/) override
{
return GetGruulsLairAI<boss_high_king_maulgarAI>(creature);
_EnterCombat();
Talk(SAY_AGGRO);
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
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ARCING_SMASH:
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.ScheduleEvent(EVENT_ARCING_SMASH, 10s);
break;
case EVENT_MIGHTY_BLOW:
me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 16s);
break;
case EVENT_WHIRLWIND:
events.DelayEvents(15s);
me->CastSpell(me, SPELL_WHIRLWIND, false);
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, 0s);
events.ScheduleEvent(EVENT_ROAR, 30s);
break;
}
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms);
break;
case EVENT_ROAR:
me->CastSpell(me, SPELL_ROAR, false);
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, 35s);
break;
}
DoMeleeAttackIfReady();
}
};
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_summoner(Creature* creature) : ScriptedAI(creature), summons(me)
{
boss_olm_the_summonerAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
instance = creature->GetInstanceScript();
}
instance = creature->GetInstanceScript();
}
EventMap events;
SummonList summons;
InstanceScript* instance;
EventMap events;
SummonList summons;
InstanceScript* instance;
void Reset() override
{
events.Reset();
summons.DespawnAll();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void AttackStart(Unit* who) override
{
if (!who)
return;
if (me->Attack(who, true))
me->GetMotionMaster()->MoveChase(who, 25.0f);
}
void EnterCombat(Unit* /*who*/) override
{
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);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
DoCastVictim(SPELL_DARK_DECAY);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 7000);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SUMMON_WFH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 30000);
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);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void Reset() override
{
return GetGruulsLairAI<boss_olm_the_summonerAI>(creature);
events.Reset();
summons.DespawnAll();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void AttackStart(Unit* who) override
{
if (!who)
return;
if (me->Attack(who, true))
me->GetMotionMaster()->MoveChase(who, 25.0f);
}
void EnterCombat(Unit* /*who*/) override
{
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 15s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void JustSummoned(Creature* summon) override
{
summons.Summon(summon);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
DoCastVictim(SPELL_DARK_DECAY);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 7s);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SUMMON_WFH, false);
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, 20s);
break;
}
DoMeleeAttackIfReady();
}
};
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_crazed(Creature* creature) : ScriptedAI(creature)
{
boss_kiggler_the_crazedAI(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
instance = creature->GetInstanceScript();
}
EventMap events;
InstanceScript* instance;
EventMap events;
InstanceScript* instance;
void Reset() override
{
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
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);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1))
me->CastSpell(target, SPELL_GREATER_POLYMORPH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 20000);
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);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_SHOCK, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
break;
case EVENT_ADD_ABILITY4:
me->CastSpell(me, SPELL_ARCANE_EXPLOSION, false);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30000);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void Reset() override
{
return GetGruulsLairAI<boss_kiggler_the_crazedAI>(creature);
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
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
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 1))
me->CastSpell(target, SPELL_GREATER_POLYMORPH, false);
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, 1500ms);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me->GetVictim(), SPELL_ARCANE_SHOCK, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break;
case EVENT_ADD_ABILITY4:
me->CastSpell(me, SPELL_ARCANE_EXPLOSION, false);
events.ScheduleEvent(EVENT_ADD_ABILITY4, 30s);
break;
}
DoMeleeAttackIfReady();
}
};
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_seer(Creature* creature) : ScriptedAI(creature)
{
boss_blindeye_the_seerAI(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
instance = creature->GetInstanceScript();
}
EventMap events;
InstanceScript* instance;
EventMap events;
InstanceScript* instance;
void Reset() override
{
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
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);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me, SPELL_GREATER_PW_SHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 30000);
break;
case EVENT_ADD_ABILITY2:
if (Unit* target = DoSelectLowestHpFriendly(60.0f, 50000))
me->CastSpell(target, SPELL_HEAL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 25000);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_PRAYER_OH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 30000);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void Reset() override
{
return GetGruulsLairAI<boss_blindeye_the_seerAI>(creature);
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void EnterCombat(Unit* /*who*/) override
{
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1700ms);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 10s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me, SPELL_GREATER_PW_SHIELD, false);
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, 25s);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_PRAYER_OH, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 30s);
break;
}
DoMeleeAttackIfReady();
}
};
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_firehand(Creature* creature) : ScriptedAI(creature)
{
boss_krosh_firehandAI(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
}
instance = creature->GetInstanceScript();
}
EventMap events;
InstanceScript* instance;
EventMap events;
InstanceScript* instance;
void Reset() override
{
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void AttackStart(Unit* who) override
{
if (!who)
return;
if (me->Attack(who, true))
me->GetMotionMaster()->MoveChase(who, 25.0f);
}
void EnterCombat(Unit* /*who*/) override
{
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);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me->GetVictim(), SPELL_GREATER_FIREBALL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SPELLSHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 40000);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_BLAST_WAVE, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20000);
break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void Reset() override
{
return GetGruulsLairAI<boss_krosh_firehandAI>(creature);
events.Reset();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
void AttackStart(Unit* who) override
{
if (!who)
return;
if (me->Attack(who, true))
me->GetMotionMaster()->MoveChase(who, 25.0f);
}
void EnterCombat(Unit* /*who*/) override
{
me->SetInCombatWithZone();
instance->SetBossState(DATA_MAULGAR, IN_PROGRESS);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 1s);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 5s);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ADDS_KILLED, 1);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{
case EVENT_ADD_ABILITY1:
me->CastSpell(me->GetVictim(), SPELL_GREATER_FIREBALL, false);
events.ScheduleEvent(EVENT_ADD_ABILITY1, 3500ms);
break;
case EVENT_ADD_ABILITY2:
me->CastSpell(me, SPELL_SPELLSHIELD, false);
events.ScheduleEvent(EVENT_ADD_ABILITY2, 40s);
break;
case EVENT_ADD_ABILITY3:
me->CastSpell(me, SPELL_BLAST_WAVE, false);
events.ScheduleEvent(EVENT_ADD_ABILITY3, 20s);
break;
}
DoMeleeAttackIfReady();
}
};
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);
}

View File

@@ -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_