Спаун ботов с возможностью найма

Скрипт создаёт n (сколько надо) количество ботов нужного нам класса в указанной точке.
Как вооружить их по другому не спрашивайте, я не знаю.

Код в чистом виде:

if (isServer) then {[] spawn {
_arr = ["I_Soldier_GL_F","I_medic_F","I_Soldier_AR_F","I_Soldier_exp_F"];
for "_i" to (count _arr - 1) do {
_grpRecrut = createGroup resistance;
_pos = [[26803.4,24638,0], 5, 180] call BIS_fnc_relPos;
_unit = (_arr select _i) createUnit [
_pos,
_grpRecrut,
"this addAction [""принять в группу"",{
(_this select 1) playAction ""PutDown"";
[(_this select 0)] joinSilent (group (_this select 1));
(_this select 0) setVariable [""recrut_unit"",true,true];
(_this select 0) removeAction (_this select 2);
true
},[] , 10, true, true, """",""(isNil {_target getVariable 'recrut_unit'}) && (_target distance _this < 3) && (alive _this) && (alive _target)""];",
0.6,
"PRIVATE"
];
};
};
};

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

// проверяет сервер ли это, если да - выполняет код (если вызов из initServer.sqf то это уловие не надо)
if (isServer) then {
[] spawn {
// массив с указанием кто нам нужен из классов
_arr = ["I_Soldier_GL_F","I_medic_F","I_Soldier_AR_F","I_Soldier_exp_F"];
// цикл в данном случае отработает 4 раза
for "_i" to (count _arr - 1) do {
// сторона нанимаемых солдат
_grpRecrut = createGroup resistance;
// позиция где они появятся (вместо [0,0,0] внесите свои координаты)
_pos = [[0,0,0], 5, 0] call BIS_fnc_relPos;
// создание юнита
_unit = (_arr select _i) createUnit [
_pos,
_grpRecrut,
// кнопка взаимодействия для найма
"this addAction [""принять в группу"",{
// (_this select 0) это юнит
// (_this select 1) это вызывающий
// Если вписать (_this select 0) то анимацию выполнит бот, а не игрок
(_this select 1) playAction ""PutDown"";
// вступление юнита в группу
[(_this select 0)] joinSilent (group (_this select 1));
(_this select 0) setVariable [""recrut_unit"",true,true];
// убирает кнопку найма с нанятого бойца
(_this select 0) removeAction (_this select 2);
true
},[] , 10, true, true, """",""(isNil {_target getVariable 'recrut_unit'}) && (_target distance _this < 3) && (alive _this) && (alive _target)""];",
0.6,
"PRIVATE"
];
};
};
};

Все благодарности за скрипт KOKaKOJIbKA.

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

 

Переработка от BlackTok[BT] (участник нашего Discord)

 

В данном случае нанятый бот не идёт, а стоит на том же месте. С вами выдвигается его копия. Ограничено пятью ботами.

Dr_fnc_ParseHitpoints = {
_obj = _this select 0;
_onlyDam = param [1,false];
_hp = getAllHitpointsDamage _obj;
_hps = _hp select 0;
_sel = _hp select 1;
_dmg = _hp select 2;
_newarr = [];
{
if (_onlyDam) then {
if ((_dmg select _forEachIndex) > 0) then {
_newarr pushback [_x,_sel select _forEachIndex,_dmg select _forEachIndex];
};
} else {
_newarr pushback [_x,_sel select _forEachIndex,_dmg select _forEachIndex];
};

} forEach _hps;
_text = "";
{
_text = _text + format ["%1 -%2 - %3
",_x select 0,_X select 1,_x select 2];
} forEach _newarr;
hint parseText _text;
};
/*
Параметры:
0 - Object - Объект, у которого нужно узнать дамаг
1 - Boolean - возвращать только задамажанные селекшены (опционально)
[player] spawn Dr_fnc_ParseHitpoints
*/

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