From a88fc7b7aca61e13daa544ca6909800595d56c34 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sat, 25 Aug 2018 05:33:22 -0500 Subject: [PATCH] Add CBA_fnc_compatibleMagazines that supports mag wells (#965) * Add CBA_fnc_getCompatibleMagazines that supports mag wells * Make filtering optional * Catching * Fix Header --- addons/common/CfgFunctions.hpp | 1 + addons/common/fnc_compatibleMagazines.sqf | 55 +++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 addons/common/fnc_compatibleMagazines.sqf diff --git a/addons/common/CfgFunctions.hpp b/addons/common/CfgFunctions.hpp index 2db4ebd3c..724832a77 100644 --- a/addons/common/CfgFunctions.hpp +++ b/addons/common/CfgFunctions.hpp @@ -62,6 +62,7 @@ class CfgFunctions { PATHTO_FNC(addWeapon); PATHTO_FNC(addMagazine); PATHTO_FNC(addItem); + PATHTO_FNC(compatibleMagazines); PATHTO_FNC(removeWeapon); PATHTO_FNC(removeMagazine); PATHTO_FNC(removeItem); diff --git a/addons/common/fnc_compatibleMagazines.sqf b/addons/common/fnc_compatibleMagazines.sqf new file mode 100644 index 000000000..702108b2c --- /dev/null +++ b/addons/common/fnc_compatibleMagazines.sqf @@ -0,0 +1,55 @@ +#include "script_component.hpp" +/* ---------------------------------------------------------------------------- +Function: CBA_fnc_compatibleMagazines + +Description: + Retrieves a list of magazines that are compatible with a weapon. + +Parameters: + _weapon - Weapon configName or config + +Example: + (begin example) + _mags = ["arifle_MX_SW_F"] call CBA_fnc_compatibleMagazines + _mags = [configFile >> "CfgWeapons" >> _rifle >> _glMuzzle] call CBA_fnc_compatibleMagazines + (end) + +Returns: + Array of magazine classnames in config capitalization + +Author: + PabstMirror, based on code from Dedmen +---------------------------------------------------------------------------- */ +SCRIPT(compatibleMagazines); + +params [["_weapon", "", ["", configNull]]]; + +if (_weapon isEqualType "") then { + _weapon = configFile >> "CfgWeapons" >> _weapon; +}; + +private _cacheKey = str _weapon; +if (_cacheKey == "") exitWith { ERROR_1("Weapon Does Not Exist %1",_this); [] }; + +if (isNil QGVAR(magNamespace)) then { GVAR(magNamespace) = call CBA_fnc_createNamespace; }; + +private _returnMags = GVAR(magNamespace) getVariable _cacheKey; + +if (isNil "_returnMags") then { + _returnMags = getArray (_weapon >> "magazines"); + { + private _wellConfig = configFile >> "CfgMagazineWells" >> _x; + { + _returnMags append getArray _x; + } forEach configProperties [_wellConfig, "isArray _x", true]; + } forEach (getArray (_weapon >> "magazineWell")); + + private _cfgMagazines = configFile >> "CfgMagazines"; + _returnMags = _returnMags select {isClass (_cfgMagazines >> _x)}; + _returnMags = _returnMags apply {configName (_cfgMagazines >> _x)}; + _returnMags = _returnMags arrayIntersect _returnMags; + + GVAR(magNamespace) setVariable [_cacheKey, _returnMags]; +}; + ++_returnMags