В
Doom 3 триггеры используется как спусковые механизмы. В основном
это либо область, в которую попадает игрок тем самым, активировав какую-нибудь
нацеленную функцию или это механизм, используемый как фильтр с дополнительными
командами с помощью которых мы можем, например, создать задержку для активации
той или иной функции.
trigger_once
Попадая в область этого триггера игрок способен активировать заготовленную
на карте функцию, скрипт, источник света или проиграть звук. Используется
как включатель или выключатель какого-нибудь события ( entity ). Применяется
для одноразового использования.
key: delay // Установить задержку между триггером и entity
val: // время задержки в сек.
key: call // Активировать скрипт под таким-то именем
val: // имя скрипта
key: requires // Устанавливаем требование для разрешающей активации
триггера.
val: mykey // имя предмета
Для этого нужно поместить на карту предмет из папки items_ ,
а именно item_key_blue ( подойдет любой ключ-модель: yellow, aco )
и установить у него вот такой ключ
key: inv_name
val: mykey
Подбираем ключ-модель (item_key_blue ), получаем вот такую надпись в
левом экране:
Теперь мы сможем активировать триггер.
key: anyTouch // По умолчанию этот триггер может активировать
только игрок, но с этим ключом дело будет обстоять иначе – теперь монстры
или дружественный народ войдя в область триггера смогут активировать подключенное
к нему событие ( entity )
val: 1 вкл.\ 0 выкл.
key: triggerFirst // Если установить этот ключ у триггера то
для его активации нужно будет вызвать на него действие от другого события.
Например, если установить на карту монстра и подконнетить его к триггеру
– то только после убийства монстра этот триггер можно будет использовать
в дальнейшем сценарии. К триггеру также можно подконнетить патроны и оружие
без подбора которых мы не сможем его активировать.
val: 1 вкл.\ 0 выкл
key: noTouch // Все то же самое что и у triggerFirst только после
подбора предмета функции подключенные к триггеру сработают моментально.
И ненужно будет входить в область триггера.
val: 1 вкл.\ 0 выкл.
key: noClient \\ При установке этого ключа триггер можно будет
активировать только с помощью func_activator или NPC.
val: 1 вкл.\ 0 выкл.
Как применить func_activator?
1.Устанавливаем на карту триггер и func_activator. Берем этот кубик
с функцией и прислоняем его к триггеру, да так чтобы они пересекались между
собой. У func_activator выставляем вот такой ключ:
key: start_off // Выключаем
val: 1
2. Создаем еще один триггер, от которого пойдет сигнал на func_activator.
А сигнал будем посылать через написанный скрипт. Для этого установим у
триггера ключ вызывающий скрипт
key: call // Этой командой вызываем такой то скрипт
val: test_command // имя скрипта
Пишем скрипт:
void test_command ()
{
$func_activator_1.activate( $trigger_once_2 );
}
// $func_activator_1 – имя функции
// activate – название команды для скрипта
// $trigger_once_2 – имя триггера к которому прислонена func_activator
Сохраняем с таким же именем как у карты и закидываем в папку base\maps
c расширением .script
trigger_multiple
Этот триггер аналогичен триггеру trigger_once только используется для
многократного использования - плюс дополнительные ключи.
key: wait // Создаем отрезок времени через который можно будет заново
использовать триггер
val: // Время в сек. При значении в –1, триггер используется один
раз
trigger_hurt
Соприкоснувшись с областью этого триггера, игрок получает повреждение
key: delay // Задержка перед повреждением
val: // Время в сек.
key: def_damage // Подключаем систему повреждений
val: damage_lightBreak // Имя наносимого повреждения. Полный список
находится в файле base\def\damage.def:
damage_triggerhurt_25
damage_co_electric_trac
damage_suicide и так далее…
key: on // В каком состоянии будет находится триггер после возрождения
игрока на карте
( включенный или выключенный )
val: // 1 вкл.\ 0 выкл
trigger_entityname ( для многократного использования )
Все тоже самое, как и у trigger_multiple, кроме одного ключа.
key: entityname // Если установить этот ключ, то триггер сможет
активировать только entity с указанным именем в значении
val: // имя ( name ) entity ( NPC, monsters )
trigger_once_entityname
Обладает теми же свойствами, как и trigger_entityname, но для однократного
использования.
trigger_facing
Чтобы активировать этот триггер игроку нужно будет войти в область триггера
и посмотреть, куда указана белая стрелка.
key: angle // Задаем направление угла. То есть, меняем направление стрелки,
– в какую сторону нужно будет смотреть, чтобы активировать триггер
val: 180 // по-умолчанию 0.
key: angleLimit // Задаем лимит угла
val: 45 // ограничиваем угол обзора на 45 градусов.
trigger_fade
После активации этого триггера – произойдет затухание экрана.
key: fadeTime
val: 5 // сколько будет происходить затухание ( в сек. )
key: fadeColor // цвет затухания
val: 1 0 0 1 // если убрать последнюю единицу то будет происходить
обратное действие.
первые три цифры – это какой цвет включить для затухания или наоборот
красный – 1 вкл
зеленный – 0 вык
синий – 0 вык
или так 0.415686 0.039216 0.039216 – цвет ( color ) от другого источника
света
Прим* Если нужно выйти из эффекта затухания, то для этого потребуется
установка схожего триггера с аналогичным ключом, но с другим значением
в нем.
key: fadeColor
val: 1 0 0 // убираем единицу
и между ними установить задержку с помощью trigger_relay ( key: delay//
задержка val: 5 // время задержки). Коннект ( Ctrl+K ) между триггерами
должен происходить в таком раскладе: от trigger_once ( или _miltiple )
к trigger_fade ( с ключом для затухания ) дальше trigger_relay ( с задержкой
) и в конце цепочки еще один trigger_fade ( с ключом для обратного действия
)
trigger_timer
Через этот триггер можно повторить вызов от другого триггера ( например,
от trigger_once) причем этот вызов будет повторяться автоматически через
определенное время.
key: start_on // В каком состоянии будет находится триггер после возрождения
игрока на карте ( включенный или выключенный )
val: // 1 вкл.\ 0 выкл
key: wait // через какое время заново подать вызов на функции или скрипты
val: // время в сек.
Очень удобен для применения в скриптах. Приведу для этого небольшой
пример.
Устанавливаем на карте trigger_once – его коннектим с trigger_timer,
а trigger_timer с trigger_relay, у trigger_relay выставляем вот такой ключ:
key: call // вызываем скрипт
val: // имя скрипта
При такой комбинации работа функций подвязанных к скрипту будет повторяться
через определенное время – указанное в trigger_timer
trigger_touch
Используется для запуска скриптов. Но в скрипте нужно использовать только
одну скриптовую команду для каждой новой функции. Остальные скриптовые
команды для одной и той же функции выполнятся, не будут. И скрипт должен
выглядеть примерно так:
void test_touch()
{
$func_mover_1.rotateOnce('0 0 90');
sys.wait(4);
$func_mover_2.moveToPos ( '8 88 104');
sys.wait(2);
$func_mover_3.moveToPos ( '8 -56 104');
sys.wait(1);
$char_campbell_1.playAnim( ANIMCHANNEL_TORSO, "turns" );
}
key: start_on // В каком состоянии будет находится триггер после возрождения
игрока на карте ( включенный или выключенный )
val: // 1 вкл.\ 0 выкл
key: call // вызываем скрипт
val: // имя скрипта
Работает от вызова другого триггера ( например, от trigger_once ).если
находится в выключенном состоянии.
trigger_count
Этот триггер блокирует поступающие вызовы от других entity - триггеров
(trigger_multiple, trigger_once ) , NPC’s, monster’s. Используется как
пропускной пункт – то есть мы можем установить блокировку на первые два
поступающих вызова, а третий уже пропустить на дальнейшею функцию.
key: count
val: // сколько не пропускаем вызовов
key: repeat // повтор функции для блокировки
val: // 1 вкл.\ 0 выкл. При значении в 0, триггер используется один
раз
trigger_flashlight
Все те же функции что и у trigger_multiple только в этот раз игроку
не понадобится входить в область триггера. Надо всего лишь посветить фонарем
в ту сторону, где установлен триггер на карте. И это будет тоже самое как
наступить на триггер.
trigger_relay
Этот триггер используется для нескольких задач. Например, нам понадобится
запустить сразу несколько разных скриптов. Или создать цепочку из нескольких
функций установив у каждой задержку на определенное время.
key: delay // при поступления вызова от другого entity создается задержка
val: // время в сек.
key: call // активировать скрипт под таким-то именем
val: // имя скрипта