ACE3/addons/arsenal/functions/fnc_baseWeapon.sqf
Grim 64538f2ad0
Arsenal - Native baseWeapon support for CBA items (#9799)
Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
2024-03-02 14:29:20 -03:00

53 lines
1.8 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: Karel Moricky, johnb43
* Returns base weapon (weapon without any attachments), but it returns it in config sensitive case.
* Same as BIS_fnc_baseWeapon, except config case and uses cache.
*
* Arguments:
* 0: Weapon <STRING>
*
* Return Value:
* Base weapon <STRING>
*
* Example:
* ["arifle_AK12_GL_lush_arco_pointer_F"] call ace_arsenal_fnc_baseWeapon
*
* Public: Yes
*/
params [["_weapon", "", [""]]];
// Check if item is cached
(uiNamespace getVariable QGVAR(baseWeaponNameCache)) getOrDefaultCall [toLowerANSI _weapon, {
private _cfgWeapons = configfile >> "CfgWeapons";
private _config = _cfgWeapons >> _weapon;
// If class doesn't exist, exit
if (!isClass _config) then {
_weapon
} else {
// Get manual base weapon
private _configBase = _cfgWeapons >> getText (_config >> "baseWeapon");
if (isClass _configBase) then {
configName _configBase
} else {
private _className = _weapon;
// Get first parent without any attachments; Only take weapons available to the arsenal
// https://community.bistudio.com/wiki/Arma_3:_Characters_And_Gear_Encoding_Guide#Character_configuration
// https://github.com/acemod/ACE3/pull/9040#issuecomment-1597748331
while {isClass _config && {getNumber (_config >> "scope") > 0 && {if (isNumber (_config >> "scopeArsenal")) then {getNumber (_config >> "scopeArsenal") == 2} else {true}}} && {getNumber (_config >> QGVAR(hide)) != 1}} do {
if (count (_config >> "LinkedItems") == 0) exitWith {
_className = configName _config;
};
_config = inheritsFrom _config;
};
_className
};
};
}, true]