Осваиваем World Editor: триггеры

Содержание:

Структура триггера: события, условия и действия

Перед тем как непосредственно перейти к триггерам (к программированию), посмотрим на рабочую область и самые основы.
Каждый триггер должен находиться внутри какой-нибудь папки. Триггер состоит из трех частей: событий (events), условий (conditions) и действий (actions). Также у триггера есть собственное имя, которое, как и имя файла, не может содержать спецсимволов (в т. ч. знак подчеркивания, зато можно использовать пробелы) и может быть только на английском языке (папки могут быть на русском).
В верхней части окна редактора триггеров имеется пять кнопок, управляющих процессом создания триггеров. Первая из них - создание новой папки для триггера, вторая - создание нового триггер, последние три кнопки отвечают за добавление в триггер новых событий, условий и действий.
Принцип действия следующий: игра - это последовательность событий (например, начало игры - событие, юнит атаковал юнита - событие, герой повысился в уровне - событие, игрок передал сообщение в чате - событие). Когда в игре происходит какое-либо событие, то событие, указанное в триггере, сопоставляется со случившимся. Если совпадение есть, то происходит второй этап, на котором проверяется выполнение условий триггера. Условия должны уточнить, когда нужно производить действие, а когда - нет. Если условия выполнятся (об этом подробно расскажу ниже), то произойдет третий, финальный этап - будет выполнено действие этого триггера. Например, перед нами задача: сделать так, чтобы когда герой (определенный, а не любой!) подойдет к порталу, он переносился бы в другое место. Событием здесь будет приход юнита в регион вокруг портала, а условие должно уточнить, что этим юнитом должен быть определенный герой. Действие - перенос юнита в другое место. Итог: если событие произошло и условия выполнены, то выполняются действия триггера.
Еще у триггера есть два флажка (в окне редактора расположены сверху): включен**** (enabled) и изначально включен (initially on). По сути они имеют одинаковый смысл, за одним исключением: если триггер "отключен", то его никак нельзя включить, ибо он вообще отсутствует в игре (это важный момент), если он "изначально выключен", то его можно включить в игре. В первом случае все ясно - триггера просто нет в игре, а вот второй следовало бы разобрать. У триггера есть "флажок", который отвечает за то, включен ли он. "Отключенное" состояние равносильно тому, что у триггера нет никаких событий (но его можно вызвать из другого триггера). Этот флажок можно включать и выключать по ходу игры (для этого есть специальные действия), т. е. "включать / выключать" триггер. Флажок "изначально включен", соответственно, отвечает за его состояние "по умолчанию". Кстати, есть возможность подключать и отключать отдельные команды внутри любого триггера. Щелкните на команду правой кнопкой и выбирете пункт включить функцию (enable function). "Включать / выключать" функции по ходу игры невозможно.
Говоря про отключение триггеров, нельзя забыть про один аспект. Итак, как только произошло нужное событие и выполнены нужные условия, то триггер приводится в действие. Но дело в том, что почти все триггеры - многоразовые. Если снова произойдет нужное событие и снова выполнены условия - триггер запускается еще раз. Одноразовыми можно считать триггеры, заданные событиями map Map Initialization и Time Elapsed, поскольку эти события происходят один раз. Следовательно возникает проблема: как отключить триггеры. Например, нам нужно сделать так, чтобы когда герой приходил в определенный регион, он перемещался в другое место, но только один раз. Значит, нужно позаботиться, чтобы после первого выполнения триггер отключался. Предлагаю Вам один из способов это осуществить: в каждый триггер, который нужно отключить вставляете строчку действие Trigger - Turn off (This trigger). Это действие отключает триггер.
Примечание: на самом деле можно просто не добавлять триггеры событий изначально, это тоже самое что и "изначально выключен". Но тогда зачем вообще нужно включение / выключение? Предположим, что у какого-то триггера есть события, но работать они должны не сразу. Т. к. у нас нет возможности добавлять события триггеру по ходу игры, тут нам может помочь только выключение триггера. Верно и обратное - иногда триггер приходится отключать (а потом опять включать). Если у Вас есть возможность использовать такой метод, вместо условий - пользуйтесь им. Это гораздо более "красивое" решение.
Еще у каждого триггера есть поле, где автор может оставить свои комментарии. Это поле находится прямо над "окном" со списком функций триггера.
События, условия и действия все вместе называются функциями триггера, (назвали это так Blizzard в хелпе редактора).
Некоторые из тех, кто еще не освоил WE, говорят, что не могут понять, как работают триггеры, потому что в них слишком много различных команд. На это я могу возразить - Вам, скорее всего, не понадобится и четверти тех команд (особенно поначалу). Да, если Вы владеете английским языком, то изучать триггеры будет намного проще.
А теперь, очень рекомендую вам открыть редактор и познакомиться с основными событиями, условиями и действиями, которые есть в редакторе.

Этот комментарий удален
3
0
13 лет назад
3
Блин, я когда зашёл впервые в РТ, повесился от сложности, теперь всё нормально - в РТ нужна только логика (особенно с Условиями).
1
29
13 лет назад
1
просто для этого мозги работоспособные надо задействовать
1
9
11 лет назад
1
~ Автор статьи
>Т. к. у нас нет возможности добавлять события триггеру по ходу игры
тут автор не прав,такое действие есть даже на ГУИ,без КС и джаза,категория [b]Тригеры[/b],событие [b]Add Trigger Event[/b],вроде так
1
6
10 лет назад
1
Может кто помочь? Мне надо сделать не разлогающегося солдата (Чтобы он с инцилизации карты он лежал на полу)
0
21
10 лет назад
0
Askarto, поиск, карта рексара номер 1
1
24
10 лет назад
1
Askarto:
Может кто помочь? Мне надо сделать не разлогающегося солдата (Чтобы он с инцилизации карты он лежал на полу)
Сделай разрушаемый объект с моелью солдата и 0 прочность и здоровьем
1
7
10 лет назад
1
darkowlom:
Askarto:
Может кто помочь? Мне надо сделать не разлогающегося солдата (Чтобы он с инцилизации карты он лежал на полу)
Сделай разрушаемый объект с моелью солдата и 0 прочность и здоровьем
Это, конечно, самый простой способ, но таким трупам нельзя задать цвет команды, к тому же, с ними нельзя взаимодействовать, так как независимо от модели он останется простым ящиком. Да и ограничения по размещению есть.
1
23
10 лет назад
1
Да и ограничения по размещению есть.
Которые можно с легкостью убрать, разве нет?
1
7
10 лет назад
1
SomeFire:
Да и ограничения по размещению есть.
Которые можно с легкостью убрать, разве нет?
Для тебя или меня. А Askarto не может даже разместить труп.
Да и минусов у этого способа в любом случае больше, чем плюсов.
3 комментария удалено
0
1
7 лет назад
0
я короч создал
юнита
и типо вставил анимацию смерти
но предварительно сделал его неуязвимым хд
в итоге вышел трупак
с цветом хд
я гений!
0
1
3 года назад
0
глупо наверно тут это писать, но если я так и не смогу включить мозги подскажите, как связывать действия между собой, например "при инициализации карты юнит становиться неуязвимым, по прошествию 5 секунд становиться уязвимым"

YetHV0STIK:
глупо наверно тут это писать, но если я так и не смогу включить мозги подскажите, как связывать действия между собой, например "при инициализации карты юнит становиться неуязвимым, по прошествию 5 секунд становиться уязвимым"
хаха мозги включились, оказываеться действия выполняються друг за другом вот я дурак(
0
32
3 года назад
0
YetHV0STIK, ну а как ты думал, еще у триггера может быть сколько угодно событий, условий и действий, если хоть одно из множества условий ложно - то действия не сработают, хотя правильнее называть TriggerAction - это не совсем действие, а обьект который содержит набор инструкций и вызывается триггером, в нем ты пишешь свое Сделать юнита неуязвимым, вот ссылка на список инструкций может как добавлятся триггеру так и удалятся у него, причем в любой момент, аналогично с TriggerCondition - условие, которое тоже отдельный обьект, ссылка на boolexpr - особый набор условий, все действия можно сделать и в нем, но разбито это все на категории для удобства. Все действия выполняются последовательно, одно за другим и никак не одновременно, если в действие триггера ты провоцирует срабатывание события другого триггера. то поток перекинется туда, все там выполнет и вернется обратно. Поэтому стоит лимит операций, и при рекурсиях не просто потеря производительности а фатал.
0
1
2 года назад
0
Ностальгия
0
1
2 года назад
0
Крайне спасибо
0
1
5 месяцев назад
0
Спасибо
Чтобы оставить комментарий, пожалуйста, войдите на сайт.