И так, нам надо создать условие, при выполнении которого что-то будет происходить.
И да, те же самые триггеры для этого неплохо подходят. В большинстве случаев, но, не во всех.
Какие бывают нужны варианты:
- Игрок приблизился к объекту / координате. (Можно триггером)
- Игрок уничтожил цель / объект, или же объект был удалён (как бы собран, как тут). (Можно триггером)
- Юнитов меньше чем число X. (Устанешь делать триггерами)
- Выполнен ряд условий для срабатывания кода дальше. (Слишком много мороки с триггерами)
А мы будем это делать с помощью кода.
Существуют такие варианты как:
- waitUntill
- if / else
waitUntill
В случае с waitUntill мы ожидаем выполнения условия, которое задано в скобках после этой команды.
Например, мы можем установить условие, которое будет ожидать пока все юниты в группе _bravo будут уничтожены.
0 spawn { // Создаём группу в переменной, для её отслеживания. _bravo = p1, p2, p3, p4; // Ждём условие waitUntil { // Пауза 1 секунда. Оптимизация sleep 1; // Сверяем если живые перечисленные в _bravo юниты все убиты - то [_bravo] findIf {alive _x} == -1 }; // Проверочная команда. В связке с remoteExec для выдачи хинта на клиенте, а не только на сервере. ["всё, пи**ец.."] remoteExec ["hint"]; };
ВАЖНО!
Если вы поставите команду waitUntill просто по ходу вашего кода — то тогда, ничего после этой строчки не будет исполняться, пока условие(я) прописанное в нём не будет выполнено.
А если поставить внутри 0 spawn {};
Команда waitUntil не будет останавливать код в файле после неё, а будет работать параллельно с остальным.
Остановит только ход кода внутри своего блока 0 spawn {};
, пока заданное ей условие не будет удовлетворено.
Кроме того, можно считать сколько кого осталось. Например:
waitUntil {uiSleep 0.5; ({_x distance [4599.06,17172.6,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
В данном случае: условие ожидает что на дистанции менее 20 метров, от указанной координаты и это бойцы фракции EAST остаток равен нулю — то оно выполнено.
Можно так же изменить по разному, на варианты => или <= или ещё как.
Список разных вариантов операторов можно посмотреть тут https://community.bistudio.com/wiki/Operators#Comparison_Operators
if / else
Тут всё немного по-другому, но поинтереснее.
Если в случае с waitUntill мы ожидаем чего-то определённого, из категории «Вкл / Выкл» , то здесь мы можем ожидать разные результаты.
И самое главное, что мы можем ставить это ожидание в цикл (о циклах мы поговорим в другой статье)!
Для начала, пример с ожиданием в цикле, когда сверка идёт по двум условиям:
- Имя игрока в списке.
- Игрок ближе (можно дальше) чем 5 метров от точки координат.
0 spawn { for "_i" from 0 to 1 step 0 do { _name = name player; _name_list = ["первое имя", "второе имя"]; // Список имён //Проверка, есть ли имя объекта в списке и дистанция его по отношению к указанной координате меньше 5 метров (радиус) или нет - если да - то код идёт дальше if ((_name in _name_list) && ((player distance [3949.07,3552.22,0]) < 5)) then {titleText ["ПОКИНЬТЕ ЗОНУ", "BLACK FADED",3]; // Затемнение sleep 2; // Пауза между чёрным экраном и обычной картинкой titleText ["", "BLACK IN",3];}; // Просветление uiSleep 3; // Пауза между запуском кода выше }; };
При этом заметим, что тут нет команды else, так как она нам тут не нужна.
А вот если нам нужны варианты (в данном случае Да / Нет ), то можно писать так:
if (a < b) then { hint "B is greater than A"; } else { hint "A is greater than B"; };
Пример с: https://community.bistudio.com/wiki/else
Но можно так же ожидать разные варианты.
То есть, вариантов If может быть много, если нужно.
if (a) then { if (b) then { if (c) then { //делайте что-нибудь }; }; };
Пример взят с: arma3.ru|Уроки по скриптописанию.
И в данном случае, мы можем проверять пошагово. Например:
- Заложников не меньше чем X.
- Вертолёт жив.
- Ещё какое-то условие.
Описание команд на wiki от разработчика:
https://community.bistudio.com/wiki/if
https://community.bistudio.com/wiki/else
Надеюсь ничего не забыл, и не напутал. Если я где-то ошибся — напишите об этом мне в в нашем Discord.
Если же что-то непонятно, то можно спросить / уточнить в нашем Discord канале