In the case of a GL rifle, if the rifle is currently in GL mode, syntax 3 will return the same result for either muzzle:
player selectWeapon "GL_3GL_F";
_state = player weaponState "arifle_MX_GL_ACO_F"; // ["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]
_state = player weaponState "GL_3GL_F"; // ["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]
In rifle mode, the result is different:
player selectWeapon "arifle_MX_GL_ACO_F";
_state = player weaponState "arifle_MX_GL_ACO_F"; // ["arifle_MX_GL_ACO_F","arifle_MX_GL_ACO_F","Single","30Rnd_65x39_caseless_mag",30,0,0]
_state = player weaponState "GL_3GL_F"; // ["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]
Therefore, in order to gather all states of one multi-muzzle weapon, we have to do some masochistic stuff:
fn_getWeaponStates =
{
params ["_unit", "_weapon"];
private _origState = weaponState _unit select [0,3];
private _muzzles = [_weapon] + (getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles") select { _x != "this" });
private _states = [];
{
_unit selectWeapon _x;
_states pushBack weaponState _unit;
} forEach _muzzles;
_unit selectWeapon _origState;
_states;
};
private _result = [player, primaryWeapon player] call fn_getWeaponStates;
/*
[
["arifle_MX_GL_ACO_F", "arifle_MX_GL_ACO_F", "Single", "30Rnd_65x39_caseless_mag", 30, 0, 0],
["arifle_MX_GL_ACO_F", "GL_3GL_F", "Single", "1Rnd_HE_Grenade_shell", 1, 0, 0]
]
*/