|
9 | 9 | Server-side cleanup script on vehicles. |
10 | 10 | Sort of a lame way but whatever. |
11 | 11 | */ |
12 | | -private "_deleted"; |
13 | | -_deleted = false; |
| 12 | +private _saveFuel = LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1; |
| 13 | +private _minUnitDistance = LIFE_SETTINGS(getNumber,"vehicles_despawn_max_distance"); |
| 14 | + |
14 | 15 | for "_i" from 0 to 1 step 0 do { |
15 | | - private ["_veh","_units","_fuel"]; |
16 | | - sleep (60 * 60); |
| 16 | + uiSleep (60 * 60); |
17 | 17 | { |
18 | | - _protect = false; |
19 | | - _veh = _x; |
20 | | - _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); |
21 | | - _fuel = 1; |
22 | | - |
23 | | - if (!isNil {_veh getVariable "NPC"} && {_veh getVariable "NPC"}) then {_protect = true;}; |
| 18 | + private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _x) >> "vehicleClass"); |
| 19 | + private _protect = _x getVariable ["NPC",false]; |
24 | 20 |
|
25 | 21 | if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { |
26 | | - if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {_fuel = (fuel _veh);}; |
27 | | - _dbInfo = _veh getVariable ["dbInfo",[]]; |
28 | | - _units = {(_x distance _veh < 300)} count playableUnits; |
29 | | - if (crew _x isEqualTo []) then { |
30 | | - switch (true) do { |
31 | | - case ((_x getHitPointDamage "HitEngine") > 0.7 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; |
32 | | - case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; |
33 | | - case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; |
34 | | - case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; |
35 | | - case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; |
36 | | - case (_units isEqualTo 0): {deleteVehicle _x; _deleted = true;}; |
37 | | - }; |
38 | | - }; |
| 22 | + private _noUnitsNear = ((nearestObjects [_x, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1); |
39 | 23 |
|
40 | | - if (_deleted) then { |
41 | | - waitUntil {isNull _veh}; |
42 | | - _deleted = false; |
43 | | - }; |
| 24 | + if (crew _x isEqualTo [] && {_noUnitsNear}) then { |
| 25 | + private _fuel = if (_saveFuel) then {fuel _x} else {1}; |
| 26 | + private _dbInfo = _x getVariable "dbInfo"; |
44 | 27 |
|
45 | | - if (isNull _veh) then { |
46 | | - if (count _dbInfo > 0) then { |
47 | | - _uid = _dbInfo select 0; |
48 | | - _plate = _dbInfo select 1; |
| 28 | + deleteVehicle _x; |
49 | 29 |
|
50 | | - _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; |
| 30 | + if (isNil "_dbInfo") exitWith {}; |
51 | 31 |
|
52 | | - [_query,1] call HC_fnc_asyncCall; |
53 | | - }; |
| 32 | + waitUntil {uiSleep 1; isNull _x}; |
| 33 | + |
| 34 | + _dbInfo params [ |
| 35 | + "_uid", |
| 36 | + "_plate" |
| 37 | + ]; |
| 38 | + |
| 39 | + private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; |
| 40 | + [_query, 1] call HC_fnc_asyncCall; |
54 | 41 | }; |
55 | 42 | }; |
56 | 43 | } forEach vehicles; |
57 | 44 |
|
58 | | - sleep (3 * 60); //3 minute cool-down before next cycle. |
59 | 45 | { |
60 | | - if ((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { |
| 46 | + if (!isNil {_x getVariable "item"}) then { |
61 | 47 | deleteVehicle _x; |
62 | 48 | }; |
63 | | - } forEach (allMissionObjects "Thing"); |
64 | | - |
65 | | - sleep (2 * 60); |
66 | | - { |
67 | | - deleteVehicle _x; |
68 | | - } forEach (allMissionObjects "GroundWeaponHolder"); |
| 49 | + true |
| 50 | + } count (allMissionObjects "Thing"); |
69 | 51 | }; |
0 commit comments