arma2-epoch-server/MPMissions/DayZ_Epoch_24.Napf/scripts/remoteVehicle/remoteVehicle.sqf
2022-04-21 16:15:41 +03:00

158 lines
4.9 KiB
Plaintext
Executable File

/*
Remote vehicle script by salival (https://github.com/oiad)
*/
private ["_characterID","_checkDistance","_display","_distance","_fuel","_group","_vehicleFound","_keyID","_keyName","_option","_time","_vehicle","_vehicleType","_index","_control","_keyDisplay","_exit"];
if (isNil "rv_init") then {
rv_vehicleInfo = compile preprocessFileLineNumbers "scripts\remoteVehicle\vehicleInfo.sqf";
rv_init = true;
};
if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
dayz_actionInProgress = true;
_keyName = _this select 0;
_option = _this select 1;
_checkDistance = true; // Check to see if the player is too far away from the remote
_distance = 300; // Maximum distance the player can be away from the vehicle to be able to use the remote.
disableSerialization;
_exit = {
dayz_actionInProgress = false;
rv_vehicleList = nil;
rv_selected = nil;
};
_display = findDisplay 106;
_display closeDisplay 0;
_keyList = call epoch_tempKeys;
_keyID = 0;
_keyID = (_keyList select 0) select ((_keyList select 2) find _keyName);
_foundPos = (_keyList select 0) find _keyID;
if (_foundPos >= 0) then {
_keyDisplay = (_keyList select 1) select _foundPos;
};
if (_foundPos == -1) exitWith {systemChat localize "STR_CL_RV_NO_KEYS"; call _exit;};
rv_vehicleList = [];
_vehicleFound = false;
{
_vehicleType = typeOf _x;
_characterID = _x getVariable ["CharacterID","0"];
if ((_characterID == _keyID) && {_vehicleType isKindOf "Air" || _vehicleType isKindOf "LandVehicle" || _vehicleType isKindOf "Ship"}) then {
_vehicleFound = true;
rv_vehicleList set [count rv_vehicleList,_x];
};
} count vehicles;
if (count rv_vehicleList > 1) then {
rv_isOk = false;
createDialog "remoteVehicle";
_display = uiNamespace getVariable["rv_dialog", displayNull];
_display displayCtrl 8801 ctrlSetText(format[localize "STR_CL_RV_TITLE",_keyDisplay]);
_control = ((findDisplay 8800) displayCtrl 8802);
lbClear _control;
{
_control lbAdd getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName");
if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then {
_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];
};
} count rv_vehicleList;
_control lbSetCurSel 0;
waitUntil {!dialog};
} else {
rv_selected = rv_vehicleList select 0;
rv_isOk = true;
};
if (!rv_isOk) exitWith {call _exit;};
if (!_vehicleFound) exitWith {systemChat localize "STR_CL_RV_NO_VEHICLES"; call _exit;};
_vehicleType = typeOf rv_selected;
_displayName = getText(configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
if (!alive rv_selected) exitWith {systemChat localize "STR_CL_RV_DESTROYED"; call _exit;};
if (_checkDistance && {(player distance rv_selected) >= _distance}) exitWith {format[localize "STR_CL_RV_RANGE_FAIL",_displayName] call dayz_rollingMessages; call _exit;};
if (_option == 1) then {
_group = units group player;
systemChat format[localize "STR_CL_RV_EJECT",_displayName];
{
if !(_x in _group) then {
_x action ["eject",rv_selected];
systemChat format[localize "STR_CL_RV_EJECT_PLAYER",name _x];
};
} forEach (crew rv_selected);
};
if (_option == 2) then {
systemChat format[localize "STR_CL_RV_ENGINE",if (isEngineOn rv_selected) then {localize "strwfoff"} else {localize "strwfon"},_displayName];
if (isEngineOn rv_selected) then {
if (rv_selected isKindOf "Helicopter") then { // This is needed because dayz_engineSwitch won't turn off the engine for a helicopter.
_fuel = fuel rv_selected;
rv_selected setFuel 0;
player action ["engineOff",rv_selected];
uiSleep 4.5;
rv_selected setFuel _fuel;
} else {
[rv_selected,false] call dayz_engineSwitch;
};
} else {
[rv_selected,true] call dayz_engineSwitch;
};
};
if (_option == 3) then {
systemChat format[localize "STR_BLD_UNLOCKED",_displayName];
PVDZE_veh_Lock = [rv_selected,false];
_time = diag_tickTime;
if (local rv_selected) then {
PVDZE_veh_Lock call local_lockUnlock;
} else {
publicVariable "PVDZE_veh_Lock";
waitUntil {uiSleep 0.1;(!locked rv_selected or (diag_tickTime - _time > 4))};
};
};
if (_option == 4) then {
systemChat format[localize "STR_EPOCH_PLAYER_117",_displayName];
PVDZE_veh_Lock = [rv_selected,true];
_time = diag_tickTime;
if (local rv_selected) then {
PVDZE_veh_Lock call local_lockUnlock;
} else {
publicVariable "PVDZE_veh_Lock";
waitUntil {uiSleep 0.1;(locked rv_selected or (diag_tickTime - _time > 4))};
};
};
if (_option == 5) then {
if !(rv_selected getVariable["vehicleLights",false]) then {
player action ["lightOn", rv_selected];
systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfon",_vehicleType];
rv_selected setVariable ["vehicleLights",true,true];
} else {
player action ["lightOff", rv_selected];
systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfoff",_vehicleType];
rv_selected setVariable ["vehicleLights",false,true];
};
};
call _exit;