From 3c4507233ac9f4bafad604f0c8f16f1ce515ec7d Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 25 Jul 2024 09:28:35 +0200 Subject: [PATCH 1/4] Update selectWeapon --- addons/common/fnc_selectWeapon.sqf | 34 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/addons/common/fnc_selectWeapon.sqf b/addons/common/fnc_selectWeapon.sqf index d29ad260d..113edb583 100644 --- a/addons/common/fnc_selectWeapon.sqf +++ b/addons/common/fnc_selectWeapon.sqf @@ -23,30 +23,38 @@ Examples: (end) Author: - Sickboy, commy2 + Sickboy, commy2, johnb43 ---------------------------------------------------------------------------- */ SCRIPT(selectWeapon); -#define MAXIMUM_TRIES 100 - +// Mode is not guaranteed to be config-case, so no case-sensitive comparisons possible params [["_unit", objNull, [objNull]], ["_weapon", "", [""]], ["_mode", "", [""]]]; if (!local _unit) exitWith {false}; private _vehicle = [vehicle _unit, _unit] select (_unit call CBA_fnc_canUseWeapon); -private _index = 0; +// If on foot or in FFV +if (_unit isEqualTo _vehicle) then { + private _weaponState = (_unit weaponState _weapon) select [0, 3]; -if (_mode isEqualTo "") then { - while {_index < MAXIMUM_TRIES && {currentMuzzle _unit != _weapon}} do { - _unit action ["SwitchWeapon", _vehicle, _unit, _index]; - _index = _index + 1; + if (_mode != "") then { + _weaponState set [2, _mode]; }; + + _unit selectWeapon _weaponState // return } else { - while {_index < MAXIMUM_TRIES && {currentMuzzle _unit != _weapon || {currentWeaponMode _unit != _mode}}} do { - _unit action ["SwitchWeapon", _vehicle, _unit, _index]; - _index = _index + 1; + private _turretPath = _vehicle unitTurret _unit; + (weaponState [_vehicle, _turretPath, _weapon]) params ["_weapon", "_muzzle", "_currentMode"]; + + if (_mode == "") then { + _mode = _currentMode; }; -}; -_index < MAXIMUM_TRIES // return + _vehicle selectWeaponTurret [_weapon, _turretPath, _muzzle, _mode]; + + // Get updated state + (weaponState [_vehicle, _turretPath, _weapon]) params ["_newWeapon", "_newMuzzle", "_newMode"]; + + _newWeapon == _weapon && {_newMuzzle == _muzzle} && {_newMode == _mode} // return +}; From 8a269161a28b805c6961a6080e678e2af371b3a2 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Jul 2024 20:06:34 +0200 Subject: [PATCH 2/4] Handle "" and non-existing weapons --- addons/common/fnc_selectWeapon.sqf | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/addons/common/fnc_selectWeapon.sqf b/addons/common/fnc_selectWeapon.sqf index 113edb583..f971f20fd 100644 --- a/addons/common/fnc_selectWeapon.sqf +++ b/addons/common/fnc_selectWeapon.sqf @@ -34,6 +34,13 @@ if (!local _unit) exitWith {false}; private _vehicle = [vehicle _unit, _unit] select (_unit call CBA_fnc_canUseWeapon); +// Holster weapon +if (_weapon == "") exitWith { + _unit action ["SwitchWeapon", _vehicle, _unit, 299]; + + currentMuzzle _unit == "" // return +}; + // If on foot or in FFV if (_unit isEqualTo _vehicle) then { private _weaponState = (_unit weaponState _weapon) select [0, 3]; @@ -45,7 +52,7 @@ if (_unit isEqualTo _vehicle) then { _unit selectWeapon _weaponState // return } else { private _turretPath = _vehicle unitTurret _unit; - (weaponState [_vehicle, _turretPath, _weapon]) params ["_weapon", "_muzzle", "_currentMode"]; + (weaponState [_vehicle, _turretPath, _weapon]) params ["", "_muzzle", "_currentMode"]; if (_mode == "") then { _mode = _currentMode; @@ -54,7 +61,7 @@ if (_unit isEqualTo _vehicle) then { _vehicle selectWeaponTurret [_weapon, _turretPath, _muzzle, _mode]; // Get updated state - (weaponState [_vehicle, _turretPath, _weapon]) params ["_newWeapon", "_newMuzzle", "_newMode"]; + (weaponState [_vehicle, _turretPath]) params ["_newWeapon", "_newMuzzle", "_newMode"]; _newWeapon == _weapon && {_newMuzzle == _muzzle} && {_newMode == _mode} // return }; From 9c2f5d22b9d68e747a701b75df668775389e8f18 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Jul 2024 23:16:01 +0200 Subject: [PATCH 3/4] Update addons/common/fnc_selectWeapon.sqf Co-authored-by: PabstMirror --- addons/common/fnc_selectWeapon.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/fnc_selectWeapon.sqf b/addons/common/fnc_selectWeapon.sqf index f971f20fd..4043278b9 100644 --- a/addons/common/fnc_selectWeapon.sqf +++ b/addons/common/fnc_selectWeapon.sqf @@ -52,7 +52,7 @@ if (_unit isEqualTo _vehicle) then { _unit selectWeapon _weaponState // return } else { private _turretPath = _vehicle unitTurret _unit; - (weaponState [_vehicle, _turretPath, _weapon]) params ["", "_muzzle", "_currentMode"]; + (weaponState [_vehicle, _turretPath, _weapon]) params ["_weapon", "_muzzle", "_currentMode"]; if (_mode == "") then { _mode = _currentMode; From 9f2b6b60a6fe976c4786ed68c89f89b91608250c Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Sun, 28 Jul 2024 23:19:47 +0200 Subject: [PATCH 4/4] Update fnc_selectWeapon.sqf --- addons/common/fnc_selectWeapon.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/common/fnc_selectWeapon.sqf b/addons/common/fnc_selectWeapon.sqf index 4043278b9..5de7f2c0a 100644 --- a/addons/common/fnc_selectWeapon.sqf +++ b/addons/common/fnc_selectWeapon.sqf @@ -63,5 +63,5 @@ if (_unit isEqualTo _vehicle) then { // Get updated state (weaponState [_vehicle, _turretPath]) params ["_newWeapon", "_newMuzzle", "_newMode"]; - _newWeapon == _weapon && {_newMuzzle == _muzzle} && {_newMode == _mode} // return + _newWeapon != "" && {_newWeapon == _weapon} && {_newMuzzle == _muzzle} && {_newMode == _mode} // return };