From 7a091215e1f2e316cfce51eda87a5382138a366e Mon Sep 17 00:00:00 2001 From: Glowbal Date: Fri, 27 Mar 2015 16:26:18 +0100 Subject: [PATCH 01/15] Draft #188 --- .../functions/fnc_loadSettingsOnServer.sqf | 56 ++++++------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/addons/common/functions/fnc_loadSettingsOnServer.sqf b/addons/common/functions/fnc_loadSettingsOnServer.sqf index 2548c44bec..96e025cff7 100644 --- a/addons/common/functions/fnc_loadSettingsOnServer.sqf +++ b/addons/common/functions/fnc_loadSettingsOnServer.sqf @@ -15,52 +15,32 @@ GVAR(settings) = []; -// Load settings from main config -_countOptions = count (configFile >> "ACE_Settings"); -for "_index" from 0 to (_countOptions - 1) do { - _optionEntry = (configFile >> "ACE_Settings") select _index; +_parseConfigForSettings = { + private ["_config", "_countOptions", "_optionEntry", "_index"]; - [_optionEntry] call FUNC(setSettingFromConfig); -}; -// Check if all settings should be forced -if (GVAR(forceAllSettings)) then { - { - _x set [6, true]; - } forEach GVAR(settings); -}; - -// @todo -// Load settings from server userconfig only if the ACE_ServerSettings is loaded -/*if (isClass (configFile >> "CfgPatches" >> "ACE_ServerSettings")) then { - DFUNC(serverUserConfig) = compile preprocessFileLineNumbers "\userconfig\ACE\ACE_Settings.hpp"; - if !(isNil DFUNC(serverUserConfig)) then { - [] call FUNC(serverUserConfig); + _config = _this select 0; + _countOptions = count _config; + for "_index" from 0 to (_countOptions - 1) do { + _optionEntry = _config select _index; + [_optionEntry] call FUNC(setSettingFromConfig); }; // Check if all settings should be forced if (GVAR(forceAllSettings)) then { { - if !(missionNamespace getVariable format ["%1_forced", _x]) then { - missionNamespace setVariable format ["%1_forced", _x, true]; - publicVariable format ["%1_forced", _name]; - }; - } forEach GVAR(settingsList); + _x set [6, true]; + } forEach GVAR(settings); }; -};*/ - -// Load settings from mission config -_countOptions = count (missionConfigFile >> "ACE_Settings"); -for "_index" from 0 to (_countOptions - 1) do { - _optionEntry = (missionConfigFile >> "ACE_Settings") select _index; - - [_optionEntry] call FUNC(setSettingFromConfig); -}; -// Check if all settings should be forced -if (GVAR(forceAllSettings)) then { - { - _x set [6, true]; - } forEach GVAR(settings); }; +// Server config +[configFile >> "ACE_ServerSettings"] call _parseConfigForSettings; + +// Regular config +[configFile >> "ACE_Settings"] call _parseConfigForSettings; + +// mission side settings +[missionConfigFile >> "ACE_Settings"] call _parseConfigForSettings; + // Publish all settings data publicVariable QGVAR(settings); // Publish all setting values From 9713b505ee39ae53b71fc58cfac722fb35a5a1b4 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Fri, 27 Mar 2015 20:35:44 +0100 Subject: [PATCH 02/15] Optional server config file --- optionals/server/config.cpp | 17 +++++++++++++++++ optionals/server/script_component.hpp | 12 ++++++++++++ optionals/userconfig/ace/serverconfig.hpp | 8 ++++++++ 3 files changed, 37 insertions(+) create mode 100644 optionals/server/config.cpp create mode 100644 optionals/server/script_component.hpp create mode 100644 optionals/userconfig/ace/serverconfig.hpp diff --git a/optionals/server/config.cpp b/optionals/server/config.cpp new file mode 100644 index 0000000000..9cfcb35012 --- /dev/null +++ b/optionals/server/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author[] = {"Glowbal"}; + authorUrl = "https://github.com/Glowbal/"; + VERSION_CONFIG; + }; +}; + +class ACE_ServerSettings { + #include "\userconfig\ace\serverconfig.hpp" +}; diff --git a/optionals/server/script_component.hpp b/optionals/server/script_component.hpp new file mode 100644 index 0000000000..f044c9601a --- /dev/null +++ b/optionals/server/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT serverconfig +#include "\z\ace\Addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_SERVERCONFIG + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_SERVERCONFIG + #define DEBUG_SETTINGS DEBUG_SETTINGS_SERVERCONFIG +#endif + +#include "\z\ace\Addons\main\script_macros.hpp" diff --git a/optionals/userconfig/ace/serverconfig.hpp b/optionals/userconfig/ace/serverconfig.hpp new file mode 100644 index 0000000000..950d08986b --- /dev/null +++ b/optionals/userconfig/ace/serverconfig.hpp @@ -0,0 +1,8 @@ + +// TODO fill with all possible settings ? + +// Example: +class ACE_common_forceAllSettings { + value = 0; + typeName = "BOOL"; +}; From 8e457d43ff7e7d9e03461a7e717c2f38cfc62738 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sat, 4 Apr 2015 22:58:14 +0200 Subject: [PATCH 03/15] Update serverconfig.hpp --- optionals/userconfig/ace/serverconfig.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/optionals/userconfig/ace/serverconfig.hpp b/optionals/userconfig/ace/serverconfig.hpp index 950d08986b..ebabfe12bd 100644 --- a/optionals/userconfig/ace/serverconfig.hpp +++ b/optionals/userconfig/ace/serverconfig.hpp @@ -1,6 +1,4 @@ -// TODO fill with all possible settings ? - // Example: class ACE_common_forceAllSettings { value = 0; From 7928ca71a5c7f7fc20e23fd14cabe4dcec8acef8 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 02:17:43 +0200 Subject: [PATCH 04/15] Server side config export --- addons/optionsmenu/CfgVehicles.hpp | 28 +++ addons/optionsmenu/XEH_preInit.sqf | 15 ++ addons/optionsmenu/config.cpp | 4 +- .../functions/fnc_exportSettings.sqf | 57 +++++ .../functions/fnc_moduleAllowConfigExport.sqf | 25 +++ .../fnc_onListBoxSettingsChanged.sqf | 21 +- ...nc_onServerListBoxShowSelectionChanged.sqf | 88 ++++++++ .../functions/fnc_onServerSaveInputField.sqf | 43 ++++ .../fnc_onServerSettingsMenuOpen.sqf | 59 +++++ .../functions/fnc_onSettingsMenuOpen.sqf | 9 + .../functions/fnc_onSliderPosChanged.sqf | 13 ++ .../functions/fnc_serverResetSettings.sqf | 43 ++++ .../fnc_serverSettingsMenuUpdateKeyView.sqf | 94 ++++++++ .../fnc_serverSettingsMenuUpdateList.sqf | 81 +++++++ .../fnc_toggleIncludeClientSettings.sqf | 27 +++ .../functions/fnc_updateSetting.sqf | 76 +++++-- addons/optionsmenu/gui/settingsMenu.hpp | 208 +++++++++++++++++- addons/optionsmenu/script_component.hpp | 3 + addons/optionsmenu/stringtable.xml | 30 +++ 19 files changed, 895 insertions(+), 29 deletions(-) create mode 100644 addons/optionsmenu/CfgVehicles.hpp create mode 100644 addons/optionsmenu/functions/fnc_exportSettings.sqf create mode 100644 addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf create mode 100644 addons/optionsmenu/functions/fnc_onServerListBoxShowSelectionChanged.sqf create mode 100644 addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf create mode 100644 addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf create mode 100644 addons/optionsmenu/functions/fnc_serverResetSettings.sqf create mode 100644 addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf create mode 100644 addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf create mode 100644 addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf diff --git a/addons/optionsmenu/CfgVehicles.hpp b/addons/optionsmenu/CfgVehicles.hpp new file mode 100644 index 0000000000..cd352782a1 --- /dev/null +++ b/addons/optionsmenu/CfgVehicles.hpp @@ -0,0 +1,28 @@ +class CfgVehicles { + class ACE_Module; + // TODO localization for all the modules + class ACE_moduleAllowConfigExport: ACE_Module { + scope = 2; + displayName = "Allow Config Export [ACE]"; + //icon = ""; + category = "ACE"; + function = QUOTE(DFUNC(moduleAllowConfigExport)); + functionPriority = 1; + isGlobal = 1; + isTriggerActivated = 0; + author = "$STR_ACE_Common_ACETeam"; + class Arguments { + class allowconfigurationExport { + displayName = "Allow"; + description = "Allow export of all settings to a server config formatted."; + typeName = "BOOL"; + defaultValue = 0; + }; + }; + class ModuleDescription { + description = "When allowed, you have access to the settings modification and export in SP. Clicking export will place the formated config on your clipboard."; + sync[] = {}; + }; + }; + +}; \ No newline at end of file diff --git a/addons/optionsmenu/XEH_preInit.sqf b/addons/optionsmenu/XEH_preInit.sqf index 83a50bce65..42f50287f2 100644 --- a/addons/optionsmenu/XEH_preInit.sqf +++ b/addons/optionsmenu/XEH_preInit.sqf @@ -6,12 +6,27 @@ PREP(onListBoxSettingsChanged); PREP(onListBoxShowSelectionChanged); PREP(onSettingsMenuOpen); PREP(onSliderPosChanged); +PREP(onServerSaveInputField); +PREP(onServerSettingsMenuOpen); +PREP(onServerListBoxShowSelectionChanged); PREP(resetSettings); +PREP(serverResetSettings); PREP(settingsMenuUpdateKeyView); PREP(settingsMenuUpdateList); +PREP(serverSettingsMenuUpdateKeyView); +PREP(serverSettingsMenuUpdateList); PREP(updateSetting); +PREP(exportSettings); +PREP(toggleIncludeClientSettings); +PREP(moduleAllowConfigExport); GVAR(clientSideOptions) = []; GVAR(clientSideColors) = []; +GVAR(serverConfigGeneration) = 0; +GVAR(ClientSettingsExportIncluded) = false; +GVAR(serverSideOptions) = []; +GVAR(serverSideColors) = []; +GVAR(serverSideValues) = []; + ADDON = true; diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index 7850e5972e..89d5768603 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -2,7 +2,7 @@ class CfgPatches { class ADDON { - units[] = {}; + units[] = {"ACE_moduleAllowConfigExport"}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; @@ -25,3 +25,5 @@ class CfgAddons { #include "gui\define.hpp" #include "gui\settingsMenu.hpp" #include "gui\pauseMenu.hpp" + +#include "CFgVehicles.hpp" diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf new file mode 100644 index 0000000000..51ca7d447b --- /dev/null +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -0,0 +1,57 @@ +/* + * Author: Glowbal + * Export all config settings with their current values. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_exportSettings + * + * Public: No + */ + +#include "script_component.hpp" + +_compiledConfig = " +"; +{ + /*_settingData = [ + _name, + _typeName, + _isClientSetable, + _localizedName, + _localizedDescription, + _possibleValues, + _isForced, + _defaultValue + ];*/ + + _name = _x select 0; + _typeName = _x select 1; + _isClientSetable = _x select 2; + _localizedName = _x select 3; + _localizedDescription = _x select 4; + _possibleValues = _x select 5; + _defaultValue = _x select 6; + + if (GVAR(ClientSettingsExportIncluded) || !_isClientSetable) then { + _value = missionNamespace getvariable [_name, _defaultValue]; + if (_typeName == "STRING") then { // I dont think we have string values, but just in case + _value = format['"%1"', _value]; + }; + + _compiledConfigEntry = format [" + class %1 { + value = %2; + typeName = %3; + }; + ", _name, _value, format['"%1"', _typeName]]; + _compiledConfig = _compiledConfig + _compiledConfigEntry; + }; +} forEach EGVAR(common,settings); + +copyToClipboard format["%1",_compiledConfig]; diff --git a/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf new file mode 100644 index 0000000000..1d98384a09 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf @@ -0,0 +1,25 @@ +/* + * Author: Glowbal + * + * + * Arguments: + * none + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_logic"]; +_logic = _this select 0; + +if (isMultiplayer) exitwith {}; + +if (_logic getvariable ["allowconfigurationExport", false]) then { + GVAR(serverConfigGeneration) = 1; +} else { + GVAR(serverConfigGeneration) = 0; +}; diff --git a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf index 5846d0dccb..50b2d5302a 100644 --- a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf @@ -24,11 +24,18 @@ _rightDropDownIndex = lbCurSel 400; //Index of right drop down if (_rightDropDownIndex < 0) then {_rightDropDownIndex = 0;}; switch (GVAR(optionMenu_openTab)) do { -case (MENU_TAB_OPTIONS): { - if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideOptions)))) then { - _settingIndex = (GVAR(clientSideOptions) select _settingIndex) select 0; - [MENU_TAB_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); - }; - [false] call FUNC(settingsMenuUpdateList); - }; + case (MENU_TAB_OPTIONS): { + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideOptions)))) then { + _settingIndex = (GVAR(clientSideOptions) select _settingIndex) select 0; + [MENU_TAB_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); + }; + [false] call FUNC(settingsMenuUpdateList); + }; + case (MENU_TAB_SERVER_OPTIONS): { + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideOptions)))) then { + _settingIndex = (GVAR(serverSideOptions) select _settingIndex) select 0; + [MENU_TAB_SERVER_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); + }; + [false] call FUNC(serverSettingsMenuUpdateList); + }; }; diff --git a/addons/optionsmenu/functions/fnc_onServerListBoxShowSelectionChanged.sqf b/addons/optionsmenu/functions/fnc_onServerListBoxShowSelectionChanged.sqf new file mode 100644 index 0000000000..aaeec2d9ac --- /dev/null +++ b/addons/optionsmenu/functions/fnc_onServerListBoxShowSelectionChanged.sqf @@ -0,0 +1,88 @@ +/* + * Author: Glowbal + * Changes which tab is open (options or colors) + * + * Arguments: + * The tab to open (defined in script_component) + * + * Return Value: + * None + * + * Example: + * [MENU_TAB_COLORS] call ACE_optionsmenu_fnc_onListBoxShowSelectionChanged + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_settingsMenu", "_localizedHeader"]; + +PARAMS_1(_openTab); +GVAR(optionMenu_openTab) = _openTab; + +disableSerialization; +_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; + +switch (GVAR(optionMenu_openTab)) do { +case (MENU_TAB_SERVER_OPTIONS): { + _localizedHeader = format ["%1: %2", (localize "STR_ACE_OptionsMenu_OpenConfigMenu"), (localize "STR_ACE_OptionsMenu_TabOptions")]; + ctrlSetText [13, _localizedHeader]; + lbClear 400; + + (_settingsMenu displayCtrl 301) ctrlShow true; + + (_settingsMenu displayCtrl 400) ctrlShow true; + (_settingsMenu displayCtrl 410) ctrlShow false; + (_settingsMenu displayCtrl 411) ctrlShow false; + (_settingsMenu displayCtrl 412) ctrlShow false; + (_settingsMenu displayCtrl 413) ctrlShow false; + (_settingsMenu displayCtrl 414) ctrlShow false; + (_settingsMenu displayCtrl 415) ctrlShow false; + (_settingsMenu displayCtrl 416) ctrlShow false; + (_settingsMenu displayCtrl 416) ctrlEnable false; + }; +case (MENU_TAB_SERVER_COLORS): { + _localizedHeader = format ["%1: %2", (localize "STR_ACE_OptionsMenu_OpenConfigMenu"), (localize "STR_ACE_OptionsMenu_TabColors")]; + ctrlSetText [13, _localizedHeader]; + + lbClear 400; + + (_settingsMenu displayCtrl 301) ctrlShow false; + + (_settingsMenu displayCtrl 400) ctrlShow false; + (_settingsMenu displayCtrl 410) ctrlShow true; + (_settingsMenu displayCtrl 411) ctrlShow true; + (_settingsMenu displayCtrl 412) ctrlShow true; + (_settingsMenu displayCtrl 413) ctrlShow true; + + (_settingsMenu displayCtrl 410) sliderSetRange [0, 255]; + (_settingsMenu displayCtrl 411) sliderSetRange [0, 255]; + (_settingsMenu displayCtrl 412) sliderSetRange [0, 255]; + (_settingsMenu displayCtrl 413) sliderSetRange [0, 255]; + + (_settingsMenu displayCtrl 414) ctrlShow false; + (_settingsMenu displayCtrl 415) ctrlShow false; + (_settingsMenu displayCtrl 416) ctrlShow false; + (_settingsMenu displayCtrl 416) ctrlEnable false; + }; +case (MENU_TAB_SERVER_VALUES): { + _localizedHeader = format ["%1: %2", (localize "STR_ACE_OptionsMenu_OpenConfigMenu"), (localize "STR_ACE_OptionsMenu_TabValues")]; + ctrlSetText [13, _localizedHeader]; + + lbClear 400; + (_settingsMenu displayCtrl 301) ctrlShow false; + (_settingsMenu displayCtrl 400) ctrlShow false; + (_settingsMenu displayCtrl 410) ctrlShow false; + (_settingsMenu displayCtrl 411) ctrlShow false; + (_settingsMenu displayCtrl 412) ctrlShow false; + (_settingsMenu displayCtrl 413) ctrlShow false; + + (_settingsMenu displayCtrl 414) ctrlShow true; + (_settingsMenu displayCtrl 415) ctrlShow true; + (_settingsMenu displayCtrl 416) ctrlShow true; + (_settingsMenu displayCtrl 416) ctrlEnable true; + }; +}; + +[true] call FUNC(serverSettingsMenuUpdateList); diff --git a/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf new file mode 100644 index 0000000000..f4dc6956c4 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf @@ -0,0 +1,43 @@ +/* + * Author: Glowbal + * Called when the listbox selection is changed for an options (eg: chaning a setting from false to true) + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_onListBoxSettingsChanged + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_settingIndex", "_inputText"]; + +_settingIndex = lbCurSel 200; //Index of left list +_inputText = ctrlText 414; //Index of right drop down + +switch (GVAR(optionMenu_openTab)) do { + case (MENU_TAB_SERVER_VALUES): { + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideValues)))) then { + try { + _setting = (GVAR(serverSideValues) select _settingIndex); + _settingName = _setting select 0; + + _convertedValue = switch (toUpper (_setting select 1)) do { + case "STRING": {format ['"%1"', _inputText]}; + case "ARRAY": {format [call compile "[%1]", _inputText]}; + case "SCALAR": {parseNumber _inputText;}; + default {throw "Error"}; + }; + [MENU_TAB_SERVER_VALUES, _settingName, _convertedValue] call FUNC(updateSetting); + } catch { + }; + }; + [false] call FUNC(serverSettingsMenuUpdateList); + }; +}; diff --git a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf new file mode 100644 index 0000000000..b419e25b32 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf @@ -0,0 +1,59 @@ +/* + * Author: Glowbal + * Called from the onLoad of ACE_settingsMenu dialog. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [onLoadEvent] call ACE_optionsmenu_fnc_onSettingsMenuOpen + * + * Public: No + */ + +#include "script_component.hpp" + +// Filter only user setable setting +GVAR(serverSideOptions) = []; +GVAR(serverSideColors) = []; +GVAR(serverSideValues) = []; +{ + _name = _x select 0; + _typeName = _x select 1; + _isClientSetable = _x select 2; + _localizedName = _x select 3; + _localizedDescription = _x select 4; + _possibleValues = _x select 5; + _defaultValue = _x select 6; + + // Exclude client side options if they are not included for the export + if (!(_isClientSetable) || GVAR(ClientSettingsExportIncluded)) then { + // Append the current value to the setting metadata + _setting = + _x; + _setting pushBack (missionNamespace getVariable (_x select 0)); + + // Categorize the setting according to types + // @todo: allow the user to modify other types of parameters? + if ((_typeName == "SCALAR" && count _possibleValues > 0) || (_x select 1) == "BOOL") then { + GVAR(serverSideOptions) pushBack _setting; + }; + if (_typeName == "COLOR") then { + GVAR(serverSideColors) pushBack _setting; + }; + if ((_typeName == "SCALAR" && count _possibleValues == 0) || _typeName == "ARRAY" || _typeName == "STRING") then { + GVAR(serverSideValues) pushBack _setting; + }; + }; +} forEach EGVAR(common,settings); + +//Delay a frame +[{ [MENU_TAB_SERVER_OPTIONS] call FUNC(onServerListBoxShowSelectionChanged) }, []] call EFUNC(common,execNextFrame); + +private "_menu"; +disableSerialization; +_menu = uiNamespace getvariable "ACE_serverSettingsMenu"; +(_menu displayCtrl 1003) ctrlEnable false; + diff --git a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf index 7c5f03af0b..66f803b1f2 100644 --- a/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onSettingsMenuOpen.sqf @@ -16,6 +16,10 @@ #include "script_component.hpp" +if (isMultiplayer /* || !(GVAR(allowServerConfigGeneration))*/) exitwith { + closeDialog 0; +}; + // Filter only user setable setting GVAR(clientSideOptions) = []; GVAR(clientSideColors) = []; @@ -45,3 +49,8 @@ disableSerialization; _menu = uiNamespace getvariable "ACE_settingsMenu"; (_menu displayCtrl 1002) ctrlEnable false; (_menu displayCtrl 1003) ctrlEnable false; + +if (GVAR(serverConfigGeneration) == 0) then { + (_menu displayCtrl 1102) ctrlEnable false; + (_menu displayCtrl 1102) ctrlShow false; +}; diff --git a/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf b/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf index 4e0e603862..b69d8bd734 100644 --- a/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onSliderPosChanged.sqf @@ -34,5 +34,18 @@ switch (GVAR(optionMenu_openTab)) do { }; [false] call FUNC(settingsMenuUpdateList); }; + case (MENU_TAB_SERVER_COLORS): { + + _newColor = []; + { + _newColor pushBack ((sliderPosition _x) / 255); + } forEach [410, 411, 412, 413]; + + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideColors)))) then { + _settingIndex = (GVAR(clientSideColors) select _settingIndex) select 0; + [MENU_TAB_SERVER_COLORS, _settingIndex, _newColor] call FUNC(updateSetting); + }; + [false] call FUNC(serverSettingsMenuUpdateList); + }; default {}; }; diff --git a/addons/optionsmenu/functions/fnc_serverResetSettings.sqf b/addons/optionsmenu/functions/fnc_serverResetSettings.sqf new file mode 100644 index 0000000000..434e622818 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_serverResetSettings.sqf @@ -0,0 +1,43 @@ +/* + * Author: Glowbal + * Resets all server settings to default. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_onListBoxSettingsChanged + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_name", "_default", "_lastSelected"]; + +{ + _name = _x select 0; + _default = _x select 7; + [MENU_TAB_SERVER_OPTIONS, _name, _default] call FUNC(updateSetting); +} forEach GVAR(serverSideOptions); + +{ + _name = _x select 0; + _default = _x select 7; + [MENU_TAB_SERVER_COLORS, _name, _default] call FUNC(updateSetting); +} forEach GVAR(serverSideColors); + +{ + _name = _x select 0; + _default = _x select 7; + [MENU_TAB_SERVER_VALUES, _name, _default] call FUNC(updateSetting); +} forEach GVAR(serverSideVakyes); + +_lastSelected = lbCurSel 200; +[GVAR(optionMenu_openTab)] call FUNC(onserverListBoxShowSelectionChanged); +if (_lastSelected != -1) then { + lbSetCurSel [200, _lastSelected]; +}; diff --git a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf new file mode 100644 index 0000000000..2dcf9f7fe7 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateKeyView.sqf @@ -0,0 +1,94 @@ +/* + * Author: Glowbal + * Updates the right half of the option menu for the currently selected option. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ACE_optionsmenu_fnc_settingsMenuUpdateKeyView + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_settingsMenu", "_ctrlList", "_collection", "_settingIndex", "_setting", "_entryName", "_localizedName", "_localizedDescription", "_possibleValues", "_settingsValue", "_currentColor"]; +disableSerialization; + +_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; +_ctrlList = _settingsMenu displayCtrl 200; + +_collection = switch (GVAR(optionMenu_openTab)) do { + case MENU_TAB_SERVER_OPTIONS: {GVAR(serverSideOptions)}; + case MENU_TAB_SERVER_COLORS: {GVAR(serverSideColors)}; + case MENU_TAB_SERVER_VALUES: {GVAR(serverSideValues)}; + default {[]}; +}; + +if (count _collection > 0) then { + _settingIndex = (lbCurSel _ctrlList); + if (_settingIndex > (count _collection)) then { + _settingIndex = count _collection - 1; + }; + + if (_settingIndex < 0) then { + _settingIndex = 0; + }; + _setting = _collection select _settingIndex; + + _entryName = _setting select 0; + _localizedName = _setting select 3; + _localizedDescription = _setting select 4; + + if (_localizedName == "") then {_localizedName = _entryName;}; + (_settingsMenu displayCtrl 250) ctrlSetText _localizedName; + (_settingsMenu displayCtrl 251) ctrlSetText _localizedDescription; + (_settingsMenu displayCtrl 300) ctrlSetText _entryName; + + switch (GVAR(optionMenu_openTab)) do { + case (MENU_TAB_SERVER_OPTIONS): { + _possibleValues = _setting select 5; + _settingsValue = _setting select 8; + // Created disable/enable options for bools + if ((_setting select 1) == "BOOL") then { + lbClear 400; + lbAdd [400, (localize "STR_ACE_OptionsMenu_Disabled")]; + lbAdd [400, (localize "STR_ACE_OptionsMenu_Enabled")]; + _settingsValue = [0, 1] select _settingsValue; + } else { + lbClear 400; + { lbAdd [400, _x]; } foreach _possibleValues; + }; + (_settingsMenu displayCtrl 400) lbSetCurSel _settingsValue; + }; + case (MENU_TAB_SERVER_COLORS): { + _currentColor = _setting select 8; + { + sliderSetPosition [_x, (255 * (_currentColor select _forEachIndex))]; + } forEach [410, 411, 412, 413]; + }; + case (MENU_TAB_SERVER_VALUES): { + // TODO implement + _settingsValue = _setting select 8; + + // Created disable/enable options for bools + _expectedType = switch (_setting select 1) do { + case "STRING": {"STR_ACE_OptionsMenu_stringType"}; + case "ARRAY": {"STR_ACE_OptionsMenu_arrayType"}; + case "SCALAR": {"STR_ACE_OptionsMenu_scalarType"}; + default {"STR_ACE_optionsMenu_unknownType"}; + }; + (_settingsMenu displayCtrl 414) ctrlSetText format["%1", _settingsValue]; + (_settingsMenu displayCtrl 415) ctrlSetText format[localize _expectedType]; + }; + }; +} else { //no settings in list: + lbClear 400; + (_settingsMenu displayCtrl 250) ctrlSetText "No settings available"; + (_settingsMenu displayCtrl 251) ctrlSetText "No settings available"; + (_settingsMenu displayCtrl 300) ctrlSetText "No settings available"; +}; diff --git a/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf new file mode 100644 index 0000000000..ad5d647c16 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_serverSettingsMenuUpdateList.sqf @@ -0,0 +1,81 @@ +/* + * Author: Glowbal + * Updates the setting when the client has selected a new value. Saves to profilenamespace. + * + * Arguments: + * 0: Update the keylist as well + * + * Return Value: + * None + * + * Example: + * [false] call ACE_optionsmenu_fnc_settingsMenuUpdateList + * + * Public: No + */ + +#include "script_component.hpp" + +private ["_settingsMenu", "_ctrlList", "_settingsText", "_color", "_settingsColor", "_updateKeyView"]; +DEFAULT_PARAM(0,_updateKeyView,true); + +disableSerialization; +_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; +_ctrlList = _settingsMenu displayCtrl 200; + +lbclear _ctrlList; +switch (GVAR(optionMenu_openTab)) do { + case (MENU_TAB_SERVER_OPTIONS): { + { + if ((_x select 3) != "") then { + _ctrlList lbadd (_x select 3); + } else { + _ctrlList lbadd (_x select 0); + }; + + _settingsValue = _x select 8; + + // Created disable/enable options for bools + _settingsText = if ((_x select 1) == "BOOL") then { + [(localize "STR_ACE_OptionsMenu_Disabled"), (localize "STR_ACE_OptionsMenu_Enabled")] select _settingsValue; + } else { + (_x select 5) select _settingsValue; + }; + + _ctrlList lbadd (_settingsText); + }foreach GVAR(serverSideOptions); + }; + case (MENU_TAB_SERVER_COLORS): { + { + _color = +(_x select 8); + { + _color set [_forEachIndex, ((round (_x * 100))/100)]; + } forEach _color; + _settingsColor = str _color; + if ((_x select 3) != "") then { + _ctrlList lbadd (_x select 3); + } else { + _ctrlList lbadd (_x select 0); + }; + _ctrlList lbadd (_settingsColor); + _ctrlList lnbSetColor [[_forEachIndex, 1], (_x select 8)]; + }foreach GVAR(serverSideColors); + }; + case (MENU_TAB_SERVER_VALUES): { + { + if ((_x select 3) != "") then { + _ctrlList lbadd (_x select 3); + } else { + _ctrlList lbadd (_x select 0); + }; + _settingsValue = _x select 8; + if (typeName _settingsValue != "STRINg") then { + _settingsValue = format["%1", _settingsValue]; + }; + _ctrlList lbadd (_settingsValue); + }foreach GVAR(serverSideValues); + }; +}; +if (_updateKeyView) then { + [] call FUNC(serverSettingsMenuUpdateKeyView); +}; diff --git a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf new file mode 100644 index 0000000000..0558c81831 --- /dev/null +++ b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf @@ -0,0 +1,27 @@ +/* + * Author: Glowbal + * + * + * Arguments: + * none + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" + +GVAR(ClientSettingsExportIncluded) = !(GVAR(ClientSettingsExportIncluded)); + +private "_settingsMenu"; +disableSerialization; +_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; +if (GVAR(ClientSettingsExportIncluded)) then { + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_exClientSettings"); +} else { + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_inClientSettings"); +}; + +[] call FUNC(onServerSettingsMenuOpen); diff --git a/addons/optionsmenu/functions/fnc_updateSetting.sqf b/addons/optionsmenu/functions/fnc_updateSetting.sqf index bc5969d54c..d1a7825671 100644 --- a/addons/optionsmenu/functions/fnc_updateSetting.sqf +++ b/addons/optionsmenu/functions/fnc_updateSetting.sqf @@ -24,33 +24,69 @@ PARAMS_3(_type,_name,_newValue); _changed = false; switch (_type) do { -case (MENU_TAB_OPTIONS): { - { - if ((_x select 0) == _name) then { + case (MENU_TAB_OPTIONS): { + { + if ((_x select 0) == _name) then { + + if ((_x select 1) == "BOOL") then { + _newValue = [false, true] select _newValue; + }; + + if !((_x select 8) isEqualTo _newValue) then { + _changed = true; + _x set [8, _newValue]; + } ; - if ((_x select 1) == "BOOL") then { - _newValue = [false, true] select _newValue; }; - - if !((_x select 8) isEqualTo _newValue) then { + } foreach GVAR(clientSideOptions); + }; + case (MENU_TAB_COLORS): { + { + if (((_x select 0) == _name) && {!((_x select 8) isEqualTo _newValue)}) then { _changed = true; _x set [8, _newValue]; - } ; - - }; - } foreach GVAR(clientSideOptions); + }; + } foreach GVAR(clientSideColors); }; -case (MENU_TAB_COLORS): { - { - if (((_x select 0) == _name) && {!((_x select 8) isEqualTo _newValue)}) then { - _changed = true; - _x set [8, _newValue]; - }; - } foreach GVAR(clientSideColors); + case (MENU_TAB_SERVER_OPTIONS): { + { + if ((_x select 0) == _name) then { + + if ((_x select 1) == "BOOL") then { + _newValue = [false, true] select _newValue; + }; + + if !((_x select 8) isEqualTo _newValue) then { + _changed = true; + _x set [8, _newValue]; + } ; + + }; + } foreach GVAR(serverSideOptions); + }; + case (MENU_TAB_SERVER_COLORS): { + { + if (((_x select 0) == _name) && {!((_x select 8) isEqualTo _newValue)}) then { + _changed = true; + _x set [8, _newValue]; + }; + } foreach GVAR(serverSideColors); + }; + case (MENU_TAB_SERVER_VALUES): { + { + if (((_x select 0) == _name) && {!((_x select 8) isEqualTo _newValue)}) then { + _changed = true; + _x set [8, _newValue]; + }; + } foreach GVAR(serverSideValues); }; }; if (_changed) then { - profileNamespace setVariable [_name, _newValue]; - [_name, _newValue] call EFUNC(common,setSetting); + if (GVAR(serverConfigGeneration) > 0) then { + missionNamespace setvariable [_name, _newValue]; + } else { + profileNamespace setVariable [_name, _newValue]; + [_name, _newValue] call EFUNC(common,setSetting); + }; }; diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index 995c7850a5..d5c8eeeb84 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -228,5 +228,211 @@ class ACE_settingsMenu { x = 26.1 * (SIZEX / 40) + OFFSETX; action = QUOTE([] call FUNC(resetSettings)); }; + class action_exportServerConfig: actionClose { + idc = 1102; + text = "$STR_ACE_OptionsMenu_OpenExport"; + x = 1 * (SIZEX / 40) + OFFSETX; + action = QUOTE(if (GVAR(serverConfigGeneration) > 0) then {createDialog 'ACE_serverSettingsMenu'; }); + }; }; -}; \ No newline at end of file +}; +class ACE_serverSettingsMenu: ACE_settingsMenu { + onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', _this select 0)]; [] call FUNC(onServerSettingsMenuOpen); GVAR(serverConfigGeneration) = true;); + onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', nil)]; GVAR(serverConfigGeneration) = false;); + class controls: controls { + class HeaderName { + idc = 1; + type = CT_STATIC; + x = 1 * UNITX + OFFSETX; + y = 1 * UNITY + OFFSETY; + w = 38 * UNITX; + h = 1 * UNITY; + style = ST_LEFT + ST_SHADOW; + font = "PuristaMedium"; + SizeEx = (UNITY * 1); + colorText[] = {0.95, 0.95, 0.95, 0.75}; + colorBackground[] = {0,0,0,0}; + text = "$STR_ACE_OptionsMenu_OpenConfigMenu"; + }; + class labelSubHeader: ACE_gui_staticBase { + idc = 13; + x = 2 * UNITX + OFFSETX; + y = 3.4 * UNITY + OFFSETY; + w = 30 * UNITX; + h = 1 * UNITY; + text = ""; + }; + class selectionAction_1: ACE_gui_buttonBase { + idc = 1000; + text = "$STR_ACE_OptionsMenu_TabOptions"; + x = 1 * UNITX + OFFSETX; + y = 2.1 * UNITY + OFFSETY; + w = 9.5 * UNITX; + h = 1 * UNITY; + animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)"; + animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.8)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + color[] = {1, 1, 1, 1}; + color2[] = {0,0,0, 1}; + colorBackgroundFocused[] = {1,1,1,1}; + colorBackground[] = {1,1,1,1}; + colorbackground2[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,1}; + colorFocused[] = {0,0,0,1}; + periodFocus = 1; + periodOver = 1; + action = QUOTE([MENU_TAB_SERVER_OPTIONS] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_2: selectionAction_1 { + idc = 1001; + text = "$STR_ACE_OptionsMenu_TabColors"; + x = 10.5 * UNITX + OFFSETX; + action = QUOTE([MENU_TAB_SERVER_COLORS] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_3: selectionAction_1 { + idc = 1002; + text = "$STR_ACE_OptionsMenu_TabValues"; + x = 20 * UNITX + OFFSETX; + action = QUOTE([MENU_TAB_SERVER_VALUES] call FUNC(onServerListBoxShowSelectionChanged);); + }; + class selectionAction_4: selectionAction_1 { + idc = 1003; + text = ""; + x = 29.5 * UNITX + OFFSETX; + action = ""; + }; + class listBoxSettingsList: ACE_gui_listNBox { + idc = 200; + x = 2 * UNITX + OFFSETX; + y = 5.5 * UNITY + OFFSETY; + w = 23 * UNITX; + h = 15 * UNITY; + SizeEx = (UNITY * 0.8); + colorBackground[] = {0, 0, 0, 0.9}; + colorSelectBackground[] = {0, 0, 0, 0.9}; + columns[] = {0.0, 0.6}; + onLBSelChanged = QUOTE(_this call FUNC(serverSettingsMenuUpdateKeyView)); + }; + class labelTitle: ACE_gui_staticBase { + idc = 250; + x = 27.1 * UNITX + OFFSETX; + y = 5.1 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 1 * UNITY; + text = ""; + SizeEx = (UNITY *1); + }; + class labelKey: ACE_gui_staticBase { //Variable Name + idc = 300; + x = 27.1 * UNITX + OFFSETX; + y = 6.2 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 1 * UNITY; + text = ""; + SizeEx = (UNITY * 0.65); + }; + class Label2: labelKey { + idc = 301; + y = 7.3 * UNITY + OFFSETY; + text = "$STR_ACE_OptionsMenu_Setting"; + SizeEx = (UNITY * 1); + }; + class comboBox1: ACE_gui_comboBoxBase { + idc = 400; + x = 31.1 * UNITX + OFFSETX; + y = 7.3 * UNITY + OFFSETY; + w = 7 * UNITX; + h = 1 * UNITY; + onLBSelChanged = QUOTE( call FUNC(onListBoxSettingsChanged)); + SizeEx = (UNITY * 0.9); + }; + class sliderBar1: RscXSliderH { + idc = 410; + x = 27.1 * UNITX + OFFSETX; + y = 7.3 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 0.75 * UNITY; + onSliderPosChanged = QUOTE(_this call FUNC(onSliderPosChanged)); + color[] = {1,0,0,0.4}; + colorActive[] = {1,0,0,1}; + }; + class sliderBar2: sliderBar1 { + idc = 411; + y = 8.2 * UNITY + OFFSETY; + color[] = {0,1,0,0.4}; + colorActive[] = {0,1,0,1}; + }; + class sliderBar3: sliderBar1 { + idc = 412; + y = 9.1 * UNITY + OFFSETY; + color[] = {0,0,1,0.4}; + colorActive[] = {0,0,1,1}; + }; + class sliderBar4: sliderBar1 { + idc = 413; + y = 10 * UNITY + OFFSETY; + color[] = {1,1,1,0.4}; + colorActive[] = {1,1,1,1}; + }; + class inputField1: ACE_gui_editBase { + idc = 414; + x = 27.1 * UNITX + OFFSETX; + y = 7.3 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 0.75 * UNITY; + }; + class inputFieldTypeLabel: ACE_gui_staticBase { + idc = 415; + x = 27.1 * UNITX + OFFSETX; + y = 8.2 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 0.75 * UNITY; + text = ""; + style = ST_LEFT + ST_MULTI; + lineSpacing = 1; + SizeEx = (UNITY * 0.8); + }; + class saveInputButton: selectionAction_1 { + idc = 416; + text = "$STR_ACE_OptionsMenu_SaveInput"; + x = 27.1 * UNITX + OFFSETX; + y = 9.1 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 1 * UNITY; + action = QUOTE([] call FUNC(onServerSaveInputField);); + }; + class labelDesc: ACE_gui_staticBase { + idc = 251; + x = 27.1 * UNITX + OFFSETX; + y = 11 * UNITY + OFFSETY; + w = 11 * UNITX; + h = 11 * UNITY; + text = ""; + style = ST_LEFT + ST_MULTI; + lineSpacing = 1; + SizeEx = (UNITY * 0.8); + }; + class actionClose; + class action_reset: actionClose { + idc = 1100; + text = "$STR_ACE_OptionsMenu_ResetAll"; + x = 26.1 * (SIZEX / 40) + OFFSETX; + action = QUOTE([] call FUNC(serverResetSettings)); + }; + class action_exportServerConfig: actionClose { + idc = 1101; + text = "$STR_ACE_OptionsMenu_Export"; + x = 1 * (SIZEX / 40) + OFFSETX; + action = QUOTE([] call FUNC(exportSettings)); + }; + class action_toggleIncludeClientSettings: actionClose { + idc = 1102; + text = "$STR_ACE_OptionsMenu_inClientSettings"; + x = 9 * (SIZEX / 40) + OFFSETX; + action = QUOTE([] call FUNC(toggleIncludeClientSettings)); + }; + }; +}; diff --git a/addons/optionsmenu/script_component.hpp b/addons/optionsmenu/script_component.hpp index 5120791b76..7b86dbe0dd 100644 --- a/addons/optionsmenu/script_component.hpp +++ b/addons/optionsmenu/script_component.hpp @@ -17,3 +17,6 @@ #define MENU_TAB_OPTIONS 0 #define MENU_TAB_COLORS 1 +#define MENU_TAB_SERVER_OPTIONS 10 +#define MENU_TAB_SERVER_COLORS 11 +#define MENU_TAB_SERVER_VALUES 12 diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index bb5744ab16..4a8c574755 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -39,6 +39,9 @@ Opciók Opzioni + + Values + Yes Ja @@ -70,5 +73,32 @@ Yстановки: Ajuste: + + Export + + + Open Export Menu + + + String input. + + + Array. Seperate elements by using ,. + + + Number + + + Uknown input type + + + Save input + + + Include Client Settings + + + Exclude Client Settings + \ No newline at end of file From a0af0559170665ae717ef312718909895f647236 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 02:22:24 +0200 Subject: [PATCH 05/15] export config should force the settings --- addons/optionsmenu/functions/fnc_exportSettings.sqf | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 51ca7d447b..252933ffdf 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -48,6 +48,7 @@ _compiledConfig = " class %1 { value = %2; typeName = %3; + force = 1; }; ", _name, _value, format['"%1"', _typeName]]; _compiledConfig = _compiledConfig + _compiledConfigEntry; From 110635df7b0a7194bb0912c0e9bd933c5d616aee Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 02:33:11 +0200 Subject: [PATCH 06/15] improved formatting --- addons/optionsmenu/functions/fnc_exportSettings.sqf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 252933ffdf..bb94d38db3 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -45,12 +45,11 @@ _compiledConfig = " }; _compiledConfigEntry = format [" - class %1 { - value = %2; - typeName = %3; - force = 1; - }; - ", _name, _value, format['"%1"', _typeName]]; +class %1 { + value = %2; + typeName = %3; + force = 1; +};", _name, _value, format['"%1"', _typeName]]; _compiledConfig = _compiledConfig + _compiledConfigEntry; }; } forEach EGVAR(common,settings); From d487092d845839fd7c8fc33b18da026ed2f6de78 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 02:33:45 +0200 Subject: [PATCH 07/15] formatting --- .../functions/fnc_exportSettings.sqf | 4 +-- .../functions/fnc_moduleAllowConfigExport.sqf | 4 +-- .../fnc_onListBoxSettingsChanged.sqf | 28 +++++++++---------- .../functions/fnc_onServerSaveInputField.sqf | 28 +++++++++---------- .../fnc_toggleIncludeClientSettings.sqf | 4 +-- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index bb94d38db3..8718698a18 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -19,7 +19,7 @@ _compiledConfig = " "; { - /*_settingData = [ + /*_settingData = [ _name, _typeName, _isClientSetable, @@ -41,7 +41,7 @@ _compiledConfig = " if (GVAR(ClientSettingsExportIncluded) || !_isClientSetable) then { _value = missionNamespace getvariable [_name, _defaultValue]; if (_typeName == "STRING") then { // I dont think we have string values, but just in case - _value = format['"%1"', _value]; + _value = format['"%1"', _value]; }; _compiledConfigEntry = format [" diff --git a/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf index 1d98384a09..d756a0ef83 100644 --- a/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf +++ b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf @@ -19,7 +19,7 @@ _logic = _this select 0; if (isMultiplayer) exitwith {}; if (_logic getvariable ["allowconfigurationExport", false]) then { - GVAR(serverConfigGeneration) = 1; + GVAR(serverConfigGeneration) = 1; } else { - GVAR(serverConfigGeneration) = 0; + GVAR(serverConfigGeneration) = 0; }; diff --git a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf index 50b2d5302a..1543a2c8d5 100644 --- a/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf +++ b/addons/optionsmenu/functions/fnc_onListBoxSettingsChanged.sqf @@ -24,18 +24,18 @@ _rightDropDownIndex = lbCurSel 400; //Index of right drop down if (_rightDropDownIndex < 0) then {_rightDropDownIndex = 0;}; switch (GVAR(optionMenu_openTab)) do { - case (MENU_TAB_OPTIONS): { - if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideOptions)))) then { - _settingIndex = (GVAR(clientSideOptions) select _settingIndex) select 0; - [MENU_TAB_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); - }; - [false] call FUNC(settingsMenuUpdateList); - }; - case (MENU_TAB_SERVER_OPTIONS): { - if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideOptions)))) then { - _settingIndex = (GVAR(serverSideOptions) select _settingIndex) select 0; - [MENU_TAB_SERVER_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); - }; - [false] call FUNC(serverSettingsMenuUpdateList); - }; + case (MENU_TAB_OPTIONS): { + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(clientSideOptions)))) then { + _settingIndex = (GVAR(clientSideOptions) select _settingIndex) select 0; + [MENU_TAB_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); + }; + [false] call FUNC(settingsMenuUpdateList); + }; + case (MENU_TAB_SERVER_OPTIONS): { + if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideOptions)))) then { + _settingIndex = (GVAR(serverSideOptions) select _settingIndex) select 0; + [MENU_TAB_SERVER_OPTIONS, _settingIndex, _rightDropDownIndex] call FUNC(updateSetting); + }; + [false] call FUNC(serverSettingsMenuUpdateList); + }; }; diff --git a/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf index f4dc6956c4..ca4a00891a 100644 --- a/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf +++ b/addons/optionsmenu/functions/fnc_onServerSaveInputField.sqf @@ -22,22 +22,22 @@ _settingIndex = lbCurSel 200; //Index of left list _inputText = ctrlText 414; //Index of right drop down switch (GVAR(optionMenu_openTab)) do { - case (MENU_TAB_SERVER_VALUES): { + case (MENU_TAB_SERVER_VALUES): { if ((_settingIndex >= 0) && (_settingIndex < (count GVAR(serverSideValues)))) then { - try { - _setting = (GVAR(serverSideValues) select _settingIndex); - _settingName = _setting select 0; + try { + _setting = (GVAR(serverSideValues) select _settingIndex); + _settingName = _setting select 0; - _convertedValue = switch (toUpper (_setting select 1)) do { - case "STRING": {format ['"%1"', _inputText]}; - case "ARRAY": {format [call compile "[%1]", _inputText]}; - case "SCALAR": {parseNumber _inputText;}; - default {throw "Error"}; - }; - [MENU_TAB_SERVER_VALUES, _settingName, _convertedValue] call FUNC(updateSetting); - } catch { - }; - }; + _convertedValue = switch (toUpper (_setting select 1)) do { + case "STRING": {format ['"%1"', _inputText]}; + case "ARRAY": {format [call compile "[%1]", _inputText]}; + case "SCALAR": {parseNumber _inputText;}; + default {throw "Error"}; + }; + [MENU_TAB_SERVER_VALUES, _settingName, _convertedValue] call FUNC(updateSetting); + } catch { + }; + }; [false] call FUNC(serverSettingsMenuUpdateList); }; }; diff --git a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf index 0558c81831..5713bf98e4 100644 --- a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf +++ b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf @@ -19,9 +19,9 @@ private "_settingsMenu"; disableSerialization; _settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; if (GVAR(ClientSettingsExportIncluded)) then { - (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_exClientSettings"); + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_exClientSettings"); } else { - (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_inClientSettings"); + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_inClientSettings"); }; [] call FUNC(onServerSettingsMenuOpen); From 202904f1f99683bf8df0cf65bc0c5bfa6c86e13f Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 10:32:40 +0200 Subject: [PATCH 08/15] Using 1 and 0 instead of true and false for config export --- addons/optionsmenu/functions/fnc_exportSettings.sqf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index 8718698a18..de97a9065c 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -43,7 +43,9 @@ _compiledConfig = " if (_typeName == "STRING") then { // I dont think we have string values, but just in case _value = format['"%1"', _value]; }; - + if (_typeName == "BOOL") then { + _value = if (typeOf _value == "BOOL" && {_value}) then {1} else {0}; + }; _compiledConfigEntry = format [" class %1 { value = %2; From 279641787de443142159ed0c13dcb3efa0733fe3 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 11:11:54 +0200 Subject: [PATCH 09/15] Added checks for enforce usage only in SP with settings enabled --- addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf | 2 ++ addons/optionsmenu/functions/fnc_updateSetting.sqf | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf index b419e25b32..dcdffe9b64 100644 --- a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf @@ -16,6 +16,8 @@ #include "script_component.hpp" +if (GVAR(serverConfigGeneration) == 0 || isMultiplayer) exitwith {closeDialog 145246;}; + // Filter only user setable setting GVAR(serverSideOptions) = []; GVAR(serverSideColors) = []; diff --git a/addons/optionsmenu/functions/fnc_updateSetting.sqf b/addons/optionsmenu/functions/fnc_updateSetting.sqf index d1a7825671..3fe1682614 100644 --- a/addons/optionsmenu/functions/fnc_updateSetting.sqf +++ b/addons/optionsmenu/functions/fnc_updateSetting.sqf @@ -84,7 +84,9 @@ switch (_type) do { if (_changed) then { if (GVAR(serverConfigGeneration) > 0) then { - missionNamespace setvariable [_name, _newValue]; + if !(isMultiplayer) then { + missionNamespace setvariable [_name, _newValue]; + }; } else { profileNamespace setVariable [_name, _newValue]; [_name, _newValue] call EFUNC(common,setSetting); From f1a3d588ba7eac9251e59f1d63446df7a9ee7732 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 12:38:10 +0200 Subject: [PATCH 10/15] Changed initialization order of config settings. ACE_Settings should never force any setting by default. Loading it first ensures that all settings from ACE_Settings exist. This way, ACE_ServerSettings will override ACE_Settings, even if no force is used. Mission settings will override the server config settings, if no force is used. This ensures that all settings are of their correct type, in case an outdated or corrupt server config is used, as well as have their correct localized display name and description --- addons/common/functions/fnc_loadSettingsOnServer.sqf | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/addons/common/functions/fnc_loadSettingsOnServer.sqf b/addons/common/functions/fnc_loadSettingsOnServer.sqf index 96e025cff7..9255d047b3 100644 --- a/addons/common/functions/fnc_loadSettingsOnServer.sqf +++ b/addons/common/functions/fnc_loadSettingsOnServer.sqf @@ -32,12 +32,18 @@ _parseConfigForSettings = { }; }; -// Server config -[configFile >> "ACE_ServerSettings"] call _parseConfigForSettings; +// Order is this way because: +// ACE_Settings should never force any setting by default. Loading it first ensures that all settings from ACE_Settings exist. +// This way, ACE_ServerSettings will override ACE_Settings, even if no force is used. +// Mission settings will override the server config settings, if no force is used. +// This ensures that all settings are of their correct type, in case an outdated or corrupt server config is used , as well as have their correct localized display name and description // Regular config [configFile >> "ACE_Settings"] call _parseConfigForSettings; +// Server config +[configFile >> "ACE_ServerSettings"] call _parseConfigForSettings; + // mission side settings [missionConfigFile >> "ACE_Settings"] call _parseConfigForSettings; From bae3826bdf3a9ba27f33da5373e9ab90520bdc6a Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 14:48:23 +0200 Subject: [PATCH 11/15] Polished server config export --- addons/optionsmenu/functions/fnc_exportSettings.sqf | 2 ++ .../functions/fnc_onServerSettingsMenuOpen.sqf | 5 +++++ .../functions/fnc_toggleIncludeClientSettings.sqf | 9 --------- addons/optionsmenu/stringtable.xml | 3 +++ 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/addons/optionsmenu/functions/fnc_exportSettings.sqf b/addons/optionsmenu/functions/fnc_exportSettings.sqf index de97a9065c..9ef736ac1c 100644 --- a/addons/optionsmenu/functions/fnc_exportSettings.sqf +++ b/addons/optionsmenu/functions/fnc_exportSettings.sqf @@ -57,3 +57,5 @@ class %1 { } forEach EGVAR(common,settings); copyToClipboard format["%1",_compiledConfig]; + +["STR_ACE_OptionsMenu_settingsExported"] call EFUNC(common,displayTextStructured); diff --git a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf index dcdffe9b64..7894d2ff1a 100644 --- a/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf +++ b/addons/optionsmenu/functions/fnc_onServerSettingsMenuOpen.sqf @@ -59,3 +59,8 @@ disableSerialization; _menu = uiNamespace getvariable "ACE_serverSettingsMenu"; (_menu displayCtrl 1003) ctrlEnable false; +if (GVAR(ClientSettingsExportIncluded)) then { + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_exClientSettings"); +} else { + (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_inClientSettings"); +}; diff --git a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf index 5713bf98e4..8fd52d8d72 100644 --- a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf +++ b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf @@ -15,13 +15,4 @@ GVAR(ClientSettingsExportIncluded) = !(GVAR(ClientSettingsExportIncluded)); -private "_settingsMenu"; -disableSerialization; -_settingsMenu = uiNamespace getVariable 'ACE_serverSettingsMenu'; -if (GVAR(ClientSettingsExportIncluded)) then { - (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_exClientSettings"); -} else { - (_settingsMenu displayCtrl 1102) ctrlSetText localize ("STR_ACE_OptionsMenu_inClientSettings"); -}; - [] call FUNC(onServerSettingsMenuOpen); diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 4a8c574755..76407da435 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -100,5 +100,8 @@ Exclude Client Settings + + Settings exported to clipboard + \ No newline at end of file From c514fde5d350f76740fa9df9bf8150881c4ff233 Mon Sep 17 00:00:00 2001 From: Glowbal Date: Sun, 5 Apr 2015 15:13:34 +0200 Subject: [PATCH 12/15] Not necessary here. Makes it only work once. --- addons/optionsmenu/gui/settingsMenu.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/optionsmenu/gui/settingsMenu.hpp b/addons/optionsmenu/gui/settingsMenu.hpp index d5c8eeeb84..93d35b284c 100644 --- a/addons/optionsmenu/gui/settingsMenu.hpp +++ b/addons/optionsmenu/gui/settingsMenu.hpp @@ -237,8 +237,8 @@ class ACE_settingsMenu { }; }; class ACE_serverSettingsMenu: ACE_settingsMenu { - onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', _this select 0)]; [] call FUNC(onServerSettingsMenuOpen); GVAR(serverConfigGeneration) = true;); - onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', nil)]; GVAR(serverConfigGeneration) = false;); + onLoad = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', _this select 0)]; [] call FUNC(onServerSettingsMenuOpen);); + onUnload = QUOTE(uiNamespace setVariable [ARR_2('ACE_serverSettingsMenu', nil)];); class controls: controls { class HeaderName { idc = 1; From d6632a0e45be15d5f12cc3979c075d472c665760 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 5 Apr 2015 14:08:42 -0700 Subject: [PATCH 13/15] Module should default to true. --- addons/optionsmenu/CfgVehicles.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/optionsmenu/CfgVehicles.hpp b/addons/optionsmenu/CfgVehicles.hpp index cd352782a1..2a19aa2966 100644 --- a/addons/optionsmenu/CfgVehicles.hpp +++ b/addons/optionsmenu/CfgVehicles.hpp @@ -16,7 +16,7 @@ class CfgVehicles { displayName = "Allow"; description = "Allow export of all settings to a server config formatted."; typeName = "BOOL"; - defaultValue = 0; + defaultValue = 1; }; }; class ModuleDescription { From 8422ead980029ffc9a409ada9a0fe7dac7be0715 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 5 Apr 2015 16:12:34 -0700 Subject: [PATCH 14/15] Beginning of ACE test mission; please add your feature tests, items and equipment to this mission. --- .../data/ACEMedical.jpg | Bin 0 -> 40187 bytes .../data/ACESupport.jpg | Bin 0 -> 41011 bytes .../ACE3_TestMission1.Altis/description.ext | 13 + .../ACE3_TestMission1.Altis/mission.sqm | 341 ++++++++++++++++++ 4 files changed, 354 insertions(+) create mode 100644 extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg create mode 100644 extras/missions/ACE3_TestMission1.Altis/data/ACESupport.jpg create mode 100644 extras/missions/ACE3_TestMission1.Altis/description.ext create mode 100644 extras/missions/ACE3_TestMission1.Altis/mission.sqm diff --git a/extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg b/extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d105ab638d691b13ce7084b8fac962eccdb81b1 GIT binary patch literal 40187 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

tGgdJvfBVs1Ku1ceHu+J0WY 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 literal 0 HcmV?d00001 diff --git a/extras/missions/ACE3_TestMission1.Altis/description.ext b/extras/missions/ACE3_TestMission1.Altis/description.ext new file mode 100644 index 0000000000..10db189f52 --- /dev/null +++ b/extras/missions/ACE3_TestMission1.Altis/description.ext @@ -0,0 +1,13 @@ +class CfgSettings { + class CBA { + class Caching { + compile = 0; + xeh = 0; + functions = 0; + }; + }; +}; + +respawn = INSTANT; +disabledAI = 1; +enableDebugConsole = 2; \ No newline at end of file diff --git a/extras/missions/ACE3_TestMission1.Altis/mission.sqm b/extras/missions/ACE3_TestMission1.Altis/mission.sqm new file mode 100644 index 0000000000..e616ef23a9 --- /dev/null +++ b/extras/missions/ACE3_TestMission1.Altis/mission.sqm @@ -0,0 +1,341 @@ +version=12; +class Mission +{ + addOns[]= + { + "A3_Characters_F_BLUFOR", + "a3_characters_f", + "ace_medical", + "ace_common", + "A3_Weapons_F_Ammoboxes", + "a3_map_altis", + "A3_Modules_F_Curator_Curator", + "A3_Structures_F_Civ_InfoBoards" + }; + addOnsAuto[]= + { + "A3_Characters_F_BLUFOR", + "a3_characters_f", + "A3_Modules_F_Curator_Curator", + "ace_medical", + "ace_common", + "A3_Weapons_F_Ammoboxes", + "A3_Structures_F_Civ_InfoBoards", + "a3_map_altis" + }; + randomSeed=3257567; + class Intel + { + briefingName="ACE3 Test Mission 1"; + overviewText="Mission for testing ACE3 features and assets"; + startWeather=0.29999998; + startWind=0.099999994; + startWaves=0.099999994; + forecastWeather=0.29999998; + forecastWind=0.099999994; + forecastWaves=0.099999994; + forecastLightnings=0.099999994; + windForced=1; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0.013; + forecastFogDecay=0.013; + }; + class Groups + { + items=2; + class Item0 + { + side="WEST"; + class Vehicles + { + items=1; + class Item0 + { + position[]={11572.387,23.656666,11967.611}; + id=0; + side="WEST"; + vehicle="B_Soldier_F"; + player="PLAYER COMMANDER"; + leader=1; + skill=0.60000002; + text="player1"; + }; + }; + }; + class Item1 + { + side="LOGIC"; + class Vehicles + { + items=1; + class Item0 + { + position[]={11685.394,23.211569,11905.162}; + class args + { + items=4; + class Item0 + { + value="player1"; + parentCls="ModuleCurator_F"; + typeName="Owner"; + }; + class Item1 + { + value="player1"; + parentCls="ModuleCurator_F"; + typeName="Name"; + }; + class Item2 + { + value="3"; + parentCls="ModuleCurator_F"; + typeName="Addons"; + }; + class Item3 + { + value="0"; + parentCls="ModuleCurator_F"; + typeName="Forced"; + }; + }; + id=1; + side="LOGIC"; + vehicle="ModuleCurator_F"; + leader=1; + lock="UNLOCKED"; + skill=0.60000002; + }; + }; + }; + }; + class Vehicles + { + items=15; + class Item0 + { + position[]={11581.398,23.628134,11971.563}; + id=2; + side="EMPTY"; + vehicle="ACE_medicalSupplyCrate"; + skill=0.60000002; + }; + class Item1 + { + position[]={11584.547,23.625051,11969.582}; + id=3; + side="EMPTY"; + vehicle="ACE_Box_Misc"; + skill=0.60000002; + }; + class Item2 + { + position[]={11553.112,23.704277,11957.782}; + id=4; + side="EMPTY"; + vehicle="Box_IND_Ammo_F"; + skill=0.60000002; + }; + class Item3 + { + position[]={11580.301,23.629597,11972.33}; + id=5; + side="EMPTY"; + vehicle="ACE_medicalSupplyCrate"; + skill=0.60000002; + }; + class Item4 + { + position[]={11585.534,23.626518,11968.538}; + id=6; + side="EMPTY"; + vehicle="ACE_Box_Misc"; + skill=0.60000002; + }; + class Item5 + { + position[]={11554.1,23.704872,11956.571}; + id=7; + side="EMPTY"; + vehicle="Box_IND_Ammo_F"; + skill=0.60000002; + }; + class Item6 + { + position[]={11586.564,23.621246,11970.63}; + azimut=30; + id=8; + side="EMPTY"; + vehicle="Land_Noticeboard_F"; + skill=0.60000002; + init="this setobjecttexture [0, ""data\ACESupport.jpg""]"; + }; + class Item7 + { + position[]={11582.233,23.627022,11973.266}; + azimut=30; + id=9; + side="EMPTY"; + vehicle="Land_Noticeboard_F"; + skill=0.60000002; + init="this setobjecttexture [0, ""data\ACEMedical.jpg""]"; + }; + class Item8 + { + position[]={11577.472,23.633369,11973.816}; + azimut=30; + id=10; + side="EMPTY"; + vehicle="Box_NATO_Ammo_F"; + skill=0.60000002; + }; + class Item9 + { + position[]={11575.993,23.635342,11974.693}; + azimut=30; + id=11; + side="EMPTY"; + vehicle="Box_NATO_Ammo_F"; + skill=0.60000002; + }; + class Item10 + { + position[]={11570.567,23.701523,11947.894}; + azimut=30; + id=12; + side="EMPTY"; + vehicle="Box_East_Ammo_F"; + skill=0.60000002; + }; + class Item11 + { + position[]={11568.924,23.701227,11948.827}; + azimut=30; + id=13; + side="EMPTY"; + vehicle="Box_East_Ammo_F"; + skill=0.60000002; + }; + class Item12 + { + position[]={11568.376,23.64925,11978.808}; + azimut=30; + id=14; + side="EMPTY"; + vehicle="Box_NATO_AmmoOrd_F"; + skill=0.60000002; + }; + class Item13 + { + position[]={11566.728,23.652403,11979.739}; + azimut=30; + id=15; + side="EMPTY"; + vehicle="Box_NATO_AmmoOrd_F"; + skill=0.60000002; + }; + class Item14 + { + position[]={11565.694,23.667673,11970.354}; + azimut=30; + id=16; + side="EMPTY"; + vehicle="Box_NATO_Wps_F"; + skill=0.60000002; + }; + }; +}; +class Intro +{ + addOns[]= + { + "a3_map_altis" + }; + addOnsAuto[]= + { + "a3_map_altis" + }; + randomSeed=6651123; + class Intel + { + timeOfChanges=1800.0002; + startWeather=0.30000001; + startWind=0.1; + startWaves=0.1; + forecastWeather=0.30000001; + forecastWind=0.1; + forecastWaves=0.1; + forecastLightnings=0.1; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0.013; + forecastFogDecay=0.013; + }; +}; +class OutroWin +{ + addOns[]= + { + "a3_map_altis" + }; + addOnsAuto[]= + { + "a3_map_altis" + }; + randomSeed=8399581; + class Intel + { + timeOfChanges=1800.0002; + startWeather=0.30000001; + startWind=0.1; + startWaves=0.1; + forecastWeather=0.30000001; + forecastWind=0.1; + forecastWaves=0.1; + forecastLightnings=0.1; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0.013; + forecastFogDecay=0.013; + }; +}; +class OutroLoose +{ + addOns[]= + { + "a3_map_altis" + }; + addOnsAuto[]= + { + "a3_map_altis" + }; + randomSeed=16071442; + class Intel + { + timeOfChanges=1800.0002; + startWeather=0.30000001; + startWind=0.1; + startWaves=0.1; + forecastWeather=0.30000001; + forecastWind=0.1; + forecastWaves=0.1; + forecastLightnings=0.1; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0.013; + forecastFogDecay=0.013; + }; +}; From e93e02c3ffbf87248d8471f14e7715299a80f968 Mon Sep 17 00:00:00 2001 From: jaynus Date: Sun, 5 Apr 2015 16:14:33 -0700 Subject: [PATCH 15/15] Revert "Beginning of ACE test mission; please add your feature tests, items and equipment to this mission." This reverts commit 8422ead980029ffc9a409ada9a0fe7dac7be0715. --- .../data/ACEMedical.jpg | Bin 40187 -> 0 bytes .../data/ACESupport.jpg | Bin 41011 -> 0 bytes .../ACE3_TestMission1.Altis/description.ext | 13 - .../ACE3_TestMission1.Altis/mission.sqm | 341 ------------------ 4 files changed, 354 deletions(-) delete mode 100644 extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg delete mode 100644 extras/missions/ACE3_TestMission1.Altis/data/ACESupport.jpg delete mode 100644 extras/missions/ACE3_TestMission1.Altis/description.ext delete mode 100644 extras/missions/ACE3_TestMission1.Altis/mission.sqm diff --git a/extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg b/extras/missions/ACE3_TestMission1.Altis/data/ACEMedical.jpg deleted file mode 100644 index 4d105ab638d691b13ce7084b8fac962eccdb81b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40187 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

tGgdJvfBVs1Ku1ceHu+J0WY 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 diff --git a/extras/missions/ACE3_TestMission1.Altis/description.ext b/extras/missions/ACE3_TestMission1.Altis/description.ext deleted file mode 100644 index 10db189f52..0000000000 --- a/extras/missions/ACE3_TestMission1.Altis/description.ext +++ /dev/null @@ -1,13 +0,0 @@ -class CfgSettings { - class CBA { - class Caching { - compile = 0; - xeh = 0; - functions = 0; - }; - }; -}; - -respawn = INSTANT; -disabledAI = 1; -enableDebugConsole = 2; \ No newline at end of file diff --git a/extras/missions/ACE3_TestMission1.Altis/mission.sqm b/extras/missions/ACE3_TestMission1.Altis/mission.sqm deleted file mode 100644 index e616ef23a9..0000000000 --- a/extras/missions/ACE3_TestMission1.Altis/mission.sqm +++ /dev/null @@ -1,341 +0,0 @@ -version=12; -class Mission -{ - addOns[]= - { - "A3_Characters_F_BLUFOR", - "a3_characters_f", - "ace_medical", - "ace_common", - "A3_Weapons_F_Ammoboxes", - "a3_map_altis", - "A3_Modules_F_Curator_Curator", - "A3_Structures_F_Civ_InfoBoards" - }; - addOnsAuto[]= - { - "A3_Characters_F_BLUFOR", - "a3_characters_f", - "A3_Modules_F_Curator_Curator", - "ace_medical", - "ace_common", - "A3_Weapons_F_Ammoboxes", - "A3_Structures_F_Civ_InfoBoards", - "a3_map_altis" - }; - randomSeed=3257567; - class Intel - { - briefingName="ACE3 Test Mission 1"; - overviewText="Mission for testing ACE3 features and assets"; - startWeather=0.29999998; - startWind=0.099999994; - startWaves=0.099999994; - forecastWeather=0.29999998; - forecastWind=0.099999994; - forecastWaves=0.099999994; - forecastLightnings=0.099999994; - windForced=1; - year=2035; - month=6; - day=24; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; - class Groups - { - items=2; - class Item0 - { - side="WEST"; - class Vehicles - { - items=1; - class Item0 - { - position[]={11572.387,23.656666,11967.611}; - id=0; - side="WEST"; - vehicle="B_Soldier_F"; - player="PLAYER COMMANDER"; - leader=1; - skill=0.60000002; - text="player1"; - }; - }; - }; - class Item1 - { - side="LOGIC"; - class Vehicles - { - items=1; - class Item0 - { - position[]={11685.394,23.211569,11905.162}; - class args - { - items=4; - class Item0 - { - value="player1"; - parentCls="ModuleCurator_F"; - typeName="Owner"; - }; - class Item1 - { - value="player1"; - parentCls="ModuleCurator_F"; - typeName="Name"; - }; - class Item2 - { - value="3"; - parentCls="ModuleCurator_F"; - typeName="Addons"; - }; - class Item3 - { - value="0"; - parentCls="ModuleCurator_F"; - typeName="Forced"; - }; - }; - id=1; - side="LOGIC"; - vehicle="ModuleCurator_F"; - leader=1; - lock="UNLOCKED"; - skill=0.60000002; - }; - }; - }; - }; - class Vehicles - { - items=15; - class Item0 - { - position[]={11581.398,23.628134,11971.563}; - id=2; - side="EMPTY"; - vehicle="ACE_medicalSupplyCrate"; - skill=0.60000002; - }; - class Item1 - { - position[]={11584.547,23.625051,11969.582}; - id=3; - side="EMPTY"; - vehicle="ACE_Box_Misc"; - skill=0.60000002; - }; - class Item2 - { - position[]={11553.112,23.704277,11957.782}; - id=4; - side="EMPTY"; - vehicle="Box_IND_Ammo_F"; - skill=0.60000002; - }; - class Item3 - { - position[]={11580.301,23.629597,11972.33}; - id=5; - side="EMPTY"; - vehicle="ACE_medicalSupplyCrate"; - skill=0.60000002; - }; - class Item4 - { - position[]={11585.534,23.626518,11968.538}; - id=6; - side="EMPTY"; - vehicle="ACE_Box_Misc"; - skill=0.60000002; - }; - class Item5 - { - position[]={11554.1,23.704872,11956.571}; - id=7; - side="EMPTY"; - vehicle="Box_IND_Ammo_F"; - skill=0.60000002; - }; - class Item6 - { - position[]={11586.564,23.621246,11970.63}; - azimut=30; - id=8; - side="EMPTY"; - vehicle="Land_Noticeboard_F"; - skill=0.60000002; - init="this setobjecttexture [0, ""data\ACESupport.jpg""]"; - }; - class Item7 - { - position[]={11582.233,23.627022,11973.266}; - azimut=30; - id=9; - side="EMPTY"; - vehicle="Land_Noticeboard_F"; - skill=0.60000002; - init="this setobjecttexture [0, ""data\ACEMedical.jpg""]"; - }; - class Item8 - { - position[]={11577.472,23.633369,11973.816}; - azimut=30; - id=10; - side="EMPTY"; - vehicle="Box_NATO_Ammo_F"; - skill=0.60000002; - }; - class Item9 - { - position[]={11575.993,23.635342,11974.693}; - azimut=30; - id=11; - side="EMPTY"; - vehicle="Box_NATO_Ammo_F"; - skill=0.60000002; - }; - class Item10 - { - position[]={11570.567,23.701523,11947.894}; - azimut=30; - id=12; - side="EMPTY"; - vehicle="Box_East_Ammo_F"; - skill=0.60000002; - }; - class Item11 - { - position[]={11568.924,23.701227,11948.827}; - azimut=30; - id=13; - side="EMPTY"; - vehicle="Box_East_Ammo_F"; - skill=0.60000002; - }; - class Item12 - { - position[]={11568.376,23.64925,11978.808}; - azimut=30; - id=14; - side="EMPTY"; - vehicle="Box_NATO_AmmoOrd_F"; - skill=0.60000002; - }; - class Item13 - { - position[]={11566.728,23.652403,11979.739}; - azimut=30; - id=15; - side="EMPTY"; - vehicle="Box_NATO_AmmoOrd_F"; - skill=0.60000002; - }; - class Item14 - { - position[]={11565.694,23.667673,11970.354}; - azimut=30; - id=16; - side="EMPTY"; - vehicle="Box_NATO_Wps_F"; - skill=0.60000002; - }; - }; -}; -class Intro -{ - addOns[]= - { - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=6651123; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=6; - day=24; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -}; -class OutroWin -{ - addOns[]= - { - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=8399581; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=6; - day=24; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -}; -class OutroLoose -{ - addOns[]= - { - "a3_map_altis" - }; - addOnsAuto[]= - { - "a3_map_altis" - }; - randomSeed=16071442; - class Intel - { - timeOfChanges=1800.0002; - startWeather=0.30000001; - startWind=0.1; - startWaves=0.1; - forecastWeather=0.30000001; - forecastWind=0.1; - forecastWaves=0.1; - forecastLightnings=0.1; - year=2035; - month=6; - day=24; - hour=12; - minute=0; - startFogDecay=0.013; - forecastFogDecay=0.013; - }; -};