From 4119391578abfc8031eaa833ea41e3afb5b58854 Mon Sep 17 00:00:00 2001 From: worldwidesorrow Date: Tue, 14 Jul 2020 16:45:08 -0500 Subject: [PATCH] Add files via upload Server side cargo drop script. --- SQF/dayz_server/compile/server_cargoDrop.sqf | 68 ++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 SQF/dayz_server/compile/server_cargoDrop.sqf diff --git a/SQF/dayz_server/compile/server_cargoDrop.sqf b/SQF/dayz_server/compile/server_cargoDrop.sqf new file mode 100644 index 000000000..eeb4244e7 --- /dev/null +++ b/SQF/dayz_server/compile/server_cargoDrop.sqf @@ -0,0 +1,68 @@ +private ["_exitReason","_vehicle","_clientKey","_activatingPlayer","_gear","_playerUID","_crate","_offset","_position","_parachute","_time","_smoke"]; + +#define DEPLOY_SMOKE true // If you don't want a smoke shell to pop at the crate's location, then change to false. +#define DELETION_TIMER 2 // This is the time (in minutes) it takes for the crate to be deleted by the server. Setting to 0 disables deletion. Default: 2 minutes. + +//diag_log text "Begin Cargo Drop"; + +_exitReason = ""; +_vehicle = _this select 0; +_clientKey = _this select 1; +_activatingPlayer = _this select 2; +_playerUID = getPlayerUID _activatingPlayer; +_exitReason = [_this,"CargoDrop",_vehicle,_clientKey,_playerUID,_activatingPlayer] call server_verifySender; +if (_exitReason != "") exitWith {diag_log _exitReason}; + +// Save the aircraft gear to variables and immediately remove the gear from the aircraft so the self-action cannot be executed multiple times. +_weapons = getWeaponCargo _vehicle; +_magazines = getMagazineCargo _vehicle; +_backpacks = getBackpackCargo _vehicle; +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; + +_offset = (sizeOf (typeOf _vehicle)) / 1.5; +_offsetPos = _vehicle modelToWorld [0,-_offset,0]; // We want to use an offset for the crate position so that it does not collide with the aircraft when spawned. +_crate = "DZ_AmmoBoxFlatUS" createVehicle _offsetPos; +_crate setPos _offsetPos; +_parachute = createVehicle ["ParachuteMediumEast", _offsetPos, [], 0, "FLY"]; +_parachute setPos _offsetPos; +_crate attachTo [_parachute, [0, 0, .5]]; + +// Wait until crate is near the ground and detach. +// Use 90 second drop timer in case the crate gets stuck on top of another object. +_time = diag_tickTime; + +waitUntil {uiSleep 0.1;((([_crate] call FNC_GetPos) select 2) < 3 || {diag_tickTime - _time > 90})}; + +detach _crate; +_position = [_crate] call FNC_GetPos; +deleteVehicle _crate; +deleteVehicle _parachute; + +// If the crate is near another object (probably landed on top of a base or building), select a new location within 15 meters. +if (count (_position nearObjects 2) > 0) then { + _position = [_position, 0, 15, 5] call fn_selectRandomLocation; +}; + +_position set [2, 0]; +// recreate the crate object at new position. Note: for some reason I was having trouble with the original crate object glitching out. The player was unable to remove the gear. Not sure why. +_crate = "DZ_AmmoBoxFlatUS" createVehicle _position; +_crate setPosATL _position; +_crate setVariable ["permaLoot", true]; +clearWeaponCargoGlobal _crate; +clearMagazineCargoGlobal _crate; + +// Add the vehicle's gear to the crate. Warning: gear in backpacks will get wiped. +[_weapons,_magazines,_backpacks,_crate] call fn_addCargo; + +if (DEPLOY_SMOKE) then { + _smoke = "SmokeShellRed" createVehicle _position; + _smoke setPosATL _position; + _smoke attachTo [_crate,[0,0,-1]]; +}; + +if (DELETION_TIMER > 0) then { + uiSleep (DELETION_TIMER * 60); + deleteVehicle _crate; +}; \ No newline at end of file