From 2220822d30a4f934d45633dcf6827648d5f7f3fa Mon Sep 17 00:00:00 2001 From: mjc4wilton Date: Thu, 29 Oct 2020 11:12:51 -0400 Subject: [PATCH] Gunbag - Add BI Arsenal Compatibility (#7887) * Initial Commit * Remove development components * Adapt to ACE_player & resolve returned assignment * Update addons/gunbag/functions/fnc_BIArsenalClose.sqf Co-authored-by: commy2 Co-authored-by: commy2 --- addons/gunbag/CfgEventHandlers.hpp | 16 ++++++++++++ addons/gunbag/XEH_PREP.hpp | 2 ++ .../gunbag/functions/fnc_BIArsenalClose.sqf | 26 +++++++++++++++++++ addons/gunbag/functions/fnc_BIArsenalOpen.sqf | 22 ++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 addons/gunbag/functions/fnc_BIArsenalClose.sqf create mode 100644 addons/gunbag/functions/fnc_BIArsenalOpen.sqf diff --git a/addons/gunbag/CfgEventHandlers.hpp b/addons/gunbag/CfgEventHandlers.hpp index be284a9d70..9c24190803 100644 --- a/addons/gunbag/CfgEventHandlers.hpp +++ b/addons/gunbag/CfgEventHandlers.hpp @@ -10,3 +10,19 @@ class Extended_PreInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; + +//EH must be loaded this way to get ace_gunbag_gunbagWeapon before it is deleted upon opening the BI arsenal. May cause instability with other mods. +class RscPicture; +class RscDisplayArsenal { + class Controls { + class IconBackgroundPrimaryWeapon: RscPicture { + onLoad = QUOTE([ACE_player] call FUNC(BIArsenalOpen)); + }; + }; +}; + +class Extended_DisplayUnload_EventHandlers { + class RscDisplayArsenal { + ADDON = QUOTE([ACE_player] call FUNC(BIArsenalClose)); + }; +}; diff --git a/addons/gunbag/XEH_PREP.hpp b/addons/gunbag/XEH_PREP.hpp index 45d55207d6..2e2c57a056 100644 --- a/addons/gunbag/XEH_PREP.hpp +++ b/addons/gunbag/XEH_PREP.hpp @@ -10,3 +10,5 @@ PREP(canInteract); PREP(calculateMass); PREP(hasGunbag); PREP(isMachineGun); +PREP(BIArsenalClose); +PREP(BIArsenalOpen); diff --git a/addons/gunbag/functions/fnc_BIArsenalClose.sqf b/addons/gunbag/functions/fnc_BIArsenalClose.sqf new file mode 100644 index 0000000000..011593aaa0 --- /dev/null +++ b/addons/gunbag/functions/fnc_BIArsenalClose.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: mjc4wilton + * Handle BI arsenal closing + * + * Arguments: + * 0: Unit + * + * Return Value: + * None + * + * Example: + * [] call ace_gunbag_fnc_BIArsenalClose + * + * Public: No + */ + +params ["_unit"]; + +if (!isNil QGVAR(arsenalCache)) then { + backpackContainer _unit setVariable [QGVAR(gunbagWeapon), GVAR(arsenalCache), true]; +}; + +GVAR(arsenalCache) = nil; + +nil diff --git a/addons/gunbag/functions/fnc_BIArsenalOpen.sqf b/addons/gunbag/functions/fnc_BIArsenalOpen.sqf new file mode 100644 index 0000000000..713e9eb8aa --- /dev/null +++ b/addons/gunbag/functions/fnc_BIArsenalOpen.sqf @@ -0,0 +1,22 @@ +#include "script_component.hpp" +/* + * Author: mjc4wilton + * Handle BI arsenal opening + * + * Arguments: + * 0: Unit + * + * Return Value: + * None + * + * Example: + * [] call ace_gunbag_fnc_BIArsenalOpen + * + * Public: No + */ + +params ["_unit"]; + +if ([_unit] call FUNC(hasGunBag)) then { + GVAR(arsenalCache) = backpackContainer _unit getVariable [QGVAR(gunbagWeapon), []]; +};