Difference between revisions of "Trigger/ru"

From Dragon Age Toolset Wiki
Jump to: navigation, search
m (Edit)
m (Набор переменных базовой таблицы "var_trigger 2da": Небольшие правки)
 
(10 intermediate revisions by the same user not shown)
Line 29: Line 29:
 
Обратите внимание, что плоскость триггера на локации может опуститься ниже поверхности, на которой триггер расположен. Однако это не помешает триггеру сработать, если кто-то пройдёт над ним, так как триггер чувствителен по всей вертикали.  
 
Обратите внимание, что плоскость триггера на локации может опуститься ниже поверхности, на которой триггер расположен. Однако это не помешает триггеру сработать, если кто-то пройдёт над ним, так как триггер чувствителен по всей вертикали.  
  
== Area Transitions ==
+
== Обработка событий триггера ==
 +
Для обработки событий триггера используется скрипт, указанный в свойстве "Script" секции "Attributes" триггера. В качестве шаблона для вашего скрипта можно использовать "trigger_core.nss" из каталога "_Core" на палитре ресурсов.
  
To make a trigger into an area transition, right click on trigger in the module tree view and choose Open Resource. You will need to check it out to modify it, if you haven't already. Select the Variable field in the Attributes section and click on the elipses ([[Image:ellipsis.png|link=]]) icon on the right side.
+
Именно этот скрипт в своём первоначальном виде обрабатывает событие входа (EVENT_TYPE_ENTER) в триггер перехода.  
  
The variables we need are:
+
Обратите внимание, что скрипт проверяет Игрок ли вошёл в триггер, установлены ли тэги локации и флажка для перехода. Не забывайте также при необходимости делать проверки, например, если вы хотите, чтобы ваш триггер срабатывал только на Игрока, также не забудьте сделать такую проверку, в противном случае он будет срабатывать на каждое существо.
  
*TRIGGER_AT_DEST_TAG - the tag for the waypoint that the trigger teleports the player to
+
'''Пример:'''
*TRIGGER_AT_DEST_AREA_TAG - the tag for the area the waypoint is in, if it isn't the current area.
+
*TRIGGER_AT_DEST_AREALIST_TAG - the tag for the arealist the area is in if it is not in the current arealist. !!not seeing this one in the toolset, is it still used?!!
+
 
+
== Trigger Scripts ==
+
 
+
Any other functionality for a trigger must be put in a script manually. The trigger_core.nss script (which may change) in the _Core Scripts directory is a good template for such a script.
+
 
+
Without any modifications this script performs the area transition. The code to do so is in a switch statement that looks for the event matching the predefined constant EVENT_TYPE_ENTER.
+
 
+
Note that there is an if statement in here that checks to see if it was the player who set off the trigger, (it also checks to see if there was an area transition tag set). If you want to have the trigger do something only when the player enters it you should do a similar check, otherwise it will activate whenever any creature enters.
+
 
+
Example: Have a cutscene play, but only the first time the player enters the trigger.
+
  
 +
Запуск ролика. Ролик запускается только один раз при первом входе.
 
<pre>
 
<pre>
  if(IsPartyMember(oCreature)) {  
+
  if(IsPartyMember(oCreature)) {               // ПРОВЕРКА ЯВЛЯЕТСЯ ЛИ ВОШЕДШИЙ СУЩЕСТВОМ, ВХОДЯЩИМ В ПАРТИЮ ИГРОКА.
   resource rCutscene = R"mycutscene.cut";
+
   resource rCutscene = R"mycutscene.cut";     // НАЗНАЧЕНИЕ РЕСУРСА РОЛИКА.
   LoadCutscene(rCutscene);
+
   LoadCutscene(rCutscene);                     // ЗАГРУЗКА РОЛИКА.
   PlayCutscene(oCreature);
+
   PlayCutscene(oCreature);                     // ЗАПУСК РОЛИКА.
   DestroyObject(OBJECT_SELF, 0);
+
   DestroyObject(OBJECT_SELF, 0);               // УНИЧТОЖЕНИЕ ТРИГГЕРА ДЛЯ ПРЕДОТВРАЩЕНИЯ ЕГО ВТОРИЧНОГО ЗАПУСКА.
 
  }
 
  }
 
</pre>
 
</pre>
  
Comment : originally, the above example used a function called IsPlayer, which doesn't seem to exist.  
+
'''Комментарий:''' Первоначально приведённый выше пример использовал функцию IsPlayer, которая, по всей видимости, теперь отсутствует.
  
If you do create a custom trigger script you should call the following after the switch statement:
+
Если вы создаете свой скрипт, то не забудьте перенаправить обработку события дальше, используя следующий обработчик: <nowiki>HandleEvent(ev, RESOURCE_SCRIPT_TRIGGER_CORE);</nowiki>. Это гарантирует корректную обработку события, если ваш скрипт обработает событие не в полной мере.
  
<pre>
+
После сохранения скрипта выберите его в поле "Script" секции "Attributes" триггера.
HandleEvent(ev, RESOURCE_SCRIPT_TRIGGER_CORE);
+
</pre>
+
  
This ensures that anything your custom script doesn't process still gets processed correctly by the default script.
+
'''Обратите внимание:'''
 +
Скрипты триггеров некорректно обрабатывают функцию "SetObjectActive (OBJECT_SELF, FALSE)". Эта функция устанавливает триггер неактивным, но он всё равно будет реагировать на сторонние раздражители :). Таким образом, чтобы корректно обработать событие неактивного триггера необходимо провести проверку его активности, используя функцию "GetObjectActive (OBJECT_SELF)", и если триггер не активен, то не обрабатывать событие. Если же вы не собираетесь в дальнейшем использовать этот триггер, то просто уничтожьте его, используя функцию "DestroyObject (OBJECT_SELF, 0)", вместо его дизактивации.
  
Once you have created your script, click on the "script" field of the attributes of the trigger, and then choose your script from the ellipsis ([[Image:ellipsis.png]]) browser.
+
== Триггеры перехода ==
 +
Для создания триггера перехода между локациями необходимо подредактировать его переменные. Для этого откройте триггер, в разделе "Attributes" выберите поле "Variable" и нажмите на кнопку [[Image:ellipsis.png|link=]].
  
Note that triggers don’t behave as expected when you use "SetObjectActive(OBJECT_SELF, FALSE)" on them.  This function sets the trigger to inactive, but the trigger will still fire when inactive.  So any trigger script that needs to account for whether the trigger is active should be surrounded by an "if(GetObjectActive(OBJECT_SELF))" statement to explicitly test whether it should fire. Alternately, if the trigger is never intended to fire again, use DestroyObject(OBJECT_SELF, 0); instead of setting it inactive.
+
Переменные под редактирование:
  
== Traps ==
+
* '''TRIGGER_AT_DEST_TAG:''' тэг флажка (waypoint) назначения (флажок, на который Игрок будет телепортирован).
 +
* '''TRIGGER_AT_DEST_AREA_TAG:''' тэг локации с вышеуказанным флажком (если локация отличается от текущей).
 +
* '''TRIGGER_AT_DEST_AREALIST_TAG:''' тэг группы (arealist) вышеуказанной локации (если группа отличается от текущей).
  
Triggers are similar to how traps were defined in Neverwinter Nights, but in Dragon Age it is preferred to construct traps using placeable floor plates as triggers instead. This makes traps easier for the player to interact with in a realistic manner.
+
Теперь в случае, если Игрок заденет этот триггер, он будет перенесён в указанную локацию на указанный флажок. Если перенос происходит в рамках одной локации Игрок будет перенесён внутри локации на указанный флажок.
  
See the [[Trap system]] for details on how to handle traps.
+
== Триггеры диалога ==
 +
Триггеры диалога - это триггеры, запускающие определённый диалог. Такое использование триггеров в DA встречается повсеместно, поэтому для этой цели разработчики использовали специальный скрипт, именуемый "gen00tr_talk.nss", и специальную таблицу переменных, именуемую "var_trigger_talk".
  
== Talk triggers ==
+
Для того, чтобы ваш триггер стал триггером диалога, необходимо в свойствах триггера "Script" и "Variable 2da" выбрать соответствующие скрипт и таблицу переменных. Доступные переменные этой таблицы приведены в следующем разделе.
  
A talk trigger is a trigger that initiates a conversation. This occurs so frequently in Dragon Age's game design that a generic script, gen00tr_talk.nss, is available for this purpose. To use it with a trigger, set the trigger's "Script" property to "gen00tr_talk" and set the "Variable 2da" property to "var_trigger_talk".
+
== Триггеры поведения ==
 +
Триггеры поведения - это триггеры, позволяющие при их активации задать поведение какого-либо существа, активировавшего триггер. Такое использование триггеров в DA также часто встречается, поэтому и для их создания применяются специальные скрипт, именуемый "gentr_ambient.nss", и таблица переменных, именуемая "var_trigger_ambient".
  
The following set of variables are available in the var_trigger_talk variable 2da:
+
Для того, чтобы ваш триггер стал триггером диалога, необходимо в свойствах триггера "Script" и "Variable 2da" выбрать соответствующие скрипт и таблицу переменных. Доступные переменные этой таблицы приведены в следующем разделе.
  
{{Variable table start}}
+
Смотрите статью {{ulink|Ambient behaviour|Поведение окружающих}} для получения более детальной информации.
{{Variable table row|TRIG_TALK_ACTIVE_FOR_FLAG | int || triggers only if a specific plot/flag is active - works with TRIG_TALK_ACTIVE_FOR_PLOT }}
+
{{Variable table row|TRIG_TALK_ACTIVE_FOR_PLOT | string || triggers only if a specific plot/flag is active - works with TRIG_TALK_ACTIVE_FOR_FLAG }}
+
{{Variable table row|TRIG_TALK_DIALOG_OVERRIDE | resource || a dialog file to override the default one for the NPC. Type it in the format of "gen000_example.dlg" (without the quotes) }}
+
{{Variable table row|TRIG_TALK_INACTIVE_FOR_FLAG and FLAG2 | int || triggers only if a specific plot/flag is inactive - works with TRIG_TALK_ACTIVE_FOR_PLOT }}
+
{{Variable table row|TRIG_TALK_INACTIVE_FOR_PLOT and PLOT2 | string || triggers only if a specific plot/flag is inactive - works with TRIG_TALK_ACTIVE_FOR_FLAG }}
+
{{Variable table row|TRIG_TALK_LISTENER | string || a string for an NPC listener. Should be used for ambient conversations }}
+
{{Variable table row|TRIG_TALK_REPEAT | int || 1 so the trigger can re-fire, 0 - the trigger fires only once }}
+
{{Variable table row|TRIG_TALK_SET_FLAG and FLAG2 | int || sets the plot and flag when triggered, works with TRIG_TALK_SET_PLOT }}
+
{{Variable table row|TRIG_TALK_SET_PLOT and PLOT2 | string || sets the plot and flag when triggered, works with TRIG_TALK_SET_FLAG }}
+
{{Variable table row|TRIG_TALK_SPEAKER | string || NPC initiating the dialog - this is the only mandatory field }}
+
{{Variable table end}}
+
  
== Variables ==
+
== Ловушки ==
 +
Можно использовать триггеры в качестве ловушек, как это сделано, например, в Neverwinter Nigths, но в Dragon Age предпочтительней использовать специальные ловушки, являющиеся по своей сути обычными {{ulink|Placeable|размещаемыми объектами}}. Их использование более реалистично и удобно, как для Игрока, так и для разработчика.
  
The following set of variables are available if you're using the basic var_trigger 2da:
+
Смотрите статью {{ulink|Trap system|Система ловушек}} для получения более детальной информации об обработке ловушек.
  
 +
== Переменные триггеров ==
 +
=== Набор переменных базовой таблицы "var_trigger 2da" ===
 
{{variable table start}}
 
{{variable table start}}
{{Variable table row|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); }}
+
{{Variable table row|TRIGGER_ACTIVATE_TEAM_HELP | int || {{untranslated/ru}} Activates team-help system on a team of creatures using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_HELP, AI_HELP_TEAM_STATUS, 1); }}
{{Variable table row|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); }}
+
{{Variable table row|TRIGGER_ACTIVATE_TEAM_STATIONARY_HARD | int || {{untranslated/ru}} Activates a team to be stationary (AI system) using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_STATIONARY_HARD, AI_FLAG_STATIONARY, 2); }}
{{Variable table row|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); }}
+
{{Variable table row|TRIGGER_ACTIVATE_TEAM_STATIONARY_SOFT | int || {{untranslated/ru}} Activates a team to be stationary (AI system) using SetLocalVarOnTeam(oCreature, TRIGGER_ACTIVATE_TEAM_STATIONARY_SOFT, AI_FLAG_STATIONARY, 1); }}
{{Variable table row|TRIGGER_AT_DEST_AREA_TAG | string || The tag of the area that this trigger sends the player to (area transition) }}
+
{{Variable table row|TRIGGER_AT_DEST_AREA_TAG | string || Тэг флажка (waypoint) назначения (флажок, на который Игрок будет телепортирован). }}
{{Variable table row|TRIGGER_AT_DEST_TAG | string || The tag of the waypoint within the destination area this trigger sends the player to (area transition) }}
+
{{Variable table row|TRIGGER_AT_DEST_TAG | string || Тэг локации с вышеуказанным флажком (если локация отличается от текущей). }}
 
{{Variable table row|TRIGGER_COUNTER_1 to 3 | int || }}
 
{{Variable table row|TRIGGER_COUNTER_1 to 3 | int || }}
{{Variable table row|TRIGGER_DO_ONCE_A and B | int || }}
+
{{Variable table row|TRIGGER_DO_ONCE_A and B | int || Позволяет скрипту обработки событий остлеживать количество срабатываний триггера (устанавливая и считывая значение переменной).}}
 
{{Variable table row|TRIGGER_ENCOUNTER_TEAM | int | | }}
 
{{Variable table row|TRIGGER_ENCOUNTER_TEAM | int | | }}
 
{{Variable table row|TRIGGER_PARTY_TRIGGER_LOCATION | int || }}
 
{{Variable table row|TRIGGER_PARTY_TRIGGER_LOCATION | int || }}
Line 114: Line 100:
 
{{Variable table end}}
 
{{Variable table end}}
  
These are in the var_trigger_ambient 2da, for use with the gentr_ambient.nss script:
+
=== Набор меременных таблицы "var_trigger_talk variable 2da" ===
 +
{{Variable table start}}
 +
{{Variable table row|TRIG_TALK_ACTIVE_FOR_FLAG | int || Триггер срабатывает, только если указанный Plot-флаг активен (работает совместно с TRIG_TALK_ACTIVE_FOR_PLOT). }}
 +
{{Variable table row|TRIG_TALK_ACTIVE_FOR_PLOT | string || В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает соместно с TRIG_TALK_ACTIVE_FOR_FLAG). }}
 +
{{Variable table row|TRIG_TALK_DIALOG_OVERRIDE | resource || Ресурс диалога для подмены ассоциированного по умолчанию с целевым существом или размещаемым объектом. Указывается в формате "gen000_example.dlg"  (без кавычек). }}
 +
{{Variable table row|TRIG_TALK_INACTIVE_FOR_FLAG and FLAG2 | int || Триггер срабатывает, только если указанный Plot-флаг не активен (работает совместно с TRIG_TALK_INACTIVE_FOR_PLOT). }}
 +
{{Variable table row|TRIG_TALK_INACTIVE_FOR_PLOT and PLOT2 | string || В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает совместно с  TRIG_TALK_ACTIVE_FOR_FLAG). }}
 +
{{Variable table row|TRIG_TALK_LISTENER | string || Тэг Слушателя по диалогу. Используется для окружающих диалогов (НПС с НПС без загрузки оболочки диалога). }}
 +
{{Variable table row|TRIG_TALK_REPEAT | int || Определяет возможность повторного срабатывания триггера. 1 - триггер срабатывает постоянно. 0 - триггер срабатывает один раз. }}
 +
{{Variable table row|TRIG_TALK_SET_FLAG and FLAG2 | int || В данной переменной можно указать Plot-флаг, значение которого будет установлено при срабатывании триггера (работает совместно с TRIG_TALK_SET_PLOT). }}
 +
{{Variable table row|TRIG_TALK_SET_PLOT and PLOT2 | string || В переменной записывается Plot-файл, в котором находится Plot-флаг, указанный в предыдущей переменной (работает совместно с TRIG_TALK_SET_FLAG). }}
 +
{{Variable table row|TRIG_TALK_SPEAKER | string || Тэг Говоруна по диалогу. Единственная обязательная переменная. }}
 +
{{Variable table end}}
  
 +
=== Набор переменных таблицы "var_trigger_ambient 2da" ===
 
{{Variable table start}}
 
{{Variable table start}}
{{Variable table row|AMBIENT_ANIM_FREQ_OVERRIDE | float || If non-zero, takes precedence over AMBIENT_ANIM_FREQ value set on the creature's template. Format is a float (x.y) to play a random number of animations between x and y. Specify -1.0 to play all animations (in order) listed in [[ambient_ai.xls]]. }}
+
{{Variable table row|AMBIENT_ANIM_FREQ_OVERRIDE | float || Если значение не пустое, то данная переменная подменяет значение "AMBIENT_ANIM_FREQ" в таблице переменных существа. Тип переменной - {{ulink|float}} (x.y). Переменная задаёт проигрываемые шаблоны поведения начиная с "x" и заканичвая "y". Например "-1.0" заставит существо проигрывать все шаблоны поведения по порядку в соответствии с {{ulink|ambient_ai.xls}}.}}
{{Variable table row|AMBIENT_ANIM_OVERRIDE_COUNT | int || Number of times the overridden animation pattern is used before the original is restored. Default = -1 (i.e. no countdown) }}
+
{{Variable table row|AMBIENT_ANIM_OVERRIDE_COUNT | int || Счётчик проигрываемых шаблонов поведения, после достижения которого восстанавливаются оригинальные значения переменных, подменённых триггером. По умолчанию значение равно -1, то есть без отсчёта (оригинальные значения не восстанавливаются). }}
{{Variable table row|AMBIENT_ANIM_PATTERN_OVERRIDE | int || Index into ambient_ai.xls. If non-zero, this value takes precedence over the AMBIENT_ANIM_PATTERN value set on the creature's template. }}
+
{{Variable table row|AMBIENT_ANIM_PATTERN_OVERRIDE | int || ID шаблона анимации в {{ulink|ambient_ai.xls}}. Если значение не пустое, то данная переменная подменяет значение "AMBIENT_ANIM_PATTERN". }}
{{Variable table row|AMBIENT_TARGET_FILTER | string || The creature entering or in the trigger will have its ambient behaviour overridden if its tag appears somewhere in this comma-separated list. }}
+
{{Variable table row|AMBIENT_TARGET_FILTER | string || Фильтр существ, вход которых в триггер или нахождение в нём, переопределяет их поведение. В данной переменной указываются тэги существ, поведение которых вы хотите подменить. }}
{{Variable table row|AMBIENT_TRIGGER_FILTER | string || The ambient behaviour of the target creature will be overridden when a creature with a tag somewhere in this coma-separated list enters the trigger. Use <hero> to specify the player. Will default to AMBIENT_TARGET_FILTER if blank. }}
+
{{Variable table row|AMBIENT_TRIGGER_FILTER | string || Фильтр существ, чьё поведение переопределяется только при входе в триггер. Тэги существ также указываются через запятую. Используйте тэг "<hero>" для указания на игрока. Если данная переменная пустая, то используется переменная "AMBIENT_TARGET_FILTER". }}
 
{{Variable table end}}
 
{{Variable table end}}
 
== Properties ==
 
 
{{inspector start}}
 
{{inspector section|General}}
 
{{inspector row|Comments| }}
 
{{inspector row|Group| The group to which this trigger belongs. Used when the trigger is used as a trap trigger. }}
 
{{inspector row|Resource Name| A unique string identifier the toolset and the game both use to refer to this resource. }}
 
{{inspector row|Tag| A non-unique string identifier used mostly by scripts and other resources to refer to this resource. }}
 
 
{{inspector section|Attributes}}
 
{{inspector row|Script| Event script assigned to the resource }}
 
{{inspector row|Target Waypoint|  }}
 
{{inspector row|Variable 2da| Allows selection of a variable table. Only the values in the table can be set and retrieved by scripting. }}
 
{{inspector row|Variables| Displays the table selected in the variable 2da field. Allows initial values to be defined.  }}
 
{{inspector end}}
 
  
 
{{languages|Trigger}}
 
{{languages|Trigger}}

Latest revision as of 06:09, 20 June 2012

Триггеры
Начало / Русская DA Builder Wiki / Поделиться ВКонтакте
Локации
Вид триггера в редакторе локаций.

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

Создание триггера

Для создания нового триггера в меню "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" и нажмите на кнопку Ellipsis.png.

Переменные под редактирование:

  • 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  • русский