{"name":"weaponState","title":"weaponState","type":"command","url":"https://community.bistudio.com/wiki/weaponState","revid":378932,"updated":"2026-08-19T22:08:00Z","groups":["Weapons"],"status":"ok","games":{"arma2oa":"1.60","tkoh":"1.00","arma3":"0.50"},"since":"arma2oa 1.60","arma3_since":"0.50","description":"Returns the given or currently selected weapon state for unit or vehicle.\nWith Syntax 2, if no optional arguments are present, currently selected weapon is queried.\n\n> [!NOTE]\n> **Arma 3:** Since Arma 3 v1.70 this command has been improved and extended:\n>\n> - A vehicle's weapon query doesn't need a weapon operator provided the weapon or muzzle is specified in optional param.\n>   (keep in mind that by default a vehicle has no weapons selected)\n> - Driver turret can now be accessed as well with turret path [-1].\n> - Muzzle name is supported as well as weapon name. The command searches for weapon first, then if not found, muzzle is searched for.","syntaxes":[{"syntax":"weaponState unit","params":[{"name":"unit","type":"Object","type_expr":"Object"}],"returns":{"type":"Array","type_expr":"Array","description":"with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n- weapon: String - muzzle: String - firemode: String - magazine: String - ammoCount: Number - Arma 3 v2.06 roundReloadPhase: Number in range -1 or 0..1 - current ammo round reload phase (see weaponReloadingTime). -1 when weapon has magazine removed - Arma 3 v2.06 magazineReloadPhase: Number in range 1..0 - current magazine reload phase, 0 - reload complete. > 0 - reload in progress","text":"Array with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n\n- weapon: String\n- muzzle: String\n- firemode: String\n- magazine: String\n- ammoCount: Number\n- Arma 3 v2.06 roundReloadPhase: Number in range -1 or 0..1 - current ammo round reload phase (see weaponReloadingTime). -1 when weapon has magazine removed\n- Arma 3 v2.06 magazineReloadPhase: Number in range 1..0 - current magazine reload phase, 0 - reload complete. > 0 - reload in progress"},"form":"unary","right":{"text":"unit"}},{"syntax":"weaponState [vehicle, turretPath, weapon, muzzle, firemode]","params":[{"name":"vehicle","type":"Object","type_expr":"Object"},{"name":"turretPath","type":"Turret Path","type_expr":"Turret Path"},{"name":"weapon","type":"String","optional":true,"default":"`\"\"`","description":"weapon or muzzle name","type_expr":"String","since":"arma3 1.70","text":"weapon: String - (Optional, default `\"\"`) weapon or muzzle name"},{"name":"muzzle","type":"String","optional":true,"default":"`\"\"`","description":"muzzle name","type_expr":"String","since":"arma3 2.08","text":"muzzle: String - (Optional, default `\"\"`) muzzle name"},{"name":"firemode","type":"String","optional":true,"default":"`\"\"`","description":"firemode name","type_expr":"String","since":"arma3 2.08","text":"firemode: String - (Optional, default `\"\"`) firemode name"}],"returns":{"type":"Array","type_expr":"Array","description":"with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n- weapon: String - muzzle: String - firemode: String - magazine: String - ammoCount: Number - Arma 3 v2.06 roundReloadPhase: Number - current ammo round reload phase (see weaponReloadingTime) - Arma 3 v2.06 magazineReloadPhase: Number - current magazine reload phase from 1 to 0, 0 - reload complete. > 0 - reload in progress","text":"Array with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n\n- weapon: String\n- muzzle: String\n- firemode: String\n- magazine: String\n- ammoCount: Number\n- Arma 3 v2.06 roundReloadPhase: Number - current ammo round reload phase (see weaponReloadingTime)\n- Arma 3 v2.06 magazineReloadPhase: Number - current magazine reload phase from 1 to 0, 0 - reload complete. > 0 - reload in progress"},"form":"unary","right":{"text":"[vehicle, turretPath, weapon, muzzle, firemode]"}},{"syntax":"unit weaponState weaponOrMuzzle","since":"arma3 2.06","params":[{"name":"unit","type":"Object","type_expr":"Object"},{"name":"weaponOrMuzzle","type":"String","type_expr":"String"}],"returns":{"type":"Array","type_expr":"Array","description":"with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n- weapon: String - muzzle: String - firemode: String - magazine: String - ammoCount: Number - Arma 3 v2.06 roundReloadPhase: Number - current ammo round reload phase (see weaponReloadingTime) - Arma 3 v2.06 magazineReloadPhase: Number - current magazine reload phase from 1 to 0, 0 - reload complete. > 0 - reload in progress","text":"Array with [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase]\n\n- weapon: String\n- muzzle: String\n- firemode: String\n- magazine: String\n- ammoCount: Number\n- Arma 3 v2.06 roundReloadPhase: Number - current ammo round reload phase (see weaponReloadingTime)\n- Arma 3 v2.06 magazineReloadPhase: Number - current magazine reload phase from 1 to 0, 0 - reload complete. > 0 - reload in progress"},"form":"binary","left":{"text":"unit"},"right":{"text":"weaponOrMuzzle"}}],"examples":[{"text":"```sqf\n_wsPlayer = weaponState player;                    // [\"arifle_MXC_ACO_F\",\"arifle_MXC_ACO_F\",\"Single\",\"30Rnd_65x39_caseless_mag\",30,0,0]\n```","code":["_wsPlayer = weaponState player;\t\t\t\t\t// [\"arifle_MXC_ACO_F\",\"arifle_MXC_ACO_F\",\"Single\",\"30Rnd_65x39_caseless_mag\",30,0,0]"]},{"text":"Query currently selected gunner weapon:\n\n```sqf\n_wsVehicle = weaponState [_apc, [0]];            // [\"autocannon_40mm_CTWS\",\"HE\",\"player\",\"60Rnd_40mm_GPR_Tracer_Red_shells\",60,0,0]\n```","code":["_wsVehicle = weaponState [_apc, [0]];\t\t\t// [\"autocannon_40mm_CTWS\",\"HE\",\"player\",\"60Rnd_40mm_GPR_Tracer_Red_shells\",60,0,0]"]},{"text":"```sqf\n_wsVehicle = weaponState [_apc, [0], \"AP\"];        // [\"autocannon_40mm_CTWS\",\"AP\",\"player\",\"40Rnd_40mm_APFSDS_Tracer_Red_shells\",40,0,0]\n```","code":["_wsVehicle = weaponState [_apc, [0], \"AP\"];\t\t// [\"autocannon_40mm_CTWS\",\"AP\",\"player\",\"40Rnd_40mm_APFSDS_Tracer_Red_shells\",40,0,0]"]},{"text":"```sqf\n_wsPlayer = player weaponState \"GL_3GL_F\";        // [\"arifle_MX_GL_ACO_F\",\"GL_3GL_F\",\"Single\",\"1Rnd_HE_Grenade_shell\",1,0,0]\n```","code":["_wsPlayer = player weaponState \"GL_3GL_F\";\t\t// [\"arifle_MX_GL_ACO_F\",\"GL_3GL_F\",\"Single\",\"1Rnd_HE_Grenade_shell\",1,0,0]"]}],"see_also":["weapons","selectWeaponTurret","loadMagazine","magazinesTurret","weaponsTurret","weaponReloadingTime"],"notes":[{"user":"AgentRev","date":"2022-03-31T04:08:09Z","text":"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:\n\n```sqf\nplayer selectWeapon \"GL_3GL_F\";\n_state = player weaponState \"arifle_MX_GL_ACO_F\";    // [\"arifle_MX_GL_ACO_F\",\"GL_3GL_F\",\"Single\",\"1Rnd_HE_Grenade_shell\",1,0,0]\n_state = player weaponState \"GL_3GL_F\";                // [\"arifle_MX_GL_ACO_F\",\"GL_3GL_F\",\"Single\",\"1Rnd_HE_Grenade_shell\",1,0,0]\n```\n\nIn rifle mode, the result is different:\n\n```sqf\nplayer selectWeapon \"arifle_MX_GL_ACO_F\";\n_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]\n_state = player weaponState \"GL_3GL_F\";                // [\"arifle_MX_GL_ACO_F\",\"GL_3GL_F\",\"Single\",\"1Rnd_HE_Grenade_shell\",1,0,0]\n```\n\nTherefore, in order to gather all states of one multi-muzzle weapon, we have to do some masochistic stuff:\n\n```sqf\nfn_getWeaponStates =\n{\n    params [\"_unit\", \"_weapon\"];\n    private _origState = weaponState _unit select [0,3];\n    private _muzzles = [_weapon] + (getArray (configFile >> \"CfgWeapons\" >> _weapon >> \"muzzles\") select { _x != \"this\" });\n    private _states = [];\n\n    {\n        _unit selectWeapon _x;\n        _states pushBack weaponState _unit;\n    } forEach _muzzles;\n\n    _unit selectWeapon _origState;\n    _states;\n};\n\nprivate _result = [player, primaryWeapon player] call fn_getWeaponStates;\n/*\n    [\n        [\"arifle_MX_GL_ACO_F\", \"arifle_MX_GL_ACO_F\", \"Single\", \"30Rnd_65x39_caseless_mag\", 30, 0, 0],\n        [\"arifle_MX_GL_ACO_F\", \"GL_3GL_F\", \"Single\", \"1Rnd_HE_Grenade_shell\", 1, 0, 0]\n    ]\n*/\n```"}]}