Trigger/ru
Триггеры |
Начало / Русская DA Builder Wiki / Поделиться ВКонтакте
|
Триггеры, это нарисованные на области многоугольники, срабатывающие когда существо входит или выходит из него. Срабатываение триггера посылает движку событие, которое впоследствии, как правило, обрабатывается скриптом для выполнения каких-либо действий.
Contents
Создание триггера
Для создания нового триггера в меню "File" или на палитре ресурсов в контекстном меню выберите пункт "New -> Trigger" и отредактируйте следующие параметры:
- Секция "General"
- Comments: Основная информация о триггере.
- Group: Группа, к которой принадлежит триггер. Указывается, если триггер используется в качестве ловушки.
- Resource Name: Уникальный строковый идентификатор, используемый тулсетом и игрой для ссылок на триггер.
- Tag: Не уникальный строковый идентификатор, в основном используемый скриптами и другими ресурсами, связанными с триггером.
- Секция "Attributes"
- Script: Скрипт, обрабатывающий события триггера.
- Target Waypoint:
- Variable 2da: Позволяет выбрать нужную таблицу переменных. Только переменные из выбранной таблицы могут устанавливаться и читаться с помощью скриптов.
- Variables: Отображает поля выбранной выше таблицы переменных и позволяет переопределить переменные.
Теперь сохраните триггер. С этого момента вы можете разместить новый триггер на локации.
На локации триггер размещается следующим образом. Откройте нужную локацию и выберите на палитре ресурсов триггер, который вы хотите разместить. Теперь просто нарисуйте требуемую область триггера, указывая угловые точки. Двойной щелчок свяжет первую и последнюю точку, завершая рисование области триггера. Для получения более подробной информации о том, как рисовать области триггеров, смотрите статью про локации.
Обратите внимание, что плоскость триггера на локации может опуститься ниже поверхности, на которой триггер расположен. Однако это не помешает триггеру сработать, если кто-то пройдёт над ним, так как триггер чувствителен по всей вертикали.
Обработка событий триггера
Для обработки событий триггера используется скрипт, указанный в свойстве "Script" секции "Attributes" триггера. В качестве шаблона для вашего скрипта можно использовать "trigger_core.nss" из каталога "_Core" на палитре ресурсов.
Именно этот скрипт в своём первоначальном виде обрабатывает событие входа (EVENT_TYPE_ENTER) в триггер перехода.
Обратите внимание, что скрипт проверяет Игрок ли вошёл в триггер, установлены ли тэги локации и флажка для перехода. Не забывайте также при необходимости делать проверки, например, если вы хотите, чтобы ваш триггер срабатывал только на Игрока, также не забудьте сделать такую проверку, в противном случае он будет срабатывать на каждое существо.
Пример:
Запуск ролика. Ролик запускается только один раз при первом входе.
if(IsPartyMember(oCreature)) { // ПРОВЕРКА ЯВЛЯЕТСЯ ЛИ ВОШЕДШИЙ СУЩЕСТВОМ, ВХОДЯЩИМ В ПАРТИЮ ИГРОКА. resource rCutscene = R"mycutscene.cut"; // НАЗНАЧЕНИЕ РЕСУРСА РОЛИКА. LoadCutscene(rCutscene); // ЗАГРУЗКА РОЛИКА. PlayCutscene(oCreature); // ЗАПУСК РОЛИКА. DestroyObject(OBJECT_SELF, 0); // УНИЧТОЖЕНИЕ ТРИГГЕРА ДЛЯ ПРЕДОТВРАЩЕНИЯ ЕГО ВТОРИЧНОГО ЗАПУСКА. }
Комментарий: Первоначально приведённый выше пример использовал функцию IsPlayer, которая, по всей видимости, теперь отсутствует.
Если вы создаете свой скрипт, то не забудьте перенаправить обработку события дальше, используя следующий обработчик: HandleEvent(ev, RESOURCE_SCRIPT_TRIGGER_CORE);. Это гарантирует корректную обработку события, если ваш скрипт обработает событие не в полной мере.
После сохранения скрипта выберите его в поле "Script" секции "Attributes" триггера.
Обратите внимание: Скрипты триггеров некорректно обрабатывают функцию "SetObjectActive (OBJECT_SELF, FALSE)". Эта функция устанавливает триггер неактивным, но он всё равно будет реагировать на сторонние раздражители :). Таким образом, чтобы корректно обработать событие неактивного триггера необходимо провести проверку его активности, используя функцию "GetObjectActive (OBJECT_SELF)", и если триггер не активен, то не обрабатывать событие. Если же вы не собираетесь в дальнейшем использовать этот триггер, то просто уничтожьте его, используя функцию "DestroyObject (OBJECT_SELF, 0)", вместо его дизактивации.
Триггеры перехода
Для создания триггера перехода между локациями необходимо подредактировать его переменные. Для этого откройте триггер, в разделе "Attributes" выберите поле "Variable" и нажмите на кнопку .
Переменные под редактирование:
- TRIGGER_AT_DEST_TAG: тэг флажка (waypoint) назначения (флажок, на который Игрок будет телепортирован).
- TRIGGER_AT_DEST_AREA_TAG: тэг локации с вышеуказанным флажком (если локация отличается от текущей).
- TRIGGER_AT_DEST_AREALIST_TAG: тэг группы (arealist) вышеуказанной локации (если группа отличается от текущей).
Теперь в случае, если Игрок заденет этот триггер, он будет перенесён в указанную локацию на указанный флажок. Если перенос происходит в рамках одной локации Игрок будет перенесён внутри локации на указанный флажок.
Триггеры диалога
Триггеры диалога - это триггеры, запускающие определённый диалог. Такое использование триггеров в DA встречается повсеместно, поэтому для этой цели разработчики использовали специальный скрипт, именуемый "gen00tr_talk.nss", и специальную таблицу переменных, именуемую "var_trigger_talk".
Для того, чтобы ваш триггер стал триггером диалога, необходимо в свойствах триггера "Script" и "Variable 2da" выбрать соответствующие скрипт и таблицу переменных. Доступные переменные этой таблицы приведены в следующем разделе.
Триггеры поведения
Триггеры поведения - это триггеры, позволяющие при их активации задать поведение какого-либо существа, активировавшего триггер. Такое использование триггеров в DA также часто встречается, поэтому и для их создания применяются специальные скрипт, именуемый "gentr_ambient.nss", и таблица переменных, именуемая "var_trigger_ambient".
Для того, чтобы ваш триггер стал триггером диалога, необходимо в свойствах триггера "Script" и "Variable 2da" выбрать соответствующие скрипт и таблицу переменных. Доступные переменные этой таблицы приведены в следующем разделе.
Смотрите статью Поведение окружающих (en) для получения более детальной информации.
Ловушки
Можно использовать триггеры в качестве ловушек, как это сделано, например, в Neverwinter Nigths, но в Dragon Age предпочтительней использовать специальные ловушки, являющиеся по своей сути обычными размещаемыми объектами (en). Их использование более реалистично и удобно, как для Игрока, так и для разработчика.
Смотрите статью Система ловушек (en) для получения более детальной информации об обработке ловушек.
Переменные триггеров
Набор переменных базовой таблицы "var_trigger 2da"
Variable name | Type | Default | Description |
---|---|---|---|
TRIGGER_ACTIVATE_TEAM_HELP | int | [Помогите перевести] Activates team-help system on a team of creatures using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_HELP, AI_HELP_TEAM_STATUS, 1); | |
TRIGGER_ACTIVATE_TEAM_STATIONARY_HARD | int | [Помогите перевести] Activates a team to be stationary (AI system) using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_STATIONARY_HARD, AI_FLAG_STATIONARY, 2); | |
TRIGGER_ACTIVATE_TEAM_STATIONARY_SOFT | int | [Помогите перевести] Activates a team to be stationary (AI system) using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_STATIONARY_SOFT, AI_FLAG_STATIONARY, 1); | |
TRIGGER_AT_DEST_AREA_TAG | string | Тэг флажка (waypoint) назначения (флажок, на который Игрок будет телепортирован). | |
TRIGGER_AT_DEST_TAG | string | Тэг локации с вышеуказанным флажком (если локация отличается от текущей). | |
TRIGGER_COUNTER_1 to 3 | int | ||
TRIGGER_DO_ONCE_A and B | int | Позволяет скрипту обработки событий остлеживать количество срабатываний триггера (устанавливая и считывая значение переменной). | |
TRIGGER_ENCOUNTER_TEAM | int | ||
TRIGGER_PARTY_TRIGGER_LOCATION | int | ||
TRIGGER_ROOM_TEXT | int |
Набор меременных таблицы "var_trigger_talk variable 2da"
Variable name | Type | Default | Description |
---|---|---|---|
TRIG_TALK_ACTIVE_FOR_FLAG | int | Триггер срабатывает, только если указанный Plot-флаг активен (работает совместно с TRIG_TALK_ACTIVE_FOR_PLOT). | |
TRIG_TALK_ACTIVE_FOR_PLOT | string | В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает соместно с TRIG_TALK_ACTIVE_FOR_FLAG). | |
TRIG_TALK_DIALOG_OVERRIDE | resource | Ресурс диалога для подмены ассоциированного по умолчанию с целевым существом или размещаемым объектом. Указывается в формате "gen000_example.dlg" (без кавычек). | |
TRIG_TALK_INACTIVE_FOR_FLAG and FLAG2 | int | Триггер срабатывает, только если указанный Plot-флаг не активен (работает совместно с TRIG_TALK_INACTIVE_FOR_PLOT). | |
TRIG_TALK_INACTIVE_FOR_PLOT and PLOT2 | string | В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает совместно с TRIG_TALK_ACTIVE_FOR_FLAG). | |
TRIG_TALK_LISTENER | string | Тэг Слушателя по диалогу. Используется для окружающих диалогов (НПС с НПС без загрузки оболочки диалога). | |
TRIG_TALK_REPEAT | int | Определяет возможность повторного срабатывания триггера. 1 - триггер срабатывает постоянно. 0 - триггер срабатывает один раз. | |
TRIG_TALK_SET_FLAG and FLAG2 | int | В данной переменной можно указать Plot-флаг, значение которого будет установлено при срабатывании триггера (работает совместно с TRIG_TALK_SET_PLOT). | |
TRIG_TALK_SET_PLOT and PLOT2 | string | В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает совместно с TRIG_TALK_SET_FLAG). | |
TRIG_TALK_SPEAKER | string | Тэг Говоруна по диалогу. Единственная обязательная переменная. |
Набор переменных таблицы "var_trigger_ambient 2da"
Variable name | Type | Default | Description |
---|---|---|---|
AMBIENT_ANIM_FREQ_OVERRIDE | float | Если значение не пустое, то данная переменная подменяет значение "AMBIENT_ANIM_FREQ" в таблице переменных существа. Тип переменной - float (en) (x.y). Переменная задаёт проигрываемые шаблоны поведения начиная с "x" и заканичвая "y". Например "-1.0" заставит существо проигрывать все шаблоны поведения по порядку в соответствии с ambient_ai.xls (en). | |
AMBIENT_ANIM_OVERRIDE_COUNT | int | Счётчик проигрываемых шаблонов поведения, после достижения которого восстанавливаются оригинальные значения переменных, подменённых триггером. По умолчанию значение равно -1, то есть без отсчёта (оригинальные значения не восстанавливаются). | |
AMBIENT_ANIM_PATTERN_OVERRIDE | int | ID шаблона анимации в ambient_ai.xls (en). Если значение не пустое, то данная переменная подменяет значение "AMBIENT_ANIM_PATTERN". | |
AMBIENT_TARGET_FILTER | string | Фильтр существ, вход которых в триггер или нахождение в нём, переопределяет их поведение. В данной переменной указываются тэги существ, поведение которых вы хотите подменить. | |
AMBIENT_TRIGGER_FILTER | string | Фильтр существ, чьё поведение переопределяется только при входе в триггер. Тэги существ также указываются через запятую. Используйте тэг "<hero>" для указания на игрока. Если данная переменная пустая, то используется переменная "AMBIENT_TARGET_FILTER". |
Язык: | English • русский |
---|