ACE3/addons/cargo/functions/fnc_unloadItem.sqf

69 lines
2.3 KiB
Plaintext
Raw Normal View History

2015-08-10 21:07:47 +00:00
/*
* Author: Glowbal, ViperMaul
2015-08-16 20:41:35 +00:00
* Unload object from vehicle.
2015-08-10 21:07:47 +00:00
*
* Arguments:
* 0: Item <OBJECT or STRING>
2015-08-10 21:07:47 +00:00
* 1: Vehicle <OBJECT>
*
* Return value:
* Object unloaded <BOOL>
2015-08-10 21:07:47 +00:00
*
2015-08-16 20:41:35 +00:00
* Example:
* [object, vehicle] call ace_cargo_fnc_unloadItem
*
2015-08-10 21:07:47 +00:00
* Public: No
*/
#include "script_component.hpp"
params ["_item", "_vehicle"];
private ["_loaded", "_space", "_itemSize", "_emptyPos", "_validVehiclestate"];
2015-08-10 21:07:47 +00:00
2015-08-16 20:41:35 +00:00
if !([_item, _vehicle] call FUNC(canUnloadItem)) exitWith {
2015-08-10 21:07:47 +00:00
false
};
_itemClass = if (typeName _item == "STRING") then {_item} else {typeOf _item};
2015-08-10 21:07:47 +00:00
_validVehiclestate = true;
_emptyPos = [];
if (_vehicle isKindOf "Ship" ) then {
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
TRACE_1("SHIP Ground Check", getPosATL _vehicle );
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 15, _itemClass]); // TODO: if spot is underwater pick another spot.
2015-08-10 21:07:47 +00:00
} else {
if (_vehicle isKindOf "Air" ) then {
if !(speed _vehicle <1 && {isTouchingGround _vehicle}) then {_validVehiclestate = false};
TRACE_1("Vehicle Ground Check", isTouchingGround _vehicle);
_emptyPos = (getPosASL _vehicle) call EFUNC(common,ASLtoPosition);
_emptyPos = [(_emptyPos select 0) + random(5), (_emptyPos select 1) + random(5), _emptyPos select 2 ];
} else {
if !(speed _vehicle <1 && {(((getPosATL _vehicle) select 2) < 2)}) then {_validVehiclestate = false};
TRACE_1("Vehicle Ground Check", isTouchingGround _vehicle);
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 13, _itemClass]);
2015-08-10 21:07:47 +00:00
};
};
TRACE_1("getPosASL Vehicle Check", getPosASL _vehicle);
if (!_validVehiclestate) exitWith {false};
2015-08-10 21:07:47 +00:00
if (count _emptyPos == 0) exitWith {false};
2015-08-10 21:07:47 +00:00
2015-08-16 20:41:35 +00:00
_loaded = _vehicle getVariable [QGVAR(loaded), []];
_loaded deleteAt (_loaded find _item);
2015-08-16 20:41:35 +00:00
_vehicle setVariable [QGVAR(loaded), _loaded, true];
2015-08-10 21:07:47 +00:00
_space = [_vehicle] call FUNC(getCargoSpaceLeft);
_itemSize = [_item] call FUNC(getSizeItem);
2015-08-16 20:41:35 +00:00
_vehicle setVariable [QGVAR(space), (_space + _itemSize), true];
2015-08-10 21:07:47 +00:00
if (typeName _item == "OBJECT") then {
detach _item;
_item setPosASL (_emptyPos call EFUNC(common,PositiontoASL));
["hideObjectGlobal", [_item, false]] call EFUNC(common,serverEvent);
} else {
createVehicle [_item, _emptyPos, [], 0, ""];
};
true