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 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 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(); events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5s);
me->SetLootMode(0); Talk(SAY_SLAY);
} }
}
void KilledUnit(Unit* /*victim*/) override void JustDied(Unit* /*killer*/) override
{ {
if (events.GetNextEventTime(EVENT_RECENTLY_SPOKEN) == 0) Talk(SAY_DEATH);
{ if (instance->GetData(DATA_ADDS_KILLED) == MAX_ADD_NUMBER)
events.ScheduleEvent(EVENT_RECENTLY_SPOKEN, 5000); _JustDied();
Talk(SAY_SLAY); }
}
}
void JustDied(Unit* /*killer*/) override void DoAction(int32 actionId) override
{
if (me->IsAlive())
{ {
Talk(SAY_DEATH); Talk(SAY_OGRE_DEATH);
if (instance->GetData(DATA_ADDS_KILLED) == MAX_ADD_NUMBER) if (actionId == 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)
{ {
me->AddLootMode(1); 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();
} }
} }
else if (actionId == MAX_ADD_NUMBER)
void EnterCombat(Unit* /*who*/) override
{ {
_EnterCombat(); me->AddLootMode(1);
Talk(SAY_AGGRO); me->loot.clear();
me->loot.FillLoot(me->GetCreatureTemplate()->lootid, LootTemplates_Creature, me->GetLootRecipient(), false, false, me->GetLootMode(), me);
events.ScheduleEvent(EVENT_ARCING_SMASH, 6000); me->SetDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
events.ScheduleEvent(EVENT_MIGHTY_BLOW, 20000); _JustDied();
events.ScheduleEvent(EVENT_WHIRLWIND, 30000);
events.ScheduleEvent(EVENT_CHECK_HEALTH, 500);
} }
}
void UpdateAI(uint32 diff) override void EnterCombat(Unit* /*who*/) 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
{ {
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(Creature* creature) : ScriptedAI(creature), summons(me)
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();
}
EventMap events; EventMap events;
SummonList summons; SummonList summons;
InstanceScript* instance; InstanceScript* instance;
void Reset() override 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
{ {
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(Creature* creature) : ScriptedAI(creature)
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();
}
EventMap events; EventMap events;
InstanceScript* instance; InstanceScript* instance;
void Reset() override 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
{ {
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(Creature* creature) : ScriptedAI(creature)
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();
}
EventMap events; EventMap events;
InstanceScript* instance; InstanceScript* instance;
void Reset() override 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
{ {
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(Creature* creature) : ScriptedAI(creature)
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();
}
EventMap events; EventMap events;
InstanceScript* instance; InstanceScript* instance;
void Reset() override 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
{ {
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() 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);
} }

View File

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