using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using ConfigurationManager.Utilities; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.6.2")] [assembly: AssemblyInformationalVersion("0.6.2+15800b8921c0b0a42fdf249a3fdb361ec6a4f358")] [assembly: AssemblyVersion("0.6.2.0")] namespace ConfigurationManager { [BepInPlugin("aedenthorn.ConfigurationManager", "Valheim Configuration Manager", "0.6.2")] public class BepInExPlugin : BaseUnityPlugin { public sealed class PluginSettingsData { public sealed class PluginSettingsGroupData { public string Name; public List Settings; } public BepInPlugin Info; public List Categories; public bool _collapsed; public bool Collapsed { get { return _collapsed; } set { _collapsed = value; Height = 0; } } public int Height { get; set; } } public const string GUID = "aedenthorn.ConfigurationManager"; public static bool isDebug = true; public static BepInExPlugin context; public static ManualLogSource Logger; public static SettingFieldDrawer _fieldDrawer; public const int WindowId = -68; public const string SearchBoxName = "searchBox"; public bool _focusSearchBox; public string _searchString = string.Empty; public bool OverrideHotkey; public bool _displayingWindow; public bool _obsoleteCursor; public string _modsWithoutSettings; public List _allSettings; public List _filteredSetings = new List(); public Rect _screenRect; public Rect currentWindowRect; public Vector2 _settingWindowScrollPos; public int _tipsHeight; public bool _showDebug; public PropertyInfo _curLockState; public PropertyInfo _curVisible; public int _previousCursorLockState; public bool _previousCursorVisible; public static ConfigEntry _showAdvanced; public static ConfigEntry _showKeybinds; public static ConfigEntry _showSettings; public static ConfigEntry _showMenuButton; public static ConfigEntry _keybind; public static ConfigEntry _hideSingleSection; public static ConfigEntry _pluginConfigCollapsedDefault; public static ConfigEntry _windowPosition; public static ConfigEntry _windowSize; public static ConfigEntry _windowTitle; public static ConfigEntry _normalText; public static ConfigEntry _shortcutsText; public static ConfigEntry _advancedText; public static ConfigEntry _searchText; public static ConfigEntry _reloadText; public static ConfigEntry _resetText; public static ConfigEntry _resetSettingText; public static ConfigEntry _expandText; public static ConfigEntry _collapseText; public static ConfigEntry _tipText; public static ConfigEntry _clearText; public static ConfigEntry _openMenuText; public static ConfigEntry _textSize; public static ConfigEntry _windowBackgroundColor; public static ConfigEntry _entryBackgroundColor; public static ConfigEntry _fontColor; public static ConfigEntry _widgetBackgroundColor; public static ConfigEntry nexusID; public static GUIStyle windowStyle; public static GUIStyle headerStyle; public static GUIStyle entryStyle; public static GUIStyle labelStyle; public static GUIStyle textStyle; public static GUIStyle toggleStyle; public static GUIStyle buttonStyle; public static GUIStyle boxStyle; public static GUIStyle sliderStyle; public static GUIStyle thumbStyle; public static GUIStyle categoryHeaderSkin; public static GUIStyle pluginHeaderSkin; public static int fontSize = 14; public const float MinWindowWidth = 600f; public const float MinWindowHeight = 480f; public const float PreferredWindowWidth = 650f; public const float PreferredWindowHeight = 800f; public Rect DefaultWindowRect { get; set; } public static Texture2D WindowBackground { get; set; } public static Texture2D EntryBackground { get; set; } public static Texture2D WidgetBackground { get; set; } public int LeftColumnWidth { get; set; } public int RightColumnWidth { get; set; } public bool DisplayingWindow { get { return _displayingWindow; } set { if (_displayingWindow == value) { return; } _displayingWindow = value; SettingFieldDrawer.ClearCache(); if (_displayingWindow) { CalculateDefaultWindowRect(); EnsureUsableWindowRect(); BuildSettingList(); _focusSearchBox = true; if (_curLockState != null) { _previousCursorLockState = (_obsoleteCursor ? Convert.ToInt32((bool)_curLockState.GetValue(null, null)) : ((int)_curLockState.GetValue(null, null))); _previousCursorVisible = (bool)_curVisible.GetValue(null, null); } } else if (!_previousCursorVisible || _previousCursorLockState != 0) { SetUnlockCursor(_previousCursorLockState, _previousCursorVisible); } this.DisplayingWindowChanged?.Invoke(this, new ValueChangedEventArgs(value)); } } public string SearchString { get { return _searchString; } set { if (value == null) { value = string.Empty; } if (!(_searchString == value)) { _searchString = value; BuildFilteredSettingList(); } } } public event EventHandler> DisplayingWindowChanged; public static void Dbgl(string str = "", bool pref = true) { if (isDebug) { Debug.Log((object)((pref ? (typeof(BepInExPlugin).Namespace + " ") : "") + str)); } } public BepInExPlugin() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Expected O, but got Unknown //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Expected O, but got Unknown //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Expected O, but got Unknown //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Expected O, but got Unknown //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Expected O, but got Unknown //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Expected O, but got Unknown //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Expected O, but got Unknown //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Expected O, but got Unknown //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Expected O, but got Unknown //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Expected O, but got Unknown //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Expected O, but got Unknown //IL_033b: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Expected O, but got Unknown //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Expected O, but got Unknown //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Expected O, but got Unknown //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Expected O, but got Unknown //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_04ac: Unknown result type (might be due to invalid IL or missing references) //IL_04e4: Unknown result type (might be due to invalid IL or missing references) //IL_051c: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_0540: Unknown result type (might be due to invalid IL or missing references) //IL_0545: Unknown result type (might be due to invalid IL or missing references) //IL_054a: Unknown result type (might be due to invalid IL or missing references) context = this; Logger = ((BaseUnityPlugin)this).Logger; CalculateDefaultWindowRect(); _fieldDrawer = new SettingFieldDrawer(this); _keybind = ((BaseUnityPlugin)this).Config.Bind("General", "Show config manager", new KeyboardShortcut((KeyCode)282, Array.Empty()), new ConfigDescription("The shortcut used to toggle the config manager window on and off.\nThe key can be overridden by a game-specific plugin if necessary, in that case this setting is ignored.", (AcceptableValueBase)null, Array.Empty())); nexusID = ((BaseUnityPlugin)this).Config.Bind("General", "NexusID", 740, "Nexus mod ID for updates"); _showAdvanced = ((BaseUnityPlugin)this).Config.Bind("Filtering", "Show advanced", true, (ConfigDescription)null); _showKeybinds = ((BaseUnityPlugin)this).Config.Bind("Filtering", "Show keybinds", true, (ConfigDescription)null); _showSettings = ((BaseUnityPlugin)this).Config.Bind("Filtering", "Show settings", true, (ConfigDescription)null); _hideSingleSection = ((BaseUnityPlugin)this).Config.Bind("General", "Hide single sections", false, new ConfigDescription("Show section title for plugins with only one section", (AcceptableValueBase)null, Array.Empty())); _showMenuButton = ((BaseUnityPlugin)this).Config.Bind("General", "Show Menu Button", true, new ConfigDescription("Show the menu button on the start menu", (AcceptableValueBase)null, Array.Empty())); _windowTitle = ((BaseUnityPlugin)this).Config.Bind("Text", "WindowTitle", "Configuration Manager", new ConfigDescription("Window title text", (AcceptableValueBase)null, Array.Empty())); _normalText = ((BaseUnityPlugin)this).Config.Bind("Text", "NormalText", "Normal", new ConfigDescription("Normal settings toggle text", (AcceptableValueBase)null, Array.Empty())); _shortcutsText = ((BaseUnityPlugin)this).Config.Bind("Text", "ShortcutsText", "Keybinds", new ConfigDescription("Shortcut key settings toggle text", (AcceptableValueBase)null, Array.Empty())); _advancedText = ((BaseUnityPlugin)this).Config.Bind("Text", "AdvancedText", "Advanced", new ConfigDescription("Advanced settings toggle text", (AcceptableValueBase)null, Array.Empty())); _searchText = ((BaseUnityPlugin)this).Config.Bind("Text", "SearchText", "Search Settings: ", new ConfigDescription("Search label text", (AcceptableValueBase)null, Array.Empty())); _reloadText = ((BaseUnityPlugin)this).Config.Bind("Text", "ReloadText", "Reload From File", new ConfigDescription("Reload mod config from file text", (AcceptableValueBase)null, Array.Empty())); _resetText = ((BaseUnityPlugin)this).Config.Bind("Text", "ResetText", "Reset To Default", new ConfigDescription("Reset mod config to default text", (AcceptableValueBase)null, Array.Empty())); _resetSettingText = ((BaseUnityPlugin)this).Config.Bind("Text", "ResetSettingText", "Reset", new ConfigDescription("Reset setting text", (AcceptableValueBase)null, Array.Empty())); _expandText = ((BaseUnityPlugin)this).Config.Bind("Text", "ExpandText", "Expand", new ConfigDescription("Expand button text", (AcceptableValueBase)null, Array.Empty())); _collapseText = ((BaseUnityPlugin)this).Config.Bind("Text", "CollapseText", "Collapse", new ConfigDescription("Collapse button text", (AcceptableValueBase)null, Array.Empty())); _tipText = ((BaseUnityPlugin)this).Config.Bind("Text", "TipText", "Tip: Click plugin names to expand. Hover over setting names to see their descriptions.", new ConfigDescription("Tip text", (AcceptableValueBase)null, Array.Empty())); _clearText = ((BaseUnityPlugin)this).Config.Bind("Text", "ClearText", "Clear", new ConfigDescription("Clear search text", (AcceptableValueBase)null, Array.Empty())); _openMenuText = ((BaseUnityPlugin)this).Config.Bind("Text", "OpenMenuText", "Open Config Menu", new ConfigDescription("Open Menu Button text", (AcceptableValueBase)null, Array.Empty())); _pluginConfigCollapsedDefault = ((BaseUnityPlugin)this).Config.Bind("General", "Plugin collapsed default", true, new ConfigDescription("If set to true plugins will be collapsed when opening the configuration manager window", (AcceptableValueBase)null, Array.Empty())); _windowPosition = ((BaseUnityPlugin)this).Config.Bind("General", "WindowPosition", new Vector2(55f, 35f), "Window position"); _windowSize = ((BaseUnityPlugin)this).Config.Bind("General", "WindowSize", new Vector2(650f, 800f), "Window size"); _textSize = ((BaseUnityPlugin)this).Config.Bind("General", "FontSize", 14, "Font Size"); _windowBackgroundColor = ((BaseUnityPlugin)this).Config.Bind("Colors", "WindowBackgroundColor", new Color(0f, 0f, 0f, 1f), "Window background color"); _entryBackgroundColor = ((BaseUnityPlugin)this).Config.Bind("Colors", "EntryBackgroundColor", new Color(0.557f, 0.502f, 0.502f, 0.871f), "Entry background color"); _fontColor = ((BaseUnityPlugin)this).Config.Bind("Colors", "FontColor", new Color(1f, 0.714f, 0.361f, 1f), "Font color"); _widgetBackgroundColor = ((BaseUnityPlugin)this).Config.Bind("Colors", "WidgetColor", new Color(0.882f, 0.463f, 0f, 0.749f), "Widget color"); currentWindowRect = new Rect(_windowPosition.Value, _windowSize.Value); EnsureUsableWindowRect(); Patches.ApplyPatches(); } public void OnGUI() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Invalid comparison between Unknown and I4 //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) if (!DisplayingWindow) { return; } if ((int)Event.current.type == 5) { KeyCode keyCode = Event.current.keyCode; KeyboardShortcut value = _keybind.Value; if (keyCode == ((KeyboardShortcut)(ref value)).MainKey) { DisplayingWindow = false; return; } } if (_textSize.Value > 9 && _textSize.Value < 100) { fontSize = Mathf.Clamp(_textSize.Value, 10, 30); } CreateBackgrounds(); CreateStyles(); SetUnlockCursor(0, cursorVisible: true); GUI.Box(currentWindowRect, GUIContent.none, new GUIStyle()); GUI.backgroundColor = _windowBackgroundColor.Value; EnsureUsableWindowRect(); ((Rect)(ref currentWindowRect)).size = _windowSize.Value; RightColumnWidth = Mathf.RoundToInt(((Rect)(ref currentWindowRect)).width / 2.5f * (float)fontSize / 12f); LeftColumnWidth = Mathf.RoundToInt(((Rect)(ref currentWindowRect)).width - (float)RightColumnWidth - 115f); currentWindowRect = GUILayout.Window(-68, currentWindowRect, new WindowFunction(SettingsWindow), _windowTitle.Value, windowStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(((Rect)(ref currentWindowRect)).width), GUILayout.Height(((Rect)(ref currentWindowRect)).height) }); ((Rect)(ref currentWindowRect)).size = _windowSize.Value; if (!SettingFieldDrawer.SettingKeyboardShortcut) { Input.ResetInputAxes(); } if (!Input.GetKey((KeyCode)323)) { bool flag = false; if (((Rect)(ref currentWindowRect)).x != _windowPosition.Value.x || ((Rect)(ref currentWindowRect)).y != _windowPosition.Value.y) { _windowPosition.Value = ((Rect)(ref currentWindowRect)).position; flag = true; } if (flag) { ((BaseUnityPlugin)this).Config.Save(); } } } public void SettingsWindow(int id) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Invalid comparison between Unknown and I4 //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Invalid comparison between Unknown and I4 //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref currentWindowRect)).width, 20f)); DrawWindowHeader(); _settingWindowScrollPos = GUILayout.BeginScrollView(_settingWindowScrollPos, false, true, Array.Empty()); float y = _settingWindowScrollPos.y; float height = ((Rect)(ref currentWindowRect)).height; GUILayout.BeginVertical(Array.Empty()); Rect lastRect; if (string.IsNullOrEmpty(SearchString)) { DrawTips(); if (_tipsHeight == 0 && (int)Event.current.type == 7) { lastRect = GUILayoutUtility.GetLastRect(); _tipsHeight = (int)((Rect)(ref lastRect)).height; } } int num = _tipsHeight; foreach (PluginSettingsData filteredSeting in _filteredSetings) { if (filteredSeting.Height == 0 || ((float)(num + filteredSeting.Height) >= y && (float)num <= y + height)) { try { DrawSinglePlugin(filteredSeting); } catch (ArgumentException) { } if (filteredSeting.Height == 0 && (int)Event.current.type == 7) { lastRect = GUILayoutUtility.GetLastRect(); filteredSeting.Height = (int)((Rect)(ref lastRect)).height; } } else { try { GUILayout.Space((float)filteredSeting.Height); } catch (ArgumentException) { } } num += filteredSeting.Height; } if (_showDebug) { GUILayout.Space(10f); GUILayout.Label("Plugins with no options available: " + _modsWithoutSettings, labelStyle, Array.Empty()); } else { GUILayout.Space(70f); } GUILayout.EndVertical(); GUILayout.EndScrollView(); if (!SettingFieldDrawer.DrawCurrentDropdown()) { DrawTooltip(currentWindowRect); } } public void DrawTips() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label(_tipText.Value, labelStyle, Array.Empty()); GUILayout.FlexibleSpace(); Color backgroundColor = GUI.backgroundColor; GUI.backgroundColor = _widgetBackgroundColor.Value; if (GUILayout.Button(_pluginConfigCollapsedDefault.Value ? _expandText.Value : _collapseText.Value, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) { bool flag = !_pluginConfigCollapsedDefault.Value; _pluginConfigCollapsedDefault.Value = flag; foreach (PluginSettingsData filteredSeting in _filteredSetings) { filteredSeting.Collapsed = flag; } } GUI.backgroundColor = backgroundColor; GUILayout.EndHorizontal(); } public void DrawWindowHeader() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) GUI.backgroundColor = _entryBackgroundColor.Value; GUILayout.BeginHorizontal(Array.Empty()); GUI.enabled = SearchString == string.Empty; bool flag = GUILayout.Toggle(_showSettings.Value, _normalText.Value, toggleStyle, Array.Empty()); if (_showSettings.Value != flag) { _showSettings.Value = flag; BuildFilteredSettingList(); } flag = GUILayout.Toggle(_showKeybinds.Value, _shortcutsText.Value, toggleStyle, Array.Empty()); if (_showKeybinds.Value != flag) { _showKeybinds.Value = flag; BuildFilteredSettingList(); } flag = GUILayout.Toggle(_showAdvanced.Value, _advancedText.Value, toggleStyle, Array.Empty()); if (_showAdvanced.Value != flag) { _showAdvanced.Value = flag; BuildFilteredSettingList(); } GUI.enabled = true; flag = GUILayout.Toggle(_showDebug, "Debug mode", toggleStyle, Array.Empty()); if (_showDebug != flag) { _showDebug = flag; BuildSettingList(); } if (GUILayout.Button("Log", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) { try { Utils.OpenLog(); } catch (SystemException ex) { Logger.Log((LogLevel)10, (object)ex.Message); } } if (GUILayout.Button("Close", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) { DisplayingWindow = false; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label(_searchText.Value, labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); GUI.SetNextControlName("searchBox"); SearchString = GUILayout.TextField(SearchString, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }); if (_focusSearchBox) { GUI.FocusWindow(-68); GUI.FocusControl("searchBox"); _focusSearchBox = false; } Color backgroundColor = GUI.backgroundColor; GUI.backgroundColor = _widgetBackgroundColor.Value; if (GUILayout.Button(_clearText.Value, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) })) { SearchString = string.Empty; } GUI.backgroundColor = backgroundColor; GUILayout.EndHorizontal(); } public void DrawSinglePlugin(PluginSettingsData plugin) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Expected O, but got Unknown //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) GUIStyle val = new GUIStyle(GUI.skin.box); val.normal.textColor = _fontColor.Value; val.normal.background = EntryBackground; val.fontSize = fontSize; GUI.backgroundColor = _entryBackgroundColor.Value; GUILayout.BeginVertical(val, Array.Empty()); GUIContent val2 = (_showDebug ? new GUIContent(plugin.Info.Name.TrimStart(new char[1] { '!' }) + " " + plugin.Info.Version, "GUID: " + plugin.Info.GUID) : new GUIContent(plugin.Info.Name.TrimStart(new char[1] { '!' }) + " " + plugin.Info.Version)); bool flag = !string.IsNullOrEmpty(SearchString); if (SettingFieldDrawer.DrawPluginHeader(val2, plugin.Collapsed && !flag) && !flag) { plugin.Collapsed = !plugin.Collapsed; } if (flag || !plugin.Collapsed) { foreach (PluginSettingsData.PluginSettingsGroupData category in plugin.Categories) { if (!string.IsNullOrEmpty(category.Name) && (plugin.Categories.Count > 1 || !_hideSingleSection.Value)) { SettingFieldDrawer.DrawCategoryHeader(category.Name); } foreach (SettingEntryBase setting in category.Settings) { DrawSingleSetting(setting); GUILayout.Space(2f); } } GUILayout.BeginHorizontal(Array.Empty()); Color backgroundColor = GUI.backgroundColor; GUI.backgroundColor = _widgetBackgroundColor.Value; if (GUILayout.Button(_reloadText.Value, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { using (List.Enumerator enumerator = plugin.Categories.GetEnumerator()) { if (enumerator.MoveNext()) { using List.Enumerator enumerator2 = enumerator.Current.Settings.GetEnumerator(); if (enumerator2.MoveNext()) { enumerator2.Current.PluginInstance.Config.Reload(); } } } BuildFilteredSettingList(); } if (GUILayout.Button(_resetText.Value, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) })) { foreach (PluginSettingsData.PluginSettingsGroupData category2 in plugin.Categories) { foreach (SettingEntryBase setting2 in category2.Settings) { setting2.Set(setting2.DefaultValue); } } BuildFilteredSettingList(); } GUI.backgroundColor = backgroundColor; GUILayout.EndHorizontal(); } GUILayout.EndVertical(); } public void DrawSingleSetting(SettingEntryBase setting) { GUILayout.BeginHorizontal(Array.Empty()); try { DrawSettingName(setting); _fieldDrawer.DrawSettingValue(setting); DrawDefaultButton(setting); } catch (Exception arg) { Logger.Log((LogLevel)2, (object)$"Failed to draw setting {setting.DispName} - {arg}"); GUILayout.Label("Failed to draw this field, check log for details.", labelStyle, Array.Empty()); } GUILayout.EndHorizontal(); } public void DrawSettingName(SettingEntryBase setting) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown if (!setting.HideSettingName) { GUILayout.Label(new GUIContent(setting.DispName.TrimStart(new char[1] { '!' }), setting.Description), labelStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width((float)LeftColumnWidth), GUILayout.MaxWidth((float)LeftColumnWidth) }); } } public static void DrawDefaultButton(SettingEntryBase setting) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (setting.HideDefaultButton) { return; } GUI.backgroundColor = _widgetBackgroundColor.Value; if (setting.DefaultValue != null) { if (DrawDefaultButton()) { setting.Set(setting.DefaultValue); } } else if (setting.SettingType.IsClass && DrawDefaultButton()) { setting.Set(null); } static bool DrawDefaultButton() { GUILayout.Space(5f); return GUILayout.Button(_resetSettingText.Value, buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(false) }); } } public static void RegisterCustomSettingDrawer(Type settingType, Action onGuiDrawer) { if (settingType == null) { throw new ArgumentNullException("settingType"); } if (onGuiDrawer == null) { throw new ArgumentNullException("onGuiDrawer"); } if (SettingFieldDrawer.SettingDrawHandlers.ContainsKey(settingType)) { Logger.LogWarning((object)("Tried to add a setting drawer for type " + settingType.FullName + " while one already exists.")); } else { SettingFieldDrawer.SettingDrawHandlers[settingType] = onGuiDrawer; } } public void BuildSettingList() { SettingSearcher.CollectSettings(out var results, out var modsWithoutSettings, _showDebug); _modsWithoutSettings = string.Join(", ", (from x in modsWithoutSettings select x.TrimStart(new char[1] { '!' }) into x orderby x select x).ToArray()); _allSettings = results.ToList(); BuildFilteredSettingList(); } public void BuildFilteredSettingList() { IEnumerable source = _allSettings; string[] searchStrings = SearchString.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (searchStrings.Length != 0) { source = source.Where((SettingEntryBase x) => ContainsSearchString(x, searchStrings)); } else { if (!_showAdvanced.Value) { source = source.Where((SettingEntryBase x) => x.IsAdvanced != true); } if (!_showKeybinds.Value) { source = source.Where((SettingEntryBase x) => !IsKeyboardShortcut(x)); } if (!_showSettings.Value) { source = source.Where((SettingEntryBase x) => x.IsAdvanced == true || IsKeyboardShortcut(x)); } } bool settingsAreCollapsed = _pluginConfigCollapsedDefault.Value; HashSet nonDefaultCollpasingStateByPluginName = new HashSet(); foreach (PluginSettingsData filteredSeting in _filteredSetings) { if (filteredSeting.Collapsed != settingsAreCollapsed) { nonDefaultCollpasingStateByPluginName.Add(filteredSeting.Info.Name); } } _filteredSetings = (from x in (from x in source group x by x.PluginInfo).Select(delegate(IGrouping pluginSettings) { IEnumerable source2 = from x in pluginSettings.GroupBy(GetCategory) orderby string.Equals(x.Key, "Keyboard shortcuts", StringComparison.Ordinal), x.Key select new PluginSettingsData.PluginSettingsGroupData { Name = x.Key, Settings = (from set in x orderby set.Order descending, set.DispName select set).ToList() }; return new PluginSettingsData { Info = pluginSettings.Key, Categories = source2.ToList(), Collapsed = (nonDefaultCollpasingStateByPluginName.Contains(pluginSettings.Key.Name) ? (!settingsAreCollapsed) : settingsAreCollapsed) }; }) orderby x.Info.Name select x).ToList(); static string GetCategory(SettingEntryBase eb) { return eb.Category; } } public static bool IsKeyboardShortcut(SettingEntryBase x) { return x.SettingType == typeof(KeyboardShortcut); } public static bool ContainsSearchString(SettingEntryBase setting, string[] searchStrings) { string combinedSearchTarget = setting.PluginInfo.Name + "\n" + setting.PluginInfo.GUID + "\n" + setting.DispName + "\n" + setting.Category + "\n" + setting.Description + "\n" + setting.DefaultValue?.ToString() + "\n" + setting.Get(); return searchStrings.All((string s) => combinedSearchTarget.IndexOf(s, StringComparison.InvariantCultureIgnoreCase) >= 0); } public void CalculateDefaultWindowRect() { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) float num = ((Screen.width > 100) ? ((float)Screen.width) : 1920f); float num2 = ((Screen.height > 100) ? ((float)Screen.height) : 1080f); float num3 = Mathf.Clamp(650f, 600f, Mathf.Max(600f, num - 40f)); float num4 = Mathf.Clamp(800f, 480f, Mathf.Max(480f, num2 - 40f)); int num5 = Mathf.RoundToInt((num - num3) / 2f); int num6 = Mathf.RoundToInt((num2 - num4) / 2f); DefaultWindowRect = new Rect((float)num5, (float)num6, num3, num4); _screenRect = new Rect(0f, 0f, num, num2); Rect defaultWindowRect = DefaultWindowRect; LeftColumnWidth = Mathf.RoundToInt(((Rect)(ref defaultWindowRect)).width / 2.5f); defaultWindowRect = DefaultWindowRect; RightColumnWidth = (int)((Rect)(ref defaultWindowRect)).width - LeftColumnWidth - 115; } public void EnsureUsableWindowRect() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) CalculateDefaultWindowRect(); Vector2 val = _windowSize.Value; bool flag = false; if (val.x < 600f || val.y < 480f) { Rect defaultWindowRect = DefaultWindowRect; val = ((Rect)(ref defaultWindowRect)).size; flag = true; } float width = ((Rect)(ref _screenRect)).width; float height = ((Rect)(ref _screenRect)).height; float num = Mathf.Max(600f, width - 40f); float num2 = Mathf.Max(480f, height - 40f); float num3 = Mathf.Min(val.x, num); float num4 = Mathf.Min(val.y, num2); if (num3 != val.x || num4 != val.y) { val.x = num3; val.y = num4; flag = true; } if (flag) { _windowSize.Value = val; } Vector2 value = _windowPosition.Value; Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(Mathf.Clamp(value.x, 0f, Mathf.Max(0f, width - val.x)), Mathf.Clamp(value.y, 0f, Mathf.Max(0f, height - val.y))); if (val2 != value) { _windowPosition.Value = val2; } currentWindowRect = new Rect(_windowPosition.Value, _windowSize.Value); } public static void DrawTooltip(Rect area) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) if (!string.IsNullOrEmpty(GUI.tooltip)) { Event current = Event.current; GUIStyle val = new GUIStyle(boxStyle) { wordWrap = true, alignment = (TextAnchor)4 }; Color backgroundColor = GUI.backgroundColor; GUI.backgroundColor = _entryBackgroundColor.Value; float num = val.CalcHeight(new GUIContent(GUI.tooltip), 400f) + 10f; float num2 = ((current.mousePosition.x + 400f > ((Rect)(ref area)).width) ? (((Rect)(ref area)).width - 400f) : current.mousePosition.x); float num3 = ((current.mousePosition.y + 25f + num > ((Rect)(ref area)).height) ? (current.mousePosition.y - num) : (current.mousePosition.y + 25f)); GUI.Box(new Rect(num2, num3, 400f, num), GUI.tooltip, val); GUI.backgroundColor = backgroundColor; } } public void Start() { try { Dbgl("Searching for vanilla Config Manager."); ((Behaviour)Chainloader.PluginInfos.First((KeyValuePair p) => p.Key == "com.bepis.bepinex.configurationmanager").Value.Instance).enabled = false; Dbgl("Disabled Vanilla Config Manager"); } catch { Dbgl("Vanilla Config Manager not found."); } Type typeFromHandle = typeof(Cursor); _curLockState = typeFromHandle.GetProperty("lockState", BindingFlags.Static | BindingFlags.Public); _curVisible = typeFromHandle.GetProperty("visible", BindingFlags.Static | BindingFlags.Public); if (_curLockState == null && _curVisible == null) { _obsoleteCursor = true; _curLockState = typeof(Screen).GetProperty("lockCursor", BindingFlags.Static | BindingFlags.Public); _curVisible = typeof(Screen).GetProperty("showCursor", BindingFlags.Static | BindingFlags.Public); } try { ((BaseUnityPlugin)this).Config.Save(); } catch (IOException ex) { Logger.Log((LogLevel)12, (object)("WARNING: Failed to write to config directory, expect issues!\nError message:" + ex.Message)); } catch (UnauthorizedAccessException ex2) { Logger.Log((LogLevel)12, (object)("WARNING: Permission denied to write to config directory, expect issues!\nError message:" + ex2.Message)); } } public void Update() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) if (DisplayingWindow) { SetUnlockCursor(0, cursorVisible: true); } if (!OverrideHotkey && !DisplayingWindow) { KeyboardShortcut value = _keybind.Value; if (((KeyboardShortcut)(ref value)).IsUp()) { CreateBackgrounds(); DisplayingWindow = true; } } } public void CreateStyles() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Expected O, but got Unknown //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Expected O, but got Unknown //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Expected O, but got Unknown //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Expected O, but got Unknown //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Expected O, but got Unknown windowStyle = new GUIStyle(GUI.skin.window); windowStyle.normal.textColor = _fontColor.Value; windowStyle.active.textColor = _fontColor.Value; labelStyle = new GUIStyle(GUI.skin.label); labelStyle.normal.textColor = _fontColor.Value; labelStyle.fontSize = fontSize; textStyle = new GUIStyle(GUI.skin.textArea); textStyle.normal.textColor = _fontColor.Value; textStyle.fontSize = fontSize; buttonStyle = new GUIStyle(GUI.skin.button); buttonStyle.normal.textColor = _fontColor.Value; buttonStyle.fontSize = fontSize; categoryHeaderSkin = new GUIStyle(labelStyle) { alignment = (TextAnchor)1, wordWrap = true, stretchWidth = true }; pluginHeaderSkin = new GUIStyle(categoryHeaderSkin); toggleStyle = new GUIStyle(GUI.skin.toggle); toggleStyle.normal.textColor = _fontColor.Value; toggleStyle.fontSize = fontSize; boxStyle = new GUIStyle(GUI.skin.box); boxStyle.normal.textColor = _fontColor.Value; boxStyle.fontSize = fontSize; sliderStyle = new GUIStyle(GUI.skin.horizontalSlider); thumbStyle = new GUIStyle(GUI.skin.horizontalSliderThumb); } public void CreateBackgrounds() { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown Texture2D val = new Texture2D(1, 1, (TextureFormat)5, false); val.SetPixel(0, 0, _windowBackgroundColor.Value); val.Apply(); WindowBackground = val; Texture2D val2 = new Texture2D(1, 1, (TextureFormat)5, false); val2.SetPixel(0, 0, _entryBackgroundColor.Value); val2.Apply(); EntryBackground = val2; } public void LateUpdate() { if (DisplayingWindow) { SetUnlockCursor(0, cursorVisible: true); } } public void SetUnlockCursor(int lockState, bool cursorVisible) { if (_curLockState != null) { if (_obsoleteCursor) { _curLockState.SetValue(null, Convert.ToBoolean(lockState), null); } else { _curLockState.SetValue(null, lockState, null); } _curVisible.SetValue(null, cursorVisible, null); } } } public sealed class ConfigSettingEntry : SettingEntryBase { public ConfigEntryBase Entry { get; } public override Type SettingType => Entry.SettingType; public ConfigSettingEntry(ConfigEntryBase entry, BaseUnityPlugin owner) { Entry = entry; DispName = entry.Definition.Key; base.Category = entry.Definition.Section; ConfigDescription description = entry.Description; base.Description = ((description != null) ? description.Description : null); TypeConverter converter = TomlTypeConverter.GetConverter(entry.SettingType); if (converter != null) { base.ObjToStr = (object o) => converter.ConvertToString(o, entry.SettingType); base.StrToObj = (string s) => converter.ConvertToObject(s, entry.SettingType); } ConfigDescription description2 = entry.Description; AcceptableValueBase val = ((description2 != null) ? description2.AcceptableValues : null); if (val != null) { GetAcceptableValues(val); } base.DefaultValue = entry.DefaultValue; ConfigDescription description3 = entry.Description; SetFromAttributes((description3 != null) ? description3.Tags : null, owner); } public void GetAcceptableValues(AcceptableValueBase values) { Type type = ((object)values).GetType(); PropertyInfo property = type.GetProperty("AcceptableValues", BindingFlags.Instance | BindingFlags.Public); if (property != null) { base.AcceptableValues = ((IEnumerable)property.GetValue(values, null)).Cast().ToArray(); return; } PropertyInfo property2 = type.GetProperty("MinValue", BindingFlags.Instance | BindingFlags.Public); if (property2 != null) { PropertyInfo property3 = type.GetProperty("MaxValue", BindingFlags.Instance | BindingFlags.Public); if (property3 == null) { throw new ArgumentNullException("maxProp"); } base.AcceptableValueRange = new KeyValuePair(property2.GetValue(values, null), property3.GetValue(values, null)); base.ShowRangeAsPercent = ((base.AcceptableValueRange.Key.Equals(0) || base.AcceptableValueRange.Key.Equals(1)) && base.AcceptableValueRange.Value.Equals(100)) || (base.AcceptableValueRange.Key.Equals(0f) && base.AcceptableValueRange.Value.Equals(1f)); } } public override object Get() { return Entry.BoxedValue; } protected override void SetValue(object newVal) { Entry.BoxedValue = newVal; } } public class LegacySettingEntry : SettingEntryBase { public Type _settingType; public override string DispName { get { if (!string.IsNullOrEmpty(base.DispName)) { return base.DispName; } return Property.Name; } set { base.DispName = value; } } public object Instance { get; set; } public PropertyInfo Property { get; set; } public override Type SettingType => _settingType ?? (_settingType = Property.PropertyType); public object Wrapper { get; set; } public override object Get() { return Property.GetValue(Instance, null); } protected override void SetValue(object newVal) { Property.SetValue(Instance, newVal, null); } public static LegacySettingEntry FromConfigWrapper(object instance, PropertyInfo settingProp, BepInPlugin pluginInfo, BaseUnityPlugin pluginInstance) { try { object value = settingProp.GetValue(instance, null); if (value == null) { BepInExPlugin.Logger.Log((LogLevel)32, (object)$"Skipping ConfigWrapper entry because it's null : {instance} | {settingProp.Name} | {((pluginInfo != null) ? pluginInfo.Name : null)}"); return null; } PropertyInfo property = value.GetType().GetProperty("Value", BindingFlags.Instance | BindingFlags.Public); LegacySettingEntry legacySettingEntry = new LegacySettingEntry(); legacySettingEntry.SetFromAttributes(settingProp.GetCustomAttributes(inherit: false), pluginInstance); if (property == null) { BepInExPlugin.Logger.Log((LogLevel)2, (object)"Failed to find property Value of ConfigWrapper"); return null; } legacySettingEntry.Browsable = property.CanRead && property.CanWrite && legacySettingEntry.Browsable != false; legacySettingEntry.Property = property; legacySettingEntry.Instance = value; legacySettingEntry.Wrapper = value; if (legacySettingEntry.DispName == "Value") { legacySettingEntry.DispName = value.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.Public)?.GetValue(value, null) as string; } if (string.IsNullOrEmpty(legacySettingEntry.Category)) { string text = value.GetType().GetProperty("Section", BindingFlags.Instance | BindingFlags.Public)?.GetValue(value, null) as string; if (text != ((pluginInfo != null) ? pluginInfo.GUID : null)) { legacySettingEntry.Category = text; } } object strToObj = value.GetType().GetField("_strToObj", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(value); if (strToObj != null) { MethodInfo inv = strToObj.GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public); if (inv != null) { legacySettingEntry.StrToObj = (string s) => inv.Invoke(strToObj, new object[1] { s }); } } object objToStr = value.GetType().GetField("_objToStr", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(value); if (objToStr != null) { MethodInfo inv2 = objToStr.GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public); if (inv2 != null) { legacySettingEntry.ObjToStr = (object o) => inv2.Invoke(objToStr, new object[1] { o }) as string; } } else { legacySettingEntry.ObjToStr = (object o) => o.ToString(); } return legacySettingEntry; } catch (SystemException ex) { BepInExPlugin.Logger.Log((LogLevel)2, (object)$"Failed to create ConfigWrapper entry : {instance} | {settingProp?.Name} | {((pluginInfo != null) ? pluginInfo.Name : null)} | Error: {ex.Message}"); return null; } } public static LegacySettingEntry FromNormalProperty(object instance, PropertyInfo settingProp, BepInPlugin pluginInfo, BaseUnityPlugin pluginInstance) { LegacySettingEntry legacySettingEntry = new LegacySettingEntry(); legacySettingEntry.SetFromAttributes(settingProp.GetCustomAttributes(inherit: false), pluginInstance); if (!legacySettingEntry.Browsable.HasValue) { legacySettingEntry.Browsable = settingProp.CanRead && settingProp.CanWrite; } legacySettingEntry.ReadOnly = settingProp.CanWrite; legacySettingEntry.Property = settingProp; legacySettingEntry.Instance = instance; return legacySettingEntry; } } public static class Patches { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static EventHandler <>9__5_0; public static EventHandler <>9__5_1; public static Func <>9__6_0; public static UnityAction <>9__6_1; internal void b__5_0(object s, EventArgs e) { SetupMenuButton(); } internal void b__5_1(object s, EventArgs e) { SetupMenuButton(); } internal bool b__6_0(TMP_Text t) { if (!(t.text == "Show Player.log")) { if (Localization.instance != null) { return t.text == Localization.instance.Localize("Show Player.log"); } return false; } return true; } internal void b__6_1() { BepInExPlugin.context.DisplayingWindow = true; } } private const string OpenLogString = "Show Player.log"; public static GameObject OpenMenuButton { get; set; } public static void ApplyPatches() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown Harmony val = new Harmony("aedenthorn.ConfigurationManager"); val.Patch((MethodBase)AccessTools.Method(typeof(FejdStartup), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.Method(typeof(Patches), "Start", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.Method(typeof(Terminal), "InputText", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.Method(typeof(Patches), "InputText", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); BepInExPlugin._openMenuText.SettingChanged += delegate { SetupMenuButton(); }; BepInExPlugin._showMenuButton.SettingChanged += delegate { SetupMenuButton(); }; } public static void SetupMenuButton() { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Expected O, but got Unknown if ((Object)(object)OpenMenuButton == (Object)null && (Object)(object)FejdStartup.instance?.m_mainMenu != (Object)null) { TMP_Text val = ((IEnumerable)FejdStartup.instance.m_mainMenu.GetComponentsInChildren(true)).FirstOrDefault((Func)((TMP_Text t) => t.text == "Show Player.log" || (Localization.instance != null && t.text == Localization.instance.Localize("Show Player.log")))); if ((Object)(object)val != (Object)null) { OpenMenuButton = Object.Instantiate(((Component)val.transform.parent).gameObject, val.transform.parent.parent); ((Object)OpenMenuButton).name = "OpenConfigMenu"; Transform transform = OpenMenuButton.transform; transform.localPosition += new Vector3(0f, 25f, 0f); Button component = OpenMenuButton.GetComponent