From e0506f29bc5799b219896d3fed5f051a1e603118 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 6 Nov 2015 20:46:06 -0600 Subject: [PATCH 1/3] Read settings from paramsArray (params in description.ext) for now just limited to SCALAR/BOOL --- addons/common/XEH_postInit.sqf | 3 + addons/common/XEH_preInit.sqf | 1 + .../fnc_readSettingsFromParamsArray.sqf | 64 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 addons/common/functions/fnc_readSettingsFromParamsArray.sqf diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index ac1a162137..66e2e078c6 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -194,6 +194,9 @@ call FUNC(checkFiles); ACE_LOGINFO("Settings received from server."); + if (isServer) then { //read settings from paramsArray + [] call FUNC(readSettingsFromParamsArray); + }; // Event so that ACE_Modules have their settings loaded: ["InitSettingsFromModules", []] call FUNC(localEvent); diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index a9b10c4896..4c912e98b4 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -139,6 +139,7 @@ PREP(playerSide); PREP(positionToASL); PREP(progressBar); PREP(readSettingFromModule); +PREP(readSettingsFromParamsArray); PREP(receiveRequest); PREP(removeCanInteractWithCondition); PREP(removeSpecificMagazine); diff --git a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf new file mode 100644 index 0000000000..26d488558b --- /dev/null +++ b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf @@ -0,0 +1,64 @@ +/* + * Author: PabstMirror + * Read settins from paramsArray that have a ACE_setting = 1. + * Happens before modules but after all other configs (for force priority) + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_common_fnc_readSettingsFromParamsArray + * + * Public: No + */ +#include "script_component.hpp" + +//paramsArray is a normal variable not a command +local _paramsArray = missionnamespace getvariable ["paramsArray", []]; + +TRACE_1("Reading missionConfigFile params",_paramsArray); + +{ + local _config = (missionConfigFile >> "params") select _forEachIndex; + if ((getNumber (_config >> "ACE_setting")) > 0) then { + local _settingName = configName _config; + local _settingValue = _x; + local _force = (getNumber (_config >> "force")) > 0; + local _title = getText (_config >> "title"); + + TRACE_4("ace_setting",_title,_settingName,_settingValue,_force); + + // Check if the variable is already defined + if (isNil _settingName) exitWith { + ACE_LOGERROR_1("readSettingsFromParamsArray - param [%1] is not an ace_setting", _settingName); + }; + + local _settingData = [_settingName] call FUNC(getSettingData); + _settingData params ["", "_typeName", "", "", "", "", "_isForced"]; + + // Check if it's already forced and quit + if (_isForced) exitWith {ACE_LOGWARNING_1("readSettingsFromParamsArray - param [%1] is already set and forced", _settingName);}; + + // The setting is not forced, so update the value + // Read entry and cast it to the correct type from the existing variable + _validValue = false; + _value = switch (true) do { + case (_typeName == "SCALAR"): {_validValue = true;}; + case (_typeName == "BOOL"): { + _settingValue = _settingValue > 0; + _validValue = true; + }; + //TODO: Handle ARRAY,COLOR,STRING??? (bool/scalar covers most important settings) + }; + + if (!_validValue) exitWith { + ACE_LOGWARNING_3("readSettingsFromParamsArray - param [%1] type not valid [%2] - expected type [%3]", _settingName,_settingValue,_typeName); + }; + + // Update the variable globaly and Force the setting if requested + [_settingName, _settingValue, _force, true] call FUNC(setSetting); + }; +} foreach _paramsArray; From 826b4fd20b1f4c9e0fae99744c494f8bad3327f2 Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Fri, 6 Nov 2015 20:53:05 -0600 Subject: [PATCH 2/3] Cleanup --- addons/common/functions/fnc_readSettingsFromParamsArray.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf index 26d488558b..b011c3b380 100644 --- a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf +++ b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf @@ -44,8 +44,8 @@ TRACE_1("Reading missionConfigFile params",_paramsArray); // The setting is not forced, so update the value // Read entry and cast it to the correct type from the existing variable - _validValue = false; - _value = switch (true) do { + local _validValue = false; + switch (true) do { case (_typeName == "SCALAR"): {_validValue = true;}; case (_typeName == "BOOL"): { _settingValue = _settingValue > 0; From 5b16638ae5998a0330ce195eec7501df54f2e34f Mon Sep 17 00:00:00 2001 From: PabstMirror Date: Sun, 8 Nov 2015 11:22:41 -0600 Subject: [PATCH 3/3] Always force param settings --- .../common/functions/fnc_readSettingsFromParamsArray.sqf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf index b011c3b380..a8b0299a15 100644 --- a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf +++ b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf @@ -26,10 +26,9 @@ TRACE_1("Reading missionConfigFile params",_paramsArray); if ((getNumber (_config >> "ACE_setting")) > 0) then { local _settingName = configName _config; local _settingValue = _x; - local _force = (getNumber (_config >> "force")) > 0; local _title = getText (_config >> "title"); - TRACE_4("ace_setting",_title,_settingName,_settingValue,_force); + TRACE_3("ace_setting",_title,_settingName,_settingValue); // Check if the variable is already defined if (isNil _settingName) exitWith { @@ -58,7 +57,7 @@ TRACE_1("Reading missionConfigFile params",_paramsArray); ACE_LOGWARNING_3("readSettingsFromParamsArray - param [%1] type not valid [%2] - expected type [%3]", _settingName,_settingValue,_typeName); }; - // Update the variable globaly and Force the setting if requested - [_settingName, _settingValue, _force, true] call FUNC(setSetting); + // Update the variable globaly and Force + [_settingName, _settingValue, true, true] call FUNC(setSetting); }; } foreach _paramsArray;