smt005 писал(а):
но "События", "Условия" и "Действия" не плохая идея для игры но для сюжета она не очень хороша.
Как?
Не убедил?
Ну, придумаю пример для сюжетого использования триггера.
Допустим, на климат-активаторе в Секторе Тундры, при первом его посещении, Игроку должны проболтать что-то и дать миссию по доставке информпакета в Бункер Супера. Как это мудрёно делать в SDK к М-2, мы в курсах, верно? Но и одним триггером тут тоже не обойдёшься, но обо всём по-порядку.
(Сперва напомню, что в [квадратных скобках] находится изменяемое поле, а в {таких вот скобках} буду давать пояснения "от автора" прямо по ходу дела. Если в квадратных скобках всё написано КРУПНЫМИ БУКВАМИ, то это означает что в качестве переменной будет не конкретный предмет, а любой предмет).
Итак, когда Игрок завалится в первый раз в указанный выше климат-активатор, должен сработать триггер:
Триггер "Миссия климат-активатора Сектора Тундры - получение задания"
СОБЫТИЯ:
[механоид влетел в здание]:
Посещённое здание - это [klimat-aktivator_sektora_tundry]
{В квадратных скобках можно выбрать из списка "ЛЮБОЕ ЗДАНИЕ", если не важно, какое именно; или конкретное здание из тех, что уже есть на карте.}
УСЛОВИЯ:
[Свойство объекта]:
Cвойство [управление] объекта [ТРИГГЕРНЫЙ МЕХАНОИД X] удовлетворяет условию [равно] значению [игрок]
{Нужно обязательно указать, что влетевший в здание юнит управляется не ИИ (бот), а Игроком, другими словами, что в здание влетел сам Игрок.}
[Свойства Журнала]:
Раздел журнала [ЛЮБОЙ РАЗДЕЛ] Игрока [не содержит] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
{Т.е. нужно указать, что ни в каком разделе журнала ("Текущие задания"/"Выполненные миссии"/"Проваленные миссии") нет упоминания о такой миссии, другими словами, что эту миссию Игрок ещё не брал.}
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Как хорошо, что ты приехал сюда, %ИМЯ ИГРОКА/%, тра-та-та, такие дела, надо в Бункер Супера Информпакет] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать диалоговую кнопку]:
Создать диалоговую кнопку [dialknopka1_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry], отображаемую строкой
[завезти.] цвета [красный] в текущем диалоговом окне.
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Ну так ты отвезёшь, или предпочтёшь] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать диалоговую кнопку]:
Создать диалоговую кнопку [dialknopka2_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry], отображаемую строкой
[отказаться?] цвета [красный] в текущем диалоговом окне.
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[%НОВАЯ СТРОКА/%Работа не очень срочная, так что если ты сейчас занят, я могу её тебе] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать диалоговую кнопку]:
Создать диалоговую кнопку [dialknopka3_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry], отображаемую строкой
[Предложить попозже.] цвета [красный] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
Итого мы получим
абзац "
[Как хорошо, что ты приехал сюда, Yandersen, тра-та-та, такие дела, надо в Бункер Супера Информпакет] [завезти.] [Ну так ты отвезёшь, или предпочтёшь] [отказаться?]
[Работа не очень срочная, так что если ты сейчас занят, я могу её тебе] [Предложить попозже.]". Красным текстом у нас будут отображаться кнопки, названные нами по нашему усмотрению как угодно (зачем - понятно будет далее), но отображаемые в тексте красными словами.
Это был первый триггер, выведший нам сообщение климат-активатора и предложивший миссию по завозу информпакета в Бункер Супера. В триггере были созданы три разноназванные нами кнопки, нажатие которых приведёт к срабатыванию одного из следующих триггеров:
Триггер "Миссия климат-активатора Сектора Тундры - Игрок пока занят"
СОБЫТИЯ:
[Нажатие кнопки]:
Нажатая кнопка - это [dialknopka3_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
УСЛОВИЯ:
[Нет условий]:
Нет условий
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закрыть диалоговое окно] под кодовым названием [dialokno_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
Т.е. нажав на часть строки "
[Предложить попозже.]", являющуюся кнопкой под кодовым названием "dialknopka3_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry", мы активировали триггер, который стирает диалог с предложением миссии. Но когда мы в следующий раз влетим в климат-активатор, мы снова активируем первый триггер, и всё начнётся снова.
Перейдём к варианту, когда Игрок решает отказаться от задания вообще. Триггер такой:
Триггер "Миссия климат-активатора Сектора Тундры - Игрок отказывается от задания"
СОБЫТИЯ:
[Нажатие кнопки]:
Нажатая кнопка - это [dialknopka2_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
УСЛОВИЯ:
[Нет условий]:
Нет условий
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_dlya_otkaza_ot_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Очень жаль, %ИМЯ ИГРОКА/%, что ты отказался доставить информпакет Суперу. Придётся поручить это задание кому-нибудь другому.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
[Добавить/убрать миссию из Журнала]:
[Добавить] в раздел Журнала [Проваленные миссии] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry], называемую [Доставка инфрмпаета Суперу] и содержащую текст
[Я отказался от миссии Климат-Активатора Сектора Тундры по доставке информпакета в Бункер Супера. Наверное, его доставит кто-нибудь другой.] цвета [оранжевый]
Таким образом, если в тексте предложенной миссии мы тыкнем часть строки "
[отказаться?]", являющуюся кнопкой под кодовым названием "dialknopka2_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry", мы откажемся от выполнения предложенной миссии, тем самым активировав этот триггер. В Журнал в раздел проваленных миссий занесётся соответствующая этой миссии запись, и потому самый первый триггер больше не активируется, и мы больше не получим этого задания.
И, наконец, рассмотрим триггер, который активируется, если мы согласимся выполнять предложенную нам работу по доставке инфрмпакета, нажав на соответствующую часть строки ("
[завезти.]"), являющуюся кнопкой с кодовым названием "dialknopka1_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry":
Триггер "Миссия климат-активатора Сектора Тундры - Игрок берёт задание"
СОБЫТИЯ:
[Нажатие кнопки]:
Нажатая кнопка - это [dialknopka1_dlya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
УСЛОВИЯ:
[Нет условий]:
Нет условий
ДЕЙСТВИЯ:
[Таймер: создать новый таймер]:
Создать таймер [dostavka_informpaketa_superu], со значением времени [48] [часов] и названием [Доставка информпакета Суперу]
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_dlya_prinyatiya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Отлично, %ИМЯ ИГРОКА/%! Я рад, что ты согласился доставить информпакет Суперу. Задание не очень срочное, поэтому я не сильно ограничу тебя во времени. В любом случае, %ЗНАЧЕНИЕ ТАЙМЕРА "dostavka_informpaketa_superu"/% должно хватить. На месте получишь 2000 Э.К.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
[Добавить/переместить миссию в Журнал]:
[Добавить] в раздел Журнала [Текущие миссии] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry], называемую [Доставка инфрмпаета Суперу] и содержащую текст
[Миссия Климат-Активатора Сектора Тундры: доставить информпакет в Бункер Супера. На месте я получу 2000 Э.К.%НОВАЯ СТРОКА/%Осталось времени: %ЗНАЧЕНИЕ ТАЙМЕРА "dostavka_informpaketa_superu"/%.] цвета [оранжевый]
[Таймер: запустить/остановить]:
[Запустить обратный отсчёт] для таймера [dostavka_informpaketa_superu]
[Дать/отнять предмет объекту]:
[Дать] предмет [informpaket_1] в количестве [1] шт. объекту [Игрок]
Итак, Игрок получил информпакет (разумеется, до этого мы его предусмотрительо создали в редакторе) и таймер на 48 часов, за которые он должен добраться в Бункер Супера и там этот инфрмпакет ему передать. Так что на этом писунство триггеров не заканчивается.
Сначала триггер провала миссии:
Триггер "Миссия климат-активатора Сектора Тундры - Игрок провалил задание"
СОБЫТИЯ:
[Изменение значения таймера]:
Значение таймера [dostavka_informpaketa_superu] стало равно [0]
УСЛОВИЯ:
[Нет условий]:
Нет условий
ДЕЙСТВИЯ:
[Таймер: запустить/остановить/скрыть/отобразить]:
[Остановить отсчёт] для таймера [dostavka_informpaketa_superu]
[Таймер: запустить/остановить/скрыть/отобразить]:
[Скрыть отображение] для таймера [dostavka_informpaketa_superu]
[Диалог: показать быстрое сообщение]:
Показать быстрое сообщение [Миссия провалена]
[Добавить/переместить миссию в Журнал]:
[Переместить] в раздел Журнала [Проваленные миссии] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry], называемую [Доставка инфрмпаета Суперу] и содержащую текст
[Миссия Климат-Активатора Сектора Тундры: доставить информпакет в Бункер Супера.%НОВАЯ СТРОКА/%МИССИЯ ПРОВАЛЕНА.] цвета [оранжевый]
Отмечу, что если какое-либо задание получено, оно уже не может быть удалено из журнала, но может быть перемещено из одного раздела в другой, при этом можно изменить его название и описание (текст).
Теперь распишу триггер, который будет нам выдавать погоняние климат-активатора, если таймер ещё не на нуле, и мы, после брания миссии, снова туда заявимся, ещё не передав информпакет Суперу:
Триггер "Миссия климат-активатора Сектора Тундры - Игрок ещё не отвёз информпакет"
СОБЫТИЯ:
[механоид влетел в здание]:
Посещённое здание - это [klimat-aktivator_sektora_tundry]
УСЛОВИЯ:
[Свойство объекта]:
Cвойство [управление] объекта [ТРИГГЕРНЫЙ МЕХАНОИД X] удовлетворяет условию [равно] значению [игрок]
[Свойства Журнала]:
Раздел журнала [текущие миссии] Игрока [содержит] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
{Отмечу, что именно "текущие миссии", поскольку если задание будет провалено, то автоматом будет перемещено предшествующим триггером в "проваленные миссии"}
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_ojidanie_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Ты ещё не доставил Суперу информпакет, %ИМЯ ИГРОКА/%? Поторопись, у тебя осталось, %ЗНАЧЕНИЕ ТАЙМЕРА "dostavka_informpaketa_superu"/%. Помни, если успеешь вовремя, на месте получишь 2000 Э.К.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
А теперь покажу триггер, срабатывающий при успешном выполнении задания (игрок уложился в таймер и подвалил к Суперу):
Триггер "Миссия климат-активатора Сектора Тундры - Игрок выполнил задание"
СОБЫТИЯ:
[механоид влетел в здание]:
Посещённое здание - это [bunker_supera]
УСЛОВИЯ:
[Свойство объекта]:
Cвойство [управление] объекта [ТРИГГЕРНЫЙ МЕХАНОИД X] удовлетворяет условию [равно] значению [игрок]
[Свойства таймера]:
[Значение] таймера [dostavka_informpaketa_superu] [больше] [0]
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_vypolneniya_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Отлично, %ИМЯ ИГРОКА/%! Я рад, что ты доставил мне этот информпакет. Он содержит бла-бла-бла данные, которые мне были очень нужны. Как и договаривались, получи свои обещанные 2000 Э.К. за доставку.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
[Добавить/переместить миссию из Журнала]:
[Добавить] в раздел Журнала [выполненные миссии] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry], называемую [Доставка инфрмпаета Суперу] и содержащую текст
[Миссия Климат-Активатора Сектора Тундры: доставить информпакет в Бункер Супера.%НОВАЯ СТРОКА/%Миссия выполнена.] цвета [оранжевый]
[Таймер: запустить/остановить/скрыть/отобразить]:
[Остановить отсчёт] для таймера [dostavka_informpaketa_superu]
[Таймер: запустить/остановить/скрыть/отобразить]:
[Скрыть отображение] для таймера [dostavka_informpaketa_superu]
[Дать/отнять предмет объекту]:
[Отнять] предмет [informpaket_1] в количестве [1] шт. объекту [Игрок]
[Дать/отнять предмет объекту]:
[Дать] предмет [Энергетический кристалл] в количестве [2000] шт. объекту [Игрок]
{Надо отметить, что таймер, для которого была применена опция "скрыть отображение" всего лишь не показывается на экране, но он всё равно существует (и даже там работает, если не был остановлен)}.
Т.е. уложившись во время, Игрок получит 2000 Э.К. и у него автоматом заберут перевозившийся информпакет. Но что делать с информпакетом, если Игрок провалил миссию? Всё равно, нужно его куда-то деть. Так что нужно ещё пару триггеров сварганить.
Триггер "Миссия климат-активатора Сектора Тундры - Игрок опаздал с доставкой информпакета"
СОБЫТИЯ:
[механоид влетел в здание]:
Посещённое здание - это [bunker_supera]
УСЛОВИЯ:
[Свойство объекта]:
Cвойство [управление] объекта [ТРИГГЕРНЫЙ МЕХАНОИД X] удовлетворяет условию [равно] значению [игрок]
[Свойства Журнала]:
Раздел журнала [проваленные миссии] Игрока [содержит] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_opozdanie_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Почему ты так долго добирался, %ИМЯ ИГРОКА/%? Хоть ты и доставил мне этот информпакет, но за столько времени многие данные в нём уже потеряли свою актуальность. Так что за доставку я тебе дам всего 500 Э.К.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
[Дать/отнять предмет объекту]:
[Отнять] предмет [informpaket_1] в количестве [1] шт. объекту [Игрок]
[Дать/отнять предмет объекту]:
[Дать] предмет [Энергетический кристалл] в количестве [500] шт. объекту [Игрок]
{Задание из проваленных в выполненные перемещать мы не будем}.
Ну и последний вариант - когда Игрок и во время не уложился, и до Супера не добрался, но зато, угрюмый и опущенный, вернулся в климат-активатор получать заслуженную затрещину:
Триггер "Миссия климат-активатора Сектора Тундры - Игрок ещё не отвёз информпакет"
СОБЫТИЯ:
[механоид влетел в здание]:
Посещённое здание - это [klimat-aktivator_sektora_tundry]
УСЛОВИЯ:
[Свойство объекта]:
Cвойство [управление] объекта [ТРИГГЕРНЫЙ МЕХАНОИД X] удовлетворяет условию [равно] значению [игрок]
[Свойства Журнала]:
Раздел журнала [проваленные миссии] Игрока [содержит] миссию [dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Свойство объекта]:
Cвойство [обладатель] объекта [informpaket_1] удовлетворяет условию [равно] значению [игрок]
{Потому как если бы Игрок побывал у Супера, то в любом случае этот информпакет у него отобрали бы.}
ДЕЙСТВИЯ:
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Создать новое диалоговое окно] под кодовым названием [dialokno_ojidanie_missii_dostavka_informpaketa_klimat-aktivatora_sektora_tundry]
[Диалог: вывести текст в текущем диалоговом окне]:
Вывести текст
[Ты так и не доставил Суперу информпакет, %ИМЯ ИГРОКА/%? Наверное, данные в этом информпакете уже не актуальны... В любом случае, ещё есть надежда. Всё равно, повидай Супера.] цвета [голубой] в текущем диалоговом окне.
[Диалог: создать новое диалоговое окно/закончить диалог/закрыть диалоговое окно]:
[Закончить диалог] под кодовым названием [ТЕКУЩИЙ ДИАЛОГ]
Может вся эта триггерятина и покажется уж больно широченной, но она, во-первых, логична, а потому проста, во-вторых, даёт доступ к простому конфигуренью всех на свете попций, и в третьих, не забывайте, что вся работа с триггерными шаблонными функциями заключается в клацаньи мышкой по изменяемым полям шаблона функции (за исключением некоторых полей, где нужно ввести квестовый текст или назвать что-нить), так что вся грамоздкость триггеров в реале очень быстро нами обрабатывается (не то, что я щас это всё на КЛАВЕ расписывал... Хух,
напарился, однако...
). Так что пиддерживайте мою (Вариковскую, ваще-то, но мною активно адаптируемую
) идею триггеров!
Добавлено спустя 5 минут 21 секунду:
З.Ы.: Поднимите с пола челюсти
, всунте глаза обратно в орбиты
и имейте право сказать: "не, ну псих! Столько расписать!!!"