
Рассмотрим вариант создания задания с простой целью — войти в область чётко обозначенную границами триггера (конечно же можно и по другому).
Пример 1:
Сначала создаём триггер, который будет контролировать состояние задания. Разумеется предварительно поставив юнитов.
Код в чистом виде:
trg = createTrigger ["EmptyDetector", [26309.9,22023.1,0]]; trg setTriggerArea [5, 5, 0, true, 15]; trg setTriggerActivation ["GUER", "PRESENT", true]; trg setTriggerStatements ["this", " ['BET_recon', 'SUCCEEDED',true] spawn BIS_fnc_taskSetState; execVM 'tasks\BET_clear_road.sqf'", "deleteVehicle trg"];
Код с расшифровкой по основным моментам:
// Создаём триггер, задаём ему тип и позицию. https://community.bistudio.com/wiki/createTrigger trg = createTrigger ["EmptyDetector", [26309.9,22023.1,0]]; // Задаём зону триггера и его форму (true = прямоугольный, false = эллиптический). https://community.bistudio.com/wiki/setTriggerArea trg setTriggerArea [5, 5, 0, true, 15]; // Задаём тип активации триггера. https://community.bistudio.com/wiki/setTriggerActivation trg setTriggerActivation ["GUER", "PRESENT", true]; // Задаём что будет происходить при активации и деактивации триггера https://community.bistudio.com/wiki/setTriggerStatements trg setTriggerStatements ["this", " ['BET_recon', 'SUCCEEDED',true] spawn BIS_fnc_taskSetState; execVM 'tasks\BET_clear_road.sqf'", "deleteVehicle trg"]; // У меня он при активации переводит статус задания 'BET_recon' в "ВЫПОЛНЕНО", при этом запускает файл "BET_clear_road", а при деактивации удаляет сам себя.
Создаём само задание. Называется оно «Разведка» (BET_recon).
Код в чистом виде:
["BET_recon", true, ["Проследуйте на позицию для изучения обстановки. Пока о вас не знают.","Разведка",""],[26309.9,22023.1,0], "ASSIGNED", 1,true,true,"scout",false] call BIS_fnc_setTask;
Код с расшифровкой по основным моментам:
// Переменная задания, кому назначено, описание, название, координаты, статус, оповещение, кому видно (true = всем), тип (описаны основные моменты) ["BET_recon", true, ["Проследуйте на позицию для изучения обстановки. Пока о вас не знают.","Разведка",""],[26309.9,22023.1,0], "ASSIGNED", 1,true,true,"scout",false] call BIS_fnc_setTask;
Когда оно выполняется — создаётся следующее задание «Зачистить дорогу» (BET_clear_road).
Конечно же можно сделать примерно как во втором примере что чуть ниже, само себе задание, само себе триггер. И поставить условие на обсчёт игроков в этой зоне. Это полезно если вам нужно что бы обязательно 2 или более игроков пришло туда. Например «Собраться в указанной точке».
Но в данном случае, напишем пример, в котором будет три точки, на которых не должно остаться ни одного представителя стороны east.
Ну а сбор на указанной точке можно сделать обратным путём от этого примера.
Например такой код (обсчитывается три разных позиции):
Код в чистом виде:
waitUntil {uiSleep 0.5; ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0)}; [{hint "Всё чисто";},"BIS_fnc_spawn"] call BIS_fnc_MP;
Код с расшифровкой по основным моментам:
// ждёт пока не выполнится условие, что от указанных координат (можно marker pos) в радиусе 100 метров не окажется ни одного представителя стороны EAST waitUntil {uiSleep 0.5; // Первая позиция ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0) // Вторая позиция and ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0) // Тертья позиция and ({_x distance [21646.4,21423.2,0] < 100 and side _x isEqualTo east} count allUnits isEqualTo 0)}; // Если условие выполнено - выдаётся хинт. Ну, или напишите то что надо вам. [{hint "Всё чисто";},"BIS_fnc_spawn"] call BIS_fnc_MP;
Правда если вам нужен непосредственно контроль здания строго по стенам, или ещё чего то чётко по его размерам — то проще это делать триггером или командой inArea (на мой взгляд).
Пример 2:
Самое себе задание, само себе триггер!
Код в чистом виде:
["BET_destroy_car", true, ["Вам надо уничтожить броневик", "Уничтожить броневик"," "],[26312.3,22106.8,0], "ASSIGNED", 5,true,true,"Destroy",false] call BIS_fnc_setTask; car_targ addMPEventHandler ["MPKilled", { hint "Броневик уничтожен"; (_this select 0) removeMPEventHandler ["MPKilled", 0]; }]; waitUntil {uiSleep 0.5; (!alive car_targ)}; ["BET_destroy_car", "SUCCEEDED",true] spawn BIS_fnc_taskSetState; execVM 'tasks\BET_destroy_towers.sqf';
Код с расшифровкой по основным моментам:
// Переменная задания, кому назначено, описание, название, координаты, статус, оповещение, кому видно (true = всем), тип (описаны основные моменты) ["BET_destroy_car", true, ["Вам надо уничтожить броневик", "Уничтожить броневик"," "],[26312.3,22106.8,0], "ASSIGNED", 5,true,true,"Destroy",false] call BIS_fnc_setTask; // Ожидает уничтожения цели, в данном случае броневика. После чего выдаёт хинт. car_targ addMPEventHandler ["MPKilled", { hint "Броневик уничтожен"; (_this select 0) removeMPEventHandler ["MPKilled", 0]; }]; waitUntil {uiSleep 0.5; (!alive car_targ)}; // После того как условие было выполнено, переводит статус задания в "ВЫПОЛНЕНО", а после этого запускает следующее задание. ["BET_destroy_car", "SUCCEEDED",true] spawn BIS_fnc_taskSetState; execVM 'tasks\BET_destroy_towers.sqf';
Обсудить этот метод можно в нашем Discord канале