1. #include "ScriptMgr.h"
  2. #include "ScriptedCreature.h"
  3. enum Spells
  4. {
  5. SPELL_DRUIDSLUMBER = 8040,
  6. SPELL_HEALINGTOUCH = 23381,
  7. SPELL_LIGHTNINGBOLT = 20295,
  8. SPELL_THORNSAURA = 8148,
  9. };
  10. enum Events
  11. {
  12. EVENT_DRUIDSLUMBER = 1, // between 10 and 25 seconds
  13. EVENT_HEALINGTOUCH = 2, // between 10 and 15 seconds
  14. EVENT_LIGHTNINGBOLT = 3, // between 3 and 10 seconds
  15. EVENT_THORNSAURA = 4, // first time between 1 and 10 seconds
  16. };
  17. enum Texts
  18. {
  19. SAY_AGGRO = 0, // None can stand against the Serpent Lords!
  20. };
  21. class boss_lady_anacondra : public CreatureScript
  22. {
  23. public:
  24. boss_lady_anacondra(): CreatureScript("boss_lady_anacondra"){}
  25. struct boss_lady_anacondraAI : public BossAI
  26. {
  27. boss_lady_anacondraAI(Creature* creature) : BossAI(creature,0) {}
  28. void Reset() override
  29. {
  30. _Reset();
  31. }
  32. void EnterCombat(Unit* who) override
  33. {
  34. _EnterCombat();
  35. Talk(SAY_AGGRO);
  36. events.ScheduleEvent(EVENT_DRUIDSLUMBER, urand(10000, 25000));
  37. events.ScheduleEvent(EVENT_HEALINGTOUCH, urand(10000, 15000));
  38. events.ScheduleEvent(EVENT_LIGHTNINGBOLT, urand(3000, 10000));
  39. events.ScheduleEvent(EVENT_THORNSAURA, urand(1000, 10000));
  40. }
  41. void UpdateAI(uint32 uiDiff) override
  42. {
  43. if (!UpdateVictim())
  44. return;
  45. events.Update(uiDiff);
  46. if (me->HasUnitState(UNIT_STATE_CASTING))
  47. return;
  48. while (uint32 eventId = events.ExecuteEvent())
  49. {
  50. switch (eventId)
  51. {
  52. case EVENT_DRUIDSLUMBER:
  53. if (Unit *target = SelectTarget(SELECT_TARGET_RANDOM, 0))
  54. DoCastVictim(SPELL_DRUIDSLUMBER);
  55. events.ScheduleEvent(EVENT_DRUIDSLUMBER, urand(10000, 25000));
  56. break;
  57. case EVENT_HEALINGTOUCH:
  58. if (Unit *target = DoSelectLowestHpFriendly(40.0f))
  59. DoCast(target, SPELL_HEALINGTOUCH);
  60. events.ScheduleEvent(EVENT_HEALINGTOUCH, urand(10000, 15000));
  61. break;
  62. case EVENT_LIGHTNINGBOLT:
  63. DoCastVictim(SPELL_LIGHTNINGBOLT);
  64. events.ScheduleEvent(EVENT_LIGHTNINGBOLT, urand(3000, 10000));
  65. break;
  66. case EVENT_THORNSAURA:
  67. DoCast(me, SPELL_THORNSAURA);
  68. events.ScheduleEvent(EVENT_THORNSAURA, 60000); //cast each minute
  69. break;
  70. }
  71. }
  72. DoMeleeAttackIfReady();
  73. }
  74. };
  75. CreatureAI* GetAI(Creature* creature) const override
  76. {
  77. return new boss_lady_anacondraAI(creature);
  78. }
  79. };
  80. void AddSC_boss_lady_anacondra()
  81. {
  82. new boss_lady_anacondra();
  83. }