Создание задания с несколькими подзаданиями

Отличный скрипт от KOKaKOJIbKA, в несколько упрощённом виде по моей просьбе.

Создаётся задание, которое будет выполнено после выполнения подзаданий.
В данном примере, есть три блокпоста. На каждом из них находится противник. Если количество противника в радиусе 20 метров от заданной координаты = 0 — задание выполняется.
Противники могут быть убиты или убежать.

Здесь три подзадания. Если надо больше или меньше, то просто сделайте больше или сократите их количество.
Код в чистом виде:

["BET_clear_roads", true, ["Вам надо зачистить блокпосты",
"Зачистить блокпосты",""],[4602.86,17140.8,0], "ASSIGNED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
[] spawn {
["BET_clear_road1", true, ["Вам надо зачистить блокпост 1",
"зачистить блокпост 1",""],[4715.99,17125.3,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
waitUntil {uiSleep 0.5; ({_x distance [4715.99,17125.3,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
["BET_clear_road1", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
[] spawn {
["BET_clear_road2", true, ["Вам надо зачистить блокпост 2",
"зачистить блокпост 2",""],[4599.06,17172.6,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
waitUntil {uiSleep 0.5; ({_x distance [4599.06,17172.6,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
["BET_clear_road2", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
[] spawn {
["BET_clear_road3", true, ["Вам надо зачистить блокпост 3",
"зачистить блокпост 3",""],[4501.71,17085.9,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
waitUntil {uiSleep 0.5; ({_x distance [4501.71,17085.9,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
["BET_clear_road3", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
waitUntil {uiSleep 0.5; ({_x distance [4715.99,17125.3,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [4599.06,17172.6,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [4501.71,17085.9,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
[{hint "Всё чисто";},"BIS_fnc_spawn"] call BIS_fnc_MP;
uiSleep 3;
["BET_clear_roads", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;

Код с расшифровкой по основным моментам:

// Создаётся основное задание.
// Переменная задания,описание, название, координаты, статус, номер, оповещение, кто видит (true = все ), тип. (описание основных пунктов)
["BET_clear_roads", true, ["Вам надо зачистить блокпосты",
"Зачистить блокпосты",""],[4602.86,17140.8,0], "ASSIGNED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
[] spawn {
//создаётся подзадание номер 1
["BET_clear_road1", true, ["Вам надо зачистить блокпост 1",
"зачистить блокпост 1",""],[4715.99,17125.3,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
// Ожидается условие выполнения. На дистанции от указанных координат число солдат фракции east = 0
waitUntil {uiSleep 0.5; ({_x distance [4715.99,17125.3,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
// Если условие выполнено - задание выполнено
["BET_clear_road1", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
[] spawn {
//создаётся подзадание номер 2
["BET_clear_road2", true, ["Вам надо зачистить блокпост 2",
"зачистить блокпост 2",""],[4599.06,17172.6,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
// Ожидается условие выполнения. На дистанции от указанных координат число солдат фракции east = 0
waitUntil {uiSleep 0.5; ({_x distance [4599.06,17172.6,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
// Если условие выполнено - задание выполнено
["BET_clear_road2", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
[] spawn {
//создаётся подзадание номер 3
["BET_clear_road3", true, ["Вам надо зачистить блокпост 3",
"зачистить блокпост 3",""],[4501.71,17085.9,0], "CREATED", 1,true,true,"Destroy",false] call BIS_fnc_setTask;
// Ожидается условие выполнения. На дистанции от указанных координат число солдат фракции east = 0
waitUntil {uiSleep 0.5; ({_x distance [4501.71,17085.9,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
uiSleep 3;
// Если условие выполнено - задание выполнено
["BET_clear_road3", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;
};
// Ожидается выполнения всех трёх условий. если все три условия выполнены - главное задание выполнено.
waitUntil {uiSleep 0.5; ({_x distance [4715.99,17125.3,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [4599.06,17172.6,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0) and ({_x distance [4501.71,17085.9,0] < 20 and side _x isEqualTo east} count allUnits isEqualTo 0)};
// Извещение в виде хинта
[{hint "Всё чисто";},"BIS_fnc_spawn"] call BIS_fnc_MP;
uiSleep 3;
// Если все условия (три подзадания) выполнены - задание выполнено
["BET_clear_roads", "SUCCEEDED",true] spawn BIS_fnc_taskSetState;

Обсудить этот метод можно в нашем Discord канале