PDA

Просмотр полной версии : Триггеры редактора.



ntalex
31.01.2010, 02:22
По триггерам довольно внятно даны объяснения в уроках, тем не менее есть несколько нюансов. В редакторе есть параметр для триггера: триггер срабатывает с "1" в "0".
Как узнать в каком состоянии находится триггер? Как его заставить перейти в определенное состояние, например в «1»? Интересно, в каких практических случаях данное свойство триггера используется.

ntalex
17.03.2010, 00:01
Похоже разобрался, иногда полезно более внимательно читать документацию :rtfm:
Триггер по умолчанию находится в положении "0", при срабатывании переключается в "1".
Данное свойство я использовал для правки миссии №3 ИС-2 (с. Чепель 15:40).
Второй этап: отразить атаку противника на мост№2. Допустим у противника есть подразделения:
1. два танка "тигр"
2. три танка "пантера"
3. взвод гренадеров
Создаем для подразделений №1,2 по триггеру tr_wer_br1, tr_wer_br2, которые работают с параметром "эффективность подразделения уменьшилась". Пусть "эффективность уменьшилась" в 4 раза. Далее создаем еще один третий триггер tr_wer_br3, которому задаем логическую операцию: tr_wer_br1 & tr_wer_br2.
Третий триггер будет срабатывать, когда логическое выражение будет истинно, т.е. равно "1". Таким образом движок игры будет отслеживать работу третьего триггера и как только эффективность подразделений №1,2 уменьшится в 4 раза, сработает (1*1=1). (Можно поэкспериментировать с уменьшением). Данная особенность очень удобна тем, что более нет нужды выискивать "подранков" с целью добить их окончательно. Ведь снижение эффективности не означает, что танк уничтожен, он просто подбит и уже не может далее выполнять поставленную задачу. В результате получаем "зачет" по заданному этапу миссии и переходим к следующей задаче. Когда миссия завершена успешно, можно нажать "продолжить" и в свое удовольствие расправиться с оставшимися "подранками" ;)

ntalex
12.12.2010, 16:52
Триггер для текста.
При создании миссии, иногда необходимо дать игроку сообщение. Ну, например:
"Двигайтесь в направлении село Шуховцево."
Проще всего создать сообщение при достижении определенной стадии миссии:

cs_main()
{
...
//1-я строка - задача
ext, add_misobj, order2, zone_1500, 1, txt_aim_01, txt_aim_01_sh;
//2-я строка - добавление текста
ext, add_text, txt_ldm_add_text_AIM1500, 0xffd0c0c0, 15, 0;
...
}
где
строка №1
ext - общая команда
add_misobj - добавить цель миссии
order1 – приказ №1
zone_1500 – название контура
1 – состояние задания, где
1 – активное
2 – провалено
3 – выполнено
4 – информация
txt_aim_01 – текст в игре
txt_aim_01_sh – текст в брифинге
строка №2
ext - общая команда
add_text – добавить текст
txt_ldm_add_text_AIM1500 – текст в игре(прописан в файле ***loc_data.text)
0xffd0c0c0 – калор текста
15 – время появления текста, сек.
0 - ?
Как видим, появление текста жестко заскриптовано. Только по достижении определенной стадии миссии, текст появится на єкране. Второй вариант - создать сообщение, которое появляется после прошествия определенного времени:

cs_radio()
{
nop;
wait_time, 30;
ext, add_text, txt_ldm_my_info_text_01, 0xffd0c0c0, 25, 0;
}
Но в таком варианте тоже присутствуют ограничения, в данном случае по времени. Третий вариант - воспользоваться триггером текста, т.к. подчас у создателя миссии есть необходимость дать игроку промежуточную информацию, которая не должна ограничиваться рамками вариантов №1,2. Порядок создания:
1. В редакторе создаем контур для триггера, например с названием: trig_cont_txt_01.
2. Переходим на вкладку триггеров и создаем триггер: trig_check_txt_01. (Он будет включаться, когда танк игрока попадает в контур trig_cont_txt_01).
3. Следующим будет наш текстов. триггер: trig_check_txt_02, параметр "текстовое сообщение". В строке параметров задаем произвольную текстовую переменную, например: txt_message_01.
4. Как только сработает тригер trig_check_txt_01, следующим будет текстовое сообщение trig_check_txt_02. Текст заводим в файл ***loc_data.text.

loc_rus()
{
...
txt_message_01() {=Радиосообщение=\nДвигайтесь в направлении село Шуховцево.\n;}
...
}
5. Теперь правим файл скриптов *** scripts.engscr. Заходим в блок триггеров и делаем небольшую правку нашого текстового тригера:

triggers()
{
...
trig_check_txt_02, 0x2000d, txt_message_01, 0xffd0c0c0, 25.000;
...
}
где
0xffd0c0c0 - калор текста
25.000 - время появления текста, сек.

vit_SB
14.12.2010, 23:03
Камрады, как заставить пехоту в редакторе залезть в траншею?

ntalex
14.12.2010, 23:19
Вам следует нажать иконку "изначально подразделение находится в окопе".

vit_SB
15.12.2010, 00:31
Пробовал. Нахожу на полигоне траншею, создаю на ней небольшой контур "рус_позиция", помещаю в контур без всяких скриптов подразделение "Отделение ПТР" и жму кнопку "изначально подразделение находится в окопе". И выходит так, не в окопе, ниразу:(

ntalex
15.12.2010, 10:40
Судя по приведенной картинке, очевидно что контур для пехотинцев некорректно расположен в окопе. Его следует аккуратно в ручную уложить вдоль дна окопа. Рекомедую видеоурок lesson07_divisions.

ps
Полагаю вам следует создать отдельную тему с названием "размещение подразделений в окопе" и попросить модератора перенести туда наши сообщения, поскольку они не соотносятся с триггерами редактора.

1ceman
15.12.2010, 10:49
Триггер для текста.

cs_radio()
{
nop;
wait_time, 30;
ext, add_text, txt_ldm_my_info_text_01, 0xffd0c0c0, 25, 0;
}
Но в таком вариенте тоже присутствуют ограничения, в данном случае по времени.

На всякий случай напоминаю - блоков cs_radio может быть и не один ;). Т.е. может быть блок cs_radio1(), cs_radio2() и т.д.
Кроме того, можно не ограничивать себя в этом блоке только ожиданием времени. Можно добавить и ожидание триггера.

Когда-то давно приводил расшифрованный и дополненный блоком cs_radio() скрипт для миссии из видео-уроков
http://sukhoi.ru/forum/showthread.php?p=1038611#post1038611 (во вложении)

Привожу фрагмент логики скрипта из блоков cs_main() и cs_radio()


cs_main()
{

//Добавляем Брифинг ДО начала миссии
//txt_mis_order - "Боевая задача" (фиксированный текстовой идентификатор, можно не менять)
//txt_ldm_brief_main1 - свой текст боевой задачи (ищем в файле new_mission_01_loc_data.text)
//Разумеется сам идентификатор "txt_ldm_brief_main1" называйте как удобно
ext, add_misobj, brief, add_map_selo, 4, txt_ldm_brief_main1, txt_mis_order;

//Здесь загрузку прерываем
nop;

//Все что далее грузится уже после начала миссии
//Добавляем на всякий случай дополнительную точку на местности,
//чтобы игрок ориентировался, где находится село
//add_map_wp_selo - контур на местности
//txt_ldm_map_order_selo - тестовый идентификатор с надписью "с. Шестаково" (ищем в new_mission_01_loc_data.text)
ext, sel_waypoint, add_map_wp_selo, 0xff00a040, txt_ldm_map_order_selo, 0;

//Добавляем первое задание "order1" - "Передовая позиция"
ext, add_misobj, order1, hill, 2, txt_ldm_add_order_capture_hill1, txt_ldm_add_order_capture_hill_sh, 0;

//и Ждем триггер "rus_move"
ext, wait_tr, rus_move;

//После срабатывания триггера "rus_move"
//Изменяем цвет зоны "hill", т.е. передовой позиции с синего на красный
ext, change_mo_cols, hill, 0xc0800000, 0xc0800000;

//Помечаем, что первое задание (order1) выполнено
ext, change_misobj, order1, 3;

//Добавляем второе задание "order2" - "Шестаково"
ext, add_misobj, order2, selo, 1, txt_ldm_add_order_capture_selo1, txt_ldm_add_order_capture_selo_sh, 0;

// Ждем триггер "rus_siege2"
ext, wait_tr, rus_siege2;

// после этого изменяем цвет зоны "selo"
// и помечаем, что задание "Шестаково" выполнено
ext, change_mo_cols, selo, 0xc0800000, 0xc0800000;
ext, change_misobj, order2, 3;
}


//Добавляем блок "cs_radio"
//ВНИМАНИЕ!! Этого блока нет в оригинальном файле скрипта "Миссии из видеоуроков"
//Правильнее выводить текст в отдельном блоке, что бы не смешивать

cs_radio()
{
//Отмечаем, что все дальнейшее происходит после начала миссии (т.е. после того как игрок нажмет кнопку продолжить)
nop;
//Добавляем текст на консоль через 20 секунд после начала миссии
wait_time, 20;
ext, add_text, txt_ldm_add_text_consol1, 0xffd0c0c0, 15, 0;

//и Ждем триггер "rus_move"
ext, wait_tr, rus_move;

//После срабатывания триггера "rus_move"
//Ждем еще 15 сек и добавляем текст на консоль
wait_time, 15;
ext, add_text, txt_ldm_add_text_consol2, 0xffd0c0c0, 15, 0;
}
Таким образом можно, например, создать триггер ожидающий появления танков противника в контуре, и вывести в момент срабатывания сообщение, что там-то (например на севере) обнаружены танки противника и т.д.

vit_SB
15.12.2010, 11:27
Судя по приведенной картинке, очевидно что контур для пехотинцев некорректно расположен в окопе. Его следует аккуратно в ручную уложить вдоль дна окопа. Рекомедую видеоурок lesson07_divisions.

ps
Полагаю вам следует создать отдельную тему с названием "размещение подразделений в окопе" и попросить модератора перенести туда наши сообщения, поскольку они не соотносятся с триггерами редактора.

Спасибо.

ntalex
02.02.2011, 21:08
Тригер проверки.
Допустим поставлена задача:
Из контура „start” доехать в контур „zone_A”, затем в контур „zone_B” и вернуться назад в контур „start”. Изначально танк игрока находиться в контуре „start”.
Заводим на все контура по тригеру, с параметром „танк игрока в контуре”:
1. tr_start
2. tr_ zone_A
3. tr_zone_B
Создаем тригер „успешного окончания миссии” с логической операцией „&” умножение.
4. tr_victory = tr_start & tr_ zone_A & tr_ zone_B
Условие будет истинно, если все тригера переуключаться в „1”.
Вся хитрость заключается в том, что тригер tr_start задается для многократного переключения, другие для однократного.
Итак, вначале переключается в „1” тригер tr_start, но условие не истинно, т.к. игрок не посетил два контура.
tr_victory != 1 & 0 & 0
Как только игрок покинул контур start, тригер tr_start вновь переключается в „0”. После посещения двух контуров, возвращаемся назад (tr_start вновь в „1”) и получаем зачет миссии:
1 = 1 & 1 & 1
т.е. условие истинно.