mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
d4767eba73
* Add ability to unload cargo * Handle array index being out of bounds
95 lines
3.1 KiB
Plaintext
95 lines
3.1 KiB
Plaintext
/*
|
|
* Author: PabstMirror, mharis001
|
|
* Initializes the ace_cargo attribute of the zeus vehicle attributes display.
|
|
* (the display shown on double click)
|
|
*
|
|
* Arguments:
|
|
* 0: ace_cargo controls group <CONTROL>
|
|
*
|
|
* Return Value:
|
|
* None
|
|
*
|
|
* Example:
|
|
* [CONTROL] call ace_zeus_fnc_ui_attributeCargo
|
|
*
|
|
* Public: No
|
|
*/
|
|
#include "script_component.hpp"
|
|
|
|
params ["_control"];
|
|
TRACE_1("params",_control);
|
|
|
|
private _vehicle = GETMVAR(BIS_fnc_initCuratorAttributes_target,objNull);
|
|
TRACE_1("",_vehicle);
|
|
|
|
private _loaded = _vehicle getVariable [QEGVAR(cargo,loaded), []];
|
|
TRACE_1("",_loaded);
|
|
|
|
_control ctrlRemoveAllEventHandlers "SetFocus";
|
|
|
|
// Init cargo list
|
|
private _listbox = _control controlsGroupCtrl 80086;
|
|
|
|
{
|
|
private _class = if (_x isEqualType "") then {_x} else {typeOf _x};
|
|
private _displayName = getText (configFile >> "CfgVehicles" >> _class >> "displayName");
|
|
_listbox lbAdd _displayName;
|
|
} forEach _loaded;
|
|
|
|
// Init unload button
|
|
private _button = _control controlsGroupCtrl 80087;
|
|
|
|
private _fnc_onButtonUnload = {
|
|
params ["_button"];
|
|
|
|
// Validate vehicle
|
|
private _vehicle = GETMVAR(BIS_fnc_initCuratorAttributes_target,objNull);
|
|
if (isNull _vehicle || {!alive _vehicle}) exitWith {
|
|
LOG("Vehicle deleted or killed, cannot unload");
|
|
};
|
|
|
|
// Handle selection
|
|
private _index = lbCurSel ((ctrlParent _button) displayCtrl 80086);
|
|
private _cargoArray = _vehicle getVariable [QEGVAR(cargo,loaded), []];
|
|
if ((_index < 0) || {_index >= (count _cargoArray)}) exitWith {
|
|
[LSTRING(SelectCargo)] call FUNC(showMessage);
|
|
};
|
|
|
|
// Unload selected cargo
|
|
private _item = _cargoArray select _index;
|
|
private _class = if (_item isEqualType "") then {_item} else {typeOf _item};
|
|
private _itemName = getText (configFile >> "CfgVehicles" >> _class >> "displayName");
|
|
if ([_item, _vehicle] call EFUNC(cargo,unloadItem)) then {
|
|
private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName");
|
|
private _message = [localize ELSTRING(cargo,UnloadedItem), "<br/>", " "] call CBA_fnc_replace;
|
|
[_message, _itemName, _vehicleName] call FUNC(showMessage);
|
|
} else {
|
|
private _message = [localize ELSTRING(cargo,UnloadingFailed), "<br/>", " "] call CBA_fnc_replace;
|
|
[_message, _itemName] call FUNC(showMessage);
|
|
};
|
|
};
|
|
|
|
_button ctrlAddEventHandler ["ButtonClick", _fnc_onButtonUnload];
|
|
|
|
// Add PFH to update cargo list
|
|
[{
|
|
params ["_args", "_pfhID"];
|
|
_args params ["_vehicle", "_listbox"];
|
|
|
|
// Display closed or vehicle deleted
|
|
if (isNull _listbox || {isNull _vehicle || {!alive _vehicle}}) exitWith {
|
|
[_pfhID] call CBA_fnc_removePerFrameHandler;
|
|
LOG("Display closed or vehicle deleted, PFH removed");
|
|
};
|
|
|
|
// Update cargo list
|
|
private _loaded = _vehicle getVariable [QEGVAR(cargo,loaded), []];
|
|
|
|
lbClear _listbox;
|
|
{
|
|
private _class = if (_x isEqualType "") then {_x} else {typeOf _x};
|
|
private _displayName = getText (configFile >> "CfgVehicles" >> _class >> "displayName");
|
|
_listbox lbAdd _displayName;
|
|
} forEach _loaded;
|
|
}, 0.25, [_vehicle, _listbox]] call CBA_fnc_addPerFrameHandler;
|