mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
3af1fb50ab
Makes paradropItem and unloadItem invoke event "ace_cargoUnloaded" with parameters _itemObject, _vehicle and "paradrop" or "unload" respectivelty. paradropItem invoked said event but if item was classname it would send classname to event which is not particularly useful.
64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
#include "script_component.hpp"
|
|
/*
|
|
* Author: Glowbal, ViperMaul
|
|
* Unload object from vehicle.
|
|
*
|
|
* Arguments:
|
|
* 0: Item <OBJECT or STRING>
|
|
* 1: Vehicle <OBJECT>
|
|
* 2: Unloader <OBJECT> (default: objNull)
|
|
*
|
|
* Return Value:
|
|
* Object was unloaded <BOOL>
|
|
*
|
|
* Example:
|
|
* [object, vehicle] call ace_cargo_fnc_unloadItem
|
|
*
|
|
* Public: Yes
|
|
*/
|
|
|
|
params ["_item", "_vehicle", ["_unloader", objNull]];
|
|
TRACE_3("params",_item,_vehicle,_unloader);
|
|
|
|
//This covers testing vehicle stability and finding a safe position
|
|
private _emptyPosAGL = [_vehicle, _item, _unloader] call EFUNC(common,findUnloadPosition);
|
|
TRACE_1("findUnloadPosition",_emptyPosAGL);
|
|
|
|
if ((count _emptyPosAGL) != 3) exitWith {
|
|
TRACE_4("Could not find unload pos",_vehicle,getPosASL _vehicle,isTouchingGround _vehicle,speed _vehicle);
|
|
if ((!isNull _unloader) && {_unloader == ACE_player}) then {
|
|
//display text saying there are no safe places to exit the vehicle
|
|
[localize ELSTRING(common,NoRoomToUnload)] call EFUNC(common,displayTextStructured);
|
|
};
|
|
false
|
|
};
|
|
|
|
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
|
|
|
|
if !(_item in _loaded) exitWith {
|
|
ERROR_3("Tried to unload item [%1] not in vehicle[%2] cargo[%3]", _item, _vehicle, _loaded);
|
|
false
|
|
};
|
|
|
|
_loaded deleteAt (_loaded find _item);
|
|
_vehicle setVariable [QGVAR(loaded), _loaded, true];
|
|
|
|
private _space = [_vehicle] call FUNC(getCargoSpaceLeft);
|
|
private _itemSize = [_item] call FUNC(getSizeItem);
|
|
_vehicle setVariable [QGVAR(space), (_space + _itemSize), true];
|
|
|
|
private _itemObject = if (_item isEqualType objNull) then {
|
|
detach _item;
|
|
// hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly
|
|
// do both on server to ensure they are executed in the correct order
|
|
[QGVAR(serverUnload), [_item, _emptyPosAGL]] call CBA_fnc_serverEvent;
|
|
_item;
|
|
} else {
|
|
private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, "NONE"];
|
|
_newItem setPosASL (AGLtoASL _emptyPosAGL);
|
|
_newItem;
|
|
};
|
|
// Invoke listenable event
|
|
["ace_cargoUnloaded", [_itemObject, _vehicle, "unload"]] call CBA_fnc_globalEvent;
|
|
true
|