Итак, чтобы привязать к боссу АИ, нужно написать его класс и выбрать, какую структуру он использует. Структур две: BossAI и ScriptedAI Разберем вторую.
Для нормального оформления в начале кода используется перечислитель значений Enum
В программировании время измеряется в миллисекундах. Поэтому 40000 милисек = 40 сек. (1000 миллисекунд = 1 секунда)
Дальше можно ввести воидные ф-ции, которые будут инициализировать код при смерти босса.. Рассмотрим примеры "босс умер и сказал что-либо" и "босс агрится и говорит"
void JustDied(Unit* /*pKiller*/) { me->MonsterYell("i'm is dead", LANG_UNIVERSAL, NULL); }
вместо текста в кавычках можно использовать текст из БД, который можно так же предопределить, как и спеллы, либо написать цифрами "(-111111, LANG_UNIVERSAL, NULL); LANG_UNIVERSAL - язык, который понятен всем рассам. Все языки: [spoiler] LANG_UNIVERSAL LANG_ORCISH LANG_DARNASSIAN LANG_TAURAHE LANG_DWARVISH LANG_COMMON LANG_DEMONIC LANG_TITAN LANG_THALASSIAN LANG_DRACONIC LANG_KALIMAG LANG_GNOMISH LANG_TROLL LANG_GUTTERSPEAK LANG_DRAENEI LANG_ZOMBIE LANG_GNOMISH_BINARY LANG_GOBLIN_BINARY LANG_WORGEN LANG_GOBLIN };
так же существуют ф-ции для вывода сообщения в игру: MonsterSay(текст, язык, цель) MonsterTextEmote(текст, цель, булевая переменная(true, false) Если true, то сообщение будет выводиться на центр экрана(как предупреждение Рла в рейде) MonsterWhisper(текст, цель, булевая переменная(true, false) MonsterYellToZone(текст, язык, цель)
Дальше обновление АИ. То, что босс делает постоянно. Напишем небольшой код на наши спеллы("берсерк" и "крушитель черепов")
Code
void UpdateAI(const uint32 diff) { if (!UpdateVictim()) return;
if (SkullcrackerTimer <= diff) { if (Unit* target = me->getVictim()) DoCast(target, SPELL_SKULLCRACKER);
Принцип: Если таймер меньше или равен нулю, то кастуем и обновляем таймер. Иначе отсчитываем таймер в меньшую сторону.
DoMeleeAttackIfReady(); - дает возможность боссу драться обыкновенными атаками. Если этой ф-ции не будет, босс будет просто бегать за целью, но не будет ее бить. Только кастовать.
Итак, суть босса: При агре кричит "I kill you", при смерти: "I'm dead" Каждые 20 секунд бьет танка Крушителем церепов, а каждые 40 секунд впадает в легкий берсерк.
Копирование материала разрешается только с разрешения автора. (т.е. меня)
Сообщение # 1 отредактировано Unregistered - Воскресенье, 19.02.2012, 19:53