diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp index aab746c5e..e53a38deb 100644 --- a/addons/common/CfgEventHandlers.hpp +++ b/addons/common/CfgEventHandlers.hpp @@ -1,4 +1,10 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index d927fc36a..0b81d28c2 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -47,10 +47,8 @@ call COMPILE_FILE(init_perFrameHandler); call COMPILE_FILE(init_delayLess); // Due to activateAddons being overwritten by eachother (only the last executed command will be active), we apply this bandaid -private _addons = ("true" configClasses (configFile >> "CfgPatches")) apply {configName _x}; - -activateAddons _addons; -GVAR(addons) = _addons; +activateAddons call (uiNamespace getVariable [QGVAR(unitAddons), {[]}]); +GVAR(addons) = call (uiNamespace getVariable [QGVAR(addons), {[]}]); // BWC #include "backwards_comp.sqf" diff --git a/addons/common/XEH_preStart.sqf b/addons/common/XEH_preStart.sqf new file mode 100644 index 000000000..8e76073b0 --- /dev/null +++ b/addons/common/XEH_preStart.sqf @@ -0,0 +1,23 @@ +#include "script_component.hpp" + +//See usage in XEH_preInit +private _cfgPatches = configFile >> "CfgPatches"; +private _allComponents = "true" configClasses _cfgPatches apply {configName _x}; + +//Filter out addons that don't have any units defined as we don't need to activate these +private _unitAddons = _allComponents select { + !(getArray (_cfgPatches >> _x >> "units") isEqualTo []) +}; + +//Filter out addons defined in CfgAddons as they are always activated +private _allAddons = "true" configClasses (configFile >> "CfgAddons"); +private _preloadedAddons = []; + +{ + _preloadedAddons append (getArray (_x >> "list") apply {configName (_cfgPatches >> _x)}); +} forEach _allAddons; + +_unitAddons = _unitAddons - _preloadedAddons; + +uiNamespace setVariable [QGVAR(addons), compileFinal str _allComponents]; +uiNamespace setVariable [QGVAR(unitAddons), compileFinal str _unitAddons];