- #include "ScriptMgr.h"
- #include "ScriptedCreature.h"
- enum Spells
- {
- SPELL_NARALEXNIGHTMARE = 7967,
- SPELL_TERRIFY = 7399,
- SPELL_THUNDERCRACK = 8150,
- };
- enum Events
- {
- //believe it or not, spell timers are a bit faster than retail
- EVENT_NARALEXNIGHTMARE = 1, // between 10 and 20 seconds
- EVENT_TERRIFY = 2, // first time 12 seconds, then each 20 seconds
- EVENT_THUNDERCRACK = 3, // 15 seconds
- };
- class boss_mutanus_the_devourer : public CreatureScript
- {
- public:
- boss_mutanus_the_devourer(): CreatureScript("boss_mutanus_the_devourer"){}
- struct boss_mutanus_the_devourerAI : public BossAI
- {
- boss_mutanus_the_devourerAI(Creature* creature) : BossAI(creature,0) {}
- void Reset() override
- {
- _Reset();
- }
- void EnterCombat(Unit* who) override
- {
- _EnterCombat();
- events.ScheduleEvent(EVENT_NARALEXNIGHTMARE, urand(10000, 20000));
- events.ScheduleEvent(EVENT_TERRIFY, 12000);
- events.ScheduleEvent(EVENT_THUNDERCRACK, 15000);
- }
- void UpdateAI(uint32 uiDiff) override
- {
- if (!UpdateVictim())
- return;
- events.Update(uiDiff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_NARALEXNIGHTMARE:
- if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCastVictim(EVENT_NARALEXNIGHTMARE);
- events.ScheduleEvent(EVENT_NARALEXNIGHTMARE, urand(10000, 20000));
- break;
- case EVENT_TERRIFY:
- if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
- DoCast(target, SPELL_TERRIFY);
- events.ScheduleEvent(EVENT_TERRIFY, 20000);
- break;
- case EVENT_THUNDERCRACK:
- DoCastVictim(SPELL_THUNDERCRACK);
- events.ScheduleEvent(EVENT_THUNDERCRACK, 15000);
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new boss_mutanus_the_devourerAI(creature);
- }
- };
- void AddSC_boss_mutanus_the_devourer()
- {
- new boss_mutanus_the_devourer();
- }