diff --git a/addons/common/fnc_compatibleMagazines.sqf b/addons/common/fnc_compatibleMagazines.sqf index da42fe5a1..b0276940d 100644 --- a/addons/common/fnc_compatibleMagazines.sqf +++ b/addons/common/fnc_compatibleMagazines.sqf @@ -6,18 +6,18 @@ Description: Retrieves a list of magazines that are compatible with a weapon. Parameters: - _weapon - Weapon configName or config - _allMuzzles - Get magazines for all muzzles on this weapon (default: false) + _weapon - Weapon class name or config + _allMuzzles - Get magazines for all muzzles on this weapon (optional, default: false) -Example: +Returns: + Array of magazine classnames in config capitalization + +Examples: (begin example) - _mags = ["arifle_MX_SW_F"] call CBA_fnc_compatibleMagazines - _mags = [configFile >> "CfgWeapons" >> _rifle >> _glMuzzle] call CBA_fnc_compatibleMagazines + _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 ---------------------------------------------------------------------------- */ @@ -29,14 +29,18 @@ if (_weapon isEqualType "") then { _weapon = configFile >> "CfgWeapons" >> _weapon; }; -private _cacheKey = format ["%1#%2",_weapon,_allMuzzles]; -if (isNil QGVAR(magNamespace)) then { GVAR(magNamespace) = call CBA_fnc_createNamespace; }; +if (isNil QGVAR(magNamespace)) then { + GVAR(magNamespace) = createHashMap; +}; -private _returnMags = GVAR(magNamespace) getVariable _cacheKey; +private _cacheKey = format ["%1#%2", _weapon, _allMuzzles]; +private _returnMags = GVAR(magNamespace) get _cacheKey; if (isNil "_returnMags") then { if (_allMuzzles) then { - _returnMags = []; // get all mags from all muzzles + // Get all mags from all muzzles + _returnMags = []; + { if (_x == "this") then { _returnMags append (_weapon call CBA_fnc_compatibleMagazines); @@ -44,22 +48,29 @@ if (isNil "_returnMags") then { _returnMags append ((_weapon >> _x) call CBA_fnc_compatibleMagazines); }; } forEach getArray (_weapon >> "muzzles"); + _returnMags = _returnMags arrayIntersect _returnMags; } else { - _returnMags = getArray (_weapon >> "magazines"); // get mags just for a specific muzzle + // Get mags just for a specific muzzle + private _cfgMagazines = configFile >> "CfgMagazines"; + private _cfgMagazineWells = configFile >> "CfgMagazineWells"; + + _returnMags = getArray (_weapon >> "magazines"); + { - private _wellConfig = configFile >> "CfgMagazineWells" >> _x; + private _wellConfig = _cfgMagazineWells >> _x; + { _returnMags append getArray _x; } forEach configProperties [_wellConfig, "isArray _x", false]; } 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]; + + GVAR(magNamespace) set [_cacheKey, _returnMags]; }; +_returnMags