TheDriedFinger Posted April 27, 2016 Posted April 27, 2016 I'm working on a project with another modder and was supposed to write the script to get an MCM menu working. I've made a few of these before; I should be good at it, right? Apparently not. I've looked at the whole script for hours and can't figure out what's wrong with it. I go in game and it doesn't matter how many times I save-reload or use the setstage SKI_ConfigManagerInstance 1 command or even just wait, it won't register/show up. Just to be sure that there was nothing wrong with the Quest that holds the script, I removed my MCM script and replaced it with another script with the single line "Scriptname testscript___ extends SKI_ConfigBase" and that menu registered just fine. Any help you can give me is appreciated. Here's the script: Scriptname BB_GameSettingsMCMCustomization extends SKI_ConfigBase import Game ;----------Properties---------- ; First off, you need to give a name to what your menu will be called. You do this by filling in the Property called "ModName". ; Next, you need to name the pages/tabs of your menu. I have written this script to accomodate up to 5 pages. Give the names in order from top to bottom by filling in the array property "Pages". ; When filling array properties, you hit "Add" to create the next element in the array. int Property LayoutPreset = 3 Auto ; I've coded in three layouts. ; If this is set to 1, then it will go left to right. ; If this is set to 2, then it will go top-down. ; If this is set to 3, then it will do a sort-of "centered" top-down. The default and my favorite. string[] Property Page01SettingStrings Auto string[] Property Page02SettingStrings Auto string[] Property Page03SettingStrings Auto string[] Property Page04SettingStrings Auto string[] Property Page05SettingStrings Auto ; Those are the names ("strings") of the Game Settings we're making editable. Be sure to type them correctly. ; Each set corresponds to the indicated Page. ; Note: THESE ARRAYS CAN ONLY HAVE A MAXIMUM OF 128 ELEMENTS IN EACH OF THEM. int[] Property Page01SettingType Auto int[] Property Page02SettingType Auto int[] Property Page03SettingType Auto int[] Property Page04SettingType Auto int[] Property Page05SettingType Auto ; For these "Types", 1 will mean "int", 2 will mean "float". ; Recall the order of the Game Settings you added to PageXXSettingStrings. ; For example, the 4th element of Page05SettingType is 2, this tells the script that whatever Game Setting is the 4th element of Page05SettingStrings takes a float value rather than an int. ; This is just for cleanliness. Typing 2 for everything may still work. float[] Property Page01SettingMaxValue Auto float[] Property Page02SettingMaxValue Auto float[] Property Page03SettingMaxValue Auto float[] Property Page04SettingMaxValue Auto float[] Property Page05SettingMaxValue Auto float[] Property Page01SettingMinValue Auto float[] Property Page02SettingMinValue Auto float[] Property Page03SettingMinValue Auto float[] Property Page04SettingMinValue Auto float[] Property Page05SettingMinValue Auto ; Collectively, those previous two sets of arrays give the minimum and maximum values that will appear on the MCM slider for the corresponding Game Setting. float[] Property Page01SettingIntervalValue Auto float[] Property Page02SettingIntervalValue Auto float[] Property Page03SettingIntervalValue Auto float[] Property Page04SettingIntervalValue Auto float[] Property Page05SettingIntervalValue Auto ; This sets the interval in which the MCM slider will jump for the corresponding Game Setting. ; If the setting is of type int, any setting here will be coerced to an int. int[] Property Page01SettingDecimalPlaces Auto int[] Property Page02SettingDecimalPlaces Auto int[] Property Page03SettingDecimalPlaces Auto int[] Property Page04SettingDecimalPlaces Auto int[] Property Page05SettingDecimalPlaces Auto ; Sets the number of decimal places that will be displayed in the menu if the corresponding Game Setting was identified as being a float. ; Ignored if the corresponding GameSetting is an int. string[] Property Page01SettingDescription Auto string[] Property Page02SettingDescription Auto string[] Property Page03SettingDescription Auto string[] Property Page04SettingDescription Auto string[] Property Page05SettingDescription Auto ; Here you can type the descriptions that shows up at the bottom of the MCM when you hover over the corresponding option in the MCM. ;----------End Of Properties---------- ;----------Variables---------- int[] Page01Options int[] Page02Options int[] Page03Options int[] Page04Options int[] Page05Options float[] Page01SettingValue float[] Page02SettingValue float[] Page03SettingValue float[] Page04SettingValue float[] Page05SettingValue bool InitializationComplete = false ;----------End of Variables---------- ;----------The Juicy Stuff---------- Event OnConfigInit() Page01Options = new int[128] Page02Options = new int[128] Page03Options = new int[128] Page04Options = new int[128] Page05Options = new int[128] Page01SettingValue = new float[128] Page02SettingValue = new float[128] Page03SettingValue = new float[128] Page04SettingValue = new float[128] Page05SettingValue = new float[128] int i if Page01SettingStrings != None i = 0 while i < Page01SettingStrings.length if Page01SettingType[i] == 1 Page01SettingValue[i] = GetGameSettingInt(Page01SettingStrings[i]) as float elseif Page02SettingType[i] == 2 Page01SettingValue[i] = GetGameSettingFloat(Page01SettingStrings[i]) endif i += 1 endwhile endif if Page02SettingStrings != None i = 0 while i < Page02SettingStrings.length if Page02SettingType[i] == 1 Page02SettingValue[i] = GetGameSettingInt(Page02SettingStrings[i]) as float elseif Page02SettingType[i] == 2 Page02SettingValue[i] = GetGameSettingFloat(Page02SettingStrings[i]) endif i += 1 endwhile endif if Page03SettingStrings != None i = 0 while i < Page03SettingStrings.length if Page03SettingType[i] == 1 Page03SettingValue[i] = GetGameSettingInt(Page03SettingStrings[i]) as float elseif Page03SettingType[i] == 2 Page03SettingValue[i] = GetGameSettingFloat(Page03SettingStrings[i]) endif i += 1 endwhile endif if Page04SettingStrings != None i = 0 while i < Page04SettingStrings.length if Page04SettingType[i] == 1 Page04SettingValue[i] = GetGameSettingInt(Page04SettingStrings[i]) as float elseif Page04SettingType[i] == 2 Page04SettingValue[i] = GetGameSettingFloat(Page04SettingStrings[i]) endif i += 1 endwhile endif if Page05SettingStrings != None i = 0 while i < Page05SettingStrings.length if Page05SettingType[i] == 1 Page05SettingValue[i] = GetGameSettingInt(Page05SettingStrings[i]) as float elseif Page05SettingType[i] == 2 Page05SettingValue[i] = GetGameSettingFloat(Page05SettingStrings[i]) endif i += 1 endwhile endif InitializationComplete = true endEvent Event OnGameReload() if InitializationComplete == true int i if Page01SettingStrings != None i = 0 while i < Page01SettingStrings.length if Page01SettingType[i] == 1 SetGameSettingInt(Page01SettingStrings[i], Page01SettingValue[i] as int) else SetGameSettingFloat(Page01SettingStrings[i], Page01SettingValue[i]) endif i += 1 endwhile endif if Page02SettingStrings != None i = 0 while i < Page02SettingStrings.length if Page02SettingType[i] == 1 SetGameSettingInt(Page02SettingStrings[i], Page02SettingValue[i] as int) else SetGameSettingFloat(Page02SettingStrings[i], Page02SettingValue[i]) endif i += 1 endwhile endif if Page03SettingStrings != None i = 0 while i < Page03SettingStrings.length if Page03SettingType[i] == 1 SetGameSettingInt(Page03SettingStrings[i], Page03SettingValue[i] as int) else SetGameSettingFloat(Page03SettingStrings[i], Page03SettingValue[i]) endif i += 1 endwhile endif if Page04SettingStrings != None i = 0 while i < Page04SettingStrings.length if Page04SettingType[i] == 1 SetGameSettingInt(Page04SettingStrings[i], Page04SettingValue[i] as int) else SetGameSettingFloat(Page04SettingStrings[i], Page04SettingValue[i]) endif i += 1 endwhile endif if Page05SettingStrings != None i = 0 while i < Page05SettingStrings.length if Page05SettingType[i] == 1 SetGameSettingInt(Page05SettingStrings[i], Page05SettingValue[i] as int) else SetGameSettingFloat(Page05SettingStrings[i], Page05SettingValue[i]) endif i += 1 endwhile endif endif endEvent Event OnPageReset(string page) if LayoutPreset == 1 SetCursorFillMode(LEFT_TO_RIGHT) else SetCursorFillMode(TOP_TO_BOTTOM) endif if Pages.length > 0 && page == Pages[0] if LayoutPreset == 3 SetCursorPosition(0) int i = 0 int Cutoff = Page01SettingStrings.length - ((Page01SettingStrings.length as int) / 2) while i < Page01SettingStrings.length if i == Cutoff SetCursorPosition(1) endif if Page01SettingType[i] == 1 Page01Options[i] = AddSliderOption(Page01SettingStrings[i], GetGameSettingInt(Page01SettingStrings[i]), "{0}") else Page01Options[i] = AddSliderOption(Page01SettingStrings[i], GetGameSettingFloat(Page01SettingStrings[i]), ("{" + Page01SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile else int i = 0 while i < Page01SettingStrings.length if Page01SettingType[i] == 1 Page01Options[i] = AddSliderOption(Page01SettingStrings[i], GetGameSettingInt(Page01SettingStrings[i]), "{0}") else Page01Options[i] = AddSliderOption(Page01SettingStrings[i], GetGameSettingFloat(Page01SettingStrings[i]), ("{" + Page01SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile endif elseif Pages.length > 1 && page == Pages[1] if LayoutPreset == 3 SetCursorPosition(0) int i = 0 int Cutoff = Page02SettingStrings.length - ((Page02SettingStrings.length as int) / 2) while i < Page02SettingStrings.length if i == Cutoff SetCursorPosition(1) endif if Page02SettingType[i] == 1 Page02Options[i] = AddSliderOption(Page02SettingStrings[i], GetGameSettingInt(Page02SettingStrings[i]), "{0}") else Page02Options[i] = AddSliderOption(Page02SettingStrings[i], GetGameSettingFloat(Page02SettingStrings[i]), ("{" + Page02SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile else int i = 0 while i < Page02SettingStrings.length if Page02SettingType[i] == 1 Page02Options[i] = AddSliderOption(Page02SettingStrings[i], GetGameSettingInt(Page02SettingStrings[i]), "{0}") else Page02Options[i] = AddSliderOption(Page02SettingStrings[i], GetGameSettingFloat(Page02SettingStrings[i]), ("{" + Page02SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile endif elseif Pages.length > 2 && page == Pages[2] if LayoutPreset == 3 SetCursorPosition(0) int i = 0 int Cutoff = Page03SettingStrings.length - ((Page03SettingStrings.length as int) / 2) while i < Page03SettingStrings.length if i == Cutoff SetCursorPosition(1) endif if Page03SettingType[i] == 1 Page03Options[i] = AddSliderOption(Page03SettingStrings[i], GetGameSettingInt(Page03SettingStrings[i]), "{0}") else Page03Options[i] = AddSliderOption(Page03SettingStrings[i], GetGameSettingFloat(Page03SettingStrings[i]), ("{" + Page03SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile else int i = 0 while i < Page03SettingStrings.length if Page03SettingType[i] == 1 Page03Options[i] = AddSliderOption(Page03SettingStrings[i], GetGameSettingInt(Page03SettingStrings[i]), "{0}") else Page03Options[i] = AddSliderOption(Page03SettingStrings[i], GetGameSettingFloat(Page03SettingStrings[i]), ("{" + Page03SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile endif elseif Pages.length > 3 && page == Pages[3] if LayoutPreset == 3 SetCursorPosition(0) int i = 0 int Cutoff = Page04SettingStrings.length - ((Page04SettingStrings.length as int) / 2) while i < Page04SettingStrings.length if i == Cutoff SetCursorPosition(1) endif if Page04SettingType[i] == 1 Page04Options[i] = AddSliderOption(Page04SettingStrings[i], GetGameSettingInt(Page04SettingStrings[i]), "{0}") else Page04Options[i] = AddSliderOption(Page04SettingStrings[i], GetGameSettingFloat(Page04SettingStrings[i]), ("{" + Page04SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile else int i = 0 while i < Page04SettingStrings.length if Page04SettingType[i] == 1 Page04Options[i] = AddSliderOption(Page04SettingStrings[i], GetGameSettingInt(Page04SettingStrings[i]), "{0}") else Page04Options[i] = AddSliderOption(Page04SettingStrings[i], GetGameSettingFloat(Page04SettingStrings[i]), ("{" + Page04SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile endif elseif Pages.length > 4 && page == Pages[4] if LayoutPreset == 3 SetCursorPosition(0) int i = 0 int Cutoff = Page05SettingStrings.length - ((Page05SettingStrings.length as int) / 2) while i < Page05SettingStrings.length if i == Cutoff SetCursorPosition(1) endif if Page05SettingType[i] == 1 Page05Options[i] = AddSliderOption(Page05SettingStrings[i], GetGameSettingInt(Page05SettingStrings[i]), "{0}") else Page05Options[i] = AddSliderOption(Page05SettingStrings[i], GetGameSettingFloat(Page05SettingStrings[i]), ("{" + Page05SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile else int i = 0 while i < Page05SettingStrings.length if Page05SettingType[i] == 1 Page05Options[i] = AddSliderOption(Page05SettingStrings[i], GetGameSettingInt(Page05SettingStrings[i]), "{0}") else Page05Options[i] = AddSliderOption(Page05SettingStrings[i], GetGameSettingFloat(Page05SettingStrings[i]), ("{" + Page05SettingDecimalPlaces[i] + "}")) endif i += 1 endwhile endif endif endEvent Event OnOptionSliderOpen(int option) if Pages.length > 0 && CurrentPage == Pages[0] int i = 0 while (option != Page01Options[i]) && (i < Page01SettingStrings.length) i += 1 endwhile float SettingValue = 1.0 float SettingInterval = 1.0 if Page01SettingType[i] == 1 SettingValue = GetGameSettingInt(Page01SettingStrings[i]) as float SettingInterval = Page01SettingIntervalValue[i] as int else SettingValue = GetGameSettingFloat(Page01SettingStrings[i]) SettingInterval = Page01SettingIntervalValue[i] endif SetSliderDialogStartValue(SettingValue) SetSliderDialogRange(Page01SettingMinValue[i], Page01SettingMaxValue[i]) SetSliderDialogInterval(SettingInterval) elseif Pages.length > 1 && CurrentPage == Pages[1] int i = 0 while (option != Page02Options[i]) && (i < Page02SettingStrings.length) i += 1 endwhile float SettingValue = 1.0 float SettingInterval = 1.0 if Page02SettingType[i] == 1 SettingValue = GetGameSettingInt(Page02SettingStrings[i]) as float SettingInterval = Page02SettingIntervalValue[i] as int else SettingValue = GetGameSettingFloat(Page02SettingStrings[i]) SettingInterval = Page02SettingIntervalValue[i] endif SetSliderDialogStartValue(SettingValue) SetSliderDialogRange(Page02SettingMinValue[i], Page02SettingMaxValue[i]) SetSliderDialogInterval(SettingInterval) elseif Pages.length > 2 && CurrentPage == Pages[2] int i = 0 while (option != Page03Options[i]) && (i < Page03SettingStrings.length) i += 1 endwhile float SettingValue = 1.0 float SettingInterval = 1.0 if Page03SettingType[i] == 1 SettingValue = GetGameSettingInt(Page03SettingStrings[i]) as float SettingInterval = Page03SettingIntervalValue[i] as int else SettingValue = GetGameSettingFloat(Page03SettingStrings[i]) SettingInterval = Page03SettingIntervalValue[i] endif SetSliderDialogStartValue(SettingValue) SetSliderDialogRange(Page03SettingMinValue[i], Page03SettingMaxValue[i]) SetSliderDialogInterval(SettingInterval) elseif Pages.length > 3 && CurrentPage == Pages[3] int i = 0 while (option != Page04Options[i]) && (i < Page04SettingStrings.length) i += 1 endwhile float SettingValue = 1.0 float SettingInterval = 1.0 if Page04SettingType[i] == 1 SettingValue = GetGameSettingInt(Page04SettingStrings[i]) as float SettingInterval = Page04SettingIntervalValue[i] as int else SettingValue = GetGameSettingFloat(Page04SettingStrings[i]) SettingInterval = Page04SettingIntervalValue[i] endif SetSliderDialogStartValue(SettingValue) SetSliderDialogRange(Page04SettingMinValue[i], Page04SettingMaxValue[i]) SetSliderDialogInterval(SettingInterval) elseif Pages.length > 4 && CurrentPage == Pages[4] int i = 0 while (option != Page05Options[i]) && (i < Page05SettingStrings.length) i += 1 endwhile float SettingValue = 1.0 float SettingInterval = 1.0 if Page05SettingType[i] == 1 SettingValue = GetGameSettingInt(Page05SettingStrings[i]) as float SettingInterval = Page05SettingIntervalValue[i] as int else SettingValue = GetGameSettingFloat(Page05SettingStrings[i]) SettingInterval = Page05SettingIntervalValue[i] endif SetSliderDialogStartValue(SettingValue) SetSliderDialogRange(Page05SettingMinValue[i], Page05SettingMaxValue[i]) SetSliderDialogInterval(SettingInterval) endif endEvent Event OnOptionSliderAccept(int option, float value) if Pages.length > 0 && CurrentPage == Pages[0] int i = 0 while (option != Page01Options[i]) && (i < Page01SettingStrings.length) i += 1 endwhile if Page01SettingType[i] == 1 SetGameSettingInt(Page01SettingStrings[i], value as int) SetSliderOptionValue(Page01Options[i], GetGameSettingInt(Page01SettingStrings[i]), "{0}") Page01SettingValue[i] = GetGameSettingInt(Page01SettingStrings[i]) else SetGameSettingFloat(Page01SettingStrings[i], value) SetSliderOptionValue(Page01Options[i], GetGameSettingFloat(Page01SettingStrings[i]), ("{" + Page01SettingDecimalPlaces[i] + "}")) Page01SettingValue[i] = GetGameSettingFloat(Page01SettingStrings[i]) endif elseif Pages.length > 1 && CurrentPage == Pages[1] int i = 0 while (option != Page02Options[i]) && (i < Page02SettingStrings.length) i += 1 endwhile if Page02SettingType[i] == 1 SetGameSettingInt(Page02SettingStrings[i], value as int) SetSliderOptionValue(Page02Options[i], GetGameSettingInt(Page02SettingStrings[i]), "{0}") Page02SettingValue[i] = GetGameSettingInt(Page02SettingStrings[i]) else SetGameSettingFloat(Page02SettingStrings[i], value) SetSliderOptionValue(Page02Options[i], GetGameSettingFloat(Page02SettingStrings[i]), ("{" + Page02SettingDecimalPlaces[i] + "}")) Page02SettingValue[i] = GetGameSettingFloat(Page02SettingStrings[i]) endif elseif Pages.length > 2 && CurrentPage == Pages[2] int i = 0 while (option != Page03Options[i]) && (i < Page03SettingStrings.length) i += 1 endwhile if Page03SettingType[i] == 1 SetGameSettingInt(Page03SettingStrings[i], value as int) SetSliderOptionValue(Page03Options[i], GetGameSettingInt(Page03SettingStrings[i]), "{0}") Page03SettingValue[i] = GetGameSettingInt(Page03SettingStrings[i]) else SetGameSettingFloat(Page03SettingStrings[i], value) SetSliderOptionValue(Page03Options[i], GetGameSettingFloat(Page03SettingStrings[i]), ("{" + Page03SettingDecimalPlaces[i] + "}")) Page03SettingValue[i] = GetGameSettingFloat(Page03SettingStrings[i]) endif elseif Pages.length > 3 && CurrentPage == Pages[3] int i = 0 while (option != Page04Options[i]) && (i < Page04SettingStrings.length) i += 1 endwhile if Page04SettingType[i] == 1 SetGameSettingInt(Page04SettingStrings[i], value as int) SetSliderOptionValue(Page04Options[i], GetGameSettingInt(Page04SettingStrings[i]), "{0}") Page04SettingValue[i] = GetGameSettingInt(Page04SettingStrings[i]) else SetGameSettingFloat(Page04SettingStrings[i], value) SetSliderOptionValue(Page04Options[i], GetGameSettingFloat(Page04SettingStrings[i]), ("{" + Page04SettingDecimalPlaces[i] + "}")) Page04SettingValue[i] = GetGameSettingFloat(Page04SettingStrings[i]) endif elseif Pages.length > 4 && CurrentPage == Pages[4] int i = 0 while (option != Page05Options[i]) && (i < Page05SettingStrings.length) i += 1 endwhile if Page05SettingType[i] == 1 SetGameSettingInt(Page05SettingStrings[i], value as int) SetSliderOptionValue(Page05Options[i], GetGameSettingInt(Page05SettingStrings[i]), "{0}") Page05SettingValue[i] = GetGameSettingInt(Page05SettingStrings[i]) else SetGameSettingFloat(Page05SettingStrings[i], value) SetSliderOptionValue(Page05Options[i], GetGameSettingFloat(Page05SettingStrings[i]), ("{" + Page05SettingDecimalPlaces[i] + "}")) Page05SettingValue[i] = GetGameSettingFloat(Page05SettingStrings[i]) endif endif endEvent Event OnOptionHighlight(int option) if Pages.length > 0 && CurrentPage == Pages[0] int i = 0 while (option !=Page01Options[i]) && (i < Page01SettingStrings.length) i += 1 endwhile SetInfoText(Page01SettingDescription[i]) elseif Pages.length > 1 && CurrentPage == Pages[1] int i = 0 while (option !=Page02Options[i]) && (i < Page02SettingStrings.length) i += 1 endwhile SetInfoText(Page02SettingDescription[i]) elseif Pages.length > 2 && CurrentPage == Pages[2] int i = 0 while (option !=Page03Options[i]) && (i < Page03SettingStrings.length) i += 1 endwhile SetInfoText(Page03SettingDescription[i]) elseif Pages.length > 3 && CurrentPage == Pages[3] int i = 0 while (option !=Page04Options[i]) && (i < Page04SettingStrings.length) i += 1 endwhile SetInfoText(Page04SettingDescription[i]) elseif Pages.length > 4 && CurrentPage == Pages[4] int i = 0 while (option !=Page05Options[i]) && (i < Page05SettingStrings.length) i += 1 endwhile SetInfoText(Page05SettingDescription[i]) endif endEvent ;----------End Of The Juicy Stuff---------- That's really hard to read because of no indents, so I've attached the script source. Thank you for any help you can give me. Tick_GameSettingsMCMCustomization.psc
WraithSlayer Posted April 27, 2016 Posted April 27, 2016 I coldn't find anything wrong with the script itself. Assuming it's not something silly like forgetting to fill the script's ModName property, all I can guess is the script is getting trapped somewhere in OnConfigInit(), you do have a lot of While cycles in there. I'd suggest putting a debug line at the start and end of this function to figure out if it's the one causing the issue.
TheDriedFinger Posted April 27, 2016 Author Posted April 27, 2016 Do you mind clarifying to me what parts of the script get run prior to the menu being registered successfully? Is it just the OnConfigInit?
TheDriedFinger Posted April 27, 2016 Author Posted April 27, 2016 I got it to work, and it was really dumb of me. From the MCM wiki: OnGameReloadThere are certain settings you might want to apply after each game reload, for example scripted INI changes or other modifications that persist in memory. To do this, extend OnGameReload of SKI_ConfigBase. Be aware that this is not part of the base API, so you'll be responsible for calling parent.OnGameReload(). Not doing that will break the menu. event OnGameReload()parent.OnGameReload() ; Don't forget to call the parent!Utility.SetINIFloat("someSetting", someValue)endEvent
Recommended Posts
Archived
This topic is now archived and is closed to further replies.