weaponState: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "\|seealso= *\[\[([^ ]+)\]\], \[\[([^ ]+)\]\]" to "|seealso= $1 $2")
(Note about how I hate myself)
Line 80: Line 80:
|x4= <code>_wsPlayer = [[player]] [[weaponState]] "GL_3GL_F"; {{cc|["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]}}</code>
|x4= <code>_wsPlayer = [[player]] [[weaponState]] "GL_3GL_F"; {{cc|["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]}}</code>


|seealso= [[weapons]] [[selectWeaponTurret]] [[loadMagazine]] [[magazinesTurret]] [[weaponsTurret]] [[weaponReloadingTime]]
|seealso= [[weapons]] [[selectWeaponTurret]] [[loadMagazine]] [[magazinesTurret]] [[weaponsTurret]] [[weaponReloadingTime]].
 
}}
 
{{Note
|user= AgentRev
|timestamp= 20220331040809
|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:
<sqf>
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]
</sqf>
In rifle mode, the result is different:
<sqf>
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]
</sqf>
Therefore, in order to gather all states of one multi-muzzle weapon, we have do to some masochistic stuff:
<sqf>
fn_getWeaponStates =
{
params ["_unit", "_weapon"];
private _initialState = weaponState _unit;
private _muzzles = [_weapon]; _muzzles append (getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles") select {_x != "this"});
private _states = [];
 
{
_unit selectWeapon _x;
_states pushBack weaponState _unit;
} forEach _muzzles;
 
_unit selectWeapon (_initialState select [0,3]);
_states
};
 
private _result = [player, primaryWeapon player] call fn_getWeaponStates;
 
// _result = [
//    ["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]
// ]
</sqf>
}}
}}

Revision as of 05:08, 31 March 2022

Hover & click on the images for description

Description

Description:
Returns the given or currently selected weapon state for unit or vehicle. With syntax 2, if no optional arguments are present, currently selected weapon is queried.
Arma 3
Since Arma 3 v1.70 this command has been improved and extended:
  • A vehicle's weapon query doesn't need a weapon operator provided the weapon or muzzle is specified in optional param.
    (keep in mind that by default a vehicle has no weapons selected)
  • Driver turret can now be accessed as well with turret path [-1].
  • Muzzle name is supported as well as weapon name. The command searches for weapon first, then if not found, muzzle is searched for.
Groups:
Weapons

Syntax 1

Syntax:
weaponState unit
Parameters:
unit: Object
Return Value:
Array - in format [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase], where:

Syntax 2

Syntax:
weaponState [vehicle, turretPath, weapon, muzzle, firemode]
Parameters:
[vehicle, turretPath, weapon]: Array
vehicle: Object
turretPath: Array
since Arma 3 logo black.png1.70
weapon: String - (Optional) weapon or muzzle name
since Arma 3 logo black.png2.08
muzzle: String - (Optional) muzzle name
since Arma 3 logo black.png2.08
firemode: String - (Optional) firemode name
Return Value:
Array - in format [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase], where:

Syntax 3

Syntax:
unit weaponState weaponOrMuzzle
Parameters:
unit: Object
weaponOrMuzzle: String
Return Value:
Array - in format [weapon, muzzle, firemode, magazine, ammoCount, roundReloadPhase, magazineReloadPhase], where:

Examples

Example 1:
_wsPlayer = weaponState player; // ["arifle_MXC_ACO_F","arifle_MXC_ACO_F","Single","30Rnd_65x39_caseless_mag",30,0,0]
Example 2:
Query currently selected gunner weapon:_wsVehicle = weaponState [_apc, [0]]; // ["autocannon_40mm_CTWS","HE","player","60Rnd_40mm_GPR_Tracer_Red_shells",60,0,0]
Example 3:
_wsVehicle = weaponState [_apc, [0], "AP"]; // ["autocannon_40mm_CTWS","AP","player","40Rnd_40mm_APFSDS_Tracer_Red_shells",40,0,0]
Example 4:
_wsPlayer = player weaponState "GL_3GL_F"; // ["arifle_MX_GL_ACO_F","GL_3GL_F","Single","1Rnd_HE_Grenade_shell",1,0,0]

Additional Information

See also:
weapons selectWeaponTurret loadMagazine magazinesTurret weaponsTurret weaponReloadingTime.

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
AgentRev - c
Posted on Mar 31, 2022 - 04:08 (UTC)
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 do to some masochistic stuff:
fn_getWeaponStates = { params ["_unit", "_weapon"]; private _initialState = weaponState _unit; private _muzzles = [_weapon]; _muzzles append (getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles") select {_x != "this"}); private _states = []; { _unit selectWeapon _x; _states pushBack weaponState _unit; } forEach _muzzles; _unit selectWeapon (_initialState select [0,3]); _states }; private _result = [player, primaryWeapon player] call fn_getWeaponStates; // _result = [ // ["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] // ]