mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 20:13:13 +03:00
68 lines
3.0 KiB
Plaintext
68 lines
3.0 KiB
Plaintext
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;
|
|
}; |