diff options
Diffstat (limited to 'src')
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); } |