scriptname SKI_SettingsManager extends SKI_QuestBase ; CONSTANTS --------------------------------------------------------------------------------------- string property MENU_ROOT = "_global.skyui.util.ConfigManager" autoReadonly string property INVENTORY_MENU = "InventoryMenu" autoReadonly string property MAGIC_MENU = "MagicMenu" autoReadonly string property CONTAINER_MENU = "ContainerMenu" autoReadonly string property BARTER_MENU = "BarterMenu" autoReadonly string property GIFT_MENU = "GiftMenu" autoReadonly string property CRAFTING_MENU = "Crafting Menu" autoReadonly ; PRIVATE VARIABLES ------------------------------------------------------------------------------- int _overrideCount = 0 string[] _overrideKeys string[] _overrideValues string _currentMenu ; INITIALIZATION ---------------------------------------------------------------------------------- event OnInit() _overrideKeys = new string[128] _overrideValues = new string[128] int i = 0 while (i<128) _overrideKeys[i] = "" _overrideValues[i] = "" i += 1 endWhile OnGameReload() endEvent ; @implements SKI_QuestBase event OnGameReload() RegisterForMenu(INVENTORY_MENU) RegisterForMenu(MAGIC_MENU) RegisterForMenu(CONTAINER_MENU) RegisterForMenu(BARTER_MENU) RegisterForMenu(GIFT_MENU) RegisterForMenu(CRAFTING_MENU) RegisterForModEvent("SKICO_setConfigOverride", "OnSetConfigOverride") endEvent ; EVENTS ------------------------------------------------------------------------------------------ event OnMenuOpen(string a_menuName) GotoState("LOCKED") ; Check if it's still open if (UI.IsMenuOpen(a_menuName)) _currentMenu = a_menuName UI.InvokeStringA(a_menuName, MENU_ROOT + ".setExternalOverrideKeys", _overrideKeys) UI.InvokeStringA(a_menuName, MENU_ROOT + ".setExternalOverrideValues", _overrideValues) endIf GotoState("") endEvent event OnSetConfigOverride(string a_eventName, string a_strArg, float a_numArg, Form a_sender) string overrideKey = a_strArg string overrideValue = UI.GetString(_currentMenu, MENU_ROOT + ".out_overrides." + overrideKey) SetOverride(overrideKey, overrideValue) endEvent ; ---------------------------------------------- state LOCKED event OnMenuOpen(string a_menuName) endEvent endState ; FUNCTIONS --------------------------------------------------------------------------------------- ; @interface bool function SetOverride(string a_key, string a_value) if (a_key == "") return false endIf ; Existing override? int index = _overrideKeys.Find(a_key) if (index != -1) _overrideValues[index] = a_value return true ; New override else if (_overrideCount >= 128) return false endIf index = NextFreeIndex() if (index == -1) return false endIf _overrideKeys[index] = a_key _overrideValues[index] = a_value _overrideCount += 1 return true endIf endFunction ; @interface bool function ClearOverride(string a_key) if (a_key == "") return false endIf int index = _overrideKeys.Find(a_key) if (index == -1) return false endIf _overrideKeys[index] = "" _overrideValues[index] = "" _overrideCount -= 1 return true endFunction int function NextFreeIndex() int i = 0 while (i < _overrideKeys.length) if (_overrideKeys[i] == "") return i endIf i += 1 endWhile return -1 endFunction