Skip to content

Как создать гайд

DmitryS edited this page Mar 7, 2022 · 107 revisions

Сначала установите параметры отладки при помощи команд описанных здесь (для добавления хуков и вывода нужной информации), затем войдите в данж, для которого вы хотите создать гайд. Как только вы вошли, посмотрите в консоли на идентификатор (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.

Все хуки, связанные с указанным в ключе префиксом, будут добавлены автоматически при загрузке гайда.

Особенности префикса s (обработка умений NPC)

Для записей, указывающих обработку умений 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).

Особенности префиксов am, ae, ab (наложение эффекта)

Для записей, указывающих обработку наложение эффекта, возможно указание дополнительного значения в конец ключа, указывающего на количество накопленных стаков данного эффекта.

Пример ключа:

"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.

Пример готового файла сценария

guides/9053.js

// 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] }
		]
	};
};