
Автор скрипта: 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) }; };
Известные проблемы:
- При пересадке внутри техники, управление не включается. Для этого надо выйти и войти обратно.