1. Suorittavan pelaajan ympärillä on maa-ajoneuvoja korkeintaan 20m etäisyydellä tai ilma-ajoneuvoja korkeintaan 100m etäisyydellä
2. Jokin em. ajoneuvoista on lokaali pelaajalle, eli pelaaja on ollut näissä viimeisin ajaja tai pilotti
3. Ajoneuvossa ei ole sisällä muuta miehistöä
4. Ajoneuvo ei ole parhaillaan huollossa
Huollon alkamisesta, kestosta, ajoneuvojen nimistä ja huollon päättymisestä näytetään viesti pelaajalle. Ajoneuvo(t) ovat lukossa huollon aikana ja avautuvat kun määritetty aika on kulunut. Etäisyyksiä ja kestoa on tällä hetkellä mahdollista muuttaa itse skriptissä. Skriptin alussa voidaan myös määrittää lista ajoneuvoista, joiden huolto kestää normaalista poikkeavan ajan. Vakio aika on 5 minuuttia ja erikoistapauksille 15 minuuttia.
Lisää editorissa haluamasi objektin (esim. Warfare VehicleServicePoint, voi olla myös ajoneuvo) init kenttään seuraava skripti:
Code: Select all
if (local player) then {_act1 = ["ace_MainActions", "Vehicle Service", "", {execVM "vehicleService.sqf"}, {true}, {}, [], [0,0,0], 7] call ace_interact_menu_fnc_createAction; [this, 0, [], _act1] call ace_interact_menu_fnc_addActionToObject;};
Code: Select all
//if (local player) then {_act1 = ["ace_MainActions", "Vehicle Service", "", {execVM "vehicleService.sqf"}, {true}, {}, [], [0,0,0], 7] call ace_interact_menu_fnc_createAction; [this, 0, [], _act1] call ace_interact_menu_fnc_addActionToObject;};
//defines
_defaultTime = 5; //default service time in minutes
_specialTime = 15; //service time for specially defined vehicles
_specialClasses = [];//add vehicle classnames to this array ["class1","class2",...]
//script
_nearLandVehs = player nearEntities ["LandVehicle", 20];
_nearAirVehs = player nearEntities ["Air", 100];
_allNearVehs = _nearLandVehs + _nearAirVehs;
hint "NOTE: Vehicle must be empty and the latest driver/pilot has to start the service!\n(LAND < 20m, AIR < 100m)";
_startServiceVehs = [];
_inServiceDefault = [];
_inServiceSpecial = [];
{
if(local _x) then {
if(isNil {_x getVariable "_notInService"}) then {
_x setVariable ["_notInService","true",false];
};
_noCrew = true;
_driver = driver _x;
_gunner = gunner _x;
_commander = commander _x;
if!(isNull _driver) then{
_noCrew = false;
};
if!(isNull _gunner) then {
_noCrew = false;
};
if!(isNull _commander) then {
_noCrew = false;
};
if(_x getVariable "_notInService" == "true") then {
_time = 0;
_x setVariable ["_notInService","false",false];
_vehClass = typeOf _x;
_dspName = getText (configFile >> "CfgVehicles" >> _vehClass >> "Displayname");
_x lock true;
_x setFuel 1;
_x setDamage 0;
_x setVehicleAmmoDef 1;
if(_vehClass in _specialClasses) then {
_time = _specialTime;
_startServiceVehs pushBack [_dspName,_time];
_inServiceSpecial pushBack [_dspName, _x];
} else {
_time = _defaultTime;
_startServiceVehs pushBack [_dspName,_time];
_inServiceDefault pushBack [_dspName, _x];
};
};
};
} forEach _allNearVehs;
if(count _startServiceVehs > 0) then {
{
[_x select 0, _x select 1] spawn {
if(count (_this select 0) > 0) then {
private["_strEndService"];
_strEndService = "";
[[[_this select 1, _this select 0], {uiSleep ((_this select 0)*60); {(_x select 1) lock false;}forEach (_this select 1);}],"BIS_fnc_spawn",false] call BIS_fnc_MP;
uiSleep ((_this select 1)*60);
for [{_i=0}, {_i < count (_this select 0)}, {_i=_i+1}] do {
_strEndService = _strEndService + format ["\n(%1)",(((_this select 0) select _i) select 0)];
(((_this select 0) select _i) select 1) setVariable ["_notInService","true",false];
};
titleText [format["SERVICE COMPLETE!\n%1", _strEndService], "PLAIN", 2];
};
};
} forEach [[_inServiceDefault, _defaultTime], [_inServiceSpecial, _specialTime]];
_strStartService = "";
for [{_i=0}, {_i < count _startServiceVehs}, {_i=_i+1}] do {
_strStartService = _strStartService + format ["\n%1 (%2 MINUTES)",((_startServiceVehs select _i) select 0), ((_startServiceVehs select _i) select 1)];
};
titleText [format["SERVICING\n%1", _strStartService], "PLAIN", 2];
};