1. /*
  2. *╔═╦═╦═╦╦╦══╦═╦╗─╔╦══╗
  3. *║╦╣║║║║║╠╗╗║╦╣╚╦╝║══╣
  4. *║╩╣║║║║║╠╩╝║╩╬╗║╔╬══║
  5. *╚═╩╩═╩╩═╩══╩═╝╚═╝╚══╝
  6. * (http://emudevs.com)
  7. GameObject: (Burning Tree;191160)
  8. GameObject: (Burning Blaze;190570) - Deals Damage if near
  9. NPC DisplayID: 24905
  10. */
  11. enum SpellIds
  12. {
  13. /* NAME SPELLID CAST-TIME DAMAGE */
  14. SPELL_FIREBALL = 70282, // 3 sec 6198-7202
  15. SPELL_FIRE_SPIT = 66796, // 1 sec 5088-5912
  16. SPELL_BLAST_NOVA = 74392, // 2 sec 5688-7312
  17. };
  18. enum EventIds
  19. {
  20. EVENT_NONE,
  21. EVENT_FIREBALL,
  22. EVENT_FIRE_SPIT,
  23. EVENT_BLAST_NOVA,
  24. EVENT_SPAWN_FIRE,
  25. EVENT_SPAWN_FIRE_CLEANUP
  26. };
  27. class npc_battle : public CreatureScript
  28. {
  29. public:
  30. npc_battle() : CreatureScript("npc_battle") { }
  31. struct npc_battleAI : public ScriptedAI
  32. {
  33. npc_battleAI(Creature* creature) : ScriptedAI(creature) { }
  34. void Reset()
  35. {
  36. events.Reset();
  37. events.ScheduleEvent(EVENT_FIREBALL, urand(6000, 11000));
  38. events.ScheduleEvent(EVENT_FIRE_SPIT, urand(2000, 9000));
  39. events.ScheduleEvent(EVENT_BLAST_NOVA, urand(10000, 19000));
  40. events.ScheduleEvent(EVENT_SPAWN_FIRE, urand(30000, 38000));
  41. }
  42. void UpdateAI(uint32 diff)
  43. {
  44. events.Update(diff);
  45. while (uint32 eventId = events.ExecuteEvent())
  46. {
  47. switch(eventId)
  48. {
  49. case EVENT_FIREBALL:
  50. if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
  51. DoCast(target, SPELL_FIREBALL);
  52. events.ScheduleEvent(EVENT_FIREBALL, urand(6000, 11000));
  53. break;
  54. case EVENT_FIRE_SPIT:
  55. DoCast(me->getVictim(), SPELL_FIRE_SPIT, true);
  56. events.ScheduleEvent(EVENT_FIRE_SPIT, urand(2000, 9000));
  57. break;
  58. case EVENT_BLAST_NOVA:
  59. DoCast(SPELL_BLAST_NOVA);
  60. events.ScheduleEvent(EVENT_BLAST_NOVA, urand(10000, 19000));
  61. break;
  62. case EVENT_SPAWN_FIRE:
  63. me->MonsterYell("FLAMES COME FORTH!", LANG_UNIVERSAL, 0);
  64. events.ScheduleEvent(EVENT_SPAWN_FIRE, urand(30000, 38000));
  65. events.ScheduleEvent(EVENT_SPAWN_FIRE_CLEANUP, 15000);
  66. SpawnFire();
  67. break;
  68. case EVENT_SPAWN_FIRE_CLEANUP:
  69. ClearFire();
  70. break;
  71. }
  72. }
  73. DoMeleeAttackIfReady();
  74. }
  75. void SpawnFire()
  76. {
  77. float x, y, z;
  78. gameObjectTree = NULL;
  79. gameObjectFire = NULL;
  80. gameObjectFire2 = NULL;
  81. gameObjectFire3 = NULL;
  82. gameObjectFire4 = NULL;
  83. // Getting Position
  84. me->GetPosition(x, y, z);
  85. // Start Spawning
  86. gameObjectTree = me->SummonGameObject(191160, x, y, z, 0, 0, 0, 0, 0, 0);
  87. gameObjectTreeFire = me->SummonGameObject(190570, gameObjectTree->GetPositionX(), gameObjectTree->GetPositionY(), gameObjectTree->GetPositionZ(), 0, 0, 0, 0, 0, 0);
  88. gameObjectFire = me->SummonGameObject(190570, x, y + 10, z, 0, 0, 0, 0, 0, 0);
  89. gameObjectFire2 = me->SummonGameObject(190570, x, y -10, z, 0, 0, 0, 0, 0, 0);
  90. gameObjectFire3 = me->SummonGameObject(190570, x + 10, y, z, 0, 0, 0, 0, 0, 0);
  91. gameObjectFire4 = me->SummonGameObject(190570, x - 10, y, z, 0, 0, 0, 0, 0, 0);
  92. }
  93. void ClearFire()
  94. {
  95. if (gameObjectTree && gameObjectTreeFire && gameObjectFire && gameObjectFire2 && gameObjectFire3 && gameObjectFire4)
  96. {
  97. gameObjectTree->Delete();
  98. gameObjectTreeFire->Delete();
  99. gameObjectFire->Delete();
  100. gameObjectFire2->Delete();
  101. gameObjectFire3->Delete();
  102. gameObjectFire4->Delete();
  103. }
  104. }
  105. void JustDied(Unit* /* victim */)
  106. {
  107. events.Reset();
  108. ClearFire();
  109. }
  110. private:
  111. EventMap events;
  112. GameObject* gameObjectTree;
  113. GameObject* gameObjectTreeFire;
  114. GameObject* gameObjectFire;
  115. GameObject* gameObjectFire2;
  116. GameObject* gameObjectFire3;
  117. GameObject* gameObjectFire4;
  118. };
  119. CreatureAI* GetAI(Creature* creature) const
  120. {
  121. return new npc_battleAI(creature);
  122. }
  123. };
  124. void AddSC_mini_fight()
  125. {
  126. new npc_battle;
  127. }

EmuDevs - Mini Boss Fight