Хочу обратить ваше внимание!
Создатели данного пособия предполагают, что люди которые его будут читать уже знакомы с основами языка с/с++. Если вы как минимум не знаете что такое типы данных, условные операторы, константы, функции, мы рекомендуем вам сначала ознакомится с основами языка, прежде чем читать. И так, для начала нам нужно понять что такое скрипт в ядре тринити. Для облегчения создания скриптов в ядре создан специальный класс. Этот класс называется ScriptedAI. Объекты, свойства и поля этого класса используются в каждом скрипте.
Теперь перейдем к созданию скриптов с эскортом. Что означает словосочетание "скрипт с эскортом"? Это означает, что существо, которое будет использовать данный скрипт будет идти/бежать по заданному маршруту, выполняя определенные действия в зависимости от ситуации. Для создания скриптов с эскортом используются объекты подкласса класса ScriptedAI, который называется npc_escortAI. Так как основная задача скрипта - заставить существо путешествовать по заданному маршруту, то в первую очередь рассмотрим как создать этот маршрут и попробуем понять как именно происходит процесс путешествия существа по миру игры. Возможно вы знаете что игровой мир это своеобразная трехмерная карта. Каждая точка мира имеет свои координаты. Эти координаты - x,y,z отвечают так же за текущее положение существа в мире. Что бы создать путь для существа, нужно сначала найти точки с координатами x,y,z, по которым это существо будет идти. После чего существо будет идти по прямой линии от первой точки пути до второй и так до самого конца. После того как мы нашли нужные нам точки нам следует привязать их к скрипту существа. Для этого существует несколько способов. Наиболее распространенный и рациональный - заполнение таблицы script_waypoint в базе данных World. Существует вики, где есть подробное описание полей этой таблицы. Тем не менее я приведу описание таблицы в этом пособии.
script_waypoint.bmp
На рисунке вы можете увидеть структуру таблицы. Она имеет 7 полей:
entry
pointid
location_x
location_y
location_z
waittime
point_comment
Первое поле entry - в этом нам нужно занести entry существа, для которого создается маршрут. entry должно совпадать с entry этого существа в таблице creature_template.
Второе поле pointid - это номер точки на карте в которую будет идти существо. Обычно нумерация точек идет от 0 или 1.
Далее следуют поля location_x, location_y, location_z. В эти поля нам нужно занести координаты каждой точки маршрута существа.
Шестое поле waittime. В этом поле можно записать время в миллисекундах (1000 = 1 секунде). Это время паузы, которую существо сделает, прежде чем снова идти, по достижению определенной точки пути.
Седьмое поле использует для описания/расшифровки. В нем программист может написать подсказку. Например, что по достижению определенной точки будет выполнено определенное действие (например существо что-то скажет).
Рассмотрим пример:
Код:
Code
DELETE FROM `script_waypoint` WHERE `entry`=18760;
INSERT INTO `script_waypoint` VALUES
(18760 ,0,-2265.21,3091.14,13.91,0, ''),
(18760 ,1,-2266.80,3091.33,13.82,1000, ''),
(18760 ,2,-2268.20,3091.14,13.82,7000, 'progress1');
Если существо с entry = 18760 будет использовать скрипт эскорта, то во время старта эскорта, существо с места спавна сначала пойдет в точку 0 с координатами -2265.21,3091.14,13.91, после чего существо начнет идти в точку 1 с координатами -2266.80,3091.33,13.82. Когда существо достигнет точки 1, оно сделает паузу в 1 секунду, после чего пойдет в точку 2. Так как точка 2 является последней точкой то по достижение этой точки существо выждет 7 секунд, после чего прекратит идти.
В следующем урывке мы рассмотрим случаи, когда средств базы недостаточно для создания маршрута существу.