Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Пособие для создания скриптов ядра Trinity(spells,creature,e - Форум

  • Сторінка 1 з 1
  • 1
Пособие для создания скриптов ядра Trinity(spells,creature,e
pro[100]DeadlyДата: Неділя, 05.12.2010, 19:54 | Сообщение # 1



pro[100]Deadly
Группа: Видалені

Замечания:






Итак, в предыдущем урывке мы рассмотрели что такое координаты пути существа и как их создать. Так же мы рассмотрели один из способов связывания пути существа со скриптом, а именно средствами базы данных. Этот способ является наиболее удобным и рациональным. Но тем не менее, в некоторых случаях он не подходит для достижение цели и создания скрипта, который будет работать хотя бы отдаленно как на официальном сервере. Ярким примером является квест Escape from Skettis в данном квесте нам нужно что бы в зависимости от условий существо шло по абсолютно разным путям. Т.е. имело разные координаты точек пути. Что бы реализовать такую возможность, нам нужно воспользоваться методом класса npc_escortAI который называется AddWaypoint.
Code
void AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs = 0);

С помощью этого метода мы в самом начале скрипта заполняем контейнер с точками пути существа. Так как мы это делаем в скрипте, мы можем сделать условие в результате которого точки будут иметь различные координаты. Например в квесте Escape from Skettis нам нужно что бы существо шло по различным путям в зависимости от места где оно находятся, так как у него есть 3 точки спавна. В данном квесте я воспользовался гуидом существа что бы определять какой именно путь ему выбрать. Хотя на самом деле условие может быть любым.

Code
  void StartEvent(Player* pPlayer, const Quest* pQuest)
     {
         switch (me->GetGUIDLow())
         {
         case 1189307:
             AddWaypoint(0, -4108.25, 3032.18, 344.799, 3000);
             AddWaypoint(1, -4114.41, 3036.73, 344.039);
             AddWaypoint(2, -4126.41, 3026.07, 344.156);
             AddWaypoint(3, -4145.17, 3029.69, 337.423);
             AddWaypoint(4, -4173.69, 3035.72, 343.346);
             AddWaypoint(5, -4173.70, 3047.37, 343.888);
             AddWaypoint(6, -4183.47, 3060.62, 344.157, 3000);
             AddWaypoint(7, -4179.13, 3090.20, 323.971, 30000);
             Start(false, false, pPlayer->GetGUID(), pQuest);
             break;
         case 1189309:
             AddWaypoint(0, -3718.81, 3787.24, 302.890, 3000);
             AddWaypoint(1, -3714.44, 3780.35, 302.075);
             AddWaypoint(2, -3698.33, 3788.04, 302.171);
             AddWaypoint(3, -3679.36, 3780.25, 295.077);
             AddWaypoint(4, -3654.82, 3770.43, 301.291);
             AddWaypoint(5, -3656.07, 3757.31, 301.985);
             AddWaypoint(6, -3648.83, 3743.07, 302.173, 3000);
             AddWaypoint(7, -3659.16, 3714.94, 281.576, 30000);
             Start(false, false, pPlayer->GetGUID(), pQuest);
             break;
         default:
             AddWaypoint(0, -3671.51, 3385.36, 312.956, 3000);
             AddWaypoint(1, -3677.74, 3379.05, 312.136);
             AddWaypoint(2, -3667.52, 3366.45, 312.233);
             AddWaypoint(3, -3672.87, 3343.52, 304.994);
             AddWaypoint(4, -3679.35, 3319.01, 311.419);
             AddWaypoint(5, -3692.93, 3318.69, 312.081);
             AddWaypoint(6, -3704.08, 3309.56, 312.233, 3000);
             AddWaypoint(7, -3733.99, 3315.77, 292.093, 30000);
             Start(false, false, pPlayer->GetGUID(), pQuest);
             break;
         }
         return;
     }

Добавлено (05.12.2010, 19:54)
---------------------------------------------
Мы рассмотрели основу скриптов с эскортом - создание и связывание со скриптом пути существа.
Теперь мы рассмотрим как запустить сам скрипт - заставить существо идти по заданному маршруту. Для этого существует метод Start

Code

void Start(bool bIsActiveAttacker = true, bool bRun = false, uint64 uiPlayerGUID = 0, const Quest* pQuest = NULL, bool bInstantRespawn = false, bool bCanLoopPath = false);

Этот метод может быть вызван в зависимости от какого-либо условия. Наиболее частые условия - взятие квеста у существа или разговор с существом. Как вы видите у каждой переменной этой функции есть значение по умолчанию. Потому во время ее вызова можно не заполнять значение переменных. Т.е. будет достаточно ее вызвать вот так:

Code
Start();

Тем не менее чаще всего в скрипте нужны такие данные как гуид персонажа, квест, потому желательно заполнять эти переменные. Вот описание этих переменных:
bool bIsActiveAttacker - если стоит значение true, то существо будет нападать на всех вражеских существ, которые будут в радиусе его агро. Соответственно если значение false, то существо будет атаковать только если само будет атаковано или же будет атакован игрок, который сопровождает это существо.
bool bRun - если стоит значение true, то существо будет бежать во время эскорта, если false - идти.
uint64 uiPlayerGUID гуид игрока который сопровождает существо.
const Quest* pQuest ид квеста. Если стоит не нулевое значение, это означает что в случае смерти существа, квест у сопровождающего игрока провалиться.
bool bInstantRespawn не использовался мною. Будет заполнено позже. (Респавн после смерти?)
bCanLoopPath не использовался мною. Будет заполнено позже.
Рассмотрим пример вызова этого метода во время взятия квеста.

Code
bool QuestAccept_npc_test(Player* pPlayer, Creature* pCreature, Quest const* pQuest)
{
     if (pQuest->GetQuestId() == SOME_QUEST)
     {
         if (npc_escortAI* pEscortAI = CAST_AI(npc_escortAI, pCreature->AI()))
             pEscortAI->Start(false, false, pPlayer->GetGUID(), pQuest);
     }
     return true;
}

Это означает, что существо будет идти, не будет самостоятельно нападать. В случае смерти квест SOME_QUEST будет провален у игрока с гуидом pPlayer->GetGUID(). Так же теперь можно использовать гуид игрока в скрипте с помощью метода Player* GetPlayerForEscort()
Например вот такой функцией в скрипте:

Code
Player* pPlayer = GetPlayerForEscort()
....
if (Player* pPlayer = GetPlayerForEscort())
{
     условие;
}
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz