Decompiled source of RecentItemsDisplay v0.2.0
RecentItemsDisplay.dll
Decompiled a week ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CanvasUtil; using DataDrivenConstants.Marker; using GlobalEnums; using HutongGames.PlayMaker; using HutongGames.PlayMaker.Actions; using Md.CollectableItem; using Md.CollectableRelic; using Md.FakeCollectable; using Md.HeroController; using Md.MateriumItem; using Md.PlayMakerFSM; using Md.PowerUpGetMsg; using Md.QuitToMenu; using Md.ShopItem; using Md.SkillGetMsg; using Md.ToolCrest; using Md.ToolItem; using Md.UIManager; using Microsoft.CodeAnalysis; using MonoDetour; using MonoDetour.Cil; using MonoDetour.DetourTypes; using MonoDetour.HookGen; using MonoDetour.Reflection.Unspeakable; using MonoMod.Utils; using Newtonsoft.Json; using RecentItemsDisplay.Localization; using RecentItemsDisplay.Serialization; using Silksong.DataManager; using Silksong.FsmUtil; using Silksong.ModMenu.Plugin; using Silksong.UnityHelper.Extensions; using TMPro; using TMProOld; using TeamCherry.Localization; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: NeutralResourcesLanguage("EN")] [assembly: MonoDetourTargets(typeof(GameManager))] [assembly: MonoDetourTargets(typeof(QuitToMenu))] [assembly: MonoDetourTargets(typeof(InvAnimateUpAndDown))] [assembly: MonoDetourTargets(typeof(UIManager))] [assembly: MonoDetourTargets(typeof(GameMap))] [assembly: MonoDetourTargets(typeof(HeroController))] [assembly: MonoDetourTargets(typeof(CollectableItem))] [assembly: MonoDetourTargets(typeof(CollectableRelic))] [assembly: MonoDetourTargets(typeof(ToolItem))] [assembly: MonoDetourTargets(typeof(ToolCrest))] [assembly: MonoDetourTargets(typeof(MateriumItem))] [assembly: MonoDetourTargets(typeof(FakeCollectable))] [assembly: MonoDetourTargets(typeof(ShopItem))] [assembly: MonoDetourTargets(typeof(PlayMakerFSM))] [assembly: MonoDetourTargets(typeof(PowerUpGetMsg))] [assembly: MonoDetourTargets(typeof(SkillGetMsg))] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RecentItemsDisplay")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.2.0.0")] [assembly: AssemblyInformationalVersion("0.2.0+9981a13caa6ac425ceea18340e9d0cf2d3491edf")] [assembly: AssemblyProduct("RecentItemsDisplay")] [assembly: AssemblyTitle("RecentItemsDisplay")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/flibber-hk/Silksong.RecentItemsDisplay")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.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 System.Runtime.Versioning { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiresPreviewFeaturesAttribute : Attribute { public string? Message { get; } public string? Url { get; set; } public RequiresPreviewFeaturesAttribute() { } public RequiresPreviewFeaturesAttribute(string? message) { Message = message; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CallerArgumentExpressionAttribute : Attribute { public string ParameterName { get; } public CallerArgumentExpressionAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CollectionBuilderAttribute : Attribute { public Type BuilderType { get; } public string MethodName { get; } public CollectionBuilderAttribute(Type builderType, string methodName) { BuilderType = builderType; MethodName = methodName; } } [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class CompilerFeatureRequiredAttribute : Attribute { public const string RefStructs = "RefStructs"; public const string RequiredMembers = "RequiredMembers"; public string FeatureName { get; } public bool IsOptional { get; set; } public CompilerFeatureRequiredAttribute(string featureName) { FeatureName = featureName; } } [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute { public string[] Arguments { get; } public InterpolatedStringHandlerArgumentAttribute(string argument) { Arguments = new string[1] { argument }; } public InterpolatedStringHandlerArgumentAttribute(params string[] arguments) { Arguments = arguments; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class InterpolatedStringHandlerAttribute : Attribute { } [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal static class IsExternalInit { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ModuleInitializerAttribute : Attribute { } [AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class OverloadResolutionPriorityAttribute : Attribute { public int Priority { get; } public OverloadResolutionPriorityAttribute(int priority) { Priority = priority; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)] [ExcludeFromCodeCoverage] internal sealed class ParamCollectionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class RequiredMemberAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [EditorBrowsable(EditorBrowsableState.Never)] [ExcludeFromCodeCoverage] internal sealed class RequiresLocationAttribute : Attribute { } [AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SkipLocalsInitAttribute : Attribute { } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ConstantExpectedAttribute : Attribute { public object? Min { get; set; } public object? Max { get; set; } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class ExperimentalAttribute : Attribute { public string DiagnosticId { get; } public string? UrlFormat { get; set; } public ExperimentalAttribute(string diagnosticId) { DiagnosticId = diagnosticId; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class SetsRequiredMembersAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class StringSyntaxAttribute : Attribute { public const string CompositeFormat = "CompositeFormat"; public const string DateOnlyFormat = "DateOnlyFormat"; public const string DateTimeFormat = "DateTimeFormat"; public const string EnumFormat = "EnumFormat"; public const string GuidFormat = "GuidFormat"; public const string Json = "Json"; public const string NumericFormat = "NumericFormat"; public const string Regex = "Regex"; public const string TimeOnlyFormat = "TimeOnlyFormat"; public const string TimeSpanFormat = "TimeSpanFormat"; public const string Uri = "Uri"; public const string Xml = "Xml"; public string Syntax { get; } public object?[] Arguments { get; } public StringSyntaxAttribute(string syntax) { Syntax = syntax; Arguments = new object[0]; } public StringSyntaxAttribute(string syntax, params object?[] arguments) { Syntax = syntax; Arguments = arguments; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] [ExcludeFromCodeCoverage] internal sealed class UnscopedRefAttribute : Attribute { } } namespace Md.SkillGetMsg { internal static class Setup { public delegate void PrefixSignature(SkillGetMsg self, ref ToolItemSkill skill); public delegate void PostfixSignature(SkillGetMsg self, ref ToolItemSkill skill); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SkillGetMsg).GetMethod("Setup", (BindingFlags)(-1), null, new Type[1] { typeof(ToolItemSkill) }, null) ?? throw new MissingMethodException("SkillGetMsg", "Setup"); } } } namespace Md.PowerUpGetMsg { internal static class Setup { public delegate void PrefixSignature(PowerUpGetMsg self, ref PowerUps skill); public delegate void PostfixSignature(PowerUpGetMsg self, ref PowerUps skill); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PowerUpGetMsg).GetMethod("Setup", (BindingFlags)(-1), null, new Type[1] { typeof(PowerUps) }, null) ?? throw new MissingMethodException("PowerUpGetMsg", "Setup"); } } } namespace Md.ShopItem { internal static class SetPurchased { public delegate void PrefixSignature(ShopItem self, ref Action onComplete, ref int subItemIndex); public delegate void PostfixSignature(ShopItem self, ref Action onComplete, ref int subItemIndex); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ShopItem).GetMethod("SetPurchased", (BindingFlags)(-1), null, new Type[2] { typeof(Action), typeof(int) }, null) ?? throw new MissingMethodException("ShopItem", "SetPurchased"); } } } namespace Md.FakeCollectable { internal static class Get { public delegate void PrefixSignature(FakeCollectable self, ref bool showPopup); public delegate void PostfixSignature(FakeCollectable self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("FakeCollectable", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(FakeCollectable self); public delegate void PostfixSignature(FakeCollectable self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("FakeCollectable", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(FakeCollectable self); public delegate void PostfixSignature(FakeCollectable self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(FakeCollectable).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("FakeCollectable", "GetPopupName"); } } } namespace Md.MateriumItem { internal static class Get { public delegate void PrefixSignature(MateriumItem self, ref bool showPopup); public delegate void PostfixSignature(MateriumItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("MateriumItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(MateriumItem self); public delegate void PostfixSignature(MateriumItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("MateriumItem", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(MateriumItem self); public delegate void PostfixSignature(MateriumItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(MateriumItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("MateriumItem", "GetPopupName"); } } } namespace Md.ToolCrest { internal static class Get { public delegate void PrefixSignature(ToolCrest self, ref bool showPopup); public delegate void PostfixSignature(ToolCrest self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("ToolCrest", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(ToolCrest self); public delegate void PostfixSignature(ToolCrest self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolCrest", "GetPopupIcon"); } } internal static class Unlock { public delegate void PrefixSignature(ToolCrest self); public delegate void PostfixSignature(ToolCrest self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolCrest).GetMethod("Unlock", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolCrest", "Unlock"); } } } namespace Md.ToolItem { internal static class Get { public delegate void PrefixSignature(ToolItem self, ref bool showPopup); public delegate void PostfixSignature(ToolItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("ToolItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(ToolItem self); public delegate void PostfixSignature(ToolItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolItem", "GetPopupIcon"); } } internal static class Unlock { public delegate void PrefixSignature(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags); public delegate void PostfixSignature(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("Unlock", (BindingFlags)(-1), null, new Type[2] { typeof(Action), typeof(PopupFlags) }, null) ?? throw new MissingMethodException("ToolItem", "Unlock"); } } internal static class GetPopupName { public delegate void PrefixSignature(ToolItem self); public delegate void PostfixSignature(ToolItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ToolItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("ToolItem", "GetPopupName"); } } } namespace Md.CollectableRelic { internal static class Get { public delegate void PrefixSignature(CollectableRelic self, ref bool showPopup); public delegate void PostfixSignature(CollectableRelic self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("CollectableRelic", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(CollectableRelic self); public delegate void PostfixSignature(CollectableRelic self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableRelic", "GetPopupIcon"); } } internal static class GetPopupName { public delegate void PrefixSignature(CollectableRelic self); public delegate void PostfixSignature(CollectableRelic self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableRelic).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableRelic", "GetPopupName"); } } } namespace Md.CollectableItem { internal static class Get { public delegate void PrefixSignature(CollectableItem self, ref bool showPopup); public delegate void PostfixSignature(CollectableItem self, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("CollectableItem", "Get"); } } internal static class GetPopupIcon { public delegate void PrefixSignature(CollectableItem self); public delegate void PostfixSignature(CollectableItem self, ref Sprite returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("GetPopupIcon", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItem", "GetPopupIcon"); } } internal static class Collect { public delegate void PrefixSignature(CollectableItem self, ref int amount, ref bool showPopup); public delegate void PostfixSignature(CollectableItem self, ref int amount, ref bool showPopup); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("Collect", (BindingFlags)(-1), null, new Type[2] { typeof(int), typeof(bool) }, null) ?? throw new MissingMethodException("CollectableItem", "Collect"); } } internal static class GetPopupName { public delegate void PrefixSignature(CollectableItem self); public delegate void PostfixSignature(CollectableItem self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(CollectableItem).GetMethod("GetPopupName", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItem", "GetPopupName"); } } } namespace Md.GameMap { internal static class Start { public delegate void PrefixSignature(GameMap self); public delegate void PostfixSignature(GameMap self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameMap).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameMap", "Start"); } } } namespace Md.UIManager { internal static class Start { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "Start"); } } internal static class UIGoToPauseMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("UIGoToPauseMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "UIGoToPauseMenu"); } } internal static class UIClosePauseMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(UIManager).GetMethod("UIClosePauseMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "UIClosePauseMenu"); } } } namespace Md.QuitToMenu { internal static class Start { public delegate void PrefixSignature(QuitToMenu self); public delegate void PostfixSignature(QuitToMenu self, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, QuitToMenu> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, QuitToMenu> self, ref bool continueEnumeration); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MonoDetourHook PrefixMoveNext(PrefixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook PostfixMoveNext(PostfixMoveNextSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>((MethodBase)StateMachineTarget(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHookMoveNext(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook((MethodBase)StateMachineTarget(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(QuitToMenu).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("QuitToMenu", "Start"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } } namespace Md.PlayMakerFSM { internal static class AddEventHandlerDelegate { internal static class Invoke { public delegate void PrefixSignature(AddEventHandlerDelegate self, ref PlayMakerFSM fsm); public delegate void PostfixSignature(AddEventHandlerDelegate self, ref PlayMakerFSM fsm); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(AddEventHandlerDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(PlayMakerFSM) }, null) ?? throw new MissingMethodException("PlayMakerFSM+AddEventHandlerDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(PlayMakerFSM self); public delegate void PostfixSignature(PlayMakerFSM self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PlayMakerFSM).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("PlayMakerFSM", "Start"); } } internal static class Init { public delegate void PrefixSignature(PlayMakerFSM self); public delegate void PostfixSignature(PlayMakerFSM self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PlayMakerFSM).GetMethod("Init", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("PlayMakerFSM", "Init"); } } } namespace Md.HeroController { internal static class HeroSetDelegate { internal static class Invoke { public delegate void PrefixSignature(HeroSetDelegate self, ref HeroController heroController); public delegate void PostfixSignature(HeroSetDelegate self, ref HeroController heroController); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroSetDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(HeroController) }, null) ?? throw new MissingMethodException("HeroController+HeroSetDelegate", "Invoke"); } } } internal static class HeroInPosition { internal static class Invoke { public delegate void PrefixSignature(HeroInPosition self, ref bool forceDirect); public delegate void PostfixSignature(HeroInPosition self, ref bool forceDirect); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroInPosition).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("HeroController+HeroInPosition", "Invoke"); } } } internal static class DamageTakenDelegate { internal static class Invoke { public delegate void PrefixSignature(DamageTakenDelegate self, ref DamageInfo damageInfo); public delegate void PostfixSignature(DamageTakenDelegate self, ref DamageInfo damageInfo); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(DamageTakenDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(DamageInfo) }, null) ?? throw new MissingMethodException("HeroController+DamageTakenDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(HeroController self); public delegate void PostfixSignature(HeroController self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroController).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("HeroController", "Start"); } } internal static class ConfigGroup { internal static class Setup { public delegate void PrefixSignature(ConfigGroup self); public delegate void PostfixSignature(ConfigGroup self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(ConfigGroup).GetMethod("Setup", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("HeroController+ConfigGroup", "Setup"); } } } internal static class GetState { public delegate void PrefixSignature(HeroController self, ref string stateName); public delegate void PostfixSignature(HeroController self, ref string stateName, ref bool returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(HeroController).GetMethod("GetState", (BindingFlags)(-1), null, new Type[1] { typeof(string) }, null) ?? throw new MissingMethodException("HeroController", "GetState"); } } } namespace Md.GameManager { internal static class PausedEvent { internal static class Invoke { public delegate void PrefixSignature(PausedEvent self, ref bool isPaused); public delegate void PostfixSignature(PausedEvent self, ref bool isPaused); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(PausedEvent).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("GameManager+PausedEvent", "Invoke"); } } } internal static class GameStateEvent { internal static class Invoke { public delegate void PrefixSignature(GameStateEvent self, ref GameState gameState); public delegate void PostfixSignature(GameStateEvent self, ref GameState gameState); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameStateEvent).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(GameState) }, null) ?? throw new MissingMethodException("GameManager+GameStateEvent", "Invoke"); } } } internal static class BossLoad { internal static class Invoke { public delegate void PrefixSignature(BossLoad self); public delegate void PostfixSignature(BossLoad self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(BossLoad).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+BossLoad", "Invoke"); } } } internal static class EnterSceneEvent { internal static class Invoke { public delegate void PrefixSignature(EnterSceneEvent self); public delegate void PostfixSignature(EnterSceneEvent self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(EnterSceneEvent).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+EnterSceneEvent", "Invoke"); } } } internal static class SceneTransitionFinishEvent { internal static class Invoke { public delegate void PrefixSignature(SceneTransitionFinishEvent self); public delegate void PostfixSignature(SceneTransitionFinishEvent self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneTransitionFinishEvent).GetMethod("Invoke", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+SceneTransitionFinishEvent", "Invoke"); } } } internal static class SceneTransitionBeganDelegate { internal static class Invoke { public delegate void PrefixSignature(SceneTransitionBeganDelegate self, ref SceneLoad sceneLoad); public delegate void PostfixSignature(SceneTransitionBeganDelegate self, ref SceneLoad sceneLoad); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneTransitionBeganDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(SceneLoad) }, null) ?? throw new MissingMethodException("GameManager+SceneTransitionBeganDelegate", "Invoke"); } } } internal static class Start { public delegate void PrefixSignature(GameManager self); public delegate void PostfixSignature(GameManager self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(GameManager).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager", "Start"); } } internal static class SceneLoadInfo { internal new static class ToString { public delegate void PrefixSignature(SceneLoadInfo self); public delegate void PostfixSignature(SceneLoadInfo self, ref string returnValue); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(SceneLoadInfo).GetMethod("ToString", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("GameManager+SceneLoadInfo", "ToString"); } } } } namespace Md.InvAnimateUpAndDown { internal static class Show { public delegate void PrefixSignature(InvAnimateUpAndDown self); public delegate void PostfixSignature(InvAnimateUpAndDown self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(InvAnimateUpAndDown).GetMethod("Show", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("InvAnimateUpAndDown", "Show"); } } internal static class Hide { public delegate void PrefixSignature(InvAnimateUpAndDown self); public delegate void PostfixSignature(InvAnimateUpAndDown self); public static MonoDetourHook Prefix(PrefixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PrefixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook Postfix(PostfixSignature hook, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).Hook<PostfixDetour>(Target(), (Delegate)hook, config, applyByDefault); } public static MonoDetourHook ILHook(Manipulator manipulator, MonoDetourConfig? config = null, bool applyByDefault = true, MonoDetourManager? manager = null) { return (manager ?? DefaultMonoDetourManager.Instance).ILHook(Target(), manipulator, config, applyByDefault); } public static MethodBase Target() { return typeof(InvAnimateUpAndDown).GetMethod("Hide", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("InvAnimateUpAndDown", "Hide"); } } } namespace MonoDetour.HookGen { internal static class DefaultMonoDetourManager { internal static MonoDetourManager Instance { get; } = New(); internal static MonoDetourManager New() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown return new MonoDetourManager(typeof(DefaultMonoDetourManager).Assembly.GetName().Name); } } [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class, AllowMultiple = true, Inherited = false)] internal class MonoDetourTargetsAttribute : Attribute, IMonoDetourTargets { public Type? TargetType { get; } public bool IncludeNestedTypes { get; set; } public string[]? Members { get; set; } public string[]? MemberNamePrefixes { get; set; } public string[]? MemberNameSuffixes { get; set; } public bool GenerateControlFlowVariants { get; set; } public MonoDetourTargetsAttribute(Type? targetType = null) { TargetType = targetType; IncludeNestedTypes = true; base..ctor(); } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] [Microsoft.CodeAnalysis.Embedded] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace Microsoft.CodeAnalysis { [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace DataDrivenConstants.Marker { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] internal sealed class JsonDataAttribute : Attribute { public string ValuePath { get; } public string[] FileGlobs { get; } public JsonDataAttribute(string valuePath, params string[] fileGlobs) { ValuePath = valuePath; FileGlobs = (string[])fileGlobs.Clone(); } } internal enum ReplacementKind { Normal, Regex } [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = true)] internal sealed class ReplacementRuleAttribute : Attribute { public string OldString { get; } public string NewString { get; } public ReplacementKind ReplacementKind { get; } public ReplacementRuleAttribute(string oldString, string newString, ReplacementKind replacementKind = ReplacementKind.Normal) { OldString = oldString; NewString = newString; ReplacementKind = replacementKind; } } } namespace RecentItemsDisplay { internal static class Display { private static readonly ManualLogSource Log = Logger.CreateLogSource("RecentItemsDisplay.Display"); private static readonly Vector2 AnchorPoint = new Vector2(0.9f, 0.9f); private static GameObject? _canvas; private static GameObject? _title; private static readonly Queue<GameObject> _items = new Queue<GameObject>(); public static int NumDisplayableItems => ConfigSettings.NumDisplayableItems.Value; public static bool DisplayEnabled => ConfigSettings.DisplayEnabled.Value; public static int MaxItems { get; internal set; } = 15; internal static event Action? OnCreateDisplay; public static void Create() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Expected O, but got Unknown if (!((Object)(object)_canvas != (Object)null)) { _canvas = CanvasUtil.CreateCanvas((RenderMode)0, new Vector2(1920f, 1080f)); CanvasGroup component = _canvas.GetComponent<CanvasGroup>(); component.interactable = false; component.blocksRaycasts = false; Object.DontDestroyOnLoad((Object)(object)_canvas); _title = CanvasUtil.CreateTextPanel(_canvas, "RECENT_ITEMS_TITLE".LocalizeKey(), 24, (TextAnchor)4, new RectData(new Vector2(200f, 100f), Vector2.zero, AnchorPoint + new Vector2(-0.025f, 0.05f), AnchorPoint + new Vector2(-0.025f, 0.05f)), true); UpdateVisibility(); Show(); Display.OnCreateDisplay?.Invoke(); } } public static void Destroy() { if ((Object)(object)_canvas != (Object)null) { Object.Destroy((Object)(object)_canvas); } _canvas = null; _items.Clear(); } public static void Redraw() { Destroy(); Create(); UpdateVisibility(); } internal static void AddItem(Sprite? sprite, string msg, Color? textColor = null) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_canvas == (Object)null) { Create(); } GameObject val = CanvasUtil.CreateBasePanel(_canvas, new RectData(new Vector2(200f, 50f), Vector2.zero, AnchorPoint, AnchorPoint)); if ((Object)(object)sprite != (Object)null) { CanvasUtil.CreateImagePanel(val, sprite, new RectData(new Vector2(50f, 50f), Vector2.zero, new Vector2(-0.1f, 0.5f), new Vector2(-0.1f, 0.5f))); } GameObject val2 = CanvasUtil.CreateTextPanel(val, msg, 24, (TextAnchor)3, new RectData(new Vector2(400f, 100f), Vector2.zero, new Vector2(1.1f, 0.5f), new Vector2(1.1f, 0.5f)), Fonts.GetFont("Perpetua")); if (textColor.HasValue) { ((Graphic)val2.GetComponent<Text>()).color = textColor.Value; } _items.Enqueue(val); if (_items.Count > MaxItems) { Object.Destroy((Object)(object)_items.Dequeue()); } UpdatePositions(); UpdateVisibility(); } private static void UpdatePositions() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) int num = _items.Count - 1; foreach (GameObject item in _items) { Vector2 val = AnchorPoint + new Vector2(0f, -0.06f * (float)num--); item.GetComponent<RectTransform>().anchorMin = val; item.GetComponent<RectTransform>().anchorMax = val; item.SetActive(num < MaxItems - 1); } } private static void UpdateVisibility() { if ((Object)(object)_canvas == (Object)null) { return; } _canvas.SetActive(DisplayEnabled); foreach (var (val, num) in _items.Reverse().Select((GameObject go, int idx) => (go, idx))) { val.SetActive(num < NumDisplayableItems); } if ((Object)(object)_title != (Object)null) { _title.SetActive(_items.Count > 0); } } public static void Show() { if (!((Object)(object)_canvas == (Object)null)) { _canvas.SetActive(DisplayEnabled); } } public static void Hide() { if (!((Object)(object)_canvas == (Object)null)) { _canvas.SetActive(false); } } internal static void Hook() { ((BaseUnityPlugin)RecentItemsDisplayPlugin.Instance).Config.SettingChanged += OnConfigSettingChanged; Md.QuitToMenu.Start.PostfixMoveNext(DestroyOnQuitToMenu); Md.HeroController.Start.Postfix(CreateOnEnterGame); UIGoToPauseMenu.Postfix(HideOnPause); UIClosePauseMenu.Postfix(ShowOnUnpause); } private static void OnConfigSettingChanged(object sender, SettingChangedEventArgs e) { Redraw(); } private static void ShowOnUnpause(UIManager self) { Show(); } private static void HideOnPause(UIManager self) { Hide(); } private static void CreateOnEnterGame(HeroController self) { Create(); } private static void DestroyOnQuitToMenu(SpeakableEnumerator<object, QuitToMenu> self, ref bool continueEnumeration) { Destroy(); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("io.github.flibber-hk.recentitemsdisplay", "RecentItemsDisplay", "0.2.0")] public class RecentItemsDisplayPlugin : BaseUnityPlugin, ISaveDataMod<SaveData>, ISaveDataMod { public const string Id = "io.github.flibber-hk.recentitemsdisplay"; public static RecentItemsDisplayPlugin Instance { get; private set; } SaveData? ISaveDataMod<SaveData>.SaveData { get { return SaveData.GetData(); } set { SaveData.SetData(value); } } public static string Name => "RecentItemsDisplay"; public static string Version => "0.2.0"; private void Awake() { Instance = this; ConfigSettings.Init(((BaseUnityPlugin)this).Config); Display.Hook(); VanillaItems.Hook(); MessageSerializationBridge.Hook(); ((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin " + Name + " (io.github.flibber-hk.recentitemsdisplay) has loaded!")); } } internal static class VanillaItems { private static readonly MonoDetourManager mgr = new MonoDetourManager("io.github.flibber-hk.recentitemsdisplay :: VanillaItems"); private static readonly MonoDetourManager fsmMgr = new MonoDetourManager("io.github.flibber-hk.recentitemsdisplay :: VanillaItems :: FSM"); private static readonly ManualLogSource Log = Logger.CreateLogSource("RecentItemsDisplay.VanillaItems"); private static void SendToDisplay(ISpriteProvider sprite, string text) { MessageSerializationBridge.SendItemToDisplay(sprite, text); } public static void Hook() { Md.MateriumItem.Get.Prefix(OnCollectMateriumItem, null, applyByDefault: true, mgr); Collect.Prefix(OnCollectCollectableItem, null, applyByDefault: true, mgr); Md.CollectableRelic.Get.Prefix(OnCollectCollectableRelic, null, applyByDefault: true, mgr); Md.FakeCollectable.Get.Prefix(GetFakeCollectable, null, applyByDefault: true, mgr); Md.ToolItem.Unlock.Prefix(OnCollectToolItem, null, applyByDefault: true, mgr); Md.ToolCrest.Unlock.Prefix(OnCollectToolCrest, null, applyByDefault: true, mgr); SetPurchased.Postfix(OnBuyShopItem, null, applyByDefault: true, mgr); Md.PowerUpGetMsg.Setup.Postfix(OnGetPowerUp, null, applyByDefault: true, mgr); Md.SkillGetMsg.Setup.Postfix(OnGetSkill, null, applyByDefault: true, mgr); Md.PlayMakerFSM.Start.Prefix(WatchFsms, null, applyByDefault: true, fsmMgr); } private static bool NameMatches(this string self, string target) { if (target == self) { return true; } if (!self.StartsWith(target)) { return false; } string text = self.Substring(target.Length); if (string.IsNullOrWhiteSpace(text)) { return true; } return text.TrimStart().StartsWith("("); } private static void OnGetSkill(SkillGetMsg self, ref ToolItemSkill skill) { SendToDisplay(new ToolItemSprite(((ToolItem)skill).name), ((QuestTargetCounter)skill).GetUIMsgName()); } private static void OnGetPowerUp(PowerUpGetMsg self, ref PowerUps skill) { SendToDisplay(new NonSerializableSprite { RuntimeSprite = self.solidSprite.sprite }, self.nameText.text); } private static void WatchFsms(PlayMakerFSM self) { WatchSpoolsAndMaskShards(self); WatchSilkHearts(self); WatchUpgradeFsm(self); WatchMelodyFsm(self); WatchGeneralGetFsm(self); } private static void WatchGeneralGetFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Get Item") || self.FsmName != "Msg Control") { return; } FsmState state = FsmUtil.GetState(self, "Stop Up"); if (state == null) { return; } FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { string value = a.Fsm.GetFsmString("Item").Value; if (!(value == "SilkHeart") && !value.StartsWith("Hunter Combo")) { GameObject gameObject = ((Component)a.Fsm.FsmComponent).gameObject; GameObject val = UnityExtensions.FindChild(gameObject, "Icon"); if (!((Object)(object)val == (Object)null)) { GameObject val2 = UnityExtensions.FindChild(gameObject, "Item Name"); if (!((Object)(object)val2 == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; TextMeshPro val3 = default(TextMeshPro); string text; if (val2.TryGetComponent<TextMeshPro>(ref val3)) { text = ((TMP_Text)val3).text; } else { TextMeshPro val4 = default(TextMeshPro); if (!val2.TryGetComponent<TextMeshPro>(ref val4)) { return; } text = ((TMP_Text)val4).text; } SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, text); } } } }); } private static void WatchMelodyFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Get Item Melody") || self.FsmName != "Msg Control") { return; } FsmState state = FsmUtil.GetState(self, "Stop Up"); if (state == null) { return; } FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { GameObject gameObject = ((Component)a.Fsm.FsmComponent).gameObject; GameObject val = UnityExtensions.FindChild(gameObject, "Contents/Icon"); if (!((Object)(object)val == (Object)null)) { GameObject val2 = UnityExtensions.FindChild(gameObject, "Contents/Item Name"); if (!((Object)(object)val2 == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; TextMeshPro val3 = default(TextMeshPro); string text; if (val2.TryGetComponent<TextMeshPro>(ref val3)) { text = ((TMP_Text)val3).text; } else { TextMeshPro val4 = default(TextMeshPro); if (!val2.TryGetComponent<TextMeshPro>(ref val4)) { return; } text = ((TMP_Text)val4).text; } SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, text); } } }); } private static void WatchUpgradeFsm(PlayMakerFSM self) { if (!((Object)((Component)self).gameObject).name.NameMatches("UI Msg Crest Evolve") || self.FsmName != "Msg Control") { return; } string[] array = new string[2] { "Set Socket 1", "Set Socket 2" }; foreach (string text in array) { FsmState state = FsmUtil.GetState(self, text); if (state == null) { continue; } FsmUtil.AddMethod(state, (Action<FsmStateAction>)delegate(FsmStateAction a) { SetGameObject firstActionOfType = FsmUtil.GetFirstActionOfType<SetGameObject>(a.State); if (firstActionOfType != null) { GameObject val = UnityExtensions.FindChild(firstActionOfType.gameObject.Value, "Pivot/Crest"); if (!((Object)(object)val == (Object)null)) { Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, Language.Get("UI_MSG_TITLE_EXTRASLOT_NAME", "Tools")); } } }); } } private static void WatchSilkHearts(PlayMakerFSM self) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if (!((Object)((Component)self).gameObject).name.NameMatches("Memory Control") || self.FsmName != "Memory Control") { return; } FsmState state = FsmUtil.GetState(self, "End Scene"); if (state == null) { return; } foreach (RunFSM item in state.Actions.OfType<RunFSM>()) { if (((Object)item.fsmTemplateControl.fsmTemplate).name == "memory_scene_control_pre_end_silkheart") { GameObject val = UnityExtensions.FindGameObject(((Component)self).gameObject.scene, "GameObject/silk_cocoon_core/heart/heart_core_beat"); if ((Object)(object)val == (Object)null) { ManualLogSource log = Log; Scene scene = ((Component)self).gameObject.scene; log.LogError((object)("Unable to locate heart core in scene " + ((Scene)(ref scene)).name)); break; } Sprite sprite = val.GetComponent<SpriteRenderer>().sprite; FsmUtil.InsertMethod(state, 1, (Action<FsmStateAction>)delegate { SendToDisplay(new NonSerializableSprite { RuntimeSprite = sprite }, Language.Get("MEMORY_MSG_TITLE_SILKHEART", "Prompts")); }); } } } private static void CheckTrackerMarker(PlayMakerFSM self, string fsmName, string goPrefix, string stateName, string langKey, string sheet = "UI") { string langKey2 = langKey; string sheet2 = sheet; if (self.FsmName != fsmName || !((Object)((Component)self).gameObject).name.NameMatches(goPrefix)) { return; } FsmState state = FsmUtil.GetState(self, stateName); if (state == null) { Log.LogInfo((object)("No state " + stateName + " on fsm " + self.FsmName + " on " + ((Object)((Component)self).gameObject).name)); } else { FsmUtil.InsertMethod(state, 0, (Action<FsmStateAction>)delegate(FsmStateAction a) { SavedItemTrackerMarker component = ((Component)a.Fsm.FsmComponent).gameObject.GetComponent<SavedItemTrackerMarker>(); string text = Language.Get(langKey2, sheet2); SendToDisplay(new NonSerializableSprite { RuntimeSprite = component.items[0].GetPopupIcon() }, text); }); } } private static void WatchSpoolsAndMaskShards(PlayMakerFSM self) { CheckTrackerMarker(self, "Heart Container Control", "Heart Piece", "Save Collected", "INV_NAME_HEART_PIECE_1"); CheckTrackerMarker(self, "Control", "Silk Spool", "Save", "INV_NAME_SPOOL_PIECE_HALF"); } private static void GetFakeCollectable(FakeCollectable self, ref bool showPopup) { string text = ((QuestTargetCounter)self).GetUIMsgName(); if (text.StartsWith("!!") && text.EndsWith("!!")) { string name = ((Object)self).name; if (!(name == "Heart Piece")) { if (name == "Silk Spool") { text = Language.Get("INV_NAME_SPOOL_PIECE_HALF", "UI"); } } else { text = Language.Get("INV_NAME_HEART_PIECE_1", "UI"); } } SendToDisplay(new NonSerializableSprite { RuntimeSprite = ((QuestTargetCounter)self).GetUIMsgSprite() }, text); } private static void OnBuyShopItem(ShopItem self, ref Action onComplete, ref int subItemIndex) { if (!((Object)(object)self.savedItem != (Object)null)) { SendToDisplay(new NonSerializableSprite { RuntimeSprite = self.ItemSprite }, self.DisplayName); } } private static void OnCollectCollectableRelic(CollectableRelic self, ref bool showPopup) { SendToDisplay(new CollectableRelicSprite(((Object)self).name), ((QuestTargetCounter)self).GetUIMsgName()); } private static void OnCollectMateriumItem(MateriumItem self, ref bool showPopup) { SendToDisplay(new MateriumSprite(((Object)self).name), ((SavedItem)self).GetPopupName()); } private static void OnCollectToolCrest(ToolCrest self) { SendToDisplay(new ToolCrestSprite(self.name), ((object)(LocalisedString)(ref self.displayName)).ToString()); } private static void OnCollectToolItem(ToolItem self, ref Action afterTutorialMsg, ref PopupFlags popupFlags) { SendToDisplay(new ToolItemSprite(self.name), ((QuestTargetCounter)self).GetUIMsgName()); } private static void OnCollectCollectableItem(CollectableItem self, ref int amount, ref bool showPopup) { DeliveryQuestItem val = (DeliveryQuestItem)(object)((self is DeliveryQuestItem) ? self : null); if (val == null || ((CollectableItem)val).CollectedAmount <= 0) { SendToDisplay(new CollectableItemSprite(((Object)self).name), ((QuestTargetCounter)self).GetUIMsgName()); } } } } namespace RecentItemsDisplay.Serialization { internal static class ConfigSettings { public static ConfigEntry<bool> DisplayEnabled; public static ConfigEntry<int> NumDisplayableItems; public static void Init(ConfigFile config) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown DisplayEnabled = config.Bind<bool>("General", "DisplayEnabled", true, new ConfigDescription("Whether or not to show the display", (AcceptableValueBase)null, Array.Empty<object>())); NumDisplayableItems = config.Bind<int>("General", "NumDisplayableItems", 5, new ConfigDescription("The max number of recent items to display", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, Display.MaxItems), new object[1] { MenuElementGenerators.CreateIntSliderGenerator() })); } } internal class DisplayItemData { public required ISpriteProvider Sprite { get; set; } public required string Message { get; set; } public Color? TextColor { get; set; } } internal static class MessageSerializationBridge { private static Queue<DisplayItemData> ItemData = new Queue<DisplayItemData>(); internal static void SetItemData(IEnumerable<DisplayItemData> datas) { ItemData = new Queue<DisplayItemData>(datas); } internal static List<DisplayItemData> GetItemData() { Queue<DisplayItemData> itemData = ItemData; List<DisplayItemData> list = new List<DisplayItemData>(itemData.Count); foreach (DisplayItemData item in itemData) { list.Add(item); } return list; } internal static void Hook() { Display.OnCreateDisplay += LoadItemsFromSave; } internal static void SendItemToDisplay(ISpriteProvider sprite, string message, Color? textColor = null) { if (ItemData.Count > Display.MaxItems) { ItemData.Dequeue(); } ItemData.Enqueue(new DisplayItemData { Sprite = sprite, Message = message, TextColor = textColor }); Display.AddItem(sprite.GetSpriteSafe(), message, textColor); } internal static void LoadItemsFromSave() { foreach (DisplayItemData itemDatum in ItemData) { Display.AddItem(itemDatum.Sprite.GetSpriteSafe(), itemDatum.Message, itemDatum.TextColor); } } } internal class SaveData { public List<DisplayItemData> Datas { get; set; } = new List<DisplayItemData>(); public static void SetData(SaveData? data) { if (data == null) { data = new SaveData(); } MessageSerializationBridge.SetItemData(data.Datas); } public static SaveData GetData() { return new SaveData { Datas = MessageSerializationBridge.GetItemData() }; } } public interface ISpriteProvider { Sprite GetSprite(); } public static class SpriteProviderExtensions { private static ManualLogSource Log = Logger.CreateLogSource("SpriteProviderExtensions"); public static Sprite GetSpriteSafe(this ISpriteProvider provider) { try { return provider.GetSprite(); } catch (Exception) { Log.LogWarning((object)("Failed to get sprite for provider of type " + (provider?.GetType().Name ?? string.Empty))); return NonSerializableSprite.NullSprite(); } } } public class NonSerializableSprite : ISpriteProvider { [JsonIgnore] public Sprite? RuntimeSprite { get; init; } public static Sprite NullSprite() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(new Rect(0f, 0f, 1f, 1f), Vector2.zero, 1f); } Sprite ISpriteProvider.GetSprite() { if ((Object)(object)RuntimeSprite != (Object)null) { return RuntimeSprite; } return NullSprite(); } } public class CollectableItemSprite : ISpriteProvider { public string ItemName { get; set; } public CollectableItemSprite(string itemName) { ItemName = itemName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCounter)CollectableItemManager.GetItemByName(ItemName)).GetUIMsgSprite(); } } public class ToolItemSprite : ISpriteProvider { public string ToolName { get; set; } public ToolItemSprite(string toolName) { ToolName = toolName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCounter)ToolItemManager.GetToolByName(ToolName)).GetUIMsgSprite(); } } public class ToolCrestSprite : ISpriteProvider { public string CrestName { get; set; } public ToolCrestSprite(string crestName) { CrestName = crestName; base..ctor(); } Sprite ISpriteProvider.GetSprite() { return ((QuestTargetCo