Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  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. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement