aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp177
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp219
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp143
-rw-r--r--src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp143
4 files changed, 319 insertions, 363 deletions
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
index 7a6fd91fe94..79bddc01009 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp
@@ -77,116 +77,105 @@ SpellPair const _auraPairs[MAX_SPELL_PAIRS] =
{ NPC_ICEBLOOD_WARMASTER, SPELL_ICEBLOOD_WARMASTER }
};
-class npc_av_marshal_or_warmaster : public CreatureScript
+struct npc_av_marshal_or_warmaster : public ScriptedAI
{
- public:
- npc_av_marshal_or_warmaster() : CreatureScript("npc_av_marshal_or_warmaster") { }
-
- struct npc_av_marshal_or_warmasterAI : public ScriptedAI
+ npc_av_marshal_or_warmaster(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _hasAura = false;
+ }
+
+ void Reset() override
+ {
+ Initialize();
+
+ events.Reset();
+ events.ScheduleEvent(EVENT_CHARGE_TARGET, 2s, 12s);
+ events.ScheduleEvent(EVENT_CLEAVE, 1s, 11s);
+ events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, 2s);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 5s, 20s);
+ events.ScheduleEvent(EVENT_ENRAGE, 5s, 20s);
+ events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
+ }
+
+ void JustAppeared() override
+ {
+ Reset();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ // I have a feeling this isn't blizzlike, but owell, I'm only passing by and cleaning up.
+ if (!_hasAura)
{
- npc_av_marshal_or_warmasterAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
+ for (uint8 i = 0; i < MAX_SPELL_PAIRS; ++i)
+ if (_auraPairs[i].npcEntry == me->GetEntry())
+ DoCast(me, _auraPairs[i].spellId);
- void Initialize()
- {
- _hasAura = false;
- }
-
- void Reset() override
- {
- Initialize();
-
- events.Reset();
- events.ScheduleEvent(EVENT_CHARGE_TARGET, 2s, 12s);
- events.ScheduleEvent(EVENT_CLEAVE, 1s, 11s);
- events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, 2s);
- events.ScheduleEvent(EVENT_WHIRLWIND, 5s, 20s);
- events.ScheduleEvent(EVENT_ENRAGE, 5s, 20s);
- events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
- }
-
- void JustAppeared() override
- {
- Reset();
- }
-
- void UpdateAI(uint32 diff) override
- {
- // I have a feeling this isn't blizzlike, but owell, I'm only passing by and cleaning up.
- if (!_hasAura)
- {
- for (uint8 i = 0; i < MAX_SPELL_PAIRS; ++i)
- if (_auraPairs[i].npcEntry == me->GetEntry())
- DoCast(me, _auraPairs[i].spellId);
-
- _hasAura = true;
- }
+ _hasAura = true;
+ }
- if (!UpdateVictim())
- return;
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CHARGE_TARGET:
+ DoCastVictim(SPELL_CHARGE);
+ events.ScheduleEvent(EVENT_CHARGE, 10s, 25s);
+ break;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 10s, 16s);
+ break;
+ case EVENT_DEMORALIZING_SHOUT:
+ DoCast(me, SPELL_DEMORALIZING_SHOUT);
+ events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, 10s, 15s);
+ break;
+ case EVENT_WHIRLWIND:
+ DoCast(me, SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 10s, 25s);
+ break;
+ case EVENT_ENRAGE:
+ DoCast(me, SPELL_ENRAGE);
+ events.ScheduleEvent(EVENT_ENRAGE, 10s, 30s);
+ break;
+ case EVENT_CHECK_RESET:
{
- switch (eventId)
+ Position const& _homePosition = me->GetHomePosition();
+ if (me->GetDistance2d(_homePosition.GetPositionX(), _homePosition.GetPositionY()) > 50.0f)
{
- case EVENT_CHARGE_TARGET:
- DoCastVictim(SPELL_CHARGE);
- events.ScheduleEvent(EVENT_CHARGE, 10s, 25s);
- break;
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10s, 16s);
- break;
- case EVENT_DEMORALIZING_SHOUT:
- DoCast(me, SPELL_DEMORALIZING_SHOUT);
- events.ScheduleEvent(EVENT_DEMORALIZING_SHOUT, 10s, 15s);
- break;
- case EVENT_WHIRLWIND:
- DoCast(me, SPELL_WHIRLWIND);
- events.ScheduleEvent(EVENT_WHIRLWIND, 10s, 25s);
- break;
- case EVENT_ENRAGE:
- DoCast(me, SPELL_ENRAGE);
- events.ScheduleEvent(EVENT_ENRAGE, 10s, 30s);
- break;
- case EVENT_CHECK_RESET:
- {
- Position const& _homePosition = me->GetHomePosition();
- if (me->GetDistance2d(_homePosition.GetPositionX(), _homePosition.GetPositionY()) > 50.0f)
- {
- EnterEvadeMode();
- return;
- }
- events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
- break;
- }
- }
- if (me->HasUnitState(UNIT_STATE_CASTING))
+ EnterEvadeMode();
return;
+ }
+ events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
+ break;
}
-
- DoMeleeAttackIfReady();
}
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
- private:
- EventMap events;
- bool _hasAura;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_av_marshal_or_warmasterAI(creature);
- }
+private:
+ EventMap events;
+ bool _hasAura;
};
void AddSC_alterac_valley()
{
- new npc_av_marshal_or_warmaster();
+ RegisterCreatureAI(npc_av_marshal_or_warmaster);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
index b56c8689d62..4b66eec3bfc 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_balinda.cpp
@@ -52,146 +52,135 @@ enum Events
EVENT_CHECK_RESET, // Checks if Balinda or the Water Elemental are outside of building.
};
-class boss_balinda : public CreatureScript
+struct boss_balinda : public ScriptedAI
{
-public:
- boss_balinda() : CreatureScript("boss_balinda") { }
+ boss_balinda(Creature* creature) : ScriptedAI(creature), summons(me)
+ {
+ Initialize();
+ }
- struct boss_balindaAI : public ScriptedAI
+ void Initialize()
{
- boss_balindaAI(Creature* creature) : ScriptedAI(creature), summons(me)
- {
- Initialize();
- }
+ WaterElementalGUID.Clear();
+ HasCastIceblock = false;
+ }
- void Initialize()
- {
- WaterElementalGUID.Clear();
- HasCastIceblock = false;
- }
+ void Reset() override
+ {
+ Initialize();
+ events.Reset();
+ summons.DespawnAll();
+ }
- void Reset() override
- {
- Initialize();
- events.Reset();
- summons.DespawnAll();
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 5s, 15s);
+ events.ScheduleEvent(EVENT_CONE_OF_COLD, 8s);
+ events.ScheduleEvent(EVENT_FIREBOLT, 1s);
+ events.ScheduleEvent(EVENT_FROSTBOLT, 4s);
+ events.ScheduleEvent(EVENT_SUMMON_WATER_ELEMENTAL, 3s);
+ events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
+ void JustSummoned(Creature* summoned) override
+ {
+ summoned->AI()->AttackStart(SelectTarget(SelectTargetMethod::Random, 0, 50, true));
+ summoned->SetFaction(me->GetFaction());
+ WaterElementalGUID = summoned->GetGUID();
+ summons.Summon(summoned);
+ }
+
+ void SummonedCreatureDespawn(Creature* summoned) override
+ {
+ summons.Despawn(summoned);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ summons.DespawnAll();
+ }
+
+ void DoAction(int32 actionId) override
+ {
+ if (actionId == ACTION_BUFF_YELL)
Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 5s, 15s);
- events.ScheduleEvent(EVENT_CONE_OF_COLD, 8s);
- events.ScheduleEvent(EVENT_FIREBOLT, 1s);
- events.ScheduleEvent(EVENT_FROSTBOLT, 4s);
- events.ScheduleEvent(EVENT_SUMMON_WATER_ELEMENTAL, 3s);
- events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
- }
+ }
- void JustSummoned(Creature* summoned) override
+ void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ {
+ if (me->HealthBelowPctDamaged(40, damage) && !HasCastIceblock)
{
- summoned->AI()->AttackStart(SelectTarget(SelectTargetMethod::Random, 0, 50, true));
- summoned->SetFaction(me->GetFaction());
- WaterElementalGUID = summoned->GetGUID();
- summons.Summon(summoned);
+ DoCast(SPELL_ICEBLOCK);
+ HasCastIceblock = true;
}
+ }
- void SummonedCreatureDespawn(Creature* summoned) override
- {
- summons.Despawn(summoned);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void JustDied(Unit* /*killer*/) override
- {
- summons.DespawnAll();
- }
+ events.Update(diff);
- void DoAction(int32 actionId) override
- {
- if (actionId == ACTION_BUFF_YELL)
- Talk(SAY_AGGRO);
- }
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void DamageTaken(Unit* /*attacker*/, uint32& damage) override
+ while (uint32 eventId = events.ExecuteEvent())
{
- if (me->HealthBelowPctDamaged(40, damage) && !HasCastIceblock)
+ switch (eventId)
{
- DoCast(SPELL_ICEBLOCK);
- HasCastIceblock = true;
+ case EVENT_ARCANE_EXPLOSION:
+ DoCastVictim(SPELL_ARCANE_EXPLOSION);
+ events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 5s, 15s);
+ break;
+ case EVENT_CONE_OF_COLD:
+ DoCastVictim(SPELL_CONE_OF_COLD);
+ events.ScheduleEvent(EVENT_CONE_OF_COLD, 10s, 20s);
+ break;
+ case EVENT_FIREBOLT:
+ DoCastVictim(SPELL_FIREBALL);
+ events.ScheduleEvent(EVENT_FIREBOLT, 5s, 9s);
+ break;
+ case EVENT_FROSTBOLT:
+ DoCastVictim(SPELL_FROSTBOLT);
+ events.ScheduleEvent(EVENT_FROSTBOLT, 4s, 12s);
+ break;
+ case EVENT_SUMMON_WATER_ELEMENTAL:
+ if (summons.empty())
+ DoCast(SPELL_SUMMON_WATER_ELEMENTAL);
+ events.ScheduleEvent(EVENT_SUMMON_WATER_ELEMENTAL, 50s);
+ break;
+ case EVENT_CHECK_RESET:
+ if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
+ {
+ EnterEvadeMode();
+ Talk(SAY_EVADE);
+ }
+ if (Creature* elemental = ObjectAccessor::GetCreature(*me, WaterElementalGUID))
+ if (elemental->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
+ elemental->AI()->EnterEvadeMode();
+ events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
+ break;
+ default:
+ break;
}
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_ARCANE_EXPLOSION:
- DoCastVictim(SPELL_ARCANE_EXPLOSION);
- events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 5s, 15s);
- break;
- case EVENT_CONE_OF_COLD:
- DoCastVictim(SPELL_CONE_OF_COLD);
- events.ScheduleEvent(EVENT_CONE_OF_COLD, 10s, 20s);
- break;
- case EVENT_FIREBOLT:
- DoCastVictim(SPELL_FIREBALL);
- events.ScheduleEvent(EVENT_FIREBOLT, 5s, 9s);
- break;
- case EVENT_FROSTBOLT:
- DoCastVictim(SPELL_FROSTBOLT);
- events.ScheduleEvent(EVENT_FROSTBOLT, 4s, 12s);
- break;
- case EVENT_SUMMON_WATER_ELEMENTAL:
- if (summons.empty())
- DoCast(SPELL_SUMMON_WATER_ELEMENTAL);
- events.ScheduleEvent(EVENT_SUMMON_WATER_ELEMENTAL, 50s);
- break;
- case EVENT_CHECK_RESET:
- if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
- {
- EnterEvadeMode();
- Talk(SAY_EVADE);
- }
- if (Creature* elemental = ObjectAccessor::GetCreature(*me, WaterElementalGUID))
- if (elemental->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
- elemental->AI()->EnterEvadeMode();
- events.ScheduleEvent(EVENT_CHECK_RESET, 5s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
}
- private:
- EventMap events;
- SummonList summons;
- ObjectGuid WaterElementalGUID;
- bool HasCastIceblock;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_balindaAI(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap events;
+ SummonList summons;
+ ObjectGuid WaterElementalGUID;
+ bool HasCastIceblock;
};
void AddSC_boss_balinda()
{
- new boss_balinda;
+ RegisterCreatureAI(boss_balinda);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
index 2d3091869e5..fdf3663b396 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_drekthar.cpp
@@ -47,104 +47,93 @@ enum Events
EVENT_RANDOM_YELL
};
-class boss_drekthar : public CreatureScript
+struct boss_drekthar : public ScriptedAI
{
-public:
- boss_drekthar() : CreatureScript("boss_drekthar") { }
+ boss_drekthar(Creature* creature) : ScriptedAI(creature) { }
- struct boss_drektharAI : public ScriptedAI
+ void Reset() override
{
- boss_drektharAI(Creature* creature) : ScriptedAI(creature) { }
+ events.Reset();
+ }
- void Reset() override
- {
- events.Reset();
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 1s, 20s);
+ events.ScheduleEvent(EVENT_WHIRLWIND2, 1s, 20s);
+ events.ScheduleEvent(EVENT_KNOCKDOWN, 12s);
+ events.ScheduleEvent(EVENT_FRENZY, 6s);
+ events.ScheduleEvent(EVENT_RANDOM_YELL, 20s, 30s);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_WHIRLWIND, 1s, 20s);
- events.ScheduleEvent(EVENT_WHIRLWIND2, 1s, 20s);
- events.ScheduleEvent(EVENT_KNOCKDOWN, 12s);
- events.ScheduleEvent(EVENT_FRENZY, 6s);
- events.ScheduleEvent(EVENT_RANDOM_YELL, 20s, 30s);
- }
+ void JustAppeared() override
+ {
+ Reset();
+ Talk(SAY_RESPAWN);
+ }
- void JustAppeared() override
+ bool CheckInRoom() override
+ {
+ if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
- Reset();
- Talk(SAY_RESPAWN);
+ EnterEvadeMode();
+ Talk(SAY_EVADE);
+ return false;
}
- bool CheckInRoom() override
- {
- if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
- {
- EnterEvadeMode();
- Talk(SAY_EVADE);
- return false;
- }
-
- return true;
- }
+ return true;
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim() || !CheckInRoom())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() || !CheckInRoom())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_WHIRLWIND:
- DoCastVictim(SPELL_WHIRLWIND);
- events.ScheduleEvent(EVENT_WHIRLWIND, 8s, 18s);
- break;
- case EVENT_WHIRLWIND2:
- DoCastVictim(SPELL_WHIRLWIND2);
- events.ScheduleEvent(EVENT_WHIRLWIND2, 7s, 25s);
- break;
- case EVENT_KNOCKDOWN:
- DoCastVictim(SPELL_KNOCKDOWN);
- events.ScheduleEvent(EVENT_KNOCKDOWN, 10s, 15s);
- break;
- case EVENT_FRENZY:
- DoCastVictim(SPELL_FRENZY);
- events.ScheduleEvent(EVENT_FRENZY, 20s, 30s);
- break;
- case EVENT_RANDOM_YELL:
- Talk(SAY_RANDOM);
- events.ScheduleEvent(EVENT_RANDOM_YELL, 20s, 30s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_WHIRLWIND:
+ DoCastVictim(SPELL_WHIRLWIND);
+ events.ScheduleEvent(EVENT_WHIRLWIND, 8s, 18s);
+ break;
+ case EVENT_WHIRLWIND2:
+ DoCastVictim(SPELL_WHIRLWIND2);
+ events.ScheduleEvent(EVENT_WHIRLWIND2, 7s, 25s);
+ break;
+ case EVENT_KNOCKDOWN:
+ DoCastVictim(SPELL_KNOCKDOWN);
+ events.ScheduleEvent(EVENT_KNOCKDOWN, 10s, 15s);
+ break;
+ case EVENT_FRENZY:
+ DoCastVictim(SPELL_FRENZY);
+ events.ScheduleEvent(EVENT_FRENZY, 20s, 30s);
+ break;
+ case EVENT_RANDOM_YELL:
+ Talk(SAY_RANDOM);
+ events.ScheduleEvent(EVENT_RANDOM_YELL, 20s, 30s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_drektharAI(creature);
+ DoMeleeAttackIfReady();
}
+
+ private:
+ EventMap events;
};
void AddSC_boss_drekthar()
{
- new boss_drekthar;
+ RegisterCreatureAI(boss_drekthar);
}
diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
index febb663d33d..a693a980846 100644
--- a/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
+++ b/src/server/scripts/EasternKingdoms/AlteracValley/boss_galvangar.cpp
@@ -48,104 +48,93 @@ enum Action
ACTION_BUFF_YELL = -30001 // shared from Battleground
};
-class boss_galvangar : public CreatureScript
+struct boss_galvangar : public ScriptedAI
{
-public:
- boss_galvangar() : CreatureScript("boss_galvangar") { }
+ boss_galvangar(Creature* creature) : ScriptedAI(creature) { }
- struct boss_galvangarAI : public ScriptedAI
+ void Reset() override
{
- boss_galvangarAI(Creature* creature) : ScriptedAI(creature) { }
+ events.Reset();
+ }
- void Reset() override
- {
- events.Reset();
- }
+ void JustEngagedWith(Unit* /*who*/) override
+ {
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_CLEAVE, 1s, 9s);
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 2s, 19s);
+ events.ScheduleEvent(EVENT_WHIRLWIND1, 1s, 13s);
+ events.ScheduleEvent(EVENT_WHIRLWIND2, 5s, 20s);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 5s, 20s);
+ }
- void JustEngagedWith(Unit* /*who*/) override
- {
- Talk(SAY_AGGRO);
- events.ScheduleEvent(EVENT_CLEAVE, 1s, 9s);
- events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 2s, 19s);
- events.ScheduleEvent(EVENT_WHIRLWIND1, 1s, 13s);
- events.ScheduleEvent(EVENT_WHIRLWIND2, 5s, 20s);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 5s, 20s);
- }
+ void DoAction(int32 actionId) override
+ {
+ if (actionId == ACTION_BUFF_YELL)
+ Talk(SAY_BUFF);
+ }
- void DoAction(int32 actionId) override
+ bool CheckInRoom() override
+ {
+ if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
{
- if (actionId == ACTION_BUFF_YELL)
- Talk(SAY_BUFF);
+ EnterEvadeMode();
+ Talk(SAY_EVADE);
+ return false;
}
- bool CheckInRoom() override
- {
- if (me->GetDistance2d(me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY()) > 50)
- {
- EnterEvadeMode();
- Talk(SAY_EVADE);
- return false;
- }
-
- return true;
- }
+ return true;
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim() || !CheckInRoom())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() || !CheckInRoom())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- switch (eventId)
- {
- case EVENT_CLEAVE:
- DoCastVictim(SPELL_CLEAVE);
- events.ScheduleEvent(EVENT_CLEAVE, 10s, 16s);
- break;
- case EVENT_FRIGHTENING_SHOUT:
- DoCastVictim(SPELL_FRIGHTENING_SHOUT);
- events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s, 15s);
- break;
- case EVENT_WHIRLWIND1:
- DoCastVictim(SPELL_WHIRLWIND1);
- events.ScheduleEvent(EVENT_WHIRLWIND1, 6s, 10s);
- break;
- case EVENT_WHIRLWIND2:
- DoCastVictim(SPELL_WHIRLWIND2);
- events.ScheduleEvent(EVENT_WHIRLWIND2, 10s, 25s);
- break;
- case EVENT_MORTAL_STRIKE:
- DoCastVictim(SPELL_MORTAL_STRIKE);
- events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10s, 30s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ case EVENT_CLEAVE:
+ DoCastVictim(SPELL_CLEAVE);
+ events.ScheduleEvent(EVENT_CLEAVE, 10s, 16s);
+ break;
+ case EVENT_FRIGHTENING_SHOUT:
+ DoCastVictim(SPELL_FRIGHTENING_SHOUT);
+ events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s, 15s);
+ break;
+ case EVENT_WHIRLWIND1:
+ DoCastVictim(SPELL_WHIRLWIND1);
+ events.ScheduleEvent(EVENT_WHIRLWIND1, 6s, 10s);
+ break;
+ case EVENT_WHIRLWIND2:
+ DoCastVictim(SPELL_WHIRLWIND2);
+ events.ScheduleEvent(EVENT_WHIRLWIND2, 10s, 25s);
+ break;
+ case EVENT_MORTAL_STRIKE:
+ DoCastVictim(SPELL_MORTAL_STRIKE);
+ events.ScheduleEvent(EVENT_MORTAL_STRIKE, 10s, 30s);
+ break;
+ default:
+ break;
}
- DoMeleeAttackIfReady();
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
- private:
- EventMap events;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_galvangarAI(creature);
+ DoMeleeAttackIfReady();
}
+
+private:
+ EventMap events;
};
void AddSC_boss_galvangar()
{
- new boss_galvangar;
+ RegisterCreatureAI(boss_galvangar);
}