-
Notifications
You must be signed in to change notification settings - Fork 5
Как создать гайд
Сначала установите параметры отладки при помощи команд описанных здесь (для добавления хуков и вывода нужной информации), затем войдите в данж, для которого вы хотите создать гайд. Как только вы вошли, посмотрите в консоли на идентификатор (ID). Также, список идентификаторов данжей можно найти здесь.
Далее создайте файл в папке guides. Имя файла должно состоять из ID (номера) данжа с расширением .js. Первой строкой в файле необходимо указать комментарий с названием данжа на английском языке. Редактирование файла config.json не требуется, вся необходимая информация о конфигурации созданного гайда будет добавлена автоматически при входе в игру.
Хук (hook) – функция, вызываемая при срабатывании определенного события, сгенерированного игрой (например при атаке босса, наложении эффекта и т.д.). Каждый хук может быть связан с необходимым алгоритмом обработки при помощи сценария гайда. О том как написать свой сценарий и связать нужные хуки с желаемыми действиями (выводом текста на экран, спауном маркеров и т.д.) – читайте ниже.
Примечание: все хуки, связанные с включенными опциями отладки, будут принудительно добавлены в любой гайд при его загрузке, даже если его сценарий не содержит ключей, добавляющих эти хуки.
Для генерации заготовки сценария гайда можно использовать: https://github.com/hsdn/tera-guide-generator
Для написания сценария используется определенный формат, заданный в виде объекта JavaScript {...}
, возвращаемого экспортируемой анонимной функцией в файле гайда (в значении оператора return
).
/**
* Аргументы функции:
* dispatch - Объект экземпляра класса Dispatch (экземпляр модуля доступен как dispatch._mod).
* handlers - Объект экземпляра класса Handlers, содержит все функции обработчиков событий.
* guide - Объект данных загруженного гайда.
* lang - Объект данных языковых настроек.
*/
module.exports = (dispatch, handlers, guide, lang) => {
// здесь описываются вспомогательные функции
return {
// здесь описывается сценарий гайда
"Ключ-1": [/* массив объектов обработки события */],
"Ключ-2": [/* массив объектов обработки события */],
// ...
};
};
Каждая запись объекта, указанного в return
, представляет из себя ключ (свойство), в значении которого указывается массив [...]
с объектами {...}
, содержащими параметры, необходимые для обработки событий.
Форматы ключей и объектов обработки событий описаны ниже.
Ключ представляет из себя строку, разделенную символами "-" вида: Префикс-huntingZoneId-templateId-Информация
- Префикс – указывает на тип отслеживаемого события.
- huntingZoneId – идентификатора зоны (ID данжа или локации).
- templateId – идентификатора NPC/босса/моба.
- Информация – HP% босса, идентификатор умения, стадия анимации умения и т.д.
Префикс | Описание |
---|---|
s | Начало анимации умения NPC (босса). |
e | Окончание анимации умения NPC (босса). |
h | Уровень здоровья NPC (босса). |
am | Наложение эффекта на вас NPC (боссом). |
ae | Наложение эффекта на вас сервером. |
af | Наложение эффекта на члена группы сервером. |
ap | Наложение эффекта на члена группы NPC (боссом). |
ab | Наложение эффекта на NPC (босса). |
ar | Удаление эффекта, наложенного на вас. |
at | Удаление эффекта, наложенного на члена группы. |
ad | Удаление эффекта, наложенного на NPC (босса). |
ns | Спаун NPC (выполняется при появлении босса). |
nd | Деспаун NPC (выполняется при смерти/вайпе босса). |
rb | Начало ярости NPC (босса). |
re | Окончание ярости NPC (босса). |
dm | Сообщение Dungeon Message. |
qb | Сообщение Quest Balloon. |
Все хуки, связанные с указанным в ключе префиксом, будут добавлены автоматически при загрузке гайда.
Для записей, указывающих обработку умений NPC, после последней "-" всегда указывается значение стадии анимации (число 0 или больше). Например для обработки события на нулевой (0) стадии анимации умения с ID 304, указывается ключ в виде: s-735-1000-304-0
.
Пример ключа:
"s-735-1000-304-0": [...]
s
– префикс, указывающий на обработку умения босса.
735
– идентификатор данжа (обычно совпадает с идентификатором гайда).
1000
– идентификатор босса (первый босс обычно имеет ID 1000, второй босс 2000 и т.д.).
304
– идентификатор умения босса (формат может отличаться в зависимости от указанного типа гайда, см. ниже).
0
– стадия анимации умения босса (многие анимации умений имеют несколько стадий, указываемых от 0 до n).
Для записей, указывающих обработку наложение эффекта, возможно указание дополнительного значения в конец ключа, указывающего на количество накопленных стаков данного эффекта.
Пример ключа:
"ab-735-1000-7351060-1": [...]
ab
– префикс, указывающий на обработку наложениz эффекта.
735
– идентификатор данжа.
1000
– идентификатор босса.
7351060
– идентификатор эффекта (см.: https://github.com/neowutran/TeraDpsMeterData/tree/master/hotdot).
1
– количество накопленных стаков для эффекта (значение от 1 до n).
Существуют также особые ключи, описывающие обработку отдельных (глобальных) событий, связанных с игроком. Данные ключи приведены в таблице ниже.
Ключ | Описание |
---|---|
die | Смерть игрока. |
resurrect | Воскрешение игрока. |
Пример использования:
"die": [...]
Существует несколько типов форматирования идентификаторов умений боссов, предназначенных для упрощения написания сценариев. Например если необходимо, чтобы все умения босса учитывали состояние его ярости, можно указать тип SP
, после чего вначале идентификатора будет добавлена дополнительная цифра, указывающая на состояние босса. Ниже представлена таблица с описанием всех типов.
Тип | Диапазоны | Возможное применение |
---|---|---|
SP | 1000-1999 2000-2999 3000-3999 |
Обработка умений в состоянии ярости (2000-2999) и без ярости (1000-1999), а также обработка специальных умений. |
ES | 100-299 3000-3999 |
Обработка умений без учета состояния ярости, а также обработка специальных умений. |
— | 100-399 | Обработка умений без учета состояния ярости. |
Тип форматирования указывается в свойстве type
для аргумента guide
в файле гайда внутри экспортируемой анонимной функции. Значение задается в виде констант SP
или ES
, например:
guide.type = SP;
При отсутствии указания типа или свойства, будет применено форматирование по умолчанию (диапазон 100-399).
Чтобы обрабатывать событие, вызываемое хуком при нахождении соответствующего ключа в сценарии, необходимо в массиве значения ключа указать один или более объектов обработки событий. Объект обработки событий представляет из себя набор параметров, описывающих то или иное действие, выполняемое при срабатывании события.
Примечание: каждый массив может содержать не более 30 объектов обработки события.
Пример объекта:
{ type: "text", sub_type: "message", message: "Out", message_RU: "От него" }
type
– тип действия, которое необходимо совершить (text – вывод сообщения на экран).
sub_type
– дополнительный параметр для типа text (message – стандартное сообщение).
message
и message_RU
– тексты сообщения на разных языках.
Набор параметров не ограничивается только теми, которые указаны в примере выше. Объекты событий могут описывать не только вывод сообщений на экран, но и спаун сложных фигур, вызов функций, проигрывание речи и т.д.
Все допустимые типы и параметры объектов обработки событий описаны здесь.
Помимо стандартного формата записи (ключ – массив), существует возможность создавать записи, ссылающиеся на другие существующие записи в файле гайда. Для этого в значении ключа вместо массива объектов, следует указать строку, содержащую название другого ключа, существующего в файле.
Пример использования:
"s-3034-1003-205-0": [{type: "text", sub_type: "message", message: "Wind (Kaia)" }],
"s-3034-1004-205-0": "s-3034-1003-205-0",
"s-3034-1005-205-0": "s-3034-1003-205-0",
"s-3034-1006-205-0": "s-3034-1003-205-0",
"s-3034-1007-205-0": "s-3034-1003-205-0",
Аналогичную возможность можно получить также при помощи обработчиков типа alias.
// Kezzel's Gorge
//
// Made by Multarix
module.exports = (dispatch, handlers, guide, lang) => {
return {
"nd-453-999": [
{ type: "stop_timers" },
{ type: "despawn_all" }
],
"s-453-999-103-0": [{ type: "text", sub_type: "message", message: "Smash (Left)", message_RU: "Удар (лево)" }],
"s-453-999-104-0": [{ type: "text", sub_type: "message", message: "Smash (Right)", message_RU: "Удар (право)" }],
"s-453-999-105-0": [
{ type: "text", sub_type: "message", message: "Rock Smash", message_RU: "Удар (танк)", class_position: "tank" },
{ type: "spawn", func: "circle", args: [true, 553, 0, 210, 14, 190, 0, 3000] }
],
"s-453-999-106-0": [
{ type: "text", sub_type: "message", message: "Blast", message_RU: "Выстрел" },
{ type: "text", sub_type: "message", message: "Dodge!", message_RU: "Эвейд!", delay: 2000 }
],
"s-453-999-107-0": [{ type: "text", sub_type: "message", message: "Whip", message_RU: "Кнут" }],
"s-453-999-116-0": [{ type: "text", sub_type: "message", message: "Shield", message_RU: "Щит" }],
"s-453-999-119-0": [
{ type: "text", sub_type: "message", message: "Kaia's Shield", message_RU: "Кайа", class_position: "priest" },
{ type: "text", sub_type: "message", message: "Thrall of Protection", message_RU: "Кайа", class_position: "mystic" },
{ type: "spawn", func: "circle", args: [true, 553, 0, 0, 10, 500, 0, 6000] }
],
"s-453-999-120-0": [
{ type: "text", sub_type: "message", message: "AoE Waves", message_RU: "AoE волны" },
{ type: "spawn", func: "circle", args: [false, 445, 0, 0, 14, 200, 0, 7000] },
{ type: "spawn", func: "circle", args: [false, 445, 0, 0, 10, 390, 0, 7000] },
{ type: "spawn", func: "circle", args: [false, 445, 0, 0, 8, 590, 0, 7000] }
]
};
};