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.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GUIFramework; using HarmonyLib; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UI; using Valheim.SettingsGui; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: IgnoresAccessChecksTo("assembly_guiutils")] [assembly: IgnoresAccessChecksTo("assembly_valheim")] [assembly: AssemblyCompany("ModConfigs")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.202607190821")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ModConfigs")] [assembly: AssemblyTitle("ModConfigs")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ModdedWolfsConfigs { public static class ModdedWolfsConfigsAPI { public static void OpenConfigPanel() { ConfigPanelOpener.Open(); } } public sealed class ConfigurationManagerAttributes { public bool? Browsable; public bool? IsAdminOnly; public bool? IsAdvanced; public int? Order; public string DispName; public string Description; public string Category; public bool? ReadOnly; public bool? HideDefaultButton; public object DefaultValue; public bool? ShowRangeAsPercent; public bool? HideSettingName; } internal static class ClientLocalBindings { internal static bool IsBinding(ConfigEntryBase entry) { if (entry == null) { return false; } Type settingType = entry.SettingType; if (settingType == typeof(KeyCode) || settingType == typeof(KeyboardShortcut)) { return true; } return (settingType.FullName ?? string.Empty).IndexOf("KeyboardShortcut", StringComparison.OrdinalIgnoreCase) >= 0; } } internal static class ConfigApply { internal static void PersistAfterLocalChange(ConfigEntryBase entry) { if (entry == null) { return; } try { ConfigFile configFile = entry.ConfigFile; if (configFile != null) { configFile.Save(); } } catch (Exception ex) { ModdedWolfsConfigsPlugin.Log.LogWarning((object)("Failed to save config: " + ex.Message)); } } } internal sealed class DiscoveredPlugin { public string Guid; public string Name; public string Version; public BaseUnityPlugin Plugin; public List Sections = new List(); } internal sealed class DiscoveredSection { public string Name; public List Entries = new List(); } internal static class ConfigDiscovery { private static readonly HashSet HiddenConfigKeys = new HashSet(StringComparer.OrdinalIgnoreCase) { "LastSelectedModGuid", "ShowMenuButton" }; private static bool _loggedHiddenKeyFilter; internal static bool IsHiddenConfigKey(string key) { if (!string.IsNullOrEmpty(key)) { return HiddenConfigKeys.Contains(key); } return false; } internal static bool ShouldRenderEntry(ConfigEntryBase entry) { if (((entry != null) ? entry.Definition : null) == (ConfigDefinition)null) { return false; } return !IsHiddenConfigKey(entry.Definition.Key); } internal static List Discover() { List list = new List(); foreach (KeyValuePair item in Chainloader.PluginInfos.OrderBy, string>((KeyValuePair p) => p.Value.Metadata.Name, StringComparer.OrdinalIgnoreCase)) { PluginInfo value = item.Value; BaseUnityPlugin instance = value.Instance; if ((Object)(object)instance == (Object)null || (ModdedWolfsConfigsPlugin.HideSelfFromList.Value && value.Metadata.GUID == "ModdedWolf.ModConfigs")) { continue; } Dictionary dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); foreach (ConfigDefinition key in instance.Config.Keys) { if (IsHiddenConfigKey(key.Key)) { if (!_loggedHiddenKeyFilter && value.Metadata.GUID == "ModdedWolf.ModConfigs") { _loggedHiddenKeyFilter = true; ModdedWolfsConfigsPlugin.Log.LogInfo((object)("ConfigDiscovery: hiding internal key '" + key.Key + "' from UI (still stored in cfg).")); } continue; } ConfigEntryBase val = instance.Config[key]; if (IsBrowsable(val)) { if (!dictionary.TryGetValue(key.Section, out var value2)) { value2 = new DiscoveredSection { Name = key.Section }; dictionary[key.Section] = value2; } value2.Entries.Add(val); } } if (dictionary.Count == 0) { continue; } DiscoveredPlugin discoveredPlugin = new DiscoveredPlugin { Guid = value.Metadata.GUID, Name = value.Metadata.Name, Version = (value.Metadata.Version?.ToString() ?? ""), Plugin = instance }; foreach (DiscoveredSection item2 in dictionary.Values.OrderBy((DiscoveredSection s) => s.Name, StringComparer.OrdinalIgnoreCase)) { item2.Entries = item2.Entries.OrderByDescending(GetOrder).ThenBy((ConfigEntryBase e) => e.Definition.Key, StringComparer.OrdinalIgnoreCase).ToList(); discoveredPlugin.Sections.Add(item2); } list.Add(discoveredPlugin); } return list; } private static bool IsBrowsable(ConfigEntryBase entry) { if (entry == null) { return false; } if (IsHiddenConfigKey(entry.Definition.Key)) { return false; } ConfigDescription description = entry.Description; object[] array = ((description != null) ? description.Tags : null); if (array == null) { return true; } foreach (object obj in array) { if (obj == null) { continue; } if (obj is ConfigurationManagerAttributes { Browsable: var browsable } configurationManagerAttributes) { if (browsable == false) { return false; } if (configurationManagerAttributes.IsAdvanced == true && !ModdedWolfsConfigsPlugin.ShowAdvancedSettings.Value) { return false; } continue; } PropertyInfo property = obj.GetType().GetProperty("Browsable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null && property.PropertyType == typeof(bool?) && (bool?)property.GetValue(obj, null) == false) { return false; } PropertyInfo property2 = obj.GetType().GetProperty("IsAdvanced", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property2 != null && property2.PropertyType == typeof(bool?) && (bool?)property2.GetValue(obj, null) == true && !ModdedWolfsConfigsPlugin.ShowAdvancedSettings.Value) { return false; } } return true; } private static int GetOrder(ConfigEntryBase entry) { ConfigDescription description = entry.Description; object[] array = ((description != null) ? description.Tags : null); if (array == null) { return 0; } foreach (object obj in array) { if (obj is ConfigurationManagerAttributes configurationManagerAttributes && configurationManagerAttributes.Order.HasValue) { return configurationManagerAttributes.Order.Value; } PropertyInfo propertyInfo = obj?.GetType().GetProperty("Order", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (propertyInfo != null && propertyInfo.PropertyType == typeof(int?)) { int? num = (int?)propertyInfo.GetValue(obj, null); if (num.HasValue) { return num.Value; } } } return 0; } internal static string GetDisplayName(ConfigEntryBase entry) { ConfigDescription description = entry.Description; object[] array = ((description != null) ? description.Tags : null); if (array != null) { for (int i = 0; i < array.Length; i++) { if (array[i] is ConfigurationManagerAttributes configurationManagerAttributes && !string.IsNullOrEmpty(configurationManagerAttributes.DispName)) { return configurationManagerAttributes.DispName; } PropertyInfo propertyInfo = array[i]?.GetType().GetProperty("DispName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (propertyInfo != null && propertyInfo.PropertyType == typeof(string)) { string text = propertyInfo.GetValue(array[i], null) as string; if (!string.IsNullOrEmpty(text)) { return text; } } } } return entry.Definition.Key; } } internal static class PauseMenuButton { [CompilerGenerated] private static class <>O { public static UnityAction <0>__Open; } internal static void Refresh() { try { bool flag = ModdedWolfsConfigsPlugin.ShowMainMenuButton == null || ModdedWolfsConfigsPlugin.ShowMainMenuButton.Value; bool flag2 = ModdedWolfsConfigsPlugin.ShowPauseMenuButton == null || ModdedWolfsConfigsPlugin.ShowPauseMenuButton.Value; if ((Object)(object)FejdStartup.instance != (Object)null) { Transform val = (((Object)(object)FejdStartup.instance.m_menuList != (Object)null) ? FejdStartup.instance.m_menuList.transform : null); Setup(FindMenuEntries(val), flag); if ((Object)(object)val != (Object)null) { FejdStartup.instance.m_menuButtons = ((Component)val).GetComponentsInChildren