
Скрипт создаёт 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 канале