137 lines
5.1 KiB
Plaintext
137 lines
5.1 KiB
Plaintext
|
local _mission = _this select 0;
|
||
|
local _coords = _this select 1;
|
||
|
local _type = _this select 2;
|
||
|
local _offset = _this select 3;
|
||
|
|
||
|
if (typeName _type == "ARRAY") then {
|
||
|
_type = _type call BIS_fnc_selectRandom;
|
||
|
};
|
||
|
|
||
|
local _position = [(_coords select 0) + (_offset select 0),(_coords select 1) + (_offset select 1),0];
|
||
|
|
||
|
if ((count _offset) > 2) then {
|
||
|
_position set [2, (_this select 2)];
|
||
|
};
|
||
|
|
||
|
local _veh = _type createVehicle _position;
|
||
|
|
||
|
if (count _this > 4) then {
|
||
|
_veh setDir (_this select 4);
|
||
|
} else {
|
||
|
_veh setDir (round(random 360));
|
||
|
};
|
||
|
_veh setPos _position;
|
||
|
_veh setVariable ["CharacterID","1",true];
|
||
|
_veh setVariable ["ObjectID","1", true];
|
||
|
_veh setVariable ["DZMSCleanup" + dayz_serverKey,true,false];
|
||
|
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor, _veh];
|
||
|
clearWeaponCargoGlobal _veh;
|
||
|
clearMagazineCargoGlobal _veh;
|
||
|
_veh setVehicleLock "locked";
|
||
|
local _ranFuel = random 1;
|
||
|
if (_ranFuel < .1) then {_ranFuel = .1;};
|
||
|
|
||
|
if (getNumber(configFile >> "CfgVehicles" >> _type >> "isBicycle") != 1) then {
|
||
|
local _hitpoints = _veh call vehicle_getHitpoints;
|
||
|
{
|
||
|
local _selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _x >> "name");
|
||
|
local _strH = "hit_" + (_selection);
|
||
|
_veh setHit[_selection,0];
|
||
|
_veh setVariable [_strH,0,true];
|
||
|
} count _hitpoints;
|
||
|
|
||
|
_veh setFuel _ranFuel;
|
||
|
};
|
||
|
|
||
|
if (DZMSVehDamageOff) then {
|
||
|
_veh addEventHandler ["HandleDamage",{false}];
|
||
|
} else {
|
||
|
_veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}];
|
||
|
};
|
||
|
|
||
|
((DZMSMissionData select _mission) select 2) set [count ((DZMSMissionData select _mission) select 2), _veh];
|
||
|
|
||
|
// Set "GetIn" event handlers
|
||
|
if (DZMSSaveVehicles) then {
|
||
|
if (DZMSEpoch) then {
|
||
|
_veh addEventHandler ["GetIn", {
|
||
|
local _veh = _this select 0;
|
||
|
local _class = typeOf _veh;
|
||
|
local _worldspace = [getDir _veh, getPosATL _veh];
|
||
|
_veh setVariable["DZMSCleanup" + dayz_serverKey, nil];
|
||
|
local _uid = _worldspace call dayz_objectUID2;
|
||
|
format ["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, _class, 0, (_veh getVariable ["CharacterID", "0"]), _worldspace, [getWeaponCargo _veh,getMagazineCargo _veh,getBackpackCargo _veh], [], (fuel _veh), _uid] call server_hiveWrite;
|
||
|
local _result = (format["CHILD:388:%1:", _uid]) call server_hiveReadWrite;
|
||
|
|
||
|
if ((_result select 0) != "PASS") then {
|
||
|
deleteVehicle _veh;
|
||
|
diag_log format ["DZMS PublishVeh Error: failed to get id for %1 : UID %2.",_class, _uid];
|
||
|
} else {
|
||
|
_veh setVariable ["ObjectID", (_result select 1), true];
|
||
|
_veh setVariable ["lastUpdate",diag_tickTime];
|
||
|
_veh call fnc_veh_ResetEH;
|
||
|
PVDZE_veh_Init = _veh;
|
||
|
publicVariable "PVDZE_veh_Init";
|
||
|
|
||
|
if (DZMSDebug) then {diag_log ("DZMS PublishVeh: Created " + (_class) + " with ID " + str(_uid));};
|
||
|
|
||
|
// Send message to player
|
||
|
if (DZMSMakeVehKey) then {
|
||
|
RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH1"];
|
||
|
(owner (_this select 2)) publicVariableClient "RemoteMessage";
|
||
|
} else {
|
||
|
RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH2"];
|
||
|
(owner (_this select 2)) publicVariableClient "RemoteMessage";
|
||
|
};
|
||
|
};
|
||
|
}];
|
||
|
} else {
|
||
|
// DayZ Vanilla Mod
|
||
|
_veh addEventHandler ["GetIn", {
|
||
|
local _veh = _this select 0;
|
||
|
_veh setVariable["DZMSCleanup" + dayz_serverKey, nil];
|
||
|
_veh removeAllEventHandlers "HandleDamage";
|
||
|
_veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}];
|
||
|
RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH3"];
|
||
|
(owner (_this select 2)) publicVariableClient "RemoteMessage";
|
||
|
}];
|
||
|
|
||
|
// Save the vehicle when the player gets out
|
||
|
_veh addEventHandler ["GetOut", {
|
||
|
local _veh = _this select 0;
|
||
|
local _worldspace = [getDir _veh, getPosATL _veh];
|
||
|
local _objectUID = _worldspace call dayz_objectUID2;
|
||
|
_object setVariable ["ObjectUID",_objectUID,true];
|
||
|
|
||
|
if !((([_veh] call fnc_getPos) select 2) > 2) then { // Prevent helicopters from saving if the player bails out during flight.
|
||
|
format ["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:", dayZ_instance, typeOf _veh, 0, 0, _worldspace, [[[],[]],[[],[]],[[],[]]], [], fuel _veh, _objectUID] call server_hiveWrite;
|
||
|
RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH4"];
|
||
|
(owner (_this select 2)) publicVariableClient "RemoteMessage";
|
||
|
};
|
||
|
|
||
|
_veh call fnc_veh_ResetEH; // No PV for this in Vanilla Mod, so I made one to get the repair feature to work before restart.
|
||
|
PVCDZ_veh_Init = _veh;
|
||
|
publicVariable "PVCDZ_veh_Init";
|
||
|
}];
|
||
|
};
|
||
|
} else {
|
||
|
_veh addEventHandler ["GetIn",{
|
||
|
local _veh = _this select 0;
|
||
|
RemoteMessage = ["rollingMessages","STR_CL_DZMS_VEH5"];
|
||
|
(owner (_this select 2)) publicVariableClient "RemoteMessage";
|
||
|
if !(_veh getVariable ["DZMSCleanup" + dayz_serverKey, true]) exitWith {}; // Check to prevent handlers from resetting every time the player exits and re-enters the vehicle.
|
||
|
_veh setVariable["DZMSCleanup" + dayz_serverKey, false];
|
||
|
|
||
|
if (DZMSEpoch) then {
|
||
|
PVDZE_veh_Init = _veh;
|
||
|
publicVariable "PVDZE_veh_Init";
|
||
|
} else {
|
||
|
_veh removeAllEventHandlers "HandleDamage";
|
||
|
_veh addEventHandler ["HandleDamage",{_this call fnc_veh_handleDam}];
|
||
|
PVCDZ_veh_Init = _veh;
|
||
|
publicVariable "PVCDZ_veh_Init";
|
||
|
};
|
||
|
}];
|
||
|
};
|
||
|
|
||
|
_veh
|