Подкрепление ботов на грузовике.

Этот скрипт спаунит грузовик с водителем и группой десанта, привозит на указанное место, выгружает их, уезжает на указанное место и удаляется.

Группа десанта идёт выполнять поставленные задачи.

0 spawn{
private _truck = "B_Truck_01_transport_F" createVehicle ([13433.8,21015.3,0]);
_truck setDir 260;
createVehicleCrew _truck;
private _group = group driver _truck;
_group addVehicle _truck;
private _suppGroup = [[13433.8,21015.3,0], west, (configfile >> "CfgGroups" >> "West" >> "BLU_F" >> "Infantry" >> "BUS_InfAssault")] call BIS_fnc_spawnGroup;
private _unitsCargo = _suppGroup;
{_x moveInCargo _truck} forEach units _unitsCargo;
_truck move [13809.9,21107.3,0];
waitUntil {
sleep 1;
(_truck distance [13809.9,21107.3,0]) < 10
};

{
[_x] allowGetIn false;
_x spawn {
_this allowDamage false;
waitUntil {isNull objectParent _this};
_this allowDamage true;
};
_x action ["Eject", vehicle _x];
} forEach units _suppGroup;

private _wp =_suppGroup addWaypoint [[13889.2,21128.5,0], 0];
_wp setWaypointType "SAD";
_wp setWaypointSpeed "FULL";
_wp setWaypointCombatMode "RED";

private _wp1 =_suppGroup addWaypoint [[13926.8,21114.8,0], 0];
_wp1 setWaypointType "SAD";
_wp1 setWaypointSpeed "FULL";
_wp1 setWaypointCombatMode "RED";

waitUntil {
{_x in _truck} count units _unitsCargo != count units _unitsCargo
};
_truck move [14564.9,20912.5,0];
waitUntil {
sleep 1;
(_truck distance [14564.9,20912.5,0]) < 10
};
{deleteVehicle _x} forEach ((units group _truck) + [_truck]);
};

Код с комментариями:

0 spawn{
// Создаём транспорт
private _truck = "B_Truck_01_transport_F" createVehicle ([13433.8,21015.3,0]);  
// Поворачиваем транспорт по азимуту
_truck setDir 260; 
// Создаём экипаж транспорта
createVehicleCrew _truck;
// Создаём группу водителя экипажа - для отдачи приказов ему
private _group = group driver _truck; 
// С этого момента приказы для _truck выполняются _group
_group addVehicle _truck;
// Создаём группу
private _suppGroup = [[13433.8,21015.3,0], west, (configfile >> "CfgGroups" >> "West" >> "BLU_F" >> "Infantry" >> "BUS_InfAssault")] call BIS_fnc_spawnGroup;   
// Заносим группу в новую переменную.
private _unitsCargo = _suppGroup; 
// Сажаем юнитов на пасажирские места
{_x moveInCargo _truck} forEach units _unitsCargo; 
// Приказываем транспорту ехать на указанную точку
_truck move [13809.9,21107.3,0];   
// Ждём пока расстояние до точки будет < 10 метров
waitUntil {   
    sleep 1;    
    (_truck distance [13809.9,21107.3,0]) < 10   
};

// Запрещаем залезать обратно, приказываем высадится, выключаем урон на мгновение выхода из транспорта  
{  
    [_x] allowGetIn false;  
    _x spawn {  
        _this allowDamage false;  
        waitUntil {isNull objectParent _this};  
        _this allowDamage true;  
    };  
    _x action ["Eject", vehicle _x];  
} forEach units _suppGroup;  
  
// Создаём для деснта 2 вейпоинта
private _wp =_suppGroup addWaypoint [[13889.2,21128.5,0], 0];    
_wp setWaypointType "SAD";     
_wp setWaypointSpeed "FULL";     
_wp setWaypointCombatMode "RED";   

private _wp1 =_suppGroup addWaypoint [[13926.8,21114.8,0], 0];    
_wp1 setWaypointType "SAD";     
_wp1 setWaypointSpeed "FULL";     
_wp1 setWaypointCombatMode "RED"; 

// Ждём пока все юниты той группы выйдут с пассажирских мест
waitUntil {
  {_x in _truck} count units _unitsCargo != count units _unitsCargo
};
// Приказываем транспорту двигаться на указанную точку
_truck move [14564.9,20912.5,0];
// Ждём пока расстояние до точки будет < 10 метров
waitUntil {   
    sleep 1;    
    (_truck distance [14564.9,20912.5,0]) < 10   
}; 
// Удаляем транспорт и его экипаж
{deleteVehicle _x} forEach ((units group _truck) + [_truck]);
};

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