Перевозка игрока (группы игроков) или с группой союзных ботов на вертолёте с пилотом ботом.

Представляю вашему вниманию небольшой скрипт на транспортировку игрока (группы игроков) с помощью вертолёта управляемого ботом.

Да, можно и по-другому, но этот вариант тоже имеет право быть, и он хорошо работает.

Когда будете тестить, помните:
Работает в сетевой, можно в редакторе сетевую запустить и будет работать.
В сингл редакторе может улетать без вас. Армально.

Может пригодится для сингла или коопа. БОТов из отряда игрока этот скрипт тоже учитывает, так как считаются playableUnits.
НО! Главное на каждом юните (даже если он будет просто БОТ) поставить в атрибутах галочку «ИГРОВОЙ», иначе скрипт его не будет считать.

Так же, кроме всего прочего, можно экипажу добавить отваги.
И тогда, они будут поливать всех огнём (если есть орудие на борту). Делается это достаточно просто:

Задаём экипажу вертолёта параметр Courage.
Правда надо помнить, что игра посчитает его исходя из прописанного здесь и настроек вашего сервера. И если по итогу он будет слишком мал — то есть шанс отступления.

В этом коде, он проверяется в строке 13 и выводится хинтом в правом верхнем углу экрана.
Если вам это не надо — можете убрать.

Если же он окажется в пределах 0.9 — они выполнят посадку, повоюют слегка и улетят куда им было сказано скриптом.

0 spawn {
// Создаём невидимую вертолётную площадку на координатах посадки. AI пилотам так проще
private _helipad = "Land_HelipadEmpty_F" createVehicle [3236.45,4954.61,0];
// Создаём сам вертолёт
private _heli = "B_Heli_Transport_01_F" createVehicle [5027.42, 5904.4, 0];
// Создаём экипаж вертолёта
createVehicleCrew _heli;
private _group = group driver _heli; // Задаём параметр Courage
_group addVehicle _heli;
{_x setSkill ["courage", 1]} forEach units _group;
// Проверяем какой уровень Courage у нас получается. Надо => 0.90
// Показывает hint справа вверху с покзателем этого параметра
format ["Уровень параметра Courage = %1", leader _group skillFinal "courage"] remoteExec ["hint"];
// Поворачиваем вертолёт в нужную нам сторону (от 0 до 360, в градусах)
_heli setDir 270;
// Ждём пока все юниты за которых можно играть (даже если если это бот, но есть галочка "ИГРОВОЙ" в его атрибутах).
waituntil {
sleep 1;
({_x in _heli} count playableUnits) isEqualTo (count playableUnits)
};
// Указываем куда двигаться
_heli move [3236.45,4954.61,0];
// Задаём высоту полёта
_heli flyInHeight 50;
// Ждём пока дистанция будет меньше или равно 300 метрам от точки посадки. Что бы не дёргать код который идёт дальше.
waitUntil {
sleep 5;
(_heli distance [3236.45,4954.61,0]) <= 300
};
// Даём указание "ПОСАДКА" с высадкой пассажиров
_heli land "GET OUT";
// Задаём высоту полёта
_heli flyInHeight 0;
// Проверяем все ли юниты за которых можно играть (даже если если это бот, но есть галочка "ИГРОВОЙ" в его атрибутах).
waitUntil {
sleep 5;
playableUnits findIf {_x in _heli} == -1
};
// Указываем куда двигаться
_heli move [5027.46,5904.23,0];
// Задаём высоту полёта
_heli flyinheight 50;
// Ждём пока дистанция до указанной координаты будет меньше или равно 300 метрам.
waitUntil {
sleep 5;
(_heli distance [5027.46,5904.23,0]) <= 300
};
// Приказываем удалить вертолёт и юнитов в нём (экипаж).
{deleteVehicle _x} forEach ((units group _heli) + [_heli]);
};

 

Наше видео на эту тему (показан старый форум, сейчас тут этот сайт):

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