diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index de76966cbe..857a754f6a 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -24,6 +24,7 @@ PREP(debugModule); PREP(defineVariable); PREP(deviceKeyFindValidIndex); PREP(deviceKeyRegisterNew); +PREP(deprecateComponent); PREP(disableAI); PREP(disableUserInput); PREP(displayIcon); diff --git a/addons/common/functions/fnc_deprecateComponent.sqf b/addons/common/functions/fnc_deprecateComponent.sqf new file mode 100644 index 0000000000..21905e8e4e --- /dev/null +++ b/addons/common/functions/fnc_deprecateComponent.sqf @@ -0,0 +1,63 @@ +/* + * Author: Glowbal + * Mark a component as deprecated and switches it to a new component if that is available + * + * Arguments: + * 0: Component + * 1: New component + * 2: Version when the compent will be removed + * + * Return Value: + * Replaced by new component + * + * Public: No + * + * Example: + * [["ace_sitting", "ace_sitting_enabled"], ["acex_sitting", "acex_sitting_enabled"], "3.7.0"] call ace_common_fnc_deprecateComponent; + */ +#include "script_component.hpp" + +params ["_oldComponent", "_newComponent", "_version"]; + +_oldComponent params ["_oldComponentName", "_oldSettingName"]; +_newComponent params ["_newComponentName", "_newSettingName"]; + +private _isReplacementAvailable = isClass (configFile >> "CfgPatches" >> _newComponentName); +private _isDeprecatedLoaded = missionNamespace getvariable [_oldSettingName, false]; +private _isReplacementLoaded = missionNamespace getvariable [_newSettingName, false]; + +if (_isDeprecatedLoaded && {_isReplacementAvailable} && {!_isReplacementLoaded}) then { + [_newSettingName, true, true, true] call FUNC(setSetting); +}; + +if (_isDeprecatedLoaded && {!_isReplacementLoaded}) then { + private _componentVersion = getText (configFile >> "CfgPatches" >> _oldComponentName >> "version"); + ((_componentVersion splitString ".") apply {parseNumber _x}) params ["_componentMajor", "_componentMinor", "_componentPatch"]; + ((_version splitString ".") apply {parseNumber _x}) params ["_major", "_minor", "_patch"]; + + switch (true) do { + case (_componentMajor >= _major && {_componentMinor >= _minor} && {_componentPatch >= _patch}): { // Removed from this version + private _message = format[ + "Component %1 is deprecated. It has been replaced by %2. The component %1 is no longer usable on this version. ", _oldComponentName, _newComponentName, _version]; + systemChat format["ACE [ERROR] - %1", _message]; + ACE_LOGERROR(_message); + }; + case (_componentMajor >= _major && {_componentMinor >= _minor-1}): { // Removed the next this version + private _message = format[ + "Component %1 is deprecated. It is replaced by %2. Please disable %1 and make use of %2. " + + "The component (%1) will no longer be available from version %3 and later.", _oldComponentName, _newComponentName, _version]; + systemChat format["ACE [WARNING] - %1", _message]; + ACE_LOGWARNING(_message); + }; + case (_componentMajor == _major && {_componentMinor >= _minor - 2}): { // we are in a version leading up to removal + private _message = format[ + "Component %1 is deprecated. It is replaced by %2. Please disable %1 and make use of %2. " + + "The component (%1) will no longer be available from version %3 and later.", _oldComponentName, _newComponentName, _version]; + ACE_LOGWARNING(_message); + }; + default { + }; + }; +}; + +_isReplacementAvailable; diff --git a/addons/sitting/CfgVehicles.hpp b/addons/sitting/CfgVehicles.hpp index a93e780c84..95deed0dd6 100644 --- a/addons/sitting/CfgVehicles.hpp +++ b/addons/sitting/CfgVehicles.hpp @@ -8,7 +8,7 @@ class CfgVehicles { category = "ACE"; displayName = CSTRING(ModuleDisplayName); function = QFUNC(moduleInit); - scope = 2; + scope = 1; isGlobal = 1; isSingular = 1; icon = QPATHTOF(UI\Icon_Module_Sitting_ca.paa); diff --git a/addons/sitting/XEH_clientInit.sqf b/addons/sitting/XEH_clientInit.sqf index e15017d715..7efb38d41e 100644 --- a/addons/sitting/XEH_clientInit.sqf +++ b/addons/sitting/XEH_clientInit.sqf @@ -4,8 +4,7 @@ if (!hasInterface) exitWith {}; ["SettingsInitialized", { - TRACE_1("SettingInit", GVAR(enable)); - + if ([[QUOTE(ADDON), QGVAR(enable)], ["acex_sitting", "acex_sitting_enable"], "3.8.0"] call EFUNC(common,deprecateComponent)) exitwith {}; //If not enabled, then do not add CanInteractWith Condition or event handlers: if (!GVAR(enable)) exitWith {};