Главная | Форум | Статьи | Ф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
[Гайд] - Ездовые животные · (Гайды по WoW)
Автор: Darkensand
Последнее сообщение в 12:59
▃ ▅ █ STRIKE-DEATH | WOTL... · (Обычные сервера WoW)
Автор: Pensukdeath
Последнее сообщение в 05:18
Уход и забота за воинами: прок... · (Воин)
Автор: UncontesteD
Последнее сообщение в 17:34
Очень хороший зароботок!!! · (Флудилка)
Автор: Hordcore
Последнее сообщение в 12:57
Основы Sql · (Sql)
Автор: No-One
Последнее сообщение в 01:45
Баг на 30к крита 5.4.8 · (Баги WoW)
Автор: Darkensand
Последнее сообщение в 18:46
Баг на дамаг · (Баги WoW)
Автор: nikitadevil
Последнее сообщение в 18:44
Неуязвимость · (Баги WoW)
Автор: Darkensand
Последнее сообщение в 18:43
Бесконечный сокет · (Баги WoW)
Автор: Darkensand
Последнее сообщение в 18:42
Баг на ледянные баджи на uwow · (Баги WoW)
Автор: Darkensand
Последнее сообщение в 18:31
Новейший баг на дамаг ханта · (Баги WoW)
Автор: Act1mel
Последнее сообщение в 18:23
[БАГ] + к Урону для всех класс... · (Баги WoW)
Автор: Darkensand
Последнее сообщение в 18:22
Ретро паладин 4.3 · (Паладин)
Автор: Darkensand
Последнее сообщение в 02:05
Hellscream.ORG - Азиатский WoW... · (Обычные сервера WoW)
Автор: Alexstrasza007
Последнее сообщение в 10:30

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