Автор скрипта: DrSova (участник нашего Discord)
init.sqf
AdvancedControl = [tank]; //список техники, которыми можно управлять
Dr_fnc_SpawnMyDriverPlease = {
_tank = param [0,objNull];
_role = param [1,""];
_unit = _tank getVariable ["driverbot",objNull]; //чекаем наличие бота за водителем
if ((isNull _tank) || (_role isEqualTo "")) exitWith {}; //проверка, что все переменные передались правильно
if ((_tank in AdvancedControl) && (isNull _unit) && ((_role isEqualTo "commander") || (_role isEqualTo "gunner"))) then { //проверяем, что танк в заранее заданном списке, бот-водитель отсутствует, и что роль игрока стрелок или командир
_unit = (group player) createUnit [(typeOf player), [0,0,0], [], 0, "NONE"]; // создаем бота
_unit moveInDriver _tank; //помещаем за водителя
_unit hideObjectGlobal true; //на всякий случай прячем его
_unit allowDamage false; //убираем дамаг
_tank lockDriver true; // убираем возможность сесть за водителя
_tank setVariable ["driverbot",_unit,true]; //запомнинаем бота
};
};
player addEventHandler ["GetInMan",{ //хендлер посадки игрока в технику
_tank = _this select 2;
_role = _this select 1;
[_tank,_role] spawn Dr_fnc_SpawnMyDriverPlease;
}];
player addEventHandler ["GetOutMan",{ //хендлер высадки игрока из техники
_tank = _this select 2;
_role = _this select 1;
_unit = _tank getVariable ["driverbot",objNull]; //чекаем наличие бота за водителем
if (!(isNull _unit) && (_tank in AdvancedControl) && ((_role isEqualTo "commander") || (_role isEqualTo "gunner"))) then { //проверяем, что бот-водитель существует, что танк в заранее заданном списке и что роль игрока стрелок или командир
[_unit] join grpNull; //отсоединяем бота от группы игрока, чтобы не спамило в логи после его удаления
deleteVehicle _unit; //удаляем бота
_tank lockDriver false; //открываем водительское место
};
_gunner = gunner _tank; //возвращаем стрелка танка
_commander = commander _tank; //возвращаем командира танка
if ((isPlayer _gunner) && (_role isEqualTo "commander")) then {
[_tank,_role] remoteExec ["Dr_fnc_SpawnMyDriverPlease",_gunner]; //скрипт спавна водителя у стрелка
};
if ((isPlayer _commander) && (_role isEqualTo "gunner")) then {
[_tank,_role] remoteExec ["Dr_fnc_SpawnMyDriverPlease",_commander];// скрипт спавна водителя у командира
};
}];
description.ext
#define F(NAME,TARGET) class NAME { \
allowedTargets = TARGET; \
};
#define ANYONE 0
#define CLIENT 1
#define SERVER 2
class cfgRemoteExec {
class Functions {
mode = 1;
jip = 0;
F(Dr_fnc_SpawnMyDriverPlease,CLIENT)
};
};
Известные проблемы:
- При пересадке внутри техники, управление не включается. Для этого надо выйти и войти обратно.