1. #include "ScriptMgr.h"
  2. #include "ScriptedCreature.h"
  3. enum Spells
  4. {
  5. SPELL_NARALEXNIGHTMARE = 7967,
  6. SPELL_TERRIFY = 7399,
  7. SPELL_THUNDERCRACK = 8150,
  8. };
  9. enum Events
  10. {
  11. //believe it or not, spell timers are a bit faster than retail
  12. EVENT_NARALEXNIGHTMARE = 1, // between 10 and 20 seconds
  13. EVENT_TERRIFY = 2, // first time 12 seconds, then each 20 seconds
  14. EVENT_THUNDERCRACK = 3, // 15 seconds
  15. };
  16. class boss_mutanus_the_devourer : public CreatureScript
  17. {
  18. public:
  19. boss_mutanus_the_devourer(): CreatureScript("boss_mutanus_the_devourer"){}
  20. struct boss_mutanus_the_devourerAI : public BossAI
  21. {
  22. boss_mutanus_the_devourerAI(Creature* creature) : BossAI(creature,0) {}
  23. void Reset() override
  24. {
  25. _Reset();
  26. }
  27. void EnterCombat(Unit* who) override
  28. {
  29. _EnterCombat();
  30. events.ScheduleEvent(EVENT_NARALEXNIGHTMARE, urand(10000, 20000));
  31. events.ScheduleEvent(EVENT_TERRIFY, 12000);
  32. events.ScheduleEvent(EVENT_THUNDERCRACK, 15000);
  33. }
  34. void UpdateAI(uint32 uiDiff) override
  35. {
  36. if (!UpdateVictim())
  37. return;
  38. events.Update(uiDiff);
  39. if (me->HasUnitState(UNIT_STATE_CASTING))
  40. return;
  41. while (uint32 eventId = events.ExecuteEvent())
  42. {
  43. switch (eventId)
  44. {
  45. case EVENT_NARALEXNIGHTMARE:
  46. if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
  47. DoCastVictim(EVENT_NARALEXNIGHTMARE);
  48. events.ScheduleEvent(EVENT_NARALEXNIGHTMARE, urand(10000, 20000));
  49. break;
  50. case EVENT_TERRIFY:
  51. if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
  52. DoCast(target, SPELL_TERRIFY);
  53. events.ScheduleEvent(EVENT_TERRIFY, 20000);
  54. break;
  55. case EVENT_THUNDERCRACK:
  56. DoCastVictim(SPELL_THUNDERCRACK);
  57. events.ScheduleEvent(EVENT_THUNDERCRACK, 15000);
  58. break;
  59. }
  60. }
  61. DoMeleeAttackIfReady();
  62. }
  63. };
  64. CreatureAI* GetAI(Creature* creature) const override
  65. {
  66. return new boss_mutanus_the_devourerAI(creature);
  67. }
  68. };
  69. void AddSC_boss_mutanus_the_devourer()
  70. {
  71. new boss_mutanus_the_devourer();
  72. }