Advertisement
Guest User

EmuDevs - Mini Boss Fight

a guest
May 23rd, 2013
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.92 KB | None | 0 0
  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.  
  19. enum EventIds
  20. {
  21.     EVENT_NONE,
  22.     EVENT_FIREBALL,
  23.     EVENT_FIRE_SPIT,
  24.     EVENT_BLAST_NOVA,
  25.     EVENT_SPAWN_FIRE,
  26.     EVENT_SPAWN_FIRE_CLEANUP
  27. };
  28.  
  29. class npc_battle : public CreatureScript
  30. {
  31. public:
  32.     npc_battle() : CreatureScript("npc_battle") { }
  33.  
  34.     struct npc_battleAI : public ScriptedAI
  35.     {
  36.         npc_battleAI(Creature* creature) : ScriptedAI(creature) { }
  37.  
  38.         void Reset()
  39.         {
  40.             events.Reset();
  41.             events.ScheduleEvent(EVENT_FIREBALL, urand(6000, 11000));
  42.             events.ScheduleEvent(EVENT_FIRE_SPIT, urand(2000, 9000));
  43.             events.ScheduleEvent(EVENT_BLAST_NOVA, urand(10000, 19000));
  44.             events.ScheduleEvent(EVENT_SPAWN_FIRE, urand(30000, 38000));
  45.         }
  46.  
  47.         void UpdateAI(uint32 diff)
  48.         {
  49.             events.Update(diff);
  50.  
  51.             while (uint32 eventId = events.ExecuteEvent())
  52.             {
  53.                 switch(eventId)
  54.                 {
  55.                     case EVENT_FIREBALL:
  56.                         if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
  57.                             DoCast(target, SPELL_FIREBALL);
  58.                         events.ScheduleEvent(EVENT_FIREBALL, urand(6000, 11000));
  59.                         break;
  60.                     case EVENT_FIRE_SPIT:
  61.                         DoCast(me->getVictim(), SPELL_FIRE_SPIT, true);
  62.                         events.ScheduleEvent(EVENT_FIRE_SPIT, urand(2000, 9000));
  63.                         break;
  64.                     case EVENT_BLAST_NOVA:
  65.                         DoCast(SPELL_BLAST_NOVA);
  66.                         events.ScheduleEvent(EVENT_BLAST_NOVA, urand(10000, 19000));
  67.                         break;
  68.                     case EVENT_SPAWN_FIRE:
  69.                         me->MonsterYell("FLAMES COME FORTH!", LANG_UNIVERSAL, 0);
  70.                         events.ScheduleEvent(EVENT_SPAWN_FIRE, urand(30000, 38000));
  71.                         events.ScheduleEvent(EVENT_SPAWN_FIRE_CLEANUP, 15000);
  72.                         SpawnFire();
  73.                         break;
  74.                     case EVENT_SPAWN_FIRE_CLEANUP:
  75.                         ClearFire();
  76.                         break;
  77.                 }
  78.             }
  79.             DoMeleeAttackIfReady();
  80.         }
  81.  
  82.         void SpawnFire()
  83.         {
  84.             float x, y, z;
  85.             gameObjectTree = NULL;
  86.             gameObjectFire = NULL;
  87.             gameObjectFire2 = NULL;
  88.             gameObjectFire3 = NULL;
  89.             gameObjectFire4 = NULL;
  90.             // Getting Position
  91.             me->GetPosition(x, y, z);
  92.             // Start Spawning
  93.             gameObjectTree = me->SummonGameObject(191160, x, y, z, 0, 0, 0, 0, 0, 0);
  94.             gameObjectTreeFire = me->SummonGameObject(190570, gameObjectTree->GetPositionX(), gameObjectTree->GetPositionY(), gameObjectTree->GetPositionZ(), 0, 0, 0, 0, 0, 0);
  95.             gameObjectFire = me->SummonGameObject(190570, x, y + 10, z, 0, 0, 0, 0, 0, 0);
  96.             gameObjectFire2 = me->SummonGameObject(190570, x, y -10, z, 0, 0, 0, 0, 0, 0);
  97.             gameObjectFire3 = me->SummonGameObject(190570, x + 10, y, z, 0, 0, 0, 0, 0, 0);
  98.             gameObjectFire4 = me->SummonGameObject(190570, x - 10, y, z, 0, 0, 0, 0, 0, 0);
  99.         }
  100.  
  101.         void ClearFire()
  102.         {
  103.             if (gameObjectTree && gameObjectTreeFire && gameObjectFire && gameObjectFire2 && gameObjectFire3 && gameObjectFire4)
  104.             {
  105.                 gameObjectTree->Delete();
  106.                 gameObjectTreeFire->Delete();
  107.                 gameObjectFire->Delete();
  108.                 gameObjectFire2->Delete();
  109.                 gameObjectFire3->Delete();
  110.                 gameObjectFire4->Delete();
  111.             }
  112.         }
  113.  
  114.         void JustDied(Unit* /* victim */)
  115.         {
  116.             events.Reset();
  117.             ClearFire();
  118.         }
  119.     private:
  120.         EventMap events;
  121.         GameObject* gameObjectTree;
  122.         GameObject* gameObjectTreeFire;
  123.         GameObject* gameObjectFire;
  124.         GameObject* gameObjectFire2;
  125.         GameObject* gameObjectFire3;
  126.         GameObject* gameObjectFire4;
  127.     };
  128.  
  129.     CreatureAI* GetAI(Creature* creature) const
  130.     {
  131.         return new npc_battleAI(creature);
  132.     }
  133. };
  134.  
  135. void AddSC_mini_fight()
  136. {
  137.     new npc_battle;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement