From db6a40f91d73b1457a02f8de79b88a38b77df86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ozan=20E=C4=9Fitmen?= Date: Mon, 17 Sep 2018 21:22:04 +0300 Subject: [PATCH] Arsenal - Add Default Loadouts API (#6558) * Add addDefaultLoadout function * Initialize defaultLoadoutsList by default * Close params bracket * Revert "Initialize defaultLoadoutsList by default" This reverts commit a53d21046e6698be625d60056605421549d445be. * Add isNil check * Remove tab * Overwrite loadout if it exists * Fix file name typo * Use findIf and copy array * Add override note to header * Make btnImport use new function instead of duplicating code * Use GVAR * Use findIf * Fix spacing * Add documentation * Improve documentation --- addons/arsenal/Cfg3DEN.hpp | 2 +- addons/arsenal/XEH_PREP.hpp | 1 + .../functions/fnc_addDefaultLoadout.sqf | 31 +++++++++++++++++++ addons/arsenal/functions/fnc_buttonImport.sqf | 11 +------ .../functions/fnc_buttonLoadoutsSave.sqf | 20 ++++++------ .../arsenal/functions/fnc_onArsenalOpen.sqf | 2 +- docs/wiki/framework/arsenal-framework.md | 15 +++++++++ 7 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 addons/arsenal/functions/fnc_addDefaultLoadout.sqf diff --git a/addons/arsenal/Cfg3DEN.hpp b/addons/arsenal/Cfg3DEN.hpp index 9b058f48c0..ceb3cee926 100644 --- a/addons/arsenal/Cfg3DEN.hpp +++ b/addons/arsenal/Cfg3DEN.hpp @@ -8,7 +8,7 @@ class Cfg3DEN { class GVAR(DefaultLoadoutsListAttribute) { property = QGVAR(DefaultLoadoutsListAttribute); value = 0; - expression = "if !(is3DEN) then {ace_arsenal_defaultLoadoutsList = _value};"; + expression = QUOTE(if (!is3DEN) then {GVAR(defaultLoadoutsList) = _value};); defaultValue = "[]"; validate = "none"; wikiType = "[[Array]]"; diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index 98753b070c..233abc56f8 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(addDefaultLoadout); PREP(addListBoxItem); PREP(addStat); PREP(addVirtualItems); diff --git a/addons/arsenal/functions/fnc_addDefaultLoadout.sqf b/addons/arsenal/functions/fnc_addDefaultLoadout.sqf new file mode 100644 index 0000000000..2c18a38ca6 --- /dev/null +++ b/addons/arsenal/functions/fnc_addDefaultLoadout.sqf @@ -0,0 +1,31 @@ +#include "script_component.hpp" +/* + * Author: 654wak654 + * Adds a loadout to the "Default Loadouts" list. + * If a loadout with the same name exists, it is overwritten. + * + * Arguments: + * 0: Name of loadout + * 1: getUnitLoadout array + * + * Return Value: + * None + * + * Example: + * ["Squad Leader", getUnitLoadout sql1] call ace_arsenal_fnc_addDefaultLoadout + * + * Public: Yes +*/ + +params [["_name", "", [""]], ["_loadout", [], [[]], 10]]; + +if (isNil QGVAR(defaultLoadoutsList)) then { + GVAR(defaultLoadoutsList) = []; +}; + +private _loadoutIndex = (+(GVAR(defaultLoadoutsList))) findIf {(_x select 0) == _name}; +if (_loadoutIndex == -1) then { + GVAR(defaultLoadoutsList) pushBack [_name, _loadout]; +} else { + GVAR(defaultLoadoutsList) set [_loadoutIndex, [_name, _loadout]]; +}; diff --git a/addons/arsenal/functions/fnc_buttonImport.sqf b/addons/arsenal/functions/fnc_buttonImport.sqf index 7cc059d818..543970a0c3 100644 --- a/addons/arsenal/functions/fnc_buttonImport.sqf +++ b/addons/arsenal/functions/fnc_buttonImport.sqf @@ -31,16 +31,7 @@ if (GVAR(shiftState) && {is3DEN}) then { {_x select 1 isEqualType []} && {count (_x select 1) == 10} ) then { - - _x params ["_loadoutName", "_loadout"]; - - private _sameNameLoadoutsList = GVAR(defaultLoadoutsList) select {_x select 0 == _loadoutName}; - - if (count _sameNameLoadoutsList == 0) then { - GVAR(defaultLoadoutsList) pushBack [_loadoutName, _loadout]; - } else { - GVAR(defaultLoadoutsList) set [GVAR(defaultLoadoutsList) find (_sameNameLoadoutsList select 0), _loadoutName, _loadout]; - }; + _x call FUNC(addDefaultLoadout); }; } foreach _data; diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf index fecb6300e3..1058e5793a 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf @@ -33,7 +33,7 @@ private _loadoutName = _contentPanelCtrl lnbText [_cursSelRow, 1]; private _curSelLoadout = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0; private _loadout = getUnitLoadout GVAR(center); -private _sameNameLoadoutsList = _data select {_x select 0 == _editBoxContent}; +private _loadoutIndex = (+(_data)) findIf {(_x select 0) == _editBoxContent}; private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars); // Make sure the loadout isn't yours (public tab) or being shared (my loadouts tab) @@ -124,10 +124,10 @@ switch (GVAR(currentLoadoutsTab)) do { }; }; - if (count _sameNameLoadoutsList == 0) then { + if (_loadoutIndex == -1) then { _data pushBack [_editBoxContent, _loadout]; } else { - _data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; + _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; }; // Delete "old" loadout row @@ -155,7 +155,7 @@ switch (GVAR(currentLoadoutsTab)) do { if (is3DEN) then { - private _sameNameLoadoutsList = _data select {_x select 0 == _editBoxContent}; + private _loadoutIndex = (+(_data)) findId {(_x select 0) == _editBoxContent}; for "_dataIndex" from 0 to 10 do { switch (_dataIndex) do { @@ -232,10 +232,10 @@ switch (GVAR(currentLoadoutsTab)) do { }; }; - if (count _sameNameLoadoutsList == 0) then { + if (_loadoutIndex == -1) then { GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _loadout]; } else { - GVAR(defaultLoadoutsList) set [GVAR(defaultLoadoutsList) find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; + GVAR(defaultLoadoutsList) set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; }; for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do { @@ -258,10 +258,10 @@ switch (GVAR(currentLoadoutsTab)) do { set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]]; } else { - if (count _sameNameLoadoutsList == 0) then { + if (_loadoutIndex == -1) then { _data pushBack [_editBoxContent, _curSelLoadout]; } else { - _data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _curSelLoadout]]; + _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _curSelLoadout]]; _contentPanelCtrl setVariable [_editBoxContent + str IDC_buttonMyLoadouts, [_curSelLoadout] call FUNC(verifyLoadout)]; }; @@ -273,10 +273,10 @@ switch (GVAR(currentLoadoutsTab)) do { _loadout = (GVAR(sharedLoadoutsNamespace) getVariable ((_contentPanelCtrl lnbText [_cursSelRow, 0]) + (_contentPanelCtrl lnbText [_cursSelRow, 1]))) select 2; - if (count _sameNameLoadoutsList == 0) then { + if (_loadoutIndex == -1) then { _data pushBack [_editBoxContent, _loadout]; } else { - _data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; + _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; _contentPanelCtrl setVariable [_editBoxContent + str IDC_buttonMyLoadouts, [_loadout] call FUNC(verifyLoadout)]; }; diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf index b18d3c3080..c74f363d7c 100644 --- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf +++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf @@ -38,7 +38,7 @@ if (isNil QGVAR(defaultLoadoutsList)) then { if (is3DEN) then { GVAR(defaultLoadoutsList) = (QGVAR(DummyCategory) get3DENMissionAttribute QGVAR(DefaultLoadoutsListAttribute)); } else { - GVAR(defaultLoadoutsList) = []; + GVAR(defaultLoadoutsList) = []; }; }; diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index cdaae1e398..9dd8767832 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -116,6 +116,8 @@ Both of them are optional. ## 4. Default loadouts +### 4.1 Adding default loadouts via 3DEN + While in 3DEN you have the ability to save default loadouts in ACE Arsenal, doing so will make the saved loadouts available to all players (those loadouts are still subject to loadout verification). To do so: - Open ACE Arsenal in 3DEN by editing a unit's loadout. @@ -125,6 +127,19 @@ To do so: This loadout list can be exported to the clipboard by using Shift. + LMB. on the export button, doing the same on the import button will import the list currently in the clipboard. +### 4.2 Adding default loadouts via script + +Since 3.13.0, you can also add default loadouts with the `ace_arsenal_fnc_addDefaultLoadout` function. +```cpp + * 0: Name of loadout + * 1: getUnitLoadout array +``` + +Example: +`["Squad Leader", getUnitLoadout sql1] call ace_arsenal_fnc_addDefaultLoadout` + +If a loadout with the same name exists, it will be overwritten. + ## 5. Stats ACE Arsenal stats are customizable, this will show you how.