From e27ac53713bf0acc00a2bb21f5ae3e961539030a Mon Sep 17 00:00:00 2001 From: SilentSpike Date: Mon, 18 May 2015 20:43:02 +0100 Subject: [PATCH] Implemented contextual modules --- addons/zeus/XEH_preInit.sqf | 5 ++++ addons/zeus/config.cpp | 18 ++++++++---- .../zeus/functions/fnc_bi_moduleCurator.sqf | 4 +++ .../zeus/functions/fnc_contextualModules.sqf | 28 +++++++++++++++++++ 4 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 addons/zeus/functions/fnc_contextualModules.sqf diff --git a/addons/zeus/XEH_preInit.sqf b/addons/zeus/XEH_preInit.sqf index bf7e19c07f..bb71b712b2 100644 --- a/addons/zeus/XEH_preInit.sqf +++ b/addons/zeus/XEH_preInit.sqf @@ -6,9 +6,14 @@ PREP(bi_moduleCurator); PREP(bi_moduleMine); PREP(bi_moduleProjectile); PREP(bi_moduleRemoteControl); +PREP(contextualModules); PREP(moduleCapture); PREP(moduleKnockout); PREP(moduleSurrender); PREP(moduleZeusSettings); +if (isServer) then { + ["zeusUnitAssigned", {_this call FUNC(contextualModules)}] call EFUNC(common,addEventHandler); +}; + ADDON = true; diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index d97b8666cf..26ebab068e 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -2,11 +2,7 @@ class CfgPatches { class ADDON { - units[] = { - QGVAR(moduleCapture), - QGVAR(moduleKnockout), - QGVAR(moduleSurrender) - }; + units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; @@ -14,6 +10,18 @@ class CfgPatches { authorUrl = "https://github.com/SilentSpike"; VERSION_CONFIG; }; + // Use additional cfgPatches to contextually remove modules from zeus + class GVAR(captives): ADDON { + units[] = { + QGVAR(moduleCapture), + QGVAR(moduleSurrender) + }; + }; + class GVAR(medical): ADDON { + units[] = { + QGVAR(moduleKnockout) + }; + }; }; #include "CfgEventHandlers.hpp" diff --git a/addons/zeus/functions/fnc_bi_moduleCurator.sqf b/addons/zeus/functions/fnc_bi_moduleCurator.sqf index 37de3d8eae..b33d7461cd 100644 --- a/addons/zeus/functions/fnc_bi_moduleCurator.sqf +++ b/addons/zeus/functions/fnc_bi_moduleCurator.sqf @@ -2,6 +2,7 @@ * Author: Bohemia Interactive * Module function for initalizing zeus * Edited to remove eagle and global ascension message + * Added "zeusUnitAssigned" event call * * Arguments: * 0: The module logic @@ -171,6 +172,9 @@ if (_activated) then { [_logic,"curatorUnitAssigned",[_logic,_player]] call bis_fnc_callscriptedeventhandler; + // Added by ACE_zeus + ["zeusUnitAssigned", [_logic,_player]] call EFUNC(common,globalEvent); + //--- Forced interface //if (_forced) then { // [[true,true],"bis_fnc_forceCuratorInterface",_player] call bis_fnc_mp; diff --git a/addons/zeus/functions/fnc_contextualModules.sqf b/addons/zeus/functions/fnc_contextualModules.sqf new file mode 100644 index 0000000000..52c0332ae6 --- /dev/null +++ b/addons/zeus/functions/fnc_contextualModules.sqf @@ -0,0 +1,28 @@ +/* + * Author: SilentSpike + * Removes ace_zeus modules from zeus based on the prescence of other ACE addons + * + * Arguments: + * 0: The zeus logic + * 1: The zeus player + * + * Return Value: + * nil + * + * Public: No + */ + +private ["_logic","_addons","_removeAddons","_classname"]; + +_logic = _this select 0; +_addons = ["captives","medical"]; + +_removeAddons = []; +{ + _classname = format ["ace_%1",_x]; + if !(isClass (configFile >> "CfgPatches" >> _classname)) then { + _removeAddons pushBack (format ["ace_zeus_%1",_x]); + }; +} forEach _addons; + +_logic removeCuratorAddons _removeAddons;