Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Shahram_from_item : public CreatureScript // тут инициализация скрипта
- {
- public:
- Shahram_from_item() : CreatureScript("Shahram_from_item") { } // тут присвоение скрипту имени для связи с мобом
- CreatureAI *GetAI(Creature *pCreature) const
- {
- return new Shahram_from_itemAI(pCreature); // блок для обработки скрипта компилятором
- }
- struct Shahram_from_itemAI : public ScriptedAI // шапка структуры скрипта
- {
- Shahram_from_itemAI(Creature *pCreature) : ScriptedAI(pCreature) { } // присвоение скрипту типа
- uint32 uiCastTimer; // объявление таймеров
- uint32 uiDieTimer; // объявление таймеров
- void Reset() // всё, что в этом блоке - происходит когда моб появляется в мире
- {
- uiCastTimer = urand(5000,10000); // присвоение значения таймеру , т.е. или 5 секунд, или 10 секунд, одно из двух случайным образом выберится
- uiDieTimer = urand(40000,60000); // присвоение значения таймеру , т.е. или 40 секунд, или 60 секунд, одно из двух случайным образом выберится
- }
- void UpdateAI(const uint32 uiDiff) // в этом блоке записаны все действия, которые производит моб
- {
- if (uiDieTimer <= uiDiff) // тут проверка значения таймера, т.е. если таймер подошёл (прошло время, указаное ранее) то выполняется то что в блоке, в противном случае таймер проолжает идти
- {
- me->ForcedDespawn(1000); // функция исчезновения, в скобках время исчезновения, т.е. подходит таймер, выполняется функция, и чз 1 секунду (время в скобках в мск) моб пропадает
- }
- else
- uiDieTimer -= uiDiff; // продолжение таймера если время не подошло
- if (!UpdateVictim()) // очень важная проверка, дословно: если у моба нет цели, то всё что находится ниже он выполнять не будет
- return;
- if (uiCastTimer <= uiDiff) // тут проверка на таймер 2, всё что ниже - выполняется когда придёт время
- {
- uiCastTimer = urand(20000,30000); // повторный запуск таймера с новыми значениями
- switch(urand(0, 5)) // тут какбы выберается случайное действие , в данном случае одно из 6ти (от 0 до 5)
- {
- case 0: // спелл 1 замедление
- {
- DoCast(me, 16597); //(моб кастует на себя спелл)
- }
- break;
- case 1: // спелл 2 оглушение
- {
- DoCast(me, 16600); //(моб кастует на себя спелл)
- }
- break;
- case 2: // спелл 3 кулак
- {
- if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
- me->CastSpell(owner, 16601, false); //(моб кастует на игрока спелл)
- }
- break;
- case 3: // спелл 4 благословление
- {
- if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
- me->CastSpell(owner, 16599, false); //(моб кастует на игрока спелл)
- }
- break;
- case 4: // спелл 5 воля
- {
- if(Unit * owner = me->GetOwner()) // функция получения игрока чз моба, т.е. выберается тот, кто призвал этого моба
- me->CastSpell(owner, 16598, false); //(моб кастует на игрока спелл)
- }
- break;
- case 5: // спелл 6 пламя
- {
- DoCast(me, 16596); //(моб кастует на себя спелл)
- }
- break;
- }
- }
- else
- uiCastTimer -= uiDiff;
- DoMeleeAttackIfReady(); // моб будет атаковать противника в мили если он способен, пишется в большинстве случаев
- }
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement