using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Pigeon; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("AlwaysAdditionalDetails")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("AlwaysAdditionalDetails")] [assembly: AssemblyTitle("AlwaysAdditionalDetails")] [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; } } } internal static class DefaultAdditionalDetailsPatches { [HarmonyPatch(typeof(HoverInfo), "ShowExtraInfo")] [HarmonyPrefix] public static bool ShowExtraInfoPrefix(ref bool __result) { if (SparrohPlugin.showDefaultAdditionalDetails.Value) { __result = true; return false; } return true; } } [BepInPlugin("sparroh.alwaysadditionaldetails", "AlwaysAdditionalDetails", "1.0.0")] [MycoMod(/*Could not decode attribute arguments.*/)] public class SparrohPlugin : BaseUnityPlugin { public const string PluginGUID = "sparroh.alwaysadditionaldetails"; public const string PluginName = "AlwaysAdditionalDetails"; public const string PluginVersion = "1.0.0"; internal static ManualLogSource Logger; internal static ConfigEntry showDefaultAdditionalDetails; private FileSystemWatcher _configWatcher; private volatile bool _configReloadPending; private float _lastReloadTime; private void Awake() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; showDefaultAdditionalDetails = ((BaseUnityPlugin)this).Config.Bind("General", "Show Default Additional Details", true, "If true, shows additional details by default in hover info."); ((BaseUnityPlugin)this).Config.ConfigReloaded += OnConfigReloaded; SetupConfigWatcher(); new Harmony("sparroh.alwaysadditionaldetails").PatchAll(typeof(DefaultAdditionalDetailsPatches)); Logger.LogInfo((object)"AlwaysAdditionalDetails loaded successfully."); } private void Update() { if (!_configReloadPending || Time.unscaledTime - _lastReloadTime < 0.25f) { return; } _configReloadPending = false; _lastReloadTime = Time.unscaledTime; try { ((BaseUnityPlugin)this).Config.Reload(); } catch (Exception ex) { Logger.LogWarning((object)("Failed to reload config: " + ex.Message)); } } private void OnConfigReloaded(object sender, EventArgs e) { Logger.LogInfo((object)"Config reloaded."); } private void SetupConfigWatcher() { try { string configFilePath = ((BaseUnityPlugin)this).Config.ConfigFilePath; string directoryName = Path.GetDirectoryName(configFilePath); string fileName = Path.GetFileName(configFilePath); if (string.IsNullOrEmpty(directoryName) || string.IsNullOrEmpty(fileName)) { Logger.LogWarning((object)"Could not set up config file watcher: invalid config path."); return; } _configWatcher = new FileSystemWatcher(directoryName, fileName) { NotifyFilter = (NotifyFilters.Size | NotifyFilters.LastWrite), EnableRaisingEvents = true }; _configWatcher.Changed += OnConfigFileChanged; _configWatcher.Created += OnConfigFileChanged; _configWatcher.Renamed += OnConfigFileChanged; Logger.LogInfo((object)("Watching config file for changes: " + configFilePath)); } catch (Exception ex) { Logger.LogWarning((object)("Could not set up config file watcher: " + ex.Message)); } } private void OnConfigFileChanged(object sender, FileSystemEventArgs e) { _configReloadPending = true; } private void OnDestroy() { ((BaseUnityPlugin)this).Config.ConfigReloaded -= OnConfigReloaded; if (_configWatcher != null) { _configWatcher.EnableRaisingEvents = false; _configWatcher.Changed -= OnConfigFileChanged; _configWatcher.Created -= OnConfigFileChanged; _configWatcher.Renamed -= OnConfigFileChanged; _configWatcher.Dispose(); _configWatcher = null; } } } namespace AlwaysAdditionalDetails { public static class MyPluginInfo { public const string PLUGIN_GUID = "AlwaysAdditionalDetails"; public const string PLUGIN_NAME = "AlwaysAdditionalDetails"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }