Конечно же, это не единственные варианты, но они работают и работают хорошо.
Кроме того, в некоторых примерах можно заменить вейпоинты на createGuardedPoint.
Сразу обращу внимание, что когда вы впервые объявляете переменную, пишите перед ней private. Как подсказал один опытный человек — это не только нужно, но и делает это всё быстрее. А скорость выполнения команд — это всегда хорошо для любой миссии.
Так же, заметьте что в случае с формацией
_wp setWaypointFormation "WEDGE";
и радиусом завершения вейпоинта
_wp setWaypointCompletionRadius 10;
Это писать необязательно. Так как:
формация по умолчанию = WEDGE
А радиус завершения вейпоинта по умолчанию = 10 метрам.
Например, нам надо сделать двойку, которая будет патрулировать по определённым точкам.
Для начала зайдём в просмотр конфигураций в редакторе, и найдём нужную нам группу.
Например:
configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSentry"
Это будет гранатомётчик (подствольник) и стрелок в его подчинении.
После этого, пишем следующее в нашем файле sqf для спауна ботов:
Патрульная двойка:
Код в чистом виде:
private _group1 = [[26841.1,24552,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSentry")] call BIS_fnc_spawnGroup; private _wp =_group1 addWaypoint [[27160,24915.1,0], 0]; _wp setWaypointType "MOVE"; _wp setWaypointSpeed "LIMITED"; _wp setWaypointBehaviour "SAFE"; _wp setWaypointFormation "WEDGE"; _wp setWaypointCombatMode "RED"; _wp setWaypointCompletionRadius 10; private _wp1 =_group1 addWaypoint [[26841.1,24552,0], 0]; _wp1 setWaypointType "MOVE"; _wp1 setWaypointSpeed "LIMITED"; _wp1 setWaypointBehaviour "SAFE"; _wp1 setWaypointFormation "WEDGE"; _wp1 setWaypointCombatMode "RED"; _wp1 setWaypointCompletionRadius 10; private _wp2 =_group1 addWaypoint [[26841.7,24552.5,0], 0]; _wp2 setWaypointType "CYCLE"; _wp2 setWaypointSpeed "LIMITED"; _wp2 setWaypointBehaviour "SAFE"; _wp2 setWaypointFormation "WEDGE"; _wp2 setWaypointCombatMode "RED"; _wp2 setWaypointCompletionRadius 10;
Код с расшифровкой:
// Создаём группу. Указываем координаты где она должна быть создана. Указываем сторону (у нас это east), показываем путь к конфигу группы (вшит в игре), вызываем функцию спауна ботов (вшита в игре). private _group1 = [[26841.1,24552,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfSentry")] call BIS_fnc_spawnGroup; // Указываем первый вейпоинт, его координаты private _wp =_group1 addWaypoint [[27160,24915.1,0], 0]; // Тип вейпоинта _wp setWaypointType "MOVE"; // Скорость для этого вейпоинта _wp setWaypointSpeed "LIMITED"; // Состояние группы (спокойное) _wp setWaypointBehaviour "SAFE"; // Указываем формацию. Учтите, что по умолчанию стоит WEDGE, и это можно не писать. _wp setWaypointFormation "WEDGE"; // Тип реагирования. В данном случае "Огонь по готовности" _wp setWaypointCombatMode "RED"; // Радиус в котором вейпоинт зачтётся. По умолчанию он и так 10 метров, так что это для примера _wp setWaypointCompletionRadius 10; // Аналогично первому private _wp1 =_group1 addWaypoint [[26841.1,24552,0], 0]; _wp1 setWaypointType "MOVE"; _wp1 setWaypointSpeed "LIMITED"; _wp1 setWaypointBehaviour "SAFE"; _wp1 setWaypointFormation "WEDGE"; _wp1 setWaypointCombatMode "RED"; _wp1 setWaypointCompletionRadius 10; // Аналогично первому private _wp2 =_group1 addWaypoint [[26841.7,24552.5,0], 0]; _wp2 setWaypointType "CYCLE"; _wp2 setWaypointSpeed "LIMITED"; _wp2 setWaypointBehaviour "SAFE"; _wp2 setWaypointFormation "WEDGE"; _wp2 setWaypointCombatMode "RED"; _wp2 setWaypointCompletionRadius 10;
Наполнение территории патрулями. Спаун на случайных (заданных) точках:
Теперь у нас есть патрульные по периметру, но нам нужно наполнить какую-то территорию патрулями. Делаем вот что:
Код в чистом виде:
0 spawn { private _patrol_list = [[26771,24621,0], [26771,24621.5,0]]; for "_i" from 1 to 2 do { private _position = [26771,24621.5,0]; private _radius = 5 + ceil random 10; private _groupPatrol = [selectRandom _patrol_list, east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "O_InfTeam_AT_Heavy")] call BIS_fnc_spawnGroup; [_groupPatrol, _position, _radius] call BIS_fnc_taskPatrol; }; };
Код с расшифровкой:
0 spawn { // Указываем случайные точки спауна (так интересней) private _patrol_list = [[26771,24621,0], [26771,24621.5,0]]; // Повторяем процедуру спауна. В данном случае ДВА раза. Сколько напишите - столько и будет. for "_i" from 1 to 2 do { // Указываем точку начала патрулирования. От неё будет идти указанное расстояние зоны патрулирования. private _position = [26771,24621.5,0]; // Указываем радиус (расстояние от точки начала), в данном случае 5 метров, и (случайно) плюс 10 метров. Ставьте сколько надо. private _radius = 5 + ceil random 10; // Создаём группу. Указываем координаты где она должна быть создана (будет случайно выбрано из _patrol_list) . Указываем сторону (у нас это east), показываем путь к конфигу группы (вшит в игре), вызываем функцию спауна ботов (вшита в игре). private _groupPatrol = [selectRandom _patrol_list, east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "O_InfTeam_AT_Heavy")] call BIS_fnc_spawnGroup; // Вызываем функцию патрулирования. (вшита в игре) [_groupPatrol, _position, _radius] call BIS_fnc_taskPatrol; }; };
Патрули. Спаун на одной позиции:
А если вы не хотите что бы точки выбирались случайно, то пишем так:
Код в чистом виде:
0 spawn { private _position = [27153.5,24232.5,0]; private _radius = 30 + ceil random 25; private _groupPatrol = [[27153.5,24232.5,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OI_reconPatrol")] call BIS_fnc_spawnGroup; [_groupPatrol, _position, _radius] call BIS_fnc_taskPatrol; };
Код с расшифровкой:
0 spawn { // Указываем точку начала патрулирования. От неё будет идти указанное расстояние зоны патрулирования. private _position = [27153.5,24232.5,0]; // Указываем радиус (расстояние от точки начала), в данном случае 5 метров, и (случайно) плюс 10 метров. Ставьте сколько надо. private _radius = 30 + ceil random 25; // Создаём группу. Указываем координаты где она должна быть создана. Указываем сторону (у нас это east), показываем путь к конфигу группы (вшит в игре), вызываем функцию спауна ботов (вшита в игре). private _groupPatrol = [[27153.5,24232.5,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OI_reconPatrol")] call BIS_fnc_spawnGroup; // Вызываем функцию патрулирования. (вшита в игре) [_groupPatrol, _position, _radius] call BIS_fnc_taskPatrol; };
Спаун группы. Стоят:
0 spawn { private _groupPatrol = [[26351.5,23716.7,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OI_reconSentry")] call BIS_fnc_spawnGroup; _groupPatrol setBehaviour "SAFE"; };
Код с расшифровкой:
0 spawn { // Создаём группу. Указываем координаты где она должна быть создана. Указываем сторону (у нас это east), показываем путь к конфигу группы (вшит в игре), вызываем функцию спауна ботов (вшита в игре). private _groupPatrol = [[26351.5,23716.7,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OI_reconSentry")] call BIS_fnc_spawnGroup; _groupPatrol setBehaviour "SAFE"; };
И наконец-то нам нужны подкрепления. Наши или что бы врагам приехали новые бойцы.
Вот тут я честно задолбался искать верный вариант. И очень хочется поблагодарить одного чудесного человека (просил не называть его имени) за помощь с этим скриптом.
Как оказалось, всё очень просто. Но искал я не там.
И так, пишем вот это:
Подкрепления прибывающие на транспорте. Выгрузка в заданной точке:
Код в чистом виде:
0 spawn { private _truck = "O_Truck_03_transport_F" createVehicle ([26308.8,22054.3,0]); private _suppGroup = [[26308.8,22054.3,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfAssault")] call BIS_fnc_spawnGroup; private _leader = leader _suppGroup; private _unitsCargo = units _suppGroup - [_leader]; _leader moveInDriver _truck; {_x moveInCargo _truck} forEach _unitsCargo; _suppGroup move [27084.6,23068,0]; waitUntil { sleep 1; (_truck distance [27084.6,23068,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 [[26991.9,23204.3,0], 0]; _wp setWaypointType "SAD"; _wp setWaypointSpeed "FULL"; _wp setWaypointCombatMode "RED"; };
Код с расшифровкой:
0 spawn { // Создаём нужный нам грузовик. Указываем координаты где это должно произойти. private _truck = "O_Truck_03_transport_F" createVehicle ([26308.8,22054.3,0]); // Создаём группу. Указываем координаты где она должна быть создана. Указываем сторону (у нас это east), показываем путь к конфигу группы (вшит в игре), вызываем функцию спауна ботов (вшита в игре). private _suppGroup = [[26308.8,22054.3,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfAssault")] call BIS_fnc_spawnGroup; // Создаём локальную переменную для лидера группы, так как именно ему понадобиться дать отдельные указания. Но при этом оставляем его в остальной группе. private _leader = leader _suppGroup; // Создаём локальную переменную для юнитов в кузове, и убираем оттуда лидера группы _leader private _unitsCargo = units _suppGroup - [_leader]; // Лидера группы сажаем на место водителя грузовика. Грузовик _truck и лидер _leader _leader moveInDriver _truck; // Остальная группа садится на пассажирские места {_x moveInCargo _truck} forEach _unitsCargo; // Указываем группе (а лидер в ней тоже, но он за рулём техники) куда им нужно двигаться _suppGroup move [27084.6,23068,0]; // Ждём выполнения условия. В данном случае, это то что объект _truck окажется на дистанции менее 10 метров от указанной точки waitUntil { sleep 1; (_truck distance [27084.6,23068,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 [[26991.9,23204.3,0], 0]; // Указываем тип вейпоинта. В данном случае Search and destroy _wp setWaypointType "SAD"; // Указываем скорость вейпоинта _wp setWaypointSpeed "FULL"; // Тип реагирования. В данном случае "Огонь по готовности" _wp setWaypointCombatMode "RED"; };
Если надо оставить водителя на месте, или вообще экипаж техники, например БМП. Пишем в начале предыдущего примера так:
С пояснениями по изменениям:
private _truck = "O_Truck_03_transport_F" createVehicle ([26308.8,22054.3,0]); // Создаём экипаж. В данном случае водителя грузовика, и сажаем его именно за руль этого грузовика. createVehicleCrew _truck; // Пихаем водителя грузовика в переменную _driver private _driver = driver _truck; // Переменную _driver пихаем в переменную _groupDriver . Сделано на случай, если вы решили дать ему вейпоинт, а даются они только группам. private _groupDriver = group _driver; private _men = [[26308.8,22054.3,0], east, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> "OIA_InfAssault")] call BIS_fnc_spawnGroup; {_x moveInCargo _truck} forEach units _men; // Вместо вейпоинта задаём координаты, и отправляем командой move _groupDriver move [27084.6,23068,0]; // Далее как и в предыдущем примере.
Кастомная группа:
Если хотим заспаунить кастомную группу, ибо нам конфиги от BIS`ов могут не понравится для наших целей, пишем вот так:
Код в чистом виде:
private _blockgroup = ["O_Soldier_AT_F", "O_soldier_F", "O_Soldier_GL_F", "O_medic_F"]; private _group1 = [[26297.5,22907.1,0], east, _blockgroup] call BIS_fnc_spawnGroup;
Код с расшифровкой:
// Создаём переменную, которая содержит нужных именно нам бойцов. private _blockgroup = ["O_Soldier_AT_F", "O_soldier_F", "O_Soldier_GL_F", "O_medic_F"]; // Спауним группу вызывая нужную нам переменную, вписывая её вместо пути к конфигу. Так как свой конфиг мы написали в предыдущей строчке. private _group1 = [[26297.5,22907.1,0], east, _blockgroup] call BIS_fnc_spawnGroup;
Можно вообще огласить все группы в начале документа, и вызывать их когда и где вам надо.
Наше видео на эту тему (показан старый форум, сейчас тут этот сайт):
Обсудить этот метод можно в нашем Discord канале