daily pastebin goal
38%
SHARE
TWEET

Untitled

a guest Sep 13th, 2017 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Shahram_from_item : public CreatureScript // тут инициализация скрипта
  2. {
  3. public:
  4.     Shahram_from_item() : CreatureScript("Shahram_from_item") { } // тут присвоение скрипту имени для связи с мобом
  5.  
  6.     CreatureAI *GetAI(Creature *pCreature) const
  7.     {
  8.         return new Shahram_from_itemAI(pCreature); // блок для обработки скрипта компилятором
  9.     }
  10.  
  11.     struct Shahram_from_itemAI : public ScriptedAI // шапка структуры скрипта
  12.     {
  13.         Shahram_from_itemAI(Creature *pCreature) : ScriptedAI(pCreature) { } // присвоение скрипту типа
  14.  
  15.         uint32 uiCastTimer; // объявление таймеров
  16.         uint32 uiDieTimer;  // объявление таймеров
  17.  
  18.         void Reset() // всё, что в этом блоке - происходит когда моб появляется в мире
  19.         {
  20.             uiCastTimer = urand(5000,10000); // присвоение значения таймеру , т.е. или 5 секунд, или 10 секунд, одно из двух случайным образом выберится
  21.             uiDieTimer = urand(40000,60000); // присвоение значения таймеру , т.е. или 40 секунд, или 60 секунд, одно из двух случайным образом выберится
  22.         }
  23.  
  24.         void UpdateAI(const uint32 uiDiff) // в этом блоке записаны все действия, которые производит моб
  25.         {
  26.             if (uiDieTimer <= uiDiff) // тут проверка значения таймера, т.е. если таймер подошёл (прошло время, указаное ранее) то выполняется то что в блоке, в противном случае таймер проолжает идти
  27.             {
  28.                 me->ForcedDespawn(1000); // функция исчезновения, в скобках время исчезновения, т.е. подходит таймер, выполняется функция, и чз 1 секунду (время в скобках в мск) моб пропадает
  29.             }
  30.             else
  31.                 uiDieTimer -= uiDiff; // продолжение таймера если время не подошло
  32.  
  33.             if (!UpdateVictim())   // очень важная проверка, дословно: если у моба нет цели, то всё что находится ниже он выполнять не будет
  34.                 return;
  35.  
  36.             if (uiCastTimer <= uiDiff) // тут проверка на таймер 2, всё что ниже - выполняется когда придёт время
  37.             {
  38.         uiCastTimer = urand(20000,30000); // повторный запуск таймера с новыми значениями
  39.         switch(urand(0, 5)) // тут какбы выберается случайное действие , в данном случае одно из 6ти (от 0 до 5)
  40.                 {
  41.         case 0:  // спелл 1 замедление
  42.         {
  43.         DoCast(me, 16597); //(моб кастует на себя спелл)
  44.         }
  45.         break;
  46.         case 1:  // спелл 2 оглушение
  47.         {
  48.         DoCast(me, 16600); //(моб кастует на себя спелл)
  49.         }
  50.         break;
  51.         case 2:  // спелл 3 кулак
  52.         {
  53.         if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
  54.         me->CastSpell(owner, 16601, false); //(моб кастует на игрока спелл)
  55.         }
  56.         break;     
  57.         case 3:  // спелл 4 благословление
  58.         {
  59.         if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
  60.         me->CastSpell(owner, 16599, false); //(моб кастует на игрока спелл)
  61.         }
  62.         break;
  63.         case 4:  // спелл 5 воля
  64.         {
  65.         if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
  66.         me->CastSpell(owner, 16598, false); //(моб кастует на игрока спелл)
  67.         }
  68.         break;
  69.         case 5:  // спелл 6 пламя
  70.         {
  71.         DoCast(me, 16596); //(моб кастует на себя спелл)
  72.         }
  73.         break;
  74.                 }
  75.             }
  76.             else
  77.                 uiCastTimer -= uiDiff;
  78.  
  79.             DoMeleeAttackIfReady(); // моб будет атаковать противника в мили если он способен, пишется в большинстве случаев
  80.         }
  81.     };
  82. };
RAW Paste Data
Top