From b7abfeaeb5fde725ca979d8a50b787bcc5fb945b Mon Sep 17 00:00:00 2001 From: Salluci Date: Fri, 14 Jul 2023 19:04:42 +0300 Subject: [PATCH] add ai_switchMagazine --- addons/csw/XEH_PREP.hpp | 1 + addons/csw/XEH_postInit.sqf | 1 + addons/csw/functions/fnc_ai_reload.sqf | 9 +++-- .../csw/functions/fnc_ai_switchMagazine.sqf | 36 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 addons/csw/functions/fnc_ai_switchMagazine.sqf diff --git a/addons/csw/XEH_PREP.hpp b/addons/csw/XEH_PREP.hpp index 27e6b6f90b..e2ad66443d 100644 --- a/addons/csw/XEH_PREP.hpp +++ b/addons/csw/XEH_PREP.hpp @@ -4,6 +4,7 @@ PREP(aceRearmGetCarryMagazines); PREP(ai_handleFired); PREP(ai_handleGetIn); +PREP(ai_switchMagazine); PREP(ai_reload); PREP(assemble_canDeployTripod); diff --git a/addons/csw/XEH_postInit.sqf b/addons/csw/XEH_postInit.sqf index 3d6809b0ca..070efb93db 100644 --- a/addons/csw/XEH_postInit.sqf +++ b/addons/csw/XEH_postInit.sqf @@ -16,6 +16,7 @@ [QGVAR(addTurretMag), LINKFUNC(reload_handleAddTurretMag)] call CBA_fnc_addEventHandler; [QGVAR(removeTurretMag), LINKFUNC(reload_handleRemoveTurretMag)] call CBA_fnc_addEventHandler; [QGVAR(returnAmmo), LINKFUNC(reload_handleReturnAmmo)] call CBA_fnc_addEventHandler; +[QGVAR(ai_reload), LINKFUNC(ai_reload)] call CBA_fnc_addEventHandler; diff --git a/addons/csw/functions/fnc_ai_reload.sqf b/addons/csw/functions/fnc_ai_reload.sqf index 2c98ff5f18..8c37895e0a 100644 --- a/addons/csw/functions/fnc_ai_reload.sqf +++ b/addons/csw/functions/fnc_ai_reload.sqf @@ -7,16 +7,17 @@ * 0: CSW * 1: Gunner * 2: Skip reload time (default: false) + * 3: Clear forced magazine after reloading (default: true) * * Return Value: * None * * Public: No */ -params ["_vehicle", "_gunner", ["_instantReload", false]]; +params ["_vehicle", "_gunner", ["_instantReload", false], ["_clearForcedMag", false]]; TRACE_3("AI reload",_vehicle,_gunner,_instantReload); -// API, to be used by artillerytables +// API, used for ai_switchMagazine private _forcedMag = _vehicle getVariable [QGVAR(forcedMag), ""]; private _turretIndex = [_gunner] call EFUNC(common,getTurretIndex); if (_turretIndex isEqualTo []) then { @@ -40,6 +41,10 @@ private _magazineInfo = []; }; } forEach _loadableMagazines; +if (_clearForcedMag) then { + _vehicle setVariable [QGVAR(forcedMag), nil, true]; +}; + if (_magazineInfo isEqualTo []) exitWith {}; _magazineInfo params ["_carryMag", "_turretPath", "_loadInfo", "_magSource", "", "_ammo"]; diff --git a/addons/csw/functions/fnc_ai_switchMagazine.sqf b/addons/csw/functions/fnc_ai_switchMagazine.sqf new file mode 100644 index 0000000000..a9ad6042f1 --- /dev/null +++ b/addons/csw/functions/fnc_ai_switchMagazine.sqf @@ -0,0 +1,36 @@ +#include "script_component.hpp" +/* + * Author: LinkIsGrim + * Handles AI magazine switching + * Magazine must be compatible and available, use ace_csw_fnc_getAvailableAmmo + * + * Arguments: + * 0: CSW + * 1: Carry Magazine + * 2: Turret Path (default: [0]) + * 3: Skip reload time (default: false) + * 4: Clear forced magazine after reloading (default: true) + * + * Return Value: + * Successful + * + * Public: Yes + */ +params [["_vehicle", objNull, [objNull]], ["_carryMag", "", [""]], ["_turretPath", [0], [[0]]], ["_instantReload", false, [false]], ["_clearForcedMag", true, [true]]]; + +if !(alive _vehicle && {!(isNull _vehicle turretUnit _turretPath)} && {!isNull _vehicle}) exitWith {false}; + +// must be config case +_carryMag = configName (configFile >> "CfgMagazines" >> _carryMag); +if (_carryMag isEqualTo "") exitWith {false}; + +private _availableMags = [_vehicle] call FUNC(getAvailableAmmo); +if !(_carryMag in _availableMags) exitWith {false}; + +_vehicle setVariable [QGVAR(forcedMag), _carryMag, true]; + +private _gunner = _vehicle turretUnit _turretPath; + +[QGVAR(ai_reload), [_vehicle, _gunner, _instantReload, _clearForcedMag], _gunner] call CBA_fnc_targetEvent; + +true