using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using GinjaGaming.FinalCharacterController; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using Microsoft.CodeAnalysis; using ModConfigManager.Api; using ModConfigManager.Configuration; using ModConfigManager.Localization; using ModConfigManager.UI; using ModConfigManager.Utils; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.Localization; using UnityEngine.Localization.Settings; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ModConfigManager")] [assembly: AssemblyDescription("Mod Config Manager mod for Island Market Simulator by Ice Box Studio")] [assembly: AssemblyCompany("Ice Box Studio")] [assembly: AssemblyProduct("ModConfigManager")] [assembly: AssemblyCopyright("Copyright © 2026 Ice Box Studio All rights reserved.")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("bef278ca-3862-4551-be34-16cb6c2963a8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } } namespace ModConfigManager { [BepInPlugin("IceBoxStudio.IslandMarketSimulator.ModConfigManager", "ModConfigManager", "1.0.0")] public class ModConfigManager : BasePlugin { public static ModConfigManager _Instance; private static bool _uiControllerTypeRegistered; public static ModConfigManager Instance => _Instance; internal static ManualLogSource Logger { get; private set; } internal ConfigEntry ToggleManagerKey { get; private set; } public override void Load() { //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Expected O, but got Unknown _Instance = this; Logger = ((BasePlugin)this).Log; bool flag = default(bool); try { Logger.LogInfo((object)"============================================="); ManualLogSource logger = Logger; BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(1, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted("ModConfigManager"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(LocalizationManager.Instance.GetLocalizedText("plugin.initializing")); } logger.LogInfo(val); ManualLogSource logger2 = Logger; val = new BepInExInfoLogInterpolatedStringHandler(54, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(LocalizationManager.Instance.GetLocalizedText("plugin.author_prefix")); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Ice Box Studio(https://steamcommunity.com/id/ibox666/)"); } logger2.LogInfo(val); ToggleManagerKey = ((BasePlugin)this).Config.Bind("管理器设置 - Manager Settings", "ToggleManagerKey", (KeyCode)282, LocalizationManager.Instance.GetLocalizedText("config.toggle_manager_key")); RegisterSelfToApi(); ModConfigManagerUI.Initialize(); EnsureUiControllerLoaded(); ManualLogSource logger3 = Logger; val = new BepInExInfoLogInterpolatedStringHandler(1, 2, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendFormatted("ModConfigManager"); ((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(LocalizationManager.Instance.GetLocalizedText("plugin.initialized")); } logger3.LogInfo(val); Logger.LogInfo((object)"============================================="); } catch (Exception ex) { ManualLogSource logger4 = Logger; BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(9, 3, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted("ModConfigManager"); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" 初始化错误: "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(ex.Message); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("\n"); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(ex.StackTrace); } logger4.LogError(val2); } } private void RegisterSelfToApi() { ModConfigManagerAPI.RegisterPluginInfo("IceBoxStudio.IslandMarketSimulator.ModConfigManager", LocalizationManager.Instance.GetLocalizedText("ui.title"), "1.0.0", "Ice Box Studio", LocalizationManager.Instance.GetLocalizedText("plugin.description")); } private static void EnsureUiControllerLoaded() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown if (!_uiControllerTypeRegistered) { ClassInjector.RegisterTypeInIl2Cpp(); _uiControllerTypeRegistered = true; } GameObject val = GameObject.Find("ModConfigManager_UI"); if ((Object)(object)val == (Object)null) { val = new GameObject("ModConfigManager_UI"); } Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).hideFlags = (HideFlags)61; if ((Object)(object)val.GetComponent() == (Object)null) { val.AddComponent(); } } } public class ModConfigManagerUIController : MonoBehaviour { private GameObject _blockerCanvasGO; public ModConfigManagerUIController(IntPtr pointer) : base(pointer) { } private void Awake() { ((Object)this).hideFlags = (HideFlags)61; if ((Object)(object)_blockerCanvasGO == (Object)null) { CreateBlockerCanvas(); } } private void CreateBlockerCanvas() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0070: 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_0092: 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) _blockerCanvasGO = new GameObject("ModConfigManager_UIBlockerCanvas"); Object.DontDestroyOnLoad((Object)(object)_blockerCanvasGO); ((Object)_blockerCanvasGO).hideFlags = (HideFlags)61; Canvas obj = _blockerCanvasGO.AddComponent(); obj.renderMode = (RenderMode)0; obj.sortingOrder = 32767; _blockerCanvasGO.AddComponent(); Image obj2 = _blockerCanvasGO.AddComponent(); ((Graphic)obj2).color = new Color(0f, 0f, 0f, 0f); ((Graphic)obj2).raycastTarget = true; RectTransform rectTransform = ((Graphic)obj2).rectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; _blockerCanvasGO.SetActive(false); } private void Update() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (KeyboardInputHelper.WasKeyPressed((KeyCode)((ModConfigManager.Instance.ToggleManagerKey == null) ? 282 : ((int)ModConfigManager.Instance.ToggleManagerKey.Value)))) { ModConfigManagerUI.Toggle(); } if ((Object)(object)_blockerCanvasGO != (Object)null && _blockerCanvasGO.activeSelf != ModConfigManagerUI.IsWindowVisible) { _blockerCanvasGO.SetActive(ModConfigManagerUI.IsWindowVisible); } } private void OnGUI() { ModConfigManagerUI.OnGUI(); } } public static class PluginInfo { public const string PLUGIN_GUID = "IceBoxStudio.IslandMarketSimulator.ModConfigManager"; public const string PLUGIN_NAME = "ModConfigManager"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace ModConfigManager.Utils { public static class KeyboardInputHelper { private static readonly Dictionary KeyPropertyOverrides = new Dictionary { { (KeyCode)96, "backquoteKey" }, { (KeyCode)8, "backspaceKey" }, { (KeyCode)92, "backslashKey" }, { (KeyCode)301, "capsLockKey" }, { (KeyCode)44, "commaKey" }, { (KeyCode)127, "deleteKey" }, { (KeyCode)274, "downArrowKey" }, { (KeyCode)279, "endKey" }, { (KeyCode)61, "equalsKey" }, { (KeyCode)27, "escapeKey" }, { (KeyCode)278, "homeKey" }, { (KeyCode)277, "insertKey" }, { (KeyCode)271, "numpadEnterKey" }, { (KeyCode)308, "leftAltKey" }, { (KeyCode)276, "leftArrowKey" }, { (KeyCode)91, "leftBracketKey" }, { (KeyCode)306, "leftCtrlKey" }, { (KeyCode)304, "leftShiftKey" }, { (KeyCode)319, "contextMenuKey" }, { (KeyCode)45, "minusKey" }, { (KeyCode)300, "numLockKey" }, { (KeyCode)281, "pageDownKey" }, { (KeyCode)280, "pageUpKey" }, { (KeyCode)46, "periodKey" }, { (KeyCode)39, "quoteKey" }, { (KeyCode)13, "enterKey" }, { (KeyCode)307, "rightAltKey" }, { (KeyCode)275, "rightArrowKey" }, { (KeyCode)93, "rightBracketKey" }, { (KeyCode)305, "rightCtrlKey" }, { (KeyCode)303, "rightShiftKey" }, { (KeyCode)302, "scrollLockKey" }, { (KeyCode)59, "semicolonKey" }, { (KeyCode)47, "slashKey" }, { (KeyCode)32, "spaceKey" }, { (KeyCode)9, "tabKey" }, { (KeyCode)273, "upArrowKey" } }; private static readonly Dictionary KeyboardPropertyCache = new Dictionary(); private static readonly Dictionary ActionCache = new Dictionary(); private static bool _legacyInputUnavailable; private static Type _keyboardType; private static PropertyInfo _keyboardCurrentProperty; public static bool WasKeyPressed(KeyCode key) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (!TryGetLegacyKeyDown(key)) { return TryGetNewInputSystemKeyDown(key); } return true; } public static bool WasActionPressed(string actionName, KeyCode fallbackKey = 0) { //IL_0029: 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) if (TryGetAction(actionName, out var action)) { try { if (!action.enabled) { action.Enable(); } if (action.WasPressedThisFrame()) { return true; } } catch { } } if ((int)fallbackKey != 0) { return WasKeyPressed(fallbackKey); } return false; } public static bool WasControlPressed(string controlPath, KeyCode fallbackKey = 0) { //IL_0028: 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) try { if (!string.IsNullOrWhiteSpace(controlPath)) { InputControl obj = InputSystem.FindControl(controlPath); ButtonControl val = (ButtonControl)(object)((obj is ButtonControl) ? obj : null); if (val != null && val.wasPressedThisFrame) { return true; } } } catch { } if ((int)fallbackKey != 0) { return WasKeyPressed(fallbackKey); } return false; } private static bool TryGetLegacyKeyDown(KeyCode key) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (_legacyInputUnavailable) { return false; } try { return Input.GetKeyDown(key); } catch (InvalidOperationException) { _legacyInputUnavailable = true; return false; } } private static bool TryGetNewInputSystemKeyDown(KeyCode key) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) try { if (!TryResolveKeyboard(out var keyboard)) { return false; } string keyboardPropertyName = GetKeyboardPropertyName(key); if (string.IsNullOrEmpty(keyboardPropertyName)) { return false; } if (!KeyboardPropertyCache.TryGetValue(keyboardPropertyName, out var value)) { value = _keyboardType.GetProperty(keyboardPropertyName); KeyboardPropertyCache[keyboardPropertyName] = value; } if (value == null) { return false; } object value2 = value.GetValue(keyboard); if (value2 == null) { return false; } PropertyInfo property = value2.GetType().GetProperty("wasPressedThisFrame"); return property != null && (bool)property.GetValue(value2); } catch { return false; } } private static bool TryResolveKeyboard(out object keyboard) { keyboard = null; if (_keyboardType == null) { _keyboardType = Type.GetType("UnityEngine.InputSystem.Keyboard, Unity.InputSystem"); if (_keyboardType == null) { return false; } } if (_keyboardCurrentProperty == null) { _keyboardCurrentProperty = _keyboardType.GetProperty("current"); if (_keyboardCurrentProperty == null) { return false; } } keyboard = _keyboardCurrentProperty.GetValue(null); return keyboard != null; } private static string GetKeyboardPropertyName(KeyCode key) { //IL_0005: 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_0014: Invalid comparison between Unknown and I4 //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Invalid comparison between Unknown and I4 //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Invalid comparison between Unknown and I4 //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Invalid comparison between Unknown and I4 //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Invalid comparison between Unknown and I4 //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected I4, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Invalid comparison between Unknown and I4 //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected I4, but got Unknown if (KeyPropertyOverrides.TryGetValue(key, out var value)) { return value; } if ((int)key >= 97 && (int)key <= 122) { return char.ToLowerInvariant(((object)(KeyCode)(ref key)).ToString()[0]) + "Key"; } if ((int)key >= 48 && (int)key <= 57) { return $"digit{key - 48}Key"; } if ((int)key >= 256 && (int)key <= 265) { return $"numpad{key - 256}Key"; } if ((int)key >= 282 && (int)key <= 296) { return ((object)(KeyCode)(ref key)).ToString().ToLowerInvariant() + "Key"; } return null; } private static bool TryGetAction(string actionName, out InputAction action) { action = null; if (string.IsNullOrWhiteSpace(actionName)) { return false; } if (ActionCache.TryGetValue(actionName, out var value) && value != null) { action = value; return true; } PlayerControls playerControls = PlayerInputManager.PlayerControls; if ((Object)(object)((playerControls != null) ? playerControls.asset : null) == (Object)null) { return false; } InputAction val = null; int num = actionName.IndexOf('/'); if (num > 0 && num < actionName.Length - 1) { string text = actionName.Substring(0, num); string text2 = actionName.Substring(num + 1); InputActionMap obj = playerControls.asset.FindActionMap(text, false); val = ((obj != null) ? obj.FindAction(text2, false) : null); } if (val == null) { val = playerControls.asset.FindAction(actionName, false); } if (val == null) { return false; } ActionCache[actionName] = val; action = val; return true; } } } namespace ModConfigManager.UI { public static class ModConfigManagerUI { private class ManagedPluginEntry { public PluginInfo Info; public string ListText; public string TitleText; public string MetaText; public string Description; } private const int WindowId = 486213; private static readonly List Plugins = new List(); private static readonly Dictionary EditorBuffer = new Dictionary(); private static Rect _windowRect; private static Vector2 _pluginsScroll; private static Vector2 _configScroll; private static bool _isWindowVisible; private static int _selectedPluginIndex = -1; private static ConfigFileModel _selectedModel; private static string _selectedConfigPath; private static bool _isInitialized; private static GUIStyle _windowStyle; private static GUIStyle _pluginBtnStyle; private static GUIStyle _selectedPluginBtnStyle; private static GUIStyle _headerStyle; private static GUIStyle _pluginTitleStyle; private static GUIStyle _pluginMetaStyle; private static GUIStyle _pluginDescriptionStyle; private static GUIStyle _labelStyle; private static GUIStyle _descStyle; private static GUIStyle _configKeyStyle; private static GUIStyle _conflictConfigKeyStyle; private static GUIStyle _conflictWarningStyle; private static GUIStyle _revertBtnStyle; private static GUIStyle _actionBtnStyle; private static GUIStyle _closeBtnStyle; private static GUIStyle _textFieldStyle; private static GUIStyle _conflictTextFieldStyle; private static GUIStyle _checkboxNormalStyle; private static GUIStyle _checkboxActiveStyle; private static GUIStyle _sectionHeaderStyle; private static GUIStyle _dropdownButtonStyle; private static GUIStyle _conflictDropdownButtonStyle; private static GUIStyle _dropdownTextStyle; private static GUIStyle _dropdownItemStyle; private static GUIStyle _dropdownSelectedItemStyle; private static GUIStyle _dropdownArrowStyle; private static GUIStyle _scrollViewBackgroundStyle; private static GUIStyle _verticalScrollbarStyle; private static GUIStyle _verticalScrollbarThumbStyle; private static GUIStyle _verticalScrollbarUpButtonStyle; private static GUIStyle _verticalScrollbarDownButtonStyle; private static GUIStyle _horizontalScrollbarStyle; private static GUIStyle _horizontalScrollbarThumbStyle; private static GUIStyle _horizontalScrollbarLeftButtonStyle; private static GUIStyle _horizontalScrollbarRightButtonStyle; private static Texture2D _darkBackground; private static Texture2D _lightBackground; private static Texture2D _redBackground; private static Texture2D _conflictOutlineTexture; private static readonly List _generatedTextures = new List(); private static bool _stylesInitialized; private static Dictionary _collapsedSections = new Dictionary(); private static Dictionary _dropdownStates = new Dictionary(); private static Dictionary _dropdownScrollStates = new Dictionary(); private static Dictionary> _hotkeyConflicts = new Dictionary>(StringComparer.OrdinalIgnoreCase); public static bool IsWindowVisible { get { return _isWindowVisible; } set { _isWindowVisible = value; } } public static void Initialize() { if (!_isInitialized) { _isInitialized = true; RefreshPlugins(); RefreshHotkeyConflicts(); } } public static void Toggle() { _isWindowVisible = !_isWindowVisible; if (_isWindowVisible) { RefreshPlugins(); RefreshHotkeyConflicts(); } } private static void PersistItemValue(ConfigItem item, string value) { if (_selectedModel != null) { _selectedModel.SetValue(item.Section, item.Key, value); _selectedModel.Save(); if (ConflictDetector.IsHotkeyItem(item)) { RefreshHotkeyConflicts(); } } } private static void RefreshPlugins() { //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Expected O, but got Unknown Plugins.Clear(); try { foreach (PluginInfo item in (((BaseChainloader)(object)IL2CPPChainloader.Instance)?.Plugins != null) ? ((BaseChainloader)(object)IL2CPPChainloader.Instance).Plugins.Values.OrderBy((PluginInfo p) => p.Metadata.Name).ToList() : new List()) { string gUID = item.Metadata.GUID; string name = item.Metadata.Name; string name2 = item.Metadata.Name; string text = string.Empty; string text2 = string.Empty; string description = ""; if (ModConfigManagerAPI.RegisteredPlugins.TryGetValue(gUID, out var value)) { if (!string.IsNullOrWhiteSpace(value.Name)) { name = value.Name; name2 = value.Name; } if (!string.IsNullOrWhiteSpace(value.Version)) { text = value.Version; } if (!string.IsNullOrWhiteSpace(value.Author)) { text2 = value.Author; } description = value.Description ?? ""; } string text3 = string.Empty; if (!string.IsNullOrWhiteSpace(text)) { text3 = text ?? ""; } if (!string.IsNullOrWhiteSpace(text2)) { text3 = (string.IsNullOrWhiteSpace(text3) ? text2 : (text3 + " · " + text2)); } Plugins.Add(new ManagedPluginEntry { Info = item, ListText = name, TitleText = name2, MetaText = text3, Description = description }); } } catch (Exception ex) { ManualLogSource logger = ModConfigManager.Logger; bool flag = default(bool); BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(10, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("刷新插件列表失败: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(ex); } logger.LogError(val); } } private static void SelectPlugin(int index) { if (index < 0 || index >= Plugins.Count) { return; } _selectedPluginIndex = index; _selectedConfigPath = GetConfigPathForPlugin(Plugins[index].Info); _selectedModel = ConfigParser.Parse(_selectedConfigPath); EditorBuffer.Clear(); foreach (ConfigItem item in _selectedModel.Sections.SelectMany((ConfigSection s) => s.Items)) { EditorBuffer[item.Section + "||" + item.Key] = item.Value ?? string.Empty; } RefreshHotkeyConflicts(); } private static void RefreshHotkeyConflicts() { _hotkeyConflicts = ConflictDetector.GetConflictingValues(); } private static string GetConfigPathForPlugin(PluginInfo info) { string gUID = info.Metadata.GUID; string text = Path.Combine(Paths.ConfigPath, gUID + ".cfg"); if (File.Exists(text)) { return text; } string text2 = Path.Combine(Paths.ConfigPath, info.Metadata.Name + ".cfg"); if (File.Exists(text2)) { return text2; } return text; } private static void DrawPluginsPanel() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginVertical((GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(350f) }); GUILayout.Label(LocalizationManager.Instance.GetLocalizedText("ui.mod_list"), _headerStyle, Array.Empty()); float num = (float)Screen.height - 250f; _pluginsScroll = GUILayout.BeginScrollView(_pluginsScroll, false, false, _horizontalScrollbarStyle, _verticalScrollbarStyle, _scrollViewBackgroundStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(350f), GUILayout.Height(num) }); for (int i = 0; i < Plugins.Count; i++) { ManagedPluginEntry managedPluginEntry = Plugins[i]; GUIStyle val = ((i == _selectedPluginIndex) ? _selectedPluginBtnStyle : _pluginBtnStyle); if (GUILayout.Button(managedPluginEntry.ListText, val, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(50f) })) { SelectPlugin(i); } GUILayout.Space(5f); } GUILayout.EndScrollView(); GUILayout.EndVertical(); } private static void DrawConfigPanel() { //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginVertical((Il2CppReferenceArray)null); if (_selectedPluginIndex < 0 || _selectedPluginIndex >= Plugins.Count) { GUILayout.Label(LocalizationManager.Instance.GetLocalizedText("ui.select_mod_first"), _labelStyle, Array.Empty()); GUILayout.EndVertical(); return; } ManagedPluginEntry managedPluginEntry = Plugins[_selectedPluginIndex]; float num = Mathf.Max(420f, (float)Screen.width - 500f); float width = Mathf.Max(220f, num - 190f); float num2 = CalculateTextHeight(_pluginTitleStyle, managedPluginEntry.TitleText, width); float num3 = CalculateTextHeight(_pluginMetaStyle, managedPluginEntry.MetaText, width); float num4 = CalculateTextHeight(_pluginDescriptionStyle, managedPluginEntry.Description, num); float num5 = num2 + num3 + num4 + 18f; float num6 = Mathf.Max(92f, num5); GUILayout.BeginVertical((GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(num6) }); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.BeginVertical((Il2CppReferenceArray)null); GUILayout.Label(managedPluginEntry.TitleText, _pluginTitleStyle, Array.Empty()); if (!string.IsNullOrWhiteSpace(managedPluginEntry.MetaText)) { GUILayout.Label(managedPluginEntry.MetaText, _pluginMetaStyle, Array.Empty()); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); if (GUILayout.Button(LocalizationManager.Instance.GetLocalizedText("ui.reset_button"), _actionBtnStyle, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Height(40f), GUILayout.Width(150f) }) && _selectedModel != null) { ConfigParser.ResetToDefaults(_selectedModel); SelectPlugin(_selectedPluginIndex); } GUILayout.EndHorizontal(); if (!string.IsNullOrEmpty(managedPluginEntry.Description)) { GUILayout.Label(managedPluginEntry.Description, _pluginDescriptionStyle, Array.Empty()); } GUILayout.FlexibleSpace(); GUILayout.EndVertical(); GUILayout.Space(10f); float num7 = Mathf.Max(180f, (float)Screen.height - 250f - num6); _configScroll = GUILayout.BeginScrollView(_configScroll, false, false, _horizontalScrollbarStyle, _verticalScrollbarStyle, _scrollViewBackgroundStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(num7) }); if (_selectedModel == null || _selectedModel.Sections.Count == 0) { GUILayout.Label(LocalizationManager.Instance.GetLocalizedText("ui.no_config_file"), _labelStyle, Array.Empty()); GUILayout.EndScrollView(); GUILayout.EndVertical(); return; } foreach (ConfigSection item in _selectedModel.Sections.Where((ConfigSection s) => s.Items.Count > 0)) { GUILayout.Space(10f); string key = managedPluginEntry.Info.Metadata.GUID + "_" + item.Name; bool flag = _collapsedSections.ContainsKey(key) && _collapsedSections[key]; if (GUILayout.Button((flag ? "▶ " : "▼ ") + item.Name.ToUpper(), _sectionHeaderStyle, Array.Empty())) { _collapsedSections[key] = !flag; } GUI.color = new Color(0.5f, 0.5f, 0.5f, 0.5f); GUILayout.Box("", (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Height(2f), GUILayout.ExpandWidth(true) }); GUI.color = Color.white; if (!flag) { GUILayout.Space(6f); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.Space(14f); GUILayout.BeginVertical((Il2CppReferenceArray)null); foreach (ConfigItem item2 in item.Items) { DrawConfigItem(item2); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.Space(10f); } else { GUILayout.Space(5f); } } GUILayout.EndScrollView(); GUILayout.EndVertical(); } private static void DrawConfigItem(ConfigItem item) { //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_03e8: Unknown result type (might be due to invalid IL or missing references) //IL_0530: Unknown result type (might be due to invalid IL or missing references) //IL_07f6: Unknown result type (might be due to invalid IL or missing references) //IL_05d6: Unknown result type (might be due to invalid IL or missing references) //IL_061d: Unknown result type (might be due to invalid IL or missing references) //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_08fe: Unknown result type (might be due to invalid IL or missing references) //IL_0953: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Unknown result type (might be due to invalid IL or missing references) //IL_06f6: Unknown result type (might be due to invalid IL or missing references) //IL_06fe: Unknown result type (might be due to invalid IL or missing references) //IL_0703: Unknown result type (might be due to invalid IL or missing references) //IL_0708: Unknown result type (might be due to invalid IL or missing references) //IL_073e: Unknown result type (might be due to invalid IL or missing references) string text = item.Section + "||" + item.Key; string key = item.Section + "_" + text; bool flag = item.AcceptableValues != null && item.AcceptableValues.Count > 0; bool flag2 = flag && _dropdownStates.ContainsKey(key) && _dropdownStates[key]; bool flag3 = false; string text2 = string.Empty; if (_selectedPluginIndex >= 0 && _selectedPluginIndex < Plugins.Count && ConflictDetector.IsHotkeyItem(item)) { string text3 = ConflictDetector.NormalizeValue(item.Value); if (!string.IsNullOrEmpty(text3) && _hotkeyConflicts.TryGetValue(text3, out var value)) { string currentPluginGuid = Plugins[_selectedPluginIndex].Info.Metadata.GUID; List list = (from source in value where !string.Equals(source.PluginGuid, currentPluginGuid, StringComparison.OrdinalIgnoreCase) select source.DisplayName into name where !string.IsNullOrWhiteSpace(name) select name).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); if (list.Count > 0) { flag3 = true; text2 = LocalizationManager.Instance.GetLocalizedText("ui.hotkey_conflict", string.Join("、", list)); } } } GUILayout.BeginVertical((Il2CppReferenceArray)null); if (!string.IsNullOrWhiteSpace(item.Description)) { string text4 = item.Description; if (item.HasRange) { text4 += $"\n({LocalizationManager.Instance.GetLocalizedText("ui.range_hint")}: {item.RangeMin} - {item.RangeMax})"; } GUILayout.Label(text4, _descStyle, Array.Empty()); GUILayout.Space(1f); } else if (item.HasRange) { GUILayout.Label($"({LocalizationManager.Instance.GetLocalizedText("ui.range_hint")}: {item.RangeMin} - {item.RangeMax})", _descStyle, Array.Empty()); GUILayout.Space(1f); } Rect rect = GUILayoutUtility.GetRect(10f, 30f, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) }); float num = Mathf.Clamp(((Rect)(ref rect)).width * 0.36f, 220f, 360f); float num2 = ((Rect)(ref rect)).width - num - 100f - 24f - 20f; float num3 = Mathf.Clamp(num2, 320f, 520f); if (num2 < 320f) { num3 = Mathf.Max(220f, num2); num = Mathf.Max(140f, ((Rect)(ref rect)).width - num3 - 100f - 24f - 20f); } float num4 = ((Rect)(ref rect)).xMax - 100f - 20f; float num5 = num4 - 12f - num3; Rect val = new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, Mathf.Max(140f, num5 - ((Rect)(ref rect)).x - 12f), 30f); Rect val2 = default(Rect); ((Rect)(ref val2))..ctor(num5, ((Rect)(ref rect)).y, num3, 30f); Rect val3 = default(Rect); ((Rect)(ref val3))..ctor(num4, ((Rect)(ref rect)).y, 100f, 30f); float num6 = ((Rect)(ref val3)).xMax - ((Rect)(ref val2)).x; float num7 = (flag3 ? CalculateTextHeight(_conflictWarningStyle, text2, num6) : 0f); float num8 = (flag ? ((float)item.AcceptableValues.Count * 32f) : 0f); float num9 = ((flag && flag2) ? (Mathf.Min(num8, 176f) + 2f) : 0f); float num10 = 30f + (flag3 ? (4f + num7) : 0f); Rect val4 = default(Rect); ((Rect)(ref val4))..ctor(((Rect)(ref val2)).x, ((Rect)(ref val2)).yMax + 4f, num6, num7); GUI.Label(val, item.Key.ToUpper(), flag3 ? _conflictConfigKeyStyle : _configKeyStyle); if (item.ValueType == ConfigValueType.Bool) { bool flag4 = string.Equals(item.Value, "true", StringComparison.OrdinalIgnoreCase); GUIStyle val5 = (flag4 ? _checkboxActiveStyle : _checkboxNormalStyle); if (GUI.Button(new Rect(((Rect)(ref val2)).xMax - 30f, ((Rect)(ref val2)).y, 30f, 30f), flag4 ? "✓" : "", val5)) { string value2 = (item.Value = ((!flag4) ? "true" : "false")); EditorBuffer[text] = value2; PersistItemValue(item, value2); } } else if (flag) { GUIStyle val6 = (flag3 ? _conflictDropdownButtonStyle : _dropdownButtonStyle); string text5 = item.Value ?? string.Empty; if (!item.AcceptableValues.Contains(text5)) { text5 = item.AcceptableValues.FirstOrDefault() ?? string.Empty; } if (GUI.Button(val2, GUIContent.none, val6)) { _dropdownStates[key] = !flag2; } GUI.Label(new Rect(((Rect)(ref val2)).x + 12f, ((Rect)(ref val2)).y, ((Rect)(ref val2)).width - 42f, ((Rect)(ref val2)).height), text5, _dropdownTextStyle); GUI.Label(new Rect(((Rect)(ref val2)).xMax - 28f, ((Rect)(ref val2)).y, 20f, ((Rect)(ref val2)).height), flag2 ? "▲" : "▼", _dropdownArrowStyle); if (flag2) { if (!_dropdownScrollStates.ContainsKey(key)) { _dropdownScrollStates[key] = Vector2.zero; } bool flag5 = num8 > 176f; float num11 = ((Rect)(ref val2)).width - (flag5 ? 18f : 4f); Rect val7 = default(Rect); ((Rect)(ref val7))..ctor(((Rect)(ref val2)).x, ((Rect)(ref rect)).y + num10 + 4f, ((Rect)(ref val2)).width, num9); Rect val8 = default(Rect); ((Rect)(ref val8))..ctor(0f, 0f, num11, num8); _dropdownScrollStates[key] = GUI.BeginScrollView(val7, _dropdownScrollStates[key], val8, false, flag5); for (int i = 0; i < item.AcceptableValues.Count; i++) { string text6 = item.AcceptableValues[i]; Rect val9 = new Rect(0f, (float)i * 32f, num11, 32f); GUIStyle val10 = (string.Equals(text6, item.Value, StringComparison.Ordinal) ? _dropdownSelectedItemStyle : _dropdownItemStyle); if (GUI.Button(val9, text6, val10)) { item.Value = text6; EditorBuffer[text] = text6; PersistItemValue(item, text6); _dropdownStates[key] = false; } } GUI.EndScrollView(); } } else { GUIStyle val11 = (flag3 ? _conflictTextFieldStyle : _textFieldStyle); if (!EditorBuffer.TryGetValue(text, out var value3)) { value3 = item.Value ?? string.Empty; EditorBuffer[text] = value3; } string text7 = GUI.TextField(val2, value3, val11); if (!string.Equals(text7, value3, StringComparison.Ordinal)) { if (item.HasRange && !string.IsNullOrEmpty(text7)) { float result2; if (item.ValueType == ConfigValueType.Int && int.TryParse(text7, out var result)) { int num12 = (int)Math.Floor(item.RangeMin); int num13 = (int)Math.Ceiling(item.RangeMax); if (result < num12) { result = num12; } if (result > num13) { result = num13; } text7 = result.ToString(); } else if (item.ValueType == ConfigValueType.Float && float.TryParse(text7, out result2)) { float num14 = (float)item.RangeMin; float num15 = (float)item.RangeMax; if (result2 < num14) { result2 = num14; } if (result2 > num15) { result2 = num15; } text7 = result2.ToString(); } } EditorBuffer[text] = text7; item.Value = text7; PersistItemValue(item, text7); } } GUI.enabled = !string.IsNullOrEmpty(item.DefaultValue) && item.Value != item.DefaultValue; if (GUI.Button(val3, LocalizationManager.Instance.GetLocalizedText("ui.revert_button"), _revertBtnStyle)) { item.Value = item.DefaultValue; EditorBuffer[text] = item.DefaultValue; PersistItemValue(item, item.DefaultValue); } GUI.enabled = true; if (flag3) { GUI.Label(val4, text2, _conflictWarningStyle); } GUILayout.Space((flag3 ? (4f + num7) : 0f) + ((flag && flag2) ? (4f + num9) : 0f) + 8f); GUILayout.EndVertical(); } public static void OnGUI() { //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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) if (!_isWindowVisible) { return; } EnsureStyles(); if (((Rect)(ref _windowRect)).width != (float)Screen.width || ((Rect)(ref _windowRect)).height != (float)Screen.height) { _windowRect = new Rect(0f, 0f, (float)Screen.width, (float)Screen.height); } try { GUISkin skin = GUI.skin; GUIStyle verticalScrollbarThumb = skin.verticalScrollbarThumb; GUIStyle verticalScrollbarUpButton = skin.verticalScrollbarUpButton; GUIStyle verticalScrollbarDownButton = skin.verticalScrollbarDownButton; GUIStyle horizontalScrollbarThumb = skin.horizontalScrollbarThumb; GUIStyle horizontalScrollbarLeftButton = skin.horizontalScrollbarLeftButton; GUIStyle horizontalScrollbarRightButton = skin.horizontalScrollbarRightButton; skin.verticalScrollbarThumb = _verticalScrollbarThumbStyle; skin.verticalScrollbarUpButton = _verticalScrollbarUpButtonStyle; skin.verticalScrollbarDownButton = _verticalScrollbarDownButtonStyle; skin.horizontalScrollbarThumb = _horizontalScrollbarThumbStyle; skin.horizontalScrollbarLeftButton = _horizontalScrollbarLeftButtonStyle; skin.horizontalScrollbarRightButton = _horizontalScrollbarRightButtonStyle; GUILayout.BeginArea(_windowRect, GUIContent.none, _windowStyle); DrawWindow(486213); GUILayout.EndArea(); skin.verticalScrollbarThumb = verticalScrollbarThumb; skin.verticalScrollbarUpButton = verticalScrollbarUpButton; skin.verticalScrollbarDownButton = verticalScrollbarDownButton; skin.horizontalScrollbarThumb = horizontalScrollbarThumb; skin.horizontalScrollbarLeftButton = horizontalScrollbarLeftButton; skin.horizontalScrollbarRightButton = horizontalScrollbarRightButton; } catch (Exception ex) { _isWindowVisible = false; ManualLogSource logger = ModConfigManager.Logger; bool flag = default(bool); BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(9, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("UI 绘制错误: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(ex); } logger.LogError(val); } } private static void DrawWindow(int windowId) { GUILayout.Space(20f); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.FlexibleSpace(); GUILayout.Label(LocalizationManager.Instance.GetLocalizedText("ui.title"), _headerStyle, Array.Empty()); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.FlexibleSpace(); GUILayout.Label(LocalizationManager.Instance.GetLocalizedText("ui.restart_hint"), _descStyle, Array.Empty()); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(20f); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.Space(40f); DrawPluginsPanel(); GUILayout.Space(40f); DrawConfigPanel(); GUILayout.Space(40f); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal((Il2CppReferenceArray)null); GUILayout.Space(40f); if (GUILayout.Button(LocalizationManager.Instance.GetLocalizedText("ui.close"), _closeBtnStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(50f) })) { Toggle(); } GUILayout.Space(40f); GUILayout.EndHorizontal(); GUILayout.Space(20f); } private static void EnsureStyles() { if (!_stylesInitialized || !AreStyleResourcesAlive()) { ReleaseGeneratedTextures(); _stylesInitialized = false; InitStyles(); } } private static void InitStyles() { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: 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_0166: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01be: 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) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Expected O, but got Unknown //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Expected O, but got Unknown //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Expected O, but got Unknown //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Expected O, but got Unknown //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Expected O, but got Unknown //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Expected O, but got Unknown //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Expected O, but got Unknown //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0331: Expected O, but got Unknown //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Expected O, but got Unknown //IL_0382: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Expected O, but got Unknown //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Expected O, but got Unknown //IL_03f2: 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_0425: Expected O, but got Unknown //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_0434: Expected O, but got Unknown //IL_045e: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Expected O, but got Unknown //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Expected O, but got Unknown //IL_04dd: Unknown result type (might be due to invalid IL or missing references) //IL_0506: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Expected O, but got Unknown //IL_051a: Unknown result type (might be due to invalid IL or missing references) //IL_0524: Expected O, but got Unknown //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_055f: Unknown result type (might be due to invalid IL or missing references) //IL_0581: Unknown result type (might be due to invalid IL or missing references) //IL_05b1: Unknown result type (might be due to invalid IL or missing references) //IL_05bb: Expected O, but got Unknown //IL_05c0: Unknown result type (might be due to invalid IL or missing references) //IL_05ca: Expected O, but got Unknown //IL_05e8: Unknown result type (might be due to invalid IL or missing references) //IL_05f9: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Unknown result type (might be due to invalid IL or missing references) //IL_0620: Unknown result type (might be due to invalid IL or missing references) //IL_0636: Unknown result type (might be due to invalid IL or missing references) //IL_0647: Unknown result type (might be due to invalid IL or missing references) //IL_0651: Expected O, but got Unknown //IL_0667: Unknown result type (might be due to invalid IL or missing references) //IL_0689: Unknown result type (might be due to invalid IL or missing references) //IL_06ab: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Unknown result type (might be due to invalid IL or missing references) //IL_06e1: Expected O, but got Unknown //IL_06ea: Unknown result type (might be due to invalid IL or missing references) //IL_06f4: Expected O, but got Unknown //IL_06f9: Unknown result type (might be due to invalid IL or missing references) //IL_070c: Unknown result type (might be due to invalid IL or missing references) //IL_0716: Expected O, but got Unknown //IL_071b: Unknown result type (might be due to invalid IL or missing references) //IL_0725: Expected O, but got Unknown //IL_0739: Unknown result type (might be due to invalid IL or missing references) //IL_0743: Expected O, but got Unknown //IL_0748: Unknown result type (might be due to invalid IL or missing references) //IL_075b: Unknown result type (might be due to invalid IL or missing references) //IL_0765: Expected O, but got Unknown //IL_076e: Unknown result type (might be due to invalid IL or missing references) //IL_0778: Expected O, but got Unknown //IL_0782: Unknown result type (might be due to invalid IL or missing references) //IL_078c: Expected O, but got Unknown //IL_07ad: Unknown result type (might be due to invalid IL or missing references) //IL_07d2: Unknown result type (might be due to invalid IL or missing references) //IL_07e3: Unknown result type (might be due to invalid IL or missing references) //IL_07f9: Unknown result type (might be due to invalid IL or missing references) //IL_080a: Unknown result type (might be due to invalid IL or missing references) //IL_0820: Unknown result type (might be due to invalid IL or missing references) //IL_082a: Expected O, but got Unknown //IL_0840: Unknown result type (might be due to invalid IL or missing references) //IL_0862: Unknown result type (might be due to invalid IL or missing references) //IL_0884: Unknown result type (might be due to invalid IL or missing references) //IL_08a6: Unknown result type (might be due to invalid IL or missing references) //IL_08c7: Unknown result type (might be due to invalid IL or missing references) //IL_08d1: Expected O, but got Unknown //IL_08da: Unknown result type (might be due to invalid IL or missing references) //IL_08e4: Expected O, but got Unknown //IL_08f4: Unknown result type (might be due to invalid IL or missing references) //IL_08fe: Expected O, but got Unknown //IL_091c: Unknown result type (might be due to invalid IL or missing references) //IL_0955: Unknown result type (might be due to invalid IL or missing references) //IL_095f: Expected O, but got Unknown //IL_098b: Unknown result type (might be due to invalid IL or missing references) //IL_09b2: Unknown result type (might be due to invalid IL or missing references) //IL_09bc: Expected O, but got Unknown //IL_09c1: Unknown result type (might be due to invalid IL or missing references) //IL_09cb: Expected O, but got Unknown //IL_09e9: Unknown result type (might be due to invalid IL or missing references) //IL_09fa: Unknown result type (might be due to invalid IL or missing references) //IL_0a04: Expected O, but got Unknown //IL_0a25: Unknown result type (might be due to invalid IL or missing references) //IL_0a35: Unknown result type (might be due to invalid IL or missing references) //IL_0a48: Unknown result type (might be due to invalid IL or missing references) //IL_0a52: Expected O, but got Unknown //IL_0a57: Unknown result type (might be due to invalid IL or missing references) //IL_0a61: Expected O, but got Unknown //IL_0a6c: Unknown result type (might be due to invalid IL or missing references) //IL_0a76: Expected O, but got Unknown //IL_0a7f: Unknown result type (might be due to invalid IL or missing references) //IL_0a89: Expected O, but got Unknown //IL_0ab3: Unknown result type (might be due to invalid IL or missing references) //IL_0abd: Expected O, but got Unknown //IL_0adb: Unknown result type (might be due to invalid IL or missing references) //IL_0af1: Unknown result type (might be due to invalid IL or missing references) //IL_0b02: Unknown result type (might be due to invalid IL or missing references) //IL_0b0c: Expected O, but got Unknown //IL_0b22: Unknown result type (might be due to invalid IL or missing references) //IL_0b33: Unknown result type (might be due to invalid IL or missing references) //IL_0b44: Unknown result type (might be due to invalid IL or missing references) //IL_0b6a: Unknown result type (might be due to invalid IL or missing references) //IL_0b74: Expected O, but got Unknown //IL_0b7d: Unknown result type (might be due to invalid IL or missing references) //IL_0b87: Expected O, but got Unknown //IL_0b8c: Unknown result type (might be due to invalid IL or missing references) //IL_0b96: Expected O, but got Unknown //IL_0bad: Unknown result type (might be due to invalid IL or missing references) //IL_0bb7: Expected O, but got Unknown //IL_0bc0: Unknown result type (might be due to invalid IL or missing references) //IL_0bca: Expected O, but got Unknown //IL_0be5: Unknown result type (might be due to invalid IL or missing references) //IL_0bef: Expected O, but got Unknown //IL_0c0d: Unknown result type (might be due to invalid IL or missing references) //IL_0c1e: Unknown result type (might be due to invalid IL or missing references) //IL_0c28: Expected O, but got Unknown //IL_0c48: Unknown result type (might be due to invalid IL or missing references) //IL_0c54: Unknown result type (might be due to invalid IL or missing references) //IL_0c5e: Expected O, but got Unknown //IL_0c67: Unknown result type (might be due to invalid IL or missing references) //IL_0c71: Expected O, but got Unknown //IL_0c7a: Unknown result type (might be due to invalid IL or missing references) //IL_0c84: Expected O, but got Unknown //IL_0c8e: Unknown result type (might be due to invalid IL or missing references) //IL_0c98: Expected O, but got Unknown //IL_0cd4: Unknown result type (might be due to invalid IL or missing references) //IL_0cde: Expected O, but got Unknown //IL_0ce7: Unknown result type (might be due to invalid IL or missing references) //IL_0cf1: Expected O, but got Unknown //IL_0d09: Unknown result type (might be due to invalid IL or missing references) //IL_0d13: Expected O, but got Unknown //IL_0d1d: Unknown result type (might be due to invalid IL or missing references) //IL_0d27: Expected O, but got Unknown //IL_0d63: Unknown result type (might be due to invalid IL or missing references) //IL_0d6d: Expected O, but got Unknown //IL_0d76: Unknown result type (might be due to invalid IL or missing references) //IL_0d80: Expected O, but got Unknown //IL_0d98: Unknown result type (might be due to invalid IL or missing references) //IL_0da2: Expected O, but got Unknown //IL_0dac: Unknown result type (might be due to invalid IL or missing references) //IL_0db6: Expected O, but got Unknown //IL_0e01: Unknown result type (might be due to invalid IL or missing references) //IL_0e0b: Expected O, but got Unknown //IL_0e14: Unknown result type (might be due to invalid IL or missing references) //IL_0e1e: Expected O, but got Unknown //IL_0e27: Unknown result type (might be due to invalid IL or missing references) //IL_0e31: Expected O, but got Unknown //IL_0e3b: Unknown result type (might be due to invalid IL or missing references) //IL_0e45: Expected O, but got Unknown //IL_0e90: Unknown result type (might be due to invalid IL or missing references) //IL_0e9a: Expected O, but got Unknown //IL_0ea3: Unknown result type (might be due to invalid IL or missing references) //IL_0ead: Expected O, but got Unknown //IL_0eb6: Unknown result type (might be due to invalid IL or missing references) //IL_0ec0: Expected O, but got Unknown //IL_0eca: Unknown result type (might be due to invalid IL or missing references) //IL_0ed4: Expected O, but got Unknown //IL_0f10: Unknown result type (might be due to invalid IL or missing references) //IL_0f1a: Expected O, but got Unknown //IL_0f23: Unknown result type (might be due to invalid IL or missing references) //IL_0f2d: Expected O, but got Unknown //IL_0f45: Unknown result type (might be due to invalid IL or missing references) //IL_0f4f: Expected O, but got Unknown //IL_0f59: Unknown result type (might be due to invalid IL or missing references) //IL_0f63: Expected O, but got Unknown //IL_0f9f: Unknown result type (might be due to invalid IL or missing references) //IL_0fa9: Expected O, but got Unknown //IL_0fb2: Unknown result type (might be due to invalid IL or missing references) //IL_0fbc: Expected O, but got Unknown //IL_0fd4: Unknown result type (might be due to invalid IL or missing references) //IL_0fde: Expected O, but got Unknown //IL_0fe8: Unknown result type (might be due to invalid IL or missing references) //IL_0ff2: Expected O, but got Unknown //IL_103d: Unknown result type (might be due to invalid IL or missing references) //IL_1047: Expected O, but got Unknown //IL_1050: Unknown result type (might be due to invalid IL or missing references) //IL_105a: Expected O, but got Unknown //IL_1063: Unknown result type (might be due to invalid IL or missing references) //IL_106d: Expected O, but got Unknown //IL_1077: Unknown result type (might be due to invalid IL or missing references) //IL_1081: Expected O, but got Unknown //IL_10cc: Unknown result type (might be due to invalid IL or missing references) //IL_10d6: Expected O, but got Unknown //IL_10df: Unknown result type (might be due to invalid IL or missing references) //IL_10e9: Expected O, but got Unknown //IL_10f2: Unknown result type (might be due to invalid IL or missing references) //IL_10fc: Expected O, but got Unknown Color color = default(Color); ((Color)(ref color))..ctor(0.12f, 0.08f, 0.05f, 0.95f); Color val = default(Color); ((Color)(ref val))..ctor(0.85f, 0.65f, 0.45f, 1f); Color val2 = default(Color); ((Color)(ref val2))..ctor(0.95f, 0.75f, 0.55f, 1f); Color color2 = default(Color); ((Color)(ref color2))..ctor(0.35f, 0.2f, 0.1f, 1f); Color color3 = new Color(0.45f, 0.25f, 0.15f, 1f); Color textColor = default(Color); ((Color)(ref textColor))..ctor(0.25f, 0.12f, 0.05f, 1f); Color textColor2 = default(Color); ((Color)(ref textColor2))..ctor(0.95f, 0.9f, 0.8f, 1f); Color color4 = new Color(0.75f, 0.25f, 0.15f, 1f); Color color5 = default(Color); ((Color)(ref color5))..ctor(0.85f, 0.35f, 0.25f, 1f); Color color6 = default(Color); ((Color)(ref color6))..ctor(0.2f, 0.11f, 0.06f, 0.98f); Color color7 = default(Color); ((Color)(ref color7))..ctor(0.52f, 0.31f, 0.16f, 1f); Color color8 = default(Color); ((Color)(ref color8))..ctor(0.63f, 0.39f, 0.2f, 1f); Color color9 = default(Color); ((Color)(ref color9))..ctor(0.3f, 0.17f, 0.09f, 1f); _darkBackground = CreateColorTexture(color); _lightBackground = CreateColorTexture(val); _redBackground = CreateColorTexture(color4); _conflictOutlineTexture = CreateColorTexture(new Color(0.92f, 0.56f, 0.5f, 0.82f)); Texture2D background = CreateColorTexture(color2); Texture2D background2 = CreateColorTexture(color3); Texture2D background3 = CreateColorTexture(val2); Texture2D background4 = CreateColorTexture(color6); Texture2D background5 = CreateColorTexture(color7); Texture2D background6 = CreateColorTexture(color8); CreateColorTexture(color9); _windowStyle = new GUIStyle(); _windowStyle.normal.background = _darkBackground; _headerStyle = new GUIStyle(GUI.skin.label); _headerStyle.fontSize = 24; _headerStyle.fontStyle = (FontStyle)1; _headerStyle.normal.textColor = val; _headerStyle.margin = new RectOffset(10, 10, 20, 10); _pluginTitleStyle = new GUIStyle(GUI.skin.label); _pluginTitleStyle.fontSize = 22; _pluginTitleStyle.fontStyle = (FontStyle)1; _pluginTitleStyle.normal.textColor = val; _pluginTitleStyle.alignment = (TextAnchor)3; _pluginTitleStyle.wordWrap = true; _pluginTitleStyle.margin = new RectOffset(0, 0, 0, 2); _pluginMetaStyle = new GUIStyle(GUI.skin.label); _pluginMetaStyle.fontSize = 15; _pluginMetaStyle.normal.textColor = new Color(0.85f, 0.72f, 0.56f, 1f); _pluginMetaStyle.alignment = (TextAnchor)3; _pluginMetaStyle.wordWrap = true; _pluginMetaStyle.margin = new RectOffset(0, 0, 0, 4); _pluginDescriptionStyle = new GUIStyle(GUI.skin.label); _pluginDescriptionStyle.fontSize = 19; _pluginDescriptionStyle.normal.textColor = textColor2; _pluginDescriptionStyle.alignment = (TextAnchor)3; _pluginDescriptionStyle.wordWrap = true; _pluginDescriptionStyle.margin = new RectOffset(0, 0, 2, 10); _labelStyle = new GUIStyle(GUI.skin.label); _labelStyle.fontSize = 16; _labelStyle.normal.textColor = textColor2; _labelStyle.alignment = (TextAnchor)3; _descStyle = new GUIStyle(GUI.skin.label); _descStyle.fontSize = 18; _descStyle.normal.textColor = new Color(0.96f, 0.91f, 0.82f, 1f); _descStyle.wordWrap = true; _descStyle.alignment = (TextAnchor)3; _descStyle.margin = new RectOffset(0, 0, 0, 1); _configKeyStyle = new GUIStyle(_labelStyle); _configKeyStyle.fontSize = 12; _configKeyStyle.normal.textColor = new Color(0.83f, 0.61f, 0.34f, 1f); _conflictConfigKeyStyle = new GUIStyle(_configKeyStyle); _conflictConfigKeyStyle.normal.textColor = new Color(0.92f, 0.56f, 0.45f, 1f); _conflictWarningStyle = new GUIStyle(GUI.skin.label); _conflictWarningStyle.fontSize = 13; _conflictWarningStyle.normal.textColor = new Color(0.92f, 0.46f, 0.38f, 1f); _conflictWarningStyle.wordWrap = true; _conflictWarningStyle.alignment = (TextAnchor)3; _conflictWarningStyle.margin = new RectOffset(0, 0, 0, 2); _pluginBtnStyle = new GUIStyle(GUI.skin.button); _pluginBtnStyle.fontSize = 16; _pluginBtnStyle.normal.textColor = textColor; _pluginBtnStyle.normal.background = _lightBackground; _pluginBtnStyle.hover.textColor = textColor; _pluginBtnStyle.hover.background = background3; _pluginBtnStyle.active.textColor = textColor; _pluginBtnStyle.active.background = background3; _pluginBtnStyle.alignment = (TextAnchor)3; _pluginBtnStyle.padding = new RectOffset(15, 10, 10, 10); _selectedPluginBtnStyle = new GUIStyle(_pluginBtnStyle); _selectedPluginBtnStyle.normal.background = _redBackground; _selectedPluginBtnStyle.normal.textColor = textColor2; _selectedPluginBtnStyle.hover.background = CreateColorTexture(color5); _selectedPluginBtnStyle.hover.textColor = textColor2; _selectedPluginBtnStyle.active.background = CreateColorTexture(color5); _selectedPluginBtnStyle.active.textColor = textColor2; _revertBtnStyle = new GUIStyle(GUI.skin.button); _revertBtnStyle.fontSize = 14; _revertBtnStyle.normal.textColor = textColor2; _revertBtnStyle.normal.background = background; _revertBtnStyle.hover.textColor = textColor2; _revertBtnStyle.hover.background = background2; _revertBtnStyle.active.textColor = textColor2; _revertBtnStyle.active.background = background2; _revertBtnStyle.alignment = (TextAnchor)4; _revertBtnStyle.padding = new RectOffset(0, 0, 0, 0); _revertBtnStyle.margin = new RectOffset(0, 0, 0, 0); _revertBtnStyle.contentOffset = Vector2.zero; _revertBtnStyle.overflow = new RectOffset(0, 0, 0, 0); _actionBtnStyle = new GUIStyle(_pluginBtnStyle); _actionBtnStyle.alignment = (TextAnchor)4; _actionBtnStyle.padding = new RectOffset(0, 0, 0, 0); _actionBtnStyle.contentOffset = Vector2.zero; _actionBtnStyle.margin = new RectOffset(0, 0, 0, 0); _actionBtnStyle.overflow = new RectOffset(0, 0, 0, 0); _closeBtnStyle = new GUIStyle(GUI.skin.button); _closeBtnStyle.fontSize = 20; _closeBtnStyle.fontStyle = (FontStyle)1; _closeBtnStyle.normal.textColor = textColor2; _closeBtnStyle.normal.background = _redBackground; _closeBtnStyle.hover.textColor = textColor2; _closeBtnStyle.hover.background = CreateColorTexture(color5); _closeBtnStyle.active.textColor = textColor2; _closeBtnStyle.active.background = CreateColorTexture(color5); _textFieldStyle = new GUIStyle(GUI.skin.textField); _textFieldStyle.fontSize = 15; _textFieldStyle.normal.textColor = textColor2; _textFieldStyle.normal.background = background; _textFieldStyle.hover.textColor = textColor2; _textFieldStyle.hover.background = background2; _textFieldStyle.focused.textColor = textColor2; _textFieldStyle.focused.background = background; _textFieldStyle.active.textColor = textColor2; _textFieldStyle.active.background = background; _textFieldStyle.padding = new RectOffset(8, 8, 8, 8); _textFieldStyle.margin = new RectOffset(0, 0, 0, 0); _textFieldStyle.alignment = (TextAnchor)3; _conflictTextFieldStyle = new GUIStyle(_textFieldStyle); _conflictTextFieldStyle.normal.background = _redBackground; _conflictTextFieldStyle.hover.background = CreateColorTexture(color5); _conflictTextFieldStyle.focused.background = _redBackground; _conflictTextFieldStyle.active.background = _redBackground; _checkboxNormalStyle = new GUIStyle(GUIStyle.none); _checkboxNormalStyle.normal.background = background; _checkboxNormalStyle.hover.background = background2; _checkboxNormalStyle.normal.textColor = textColor2; _checkboxNormalStyle.alignment = (TextAnchor)4; _checkboxNormalStyle.fontSize = 16; _checkboxNormalStyle.margin = new RectOffset(0, 0, 0, 0); _checkboxActiveStyle = new GUIStyle(_checkboxNormalStyle); _checkboxActiveStyle.normal.background = _redBackground; _checkboxActiveStyle.hover.background = CreateColorTexture(color5); _sectionHeaderStyle = new GUIStyle(GUIStyle.none); _sectionHeaderStyle.fontSize = 24; _sectionHeaderStyle.fontStyle = (FontStyle)1; _sectionHeaderStyle.normal.textColor = val; _sectionHeaderStyle.hover.textColor = val2; _sectionHeaderStyle.margin = new RectOffset(10, 10, 20, 10); _dropdownButtonStyle = new GUIStyle(_pluginBtnStyle); _dropdownButtonStyle.padding = new RectOffset(12, 34, 6, 6); _dropdownButtonStyle.margin = new RectOffset(0, 0, 0, 0); _dropdownButtonStyle.alignment = (TextAnchor)3; _dropdownButtonStyle.clipping = (TextClipping)1; _dropdownButtonStyle.fixedHeight = 0f; _conflictDropdownButtonStyle = new GUIStyle(_dropdownButtonStyle); _conflictDropdownButtonStyle.normal.background = _redBackground; _conflictDropdownButtonStyle.hover.background = CreateColorTexture(color5); _conflictDropdownButtonStyle.active.background = CreateColorTexture(color5); _dropdownTextStyle = new GUIStyle(_labelStyle); _dropdownTextStyle.fontSize = 15; _dropdownTextStyle.normal.textColor = textColor2; _dropdownTextStyle.hover.textColor = textColor2; _dropdownTextStyle.active.textColor = textColor2; _dropdownTextStyle.alignment = (TextAnchor)3; _dropdownTextStyle.clipping = (TextClipping)1; _dropdownTextStyle.padding = new RectOffset(0, 0, 0, 0); _dropdownTextStyle.margin = new RectOffset(0, 0, 0, 0); _dropdownItemStyle = new GUIStyle(_textFieldStyle); _dropdownItemStyle.fontSize = 15; _dropdownItemStyle.padding = new RectOffset(12, 10, 6, 6); _dropdownItemStyle.margin = new RectOffset(0, 0, 0, 0); _dropdownItemStyle.alignment = (TextAnchor)3; _dropdownItemStyle.clipping = (TextClipping)1; _dropdownSelectedItemStyle = new GUIStyle(_dropdownItemStyle); _dropdownSelectedItemStyle.normal.background = _redBackground; _dropdownSelectedItemStyle.hover.background = CreateColorTexture(color5); _dropdownArrowStyle = new GUIStyle(_labelStyle); _dropdownArrowStyle.alignment = (TextAnchor)4; _dropdownArrowStyle.fontStyle = (FontStyle)1; _dropdownArrowStyle.normal.textColor = textColor; _scrollViewBackgroundStyle = new GUIStyle(GUIStyle.none); _scrollViewBackgroundStyle.margin = new RectOffset(0, 0, 0, 0); _scrollViewBackgroundStyle.padding = new RectOffset(0, 0, 0, 0); _verticalScrollbarStyle = new GUIStyle(GUI.skin.verticalScrollbar); _verticalScrollbarStyle.normal.background = background4; _verticalScrollbarStyle.hover.background = background4; _verticalScrollbarStyle.active.background = background4; _verticalScrollbarStyle.border = new RectOffset(0, 0, 0, 0); _verticalScrollbarStyle.padding = new RectOffset(2, 2, 2, 2); _verticalScrollbarStyle.fixedWidth = 12f; _verticalScrollbarStyle.margin = new RectOffset(0, 0, 0, 0); _verticalScrollbarThumbStyle = new GUIStyle(GUI.skin.verticalScrollbarThumb); _verticalScrollbarThumbStyle.normal.background = background5; _verticalScrollbarThumbStyle.hover.background = background6; _verticalScrollbarThumbStyle.active.background = background3; _verticalScrollbarThumbStyle.border = new RectOffset(0, 0, 0, 0); _verticalScrollbarThumbStyle.padding = new RectOffset(0, 0, 0, 0); _verticalScrollbarThumbStyle.fixedWidth = 8f; _verticalScrollbarThumbStyle.margin = new RectOffset(0, 0, 0, 0); _verticalScrollbarUpButtonStyle = new GUIStyle(GUI.skin.verticalScrollbarUpButton); _verticalScrollbarUpButtonStyle.normal.background = background4; _verticalScrollbarUpButtonStyle.hover.background = background4; _verticalScrollbarUpButtonStyle.active.background = background4; _verticalScrollbarUpButtonStyle.fixedHeight = 0f; _verticalScrollbarUpButtonStyle.border = new RectOffset(0, 0, 0, 0); _verticalScrollbarUpButtonStyle.padding = new RectOffset(0, 0, 0, 0); _verticalScrollbarUpButtonStyle.margin = new RectOffset(0, 0, 0, 0); _verticalScrollbarDownButtonStyle = new GUIStyle(GUI.skin.verticalScrollbarDownButton); _verticalScrollbarDownButtonStyle.normal.background = background4; _verticalScrollbarDownButtonStyle.hover.background = background4; _verticalScrollbarDownButtonStyle.active.background = background4; _verticalScrollbarDownButtonStyle.fixedHeight = 0f; _verticalScrollbarDownButtonStyle.border = new RectOffset(0, 0, 0, 0); _verticalScrollbarDownButtonStyle.padding = new RectOffset(0, 0, 0, 0); _verticalScrollbarDownButtonStyle.margin = new RectOffset(0, 0, 0, 0); _horizontalScrollbarStyle = new GUIStyle(GUI.skin.horizontalScrollbar); _horizontalScrollbarStyle.normal.background = background4; _horizontalScrollbarStyle.hover.background = background4; _horizontalScrollbarStyle.active.background = background4; _horizontalScrollbarStyle.border = new RectOffset(0, 0, 0, 0); _horizontalScrollbarStyle.padding = new RectOffset(2, 2, 2, 2); _horizontalScrollbarStyle.fixedHeight = 12f; _horizontalScrollbarStyle.margin = new RectOffset(0, 0, 0, 0); _horizontalScrollbarThumbStyle = new GUIStyle(GUI.skin.horizontalScrollbarThumb); _horizontalScrollbarThumbStyle.normal.background = background5; _horizontalScrollbarThumbStyle.hover.background = background6; _horizontalScrollbarThumbStyle.active.background = background3; _horizontalScrollbarThumbStyle.border = new RectOffset(0, 0, 0, 0); _horizontalScrollbarThumbStyle.padding = new RectOffset(0, 0, 0, 0); _horizontalScrollbarThumbStyle.fixedHeight = 8f; _horizontalScrollbarThumbStyle.margin = new RectOffset(0, 0, 0, 0); _horizontalScrollbarLeftButtonStyle = new GUIStyle(GUI.skin.horizontalScrollbarLeftButton); _horizontalScrollbarLeftButtonStyle.normal.background = background4; _horizontalScrollbarLeftButtonStyle.hover.background = background4; _horizontalScrollbarLeftButtonStyle.active.background = background4; _horizontalScrollbarLeftButtonStyle.fixedWidth = 0f; _horizontalScrollbarLeftButtonStyle.border = new RectOffset(0, 0, 0, 0); _horizontalScrollbarLeftButtonStyle.padding = new RectOffset(0, 0, 0, 0); _horizontalScrollbarLeftButtonStyle.margin = new RectOffset(0, 0, 0, 0); _horizontalScrollbarRightButtonStyle = new GUIStyle(GUI.skin.horizontalScrollbarRightButton); _horizontalScrollbarRightButtonStyle.normal.background = background4; _horizontalScrollbarRightButtonStyle.hover.background = background4; _horizontalScrollbarRightButtonStyle.active.background = background4; _horizontalScrollbarRightButtonStyle.fixedWidth = 0f; _horizontalScrollbarRightButtonStyle.border = new RectOffset(0, 0, 0, 0); _horizontalScrollbarRightButtonStyle.padding = new RectOffset(0, 0, 0, 0); _horizontalScrollbarRightButtonStyle.margin = new RectOffset(0, 0, 0, 0); _stylesInitialized = true; } private static bool AreStyleResourcesAlive() { if ((Object)(object)_darkBackground != (Object)null && (Object)(object)_lightBackground != (Object)null && (Object)(object)_redBackground != (Object)null && (Object)(object)_conflictOutlineTexture != (Object)null && _windowStyle != null && (Object)(object)_windowStyle.normal.background != (Object)null && _pluginBtnStyle != null && (Object)(object)_pluginBtnStyle.normal.background != (Object)null && _selectedPluginBtnStyle != null && (Object)(object)_selectedPluginBtnStyle.normal.background != (Object)null && _textFieldStyle != null && (Object)(object)_textFieldStyle.normal.background != (Object)null && _conflictTextFieldStyle != null && (Object)(object)_conflictTextFieldStyle.normal.background != (Object)null && _conflictDropdownButtonStyle != null && (Object)(object)_conflictDropdownButtonStyle.normal.background != (Object)null && _closeBtnStyle != null) { return (Object)(object)_closeBtnStyle.normal.background != (Object)null; } return false; } private static void ReleaseGeneratedTextures() { for (int i = 0; i < _generatedTextures.Count; i++) { Texture2D val = _generatedTextures[i]; if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)val); } } _generatedTextures.Clear(); _darkBackground = null; _lightBackground = null; _redBackground = null; _conflictOutlineTexture = null; } private static Texture2D CreateColorTexture(Color color) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_000b: Unknown result type (might be due to invalid IL or missing references) Texture2D val = new Texture2D(1, 1); val.SetPixel(0, 0, color); val.Apply(); ((Object)val).hideFlags = (HideFlags)61; _generatedTextures.Add(val); return val; } private static float CalculateTextHeight(GUIStyle style, string text, float width) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown if (style == null || string.IsNullOrWhiteSpace(text)) { return 0f; } return style.CalcHeight(new GUIContent(text), Mathf.Max(1f, width)); } } } namespace ModConfigManager.Localization { public static class LocalizationHelper { public static Dictionary GetDefaultTranslations(string language) { Dictionary dictionary = new Dictionary(); switch (language) { case "zh": dictionary.Add("plugin.initializing", "开始初始化..."); dictionary.Add("plugin.author_prefix", "作者:"); dictionary.Add("plugin.initialized", "初始化成功!"); dictionary.Add("plugin.patches_skipped", "补丁已应用,跳过..."); dictionary.Add("ui.title", "模组配置管理器"); dictionary.Add("plugin.description", "统一管理和编辑已安装模组配置,并支持显示第三方模组自定义信息。"); dictionary.Add("config.toggle_manager_key", "打开配置管理器的快捷键"); dictionary.Add("ui.restart_hint", "修改配置后重启游戏才可以生效"); dictionary.Add("ui.close", "关闭"); dictionary.Add("ui.mod_list", "模组列表"); dictionary.Add("ui.select_mod_first", "请先从左侧选择一个模组"); dictionary.Add("ui.reset_button", "恢复默认"); dictionary.Add("ui.revert_button", "恢复"); dictionary.Add("ui.range_hint", "范围"); dictionary.Add("ui.hotkey_conflict", "快捷键冲突(与 {0} 冲突)"); dictionary.Add("ui.no_config_file", "未找到配置文件,或该模组没有可编辑配置"); break; case "zh-TW": dictionary.Add("plugin.initializing", "開始初始化..."); dictionary.Add("plugin.author_prefix", "作者:"); dictionary.Add("plugin.initialized", "初始化成功!"); dictionary.Add("plugin.patches_skipped", "補丁已應用,跳過..."); dictionary.Add("ui.title", "模組配置管理器"); dictionary.Add("plugin.description", "統一管理和編輯已安裝模組配置,並支援顯示第三方模組自訂資訊。"); dictionary.Add("config.toggle_manager_key", "開啟配置管理器的快捷鍵"); dictionary.Add("ui.restart_hint", "修改配置後重新啟動遊戲才會生效"); dictionary.Add("ui.close", "關閉"); dictionary.Add("ui.mod_list", "模組列表"); dictionary.Add("ui.select_mod_first", "請先從左側選擇一個模組"); dictionary.Add("ui.reset_button", "恢復預設"); dictionary.Add("ui.revert_button", "復原"); dictionary.Add("ui.range_hint", "範圍"); dictionary.Add("ui.hotkey_conflict", "快捷鍵衝突(與 {0} 衝突)"); dictionary.Add("ui.no_config_file", "未找到設定檔,或該模組沒有可編輯配置"); break; case "en": dictionary.Add("plugin.initializing", "Initializing..."); dictionary.Add("plugin.author_prefix", "Author: "); dictionary.Add("plugin.initialized", "Initialized successfully!"); dictionary.Add("plugin.patches_skipped", "Patches already applied, skipping..."); dictionary.Add("ui.title", "Mod Config Manager"); dictionary.Add("plugin.description", "Unified management and editing of mod configurations, and support for displaying custom information from third-party mods."); dictionary.Add("config.toggle_manager_key", "Hotkey to open config manager"); dictionary.Add("ui.restart_hint", "Configuration changed. Restart the game to apply."); dictionary.Add("ui.close", "Close"); dictionary.Add("ui.mod_list", "Mods"); dictionary.Add("ui.select_mod_first", "Select a mod from the left panel."); dictionary.Add("ui.reset_button", "Reset to Defaults"); dictionary.Add("ui.revert_button", "Revert"); dictionary.Add("ui.range_hint", "Range"); dictionary.Add("ui.hotkey_conflict", "Hotkey conflict (conflicts with {0})"); dictionary.Add("ui.no_config_file", "Config file not found or has no editable entries."); break; case "ja": dictionary.Add("plugin.initializing", "初期化中..."); dictionary.Add("plugin.author_prefix", "作者: "); dictionary.Add("plugin.initialized", "初期化に成功しました!"); dictionary.Add("plugin.patches_skipped", "パッチは適用済みです。スキップします..."); dictionary.Add("ui.title", "MOD設定マネージャー"); dictionary.Add("plugin.description", "インストール済みMODの設定を統合管理・編集し、サードパーティ製MODのカスタム情報表示をサポートします。"); dictionary.Add("config.toggle_manager_key", "設定マネージャーを開くホットキー"); dictionary.Add("ui.restart_hint", "設定の変更はゲーム再起動後に有効になります"); dictionary.Add("ui.close", "閉じる"); dictionary.Add("ui.mod_list", "MODリスト"); dictionary.Add("ui.select_mod_first", "まず左側からMODを選択してください"); dictionary.Add("ui.reset_button", "デフォルトに戻す"); dictionary.Add("ui.revert_button", "元に戻す"); dictionary.Add("ui.range_hint", "範囲"); dictionary.Add("ui.hotkey_conflict", "ホットキーの競合({0} と競合)"); dictionary.Add("ui.no_config_file", "設定ファイルが見つからないか、このMODには編集可能な設定がありません"); break; } return dictionary; } } public class LocalizationManager { private static LocalizationManager _instance; private readonly Dictionary> _localizations = new Dictionary>(); private string _currentLocale = "en"; public static readonly string[] SupportedLanguages = new string[4] { "en", "zh", "zh-TW", "ja" }; public static LocalizationManager Instance => _instance ?? (_instance = new LocalizationManager()); private LocalizationManager() { string[] supportedLanguages = SupportedLanguages; foreach (string text in supportedLanguages) { Dictionary defaultTranslations = LocalizationHelper.GetDefaultTranslations(text); if (defaultTranslations != null && defaultTranslations.Count > 0) { _localizations[text] = defaultTranslations; } } } private string GetCurrentLocale() { if (!PlayerPrefs.HasKey("Lang")) { return _currentLocale; } int @int = PlayerPrefs.GetInt("Lang"); ILocalesProvider availableLocales = LocalizationSettings.AvailableLocales; List val = ((availableLocales != null) ? availableLocales.Locales : null); if (val == null || @int < 0 || @int >= val.Count) { return _currentLocale; } string code = val[@int].Identifier.Code; _currentLocale = (_localizations.ContainsKey(code) ? code : "en"); return _currentLocale; } public string GetLocalizedText(string key, params object[] args) { string currentLocale = GetCurrentLocale(); if (_localizations.TryGetValue(currentLocale, out var value) && value.TryGetValue(key, out var value2)) { return string.Format(value2, args); } if (currentLocale != "en" && _localizations.TryGetValue("en", out var value3) && value3.TryGetValue(key, out var value4)) { return string.Format(value4, args); } return key; } } } namespace ModConfigManager.Configuration { public enum ConfigValueType { Bool, Int, Float, String } public class ConfigItem { public string Section; public string Key; public string Value; public string DefaultValue; public ConfigValueType ValueType; public int LineIndex; public string Description; public List AcceptableValues = new List(); public bool HasRange; public double RangeMin; public double RangeMax; } public class ConfigSection { public string Name; public List Items = new List(); } public class ConfigFileModel { public string Path; public List Lines = new List(); public List Sections = new List(); public void SetValue(string section, string key, string value) { ConfigItem configItem = Sections.SelectMany((ConfigSection s) => s.Items).FirstOrDefault((ConfigItem i) => i.Section == section && i.Key == key); if (configItem != null) { configItem.Value = value; string text = key + " = "; Lines[configItem.LineIndex] = text + value; } } public void Save() { string directoryName = System.IO.Path.GetDirectoryName(Path); if (!string.IsNullOrWhiteSpace(directoryName) && !Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } File.WriteAllLines(Path, Lines); } } public static class ConfigParser { public static ConfigFileModel Parse(string path) { ConfigFileModel configFileModel = new ConfigFileModel { Path = path }; if (!File.Exists(path)) { return configFileModel; } List list = (configFileModel.Lines = File.ReadAllLines(path).ToList()); string text = string.Empty; Dictionary dictionary = new Dictionary(); for (int i = 0; i < list.Count; i++) { string text2 = list[i].Trim(); if (text2.Length == 0) { continue; } if (text2.StartsWith("[") && text2.EndsWith("]")) { text = text2.Substring(1, text2.Length - 2); if (!dictionary.ContainsKey(text)) { dictionary[text] = new ConfigSection { Name = text }; } } else { if (text2.StartsWith("#") || text2.StartsWith(";")) { continue; } int num = text2.IndexOf('='); if (num <= 0) { continue; } string key = text2.Substring(0, num).Trim(); string value = text2.Substring(num + 1).Trim(); List list2 = new List(); bool hasRange = false; double result = 0.0; double result2 = 0.0; for (int num2 = i - 1; num2 >= 0; num2--) { string text3 = list[num2].Trim(); if (text3.Length == 0 || (text3.StartsWith("[") && text3.EndsWith("]")) || (!text3.StartsWith("#") && !text3.StartsWith(";"))) { break; } string text4 = text3.TrimStart('#', ';').Trim(); if (text4.StartsWith("Acceptable values:", StringComparison.OrdinalIgnoreCase)) { string text5 = text4.Substring("Acceptable values:".Length).Trim(); list2.AddRange(from s in text5.Split(',') select s.Trim()); } else if (text4.StartsWith("Acceptable value range:", StringComparison.OrdinalIgnoreCase)) { Match match = Regex.Match(text4.Substring("Acceptable value range:".Length).Trim(), "from\\s+(-?\\d+(?:\\.\\d+)?)\\s+to\\s+(-?\\d+(?:\\.\\d+)?)", RegexOptions.IgnoreCase); if (match.Success && double.TryParse(match.Groups[1].Value, NumberStyles.Float, CultureInfo.InvariantCulture, out result) && double.TryParse(match.Groups[2].Value, NumberStyles.Float, CultureInfo.InvariantCulture, out result2)) { hasRange = true; } } } string text6 = ExtractDescription(list, i); string text7 = ExtractSettingType(list, i); string text8 = ExtractDefaultValue(list, i); if (!string.IsNullOrEmpty(text7) || !string.IsNullOrEmpty(text8) || !string.IsNullOrEmpty(text6)) { ConfigItem item = new ConfigItem { Section = text, Key = key, Value = value, DefaultValue = text8, ValueType = InferType(value, text7, list2), LineIndex = i, Description = text6, AcceptableValues = list2, HasRange = hasRange, RangeMin = result, RangeMax = result2 }; if (!dictionary.ContainsKey(text)) { dictionary[text] = new ConfigSection { Name = text }; } dictionary[text].Items.Add(item); } } } configFileModel.Sections = dictionary.Values.ToList(); return configFileModel; } private static string ExtractDescription(List lines, int lineIndex) { List list = new List(); for (int num = lineIndex - 1; num >= 0; num--) { string text = lines[num].Trim(); if (text.Length == 0 || (text.StartsWith("[") && text.EndsWith("]")) || (!text.StartsWith("#") && !text.StartsWith(";"))) { break; } list.Insert(0, text.TrimStart('#', ';').Trim()); } List list2 = new List(); for (int i = 0; i < list.Count; i++) { string text2 = list[i]; if (text2.Length != 0 && !text2.StartsWith("Acceptable values:", StringComparison.OrdinalIgnoreCase) && !text2.StartsWith("Acceptable value range:", StringComparison.OrdinalIgnoreCase) && !text2.StartsWith("Setting type:", StringComparison.OrdinalIgnoreCase) && !text2.StartsWith("Default value:", StringComparison.OrdinalIgnoreCase)) { list2.Add(text2); } } if (list2.Count <= 0) { return null; } return string.Join("\n", list2); } private static string ExtractSettingType(List lines, int lineIndex) { for (int num = lineIndex - 1; num >= 0; num--) { string text = lines[num].Trim(); if (text.Length == 0 || (text.StartsWith("[") && text.EndsWith("]")) || (!text.StartsWith("#") && !text.StartsWith(";"))) { break; } string text2 = text.TrimStart('#', ';').Trim(); if (text2.StartsWith("Setting type:", StringComparison.OrdinalIgnoreCase)) { return text2.Substring("Setting type:".Length).Trim(); } } return null; } private static string ExtractDefaultValue(List lines, int lineIndex) { for (int num = lineIndex - 1; num >= 0; num--) { string text = lines[num].Trim(); if (text.Length == 0 || (text.StartsWith("[") && text.EndsWith("]")) || (!text.StartsWith("#") && !text.StartsWith(";"))) { break; } string text2 = text.TrimStart('#', ';').Trim(); if (text2.StartsWith("Default value:", StringComparison.OrdinalIgnoreCase)) { return text2.Substring("Default value:".Length).Trim(); } } return null; } private static ConfigValueType InferType(string value, string settingType, List acceptableValues) { if (!string.IsNullOrWhiteSpace(settingType)) { if (settingType.Equals("Boolean", StringComparison.OrdinalIgnoreCase)) { return ConfigValueType.Bool; } if (settingType.Equals("Int32", StringComparison.OrdinalIgnoreCase) || settingType.Equals("Integer", StringComparison.OrdinalIgnoreCase) || settingType.Equals("Int", StringComparison.OrdinalIgnoreCase)) { return ConfigValueType.Int; } if (settingType.Equals("Single", StringComparison.OrdinalIgnoreCase) || settingType.Equals("Float", StringComparison.OrdinalIgnoreCase) || settingType.Equals("Double", StringComparison.OrdinalIgnoreCase)) { return ConfigValueType.Float; } if (settingType.Equals("String", StringComparison.OrdinalIgnoreCase)) { return ConfigValueType.String; } if (settingType.Equals("KeyboardShortcut", StringComparison.OrdinalIgnoreCase)) { return ConfigValueType.String; } } if (acceptableValues != null && acceptableValues.Count > 0) { if (acceptableValues.Select((string v) => (v ?? string.Empty).Trim().ToLowerInvariant()).ToList().All((string v) => v == "true" || v == "false")) { return ConfigValueType.Bool; } return ConfigValueType.String; } if (bool.TryParse(value, out var _)) { return ConfigValueType.Bool; } if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var _)) { return ConfigValueType.Int; } if (float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out var _)) { return ConfigValueType.Float; } Regex.IsMatch(value, "^[A-Za-z0-9]+(\\s*\\+\\s*[A-Za-z0-9]+)*$"); return ConfigValueType.String; } public static void ResetToDefaults(ConfigFileModel model) { if (model == null) { return; } foreach (ConfigItem item in model.Sections.SelectMany((ConfigSection s) => s.Items)) { if (!string.IsNullOrEmpty(item.DefaultValue)) { model.SetValue(item.Section, item.Key, item.DefaultValue); } } model.Save(); } } public sealed class HotkeyConflictSource { public string PluginGuid { get; set; } public string DisplayName { get; set; } } public static class ConflictDetector { public static Dictionary> GetConflictingValues() { Dictionary> dictionary = new Dictionary>(StringComparer.OrdinalIgnoreCase); IEnumerable enumerable; if (((BaseChainloader)(object)IL2CPPChainloader.Instance)?.Plugins == null) { enumerable = Enumerable.Empty(); } else { IEnumerable values = ((BaseChainloader)(object)IL2CPPChainloader.Instance).Plugins.Values; enumerable = values; } foreach (PluginInfo item in enumerable) { string configPathForPlugin = GetConfigPathForPlugin(item); if (!File.Exists(configPathForPlugin)) { continue; } foreach (ConfigItem item2 in ConfigParser.Parse(configPathForPlugin).Sections.SelectMany((ConfigSection section) => section.Items)) { if (!IsHotkeyItem(item2)) { continue; } string text = NormalizeValue(item2.Value); if (!string.IsNullOrEmpty(text)) { if (!dictionary.TryGetValue(text, out var value)) { value = (dictionary[text] = new Dictionary(StringComparer.OrdinalIgnoreCase)); } string text2 = item.Metadata.GUID ?? string.Empty; if (!value.ContainsKey(text2)) { value[text2] = new HotkeyConflictSource { PluginGuid = text2, DisplayName = ResolveDisplayName(item) }; } } } } return dictionary.Where((KeyValuePair> pair) => pair.Value.Count > 1).ToDictionary>, string, List>((KeyValuePair> pair) => pair.Key, (KeyValuePair> pair) => pair.Value.Values.OrderBy((HotkeyConflictSource source) => source.DisplayName).ToList(), StringComparer.OrdinalIgnoreCase); } public static bool IsHotkeyItem(ConfigItem item) { if (item == null || item.ValueType != ConfigValueType.String) { return false; } string text = (item.Key ?? string.Empty).ToLowerInvariant(); string text2 = (item.Description ?? string.Empty).ToLowerInvariant(); if (text.Contains("hotkey") || text.Contains("keybind") || text.Contains("shortcut") || text.Contains("togglekey")) { return true; } if (text2.Contains("快捷键") || text2.Contains("热键") || text2.Contains("hotkey") || text2.Contains("keybind") || text2.Contains("shortcut")) { return true; } return false; } public static string NormalizeValue(string value) { if (string.IsNullOrWhiteSpace(value)) { return string.Empty; } string[] array = (from part in value.Split(new char[1] { '+' }, StringSplitOptions.RemoveEmptyEntries) select part.Trim() into part where !string.IsNullOrEmpty(part) select part).ToArray(); if (array.Length == 0) { return string.Empty; } return string.Join("+", array).ToLowerInvariant(); } private static string ResolveDisplayName(PluginInfo plugin) { string text = plugin.Metadata.GUID ?? string.Empty; if (ModConfigManagerAPI.RegisteredPlugins.TryGetValue(text, out var value) && !string.IsNullOrWhiteSpace(value.Name)) { return value.Name; } if (!string.IsNullOrWhiteSpace(plugin.Metadata.Name)) { return plugin.Metadata.Name; } return text; } private static string GetConfigPathForPlugin(PluginInfo plugin) { string text = plugin.Metadata.GUID ?? string.Empty; string text2 = Path.Combine(Paths.ConfigPath, text + ".cfg"); if (File.Exists(text2)) { return text2; } string text3 = plugin.Metadata.Name ?? string.Empty; string text4 = Path.Combine(Paths.ConfigPath, text3 + ".cfg"); if (File.Exists(text4)) { return text4; } return text2; } } } namespace ModConfigManager.Api { public static class ModConfigManagerAPI { internal class CustomPluginInfo { public string Name; public string Version; public string Author; public string Description; } internal static readonly Dictionary RegisteredPlugins = new Dictionary(); public static void RegisterPluginInfo(string guid, string name = null, string version = null, string author = null, string description = null) { if (!string.IsNullOrEmpty(guid)) { RegisteredPlugins[guid] = new CustomPluginInfo { Name = name, Version = version, Author = author, Description = description }; } } } }