Decompiled source of BingoUI v1.2.5
BingoUI.dll
Decompiled 4 hours 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 BingoUI.Components; using BingoUI.Counters; using BingoUI.Data; using CanvasUtil; using GlobalEnums; using Md.CollectableItemManager; using Md.CollectableItemPickup; using Md.CollectableRelicManager; using Md.CurrencyCounter; using Md.FullQuestBase; using Md.HeroController; using Md.PlayMakerNPC; 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 PrepatcherPlugin; using Silksong.DataManager; using Silksong.ModMenu.Elements; using Silksong.ModMenu.Plugin; using Silksong.ModMenu.Screens; using Silksong.UnityHelper.Extensions; using Silksong.UnityHelper.Util; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BingoUI")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.2.5.0")] [assembly: AssemblyInformationalVersion("1.2.5+ea2c151166221cc19077756e37f40f0c3b0ce4d4")] [assembly: AssemblyProduct("BingoUI")] [assembly: AssemblyTitle("BingoUI")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/flibber-hk/Silksong.BingoUI")] [assembly: NeutralResourcesLanguage("EN")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.5.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.PlayMakerNPC { internal static class OnStartDialogue { public delegate void PrefixSignature(PlayMakerNPC self); public delegate void PostfixSignature(PlayMakerNPC 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(PlayMakerNPC).GetMethod("OnStartDialogue", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("PlayMakerNPC", "OnStartDialogue"); } } } namespace Md.CollectableRelicManager { internal static class GetAllRelics { public delegate void PrefixSignature(); public delegate void PostfixSignature(ref IReadOnlyList<CollectableRelic> 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(CollectableRelicManager).GetMethod("GetAllRelics", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableRelicManager", "GetAllRelics"); } } internal static class GetRelicData { public delegate void PrefixSignature(ref CollectableRelic relic); public delegate void PostfixSignature(ref CollectableRelic relic, ref Data 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(CollectableRelicManager).GetMethod("GetRelicData", (BindingFlags)(-1), null, new Type[1] { typeof(CollectableRelic) }, null) ?? throw new MissingMethodException("CollectableRelicManager", "GetRelicData"); } } internal static class SetRelicData { public delegate void PrefixSignature(ref CollectableRelic relic, ref Data data); public delegate void PostfixSignature(ref CollectableRelic relic, ref Data data); 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(CollectableRelicManager).GetMethod("SetRelicData", (BindingFlags)(-1), null, new Type[2] { typeof(CollectableRelic), typeof(Data) }, null) ?? throw new MissingMethodException("CollectableRelicManager", "SetRelicData"); } } } 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 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"); } } } namespace Md.FullQuestBase { internal static class Get { public delegate void PrefixSignature(FullQuestBase self, ref bool showPopup); public delegate void PostfixSignature(FullQuestBase 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(FullQuestBase).GetMethod("Get", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("FullQuestBase", "Get"); } } internal static class TryEndQuest { public delegate void PrefixSignature(FullQuestBase self, ref Action afterPrompt, ref bool consumeCurrency, ref bool forceEnd, ref bool showPrompt); public delegate void PostfixSignature(FullQuestBase self, ref Action afterPrompt, ref bool consumeCurrency, ref bool forceEnd, ref bool showPrompt, 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(FullQuestBase).GetMethod("TryEndQuest", (BindingFlags)(-1), null, new Type[4] { typeof(Action), typeof(bool), typeof(bool), typeof(bool) }, null) ?? throw new MissingMethodException("FullQuestBase", "TryEndQuest"); } } internal static class SilentlyComplete { public delegate void PrefixSignature(FullQuestBase self); public delegate void PostfixSignature(FullQuestBase 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(FullQuestBase).GetMethod("SilentlyComplete", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("FullQuestBase", "SilentlyComplete"); } } } namespace Md.CurrencyCounter { internal static class Start { public delegate void PrefixSignature(CurrencyCounter self); public delegate void PostfixSignature(CurrencyCounter 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(CurrencyCounter).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounter", "Start"); } } internal static class Add { public delegate void PrefixSignature(ref int amount, ref CurrencyType type); public delegate void PostfixSignature(ref int amount, ref CurrencyType type); 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(CurrencyCounter).GetMethod("Add", (BindingFlags)(-1), null, new Type[2] { typeof(int), typeof(CurrencyType) }, null) ?? throw new MissingMethodException("CurrencyCounter", "Add"); } } internal static class Take { public delegate void PrefixSignature(ref int amount, ref CurrencyType type); public delegate void PostfixSignature(ref int amount, ref CurrencyType type); 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(CurrencyCounter).GetMethod("Take", (BindingFlags)(-1), null, new Type[2] { typeof(int), typeof(CurrencyType) }, null) ?? throw new MissingMethodException("CurrencyCounter", "Take"); } } internal static class Awake { public delegate void PrefixSignature(CurrencyCounter self); public delegate void PostfixSignature(CurrencyCounter 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(CurrencyCounter).GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounter", "Awake"); } } internal static class Show { public delegate void PrefixSignature(ref CurrencyType type, ref bool setStackVisible); public delegate void PostfixSignature(ref CurrencyType type, ref bool setStackVisible); 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(CurrencyCounter).GetMethod("Show", (BindingFlags)(-1), null, new Type[2] { typeof(CurrencyType), typeof(bool) }, null) ?? throw new MissingMethodException("CurrencyCounter", "Show"); } } } namespace Md.CurrencyCounterBase { internal static class Start { public delegate void PrefixSignature(CurrencyCounterBase self); public delegate void PostfixSignature(CurrencyCounterBase 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(CurrencyCounterBase).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounterBase", "Start"); } } internal static class FadeIn { public delegate void PrefixSignature(CurrencyCounterBase self); public delegate void PostfixSignature(CurrencyCounterBase self, ref float 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(CurrencyCounterBase).GetMethod("FadeIn", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounterBase", "FadeIn"); } } internal static class FadeOut { public delegate void PrefixSignature(CurrencyCounterBase self); public delegate void PostfixSignature(CurrencyCounterBase self, ref float 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(CurrencyCounterBase).GetMethod("FadeOut", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounterBase", "FadeOut"); } } internal static class Awake { public delegate void PrefixSignature(CurrencyCounterBase self); public delegate void PostfixSignature(CurrencyCounterBase 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(CurrencyCounterBase).GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CurrencyCounterBase", "Awake"); } } } 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 GoToPauseMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, UIManager> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, UIManager> 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(UIManager).GetMethod("GoToPauseMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "GoToPauseMenu"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } 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"); } } internal static class ReturnToMainMenu { public delegate void PrefixSignature(UIManager self); public delegate void PostfixSignature(UIManager self, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, UIManager> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, UIManager> 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(UIManager).GetMethod("ReturnToMainMenu", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "ReturnToMainMenu"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } internal static class FadeInCanvasGroup { public delegate void PrefixSignature(UIManager self, ref CanvasGroup cg, ref bool alwaysActive); public delegate void PostfixSignature(UIManager self, ref CanvasGroup cg, ref bool alwaysActive, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, UIManager> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, UIManager> 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(UIManager).GetMethod("FadeInCanvasGroup", (BindingFlags)(-1), null, new Type[2] { typeof(CanvasGroup), typeof(bool) }, null) ?? throw new MissingMethodException("UIManager", "FadeInCanvasGroup"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } internal static class FadeOutCanvasGroup { public delegate void PrefixSignature(UIManager self, ref CanvasGroup cg, ref bool disable, ref bool stopBlocking); public delegate void PostfixSignature(UIManager self, ref CanvasGroup cg, ref bool disable, ref bool stopBlocking, ref IEnumerator returnValue); public delegate void PrefixMoveNextSignature(SpeakableEnumerator<object, UIManager> self); public delegate void PostfixMoveNextSignature(SpeakableEnumerator<object, UIManager> 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(UIManager).GetMethod("FadeOutCanvasGroup", (BindingFlags)(-1), null, new Type[3] { typeof(CanvasGroup), typeof(bool), typeof(bool) }, null) ?? throw new MissingMethodException("UIManager", "FadeOutCanvasGroup"); } public static MethodInfo StateMachineTarget() { return Extensions.GetStateMachineTarget((MethodInfo)Target()); } } internal static class Awake { 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("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("UIManager", "Awake"); } } } namespace Md.CollectableItemPickup { internal static class Setup { public delegate void PrefixSignature(CollectableItemPickup self); public delegate void PostfixSignature(CollectableItemPickup 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(CollectableItemPickup).GetMethod("Setup", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItemPickup", "Setup"); } } internal static class Start { public delegate void PrefixSignature(CollectableItemPickup self); public delegate void PostfixSignature(CollectableItemPickup 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(CollectableItemPickup).GetMethod("Start", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItemPickup", "Start"); } } internal static class DoPickupAction { public delegate void PrefixSignature(CollectableItemPickup self, ref bool breakIfAtMax); public delegate void PostfixSignature(CollectableItemPickup self, ref bool breakIfAtMax, 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(CollectableItemPickup).GetMethod("DoPickupAction", (BindingFlags)(-1), null, new Type[1] { typeof(bool) }, null) ?? throw new MissingMethodException("CollectableItemPickup", "DoPickupAction"); } } internal static class Awake { public delegate void PrefixSignature(CollectableItemPickup self); public delegate void PostfixSignature(CollectableItemPickup 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(CollectableItemPickup).GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItemPickup", "Awake"); } } } namespace Md.CollectableItemManager { internal static class ItemAffectingDelegate { internal static class Invoke { public delegate void PrefixSignature(ItemAffectingDelegate self, ref Data data); public delegate void PostfixSignature(ItemAffectingDelegate self, ref Data data); 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(ItemAffectingDelegate).GetMethod("Invoke", (BindingFlags)(-1), null, new Type[1] { typeof(Data).MakeByRefType() }, null) ?? throw new MissingMethodException("CollectableItemManager+ItemAffectingDelegate", "Invoke"); } } } internal static class AffectItemData { public delegate void PrefixSignature(CollectableItemManager self, ref string itemName, ref ItemAffectingDelegate affector); public delegate void PostfixSignature(CollectableItemManager self, ref string itemName, ref ItemAffectingDelegate affector); 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(CollectableItemManager).GetMethod("AffectItemData", (BindingFlags)(-1), null, new Type[2] { typeof(string), typeof(ItemAffectingDelegate) }, null) ?? throw new MissingMethodException("CollectableItemManager", "AffectItemData"); } } internal static class InternalAddItem { public delegate void PrefixSignature(CollectableItemManager self, ref CollectableItem item, ref int amount); public delegate void PostfixSignature(CollectableItemManager self, ref CollectableItem item, ref int amount); 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(CollectableItemManager).GetMethod("InternalAddItem", (BindingFlags)(-1), null, new Type[2] { typeof(CollectableItem), typeof(int) }, null) ?? throw new MissingMethodException("CollectableItemManager", "InternalAddItem"); } } internal static class InternalRemoveItem { public delegate void PrefixSignature(CollectableItemManager self, ref CollectableItem item, ref int amount); public delegate void PostfixSignature(CollectableItemManager self, ref CollectableItem item, ref int amount); 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(CollectableItemManager).GetMethod("InternalRemoveItem", (BindingFlags)(-1), null, new Type[2] { typeof(CollectableItem), typeof(int) }, null) ?? throw new MissingMethodException("CollectableItemManager", "InternalRemoveItem"); } } internal static class AddItem { public delegate void PrefixSignature(ref CollectableItem item, ref int amount); public delegate void PostfixSignature(ref CollectableItem item, ref int amount); 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(CollectableItemManager).GetMethod("AddItem", (BindingFlags)(-1), null, new Type[2] { typeof(CollectableItem), typeof(int) }, null) ?? throw new MissingMethodException("CollectableItemManager", "AddItem"); } } internal static class RemoveItem { public delegate void PrefixSignature(ref CollectableItem item, ref int amount); public delegate void PostfixSignature(ref CollectableItem item, ref int amount); 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(CollectableItemManager).GetMethod("RemoveItem", (BindingFlags)(-1), null, new Type[2] { typeof(CollectableItem), typeof(int) }, null) ?? throw new MissingMethodException("CollectableItemManager", "RemoveItem"); } } internal static class Awake { public delegate void PrefixSignature(CollectableItemManager self); public delegate void PostfixSignature(CollectableItemManager 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(CollectableItemManager).GetMethod("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("CollectableItemManager", "Awake"); } } } 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 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 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 Awake { 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("Awake", (BindingFlags)(-1), null, Array.Empty<Type>(), null) ?? throw new MissingMethodException("HeroController", "Awake"); } } } 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 BingoUI { public abstract class AbstractCounter { public string SpriteName { get; private set; } protected virtual bool CounterDisplayEnabled => true; internal bool IsCounterDisplayEnabled { get { if (!CounterDisplayEnabled) { return false; } Dictionary<string, ConfigEntry<bool>>? counterSettings = ConfigSettings.CounterSettings; if (counterSettings != null && counterSettings.TryGetValue(SpriteName, out ConfigEntry<bool> value)) { return value.Value; } return true; } } internal static event Action<string, ShowRule>? OnUpdateText; protected AbstractCounter(string spriteName) { SpriteName = spriteName; base..ctor(); } public abstract string GetText(); public abstract void SetupHooks(); protected internal void UpdateText(ShowRule showRule = ShowRule.Default) { AbstractCounter.OnUpdateText?.Invoke(SpriteName, showRule); } protected void UpdateTextNextFrame(ShowRule showRule = ShowRule.Default) { UnityExtensions.InvokeNextFrame((MonoBehaviour)(object)BingoUIPlugin.Instance, (Action)delegate { UpdateText(showRule); }); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [MonoDetourTargets(typeof(UIManager))] [MonoDetourTargets(typeof(HeroController))] [BepInPlugin("io.github.flibber-hk.bingoui", "BingoUI", "1.2.5")] public class BingoUIPlugin : BaseUnityPlugin, ISaveDataMod<SaveData>, ISaveDataMod, IModMenuCustomMenu, IModMenuInterface { [CompilerGenerated] private sealed class <<AfterPause>g__Wrapped|13_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public IEnumerator orig; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<AfterPause>g__Wrapped|13_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = orig; <>1__state = 1; return true; case 1: <>1__state = -1; if (ConfigSettings.AlwaysDisplayCounters || ConfigSettings.NeverDisplayCounters) { return false; } if (Instance._canvasManager != null) { Instance._canvasManager.FadeInAll(); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <<TakedownCanvas>g__Wrapped|11_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public IEnumerator orig; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<TakedownCanvas>g__Wrapped|11_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = orig; <>1__state = 1; return true; case 1: <>1__state = -1; Instance._canvasManager?.Dispose(); Instance._canvasManager = null; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal CounterManager CounterManager; private CanvasManager? _canvasManager; public const string Id = "io.github.flibber-hk.bingoui"; public static BingoUIPlugin Instance { get; private set; } SaveData? ISaveDataMod<SaveData>.SaveData { get { return SaveData.Instance; } set { SaveData.Instance = value; } } public static string Name => "BingoUI"; public static string Version => "1.2.5"; private void Awake() { Instance = this; CounterManager = new CounterManager(); ConfigSettings.Setup(((BaseUnityPlugin)this).Config, CounterManager); CurrencyTracker.Hook(); Md.HeroController.Start.Postfix(SetupCanvas); GoToPauseMenu.Postfix(AfterPause); UIClosePauseMenu.Postfix(AfterUnpause); ReturnToMainMenu.Postfix(TakedownCanvas); SceneManager.sceneLoaded += OnSceneLoaded; ((BaseUnityPlugin)this).Config.SettingChanged += OnConfigSettingChanged; ((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin " + Name + " (io.github.flibber-hk.bingoui) has loaded!")); } private void OnConfigSettingChanged(object sender, SettingChangedEventArgs e) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Invalid comparison between Unknown and I4 //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Invalid comparison between Unknown and I4 if (e.ChangedSetting.Definition.Section.StartsWith("Counters") && ((int)UIManager.instance.uiState == 5 || (int)UIManager.instance.uiState == 4)) { SetupCanvas(); } } private void TakedownCanvas(UIManager self, ref IEnumerator returnValue) { returnValue = Wrapped(returnValue); [IteratorStateMachine(typeof(<<TakedownCanvas>g__Wrapped|11_0>d))] static IEnumerator Wrapped(IEnumerator orig) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <<TakedownCanvas>g__Wrapped|11_0>d(0) { orig = orig }; } } private void AfterUnpause(UIManager self) { if (!ConfigSettings.AlwaysDisplayCounters && _canvasManager != null) { _canvasManager.FadeOutAll(); } } private void AfterPause(UIManager self, ref IEnumerator returnValue) { returnValue = Wrapped(returnValue); [IteratorStateMachine(typeof(<<AfterPause>g__Wrapped|13_0>d))] static IEnumerator Wrapped(IEnumerator orig) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <<AfterPause>g__Wrapped|13_0>d(0) { orig = orig }; } } private void SetupCanvas(HeroController self) { SetupCanvas(); } private void SetupCanvas() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 _canvasManager?.Dispose(); _canvasManager = new CanvasManager(); if (!ConfigSettings.NeverDisplayCounters && (int)UIManager.instance.uiState == 5) { _canvasManager.FadeInAll(); } } private void OnSceneLoaded(Scene arg0, LoadSceneMode arg1) { if (_canvasManager != null && !ConfigSettings.AlwaysDisplayCounters) { _canvasManager.FadeOutAll(); } } AbstractMenuScreen IModMenuCustomMenu.BuildCustomMenu() { return Menu.GenerateMenu(); } string IModMenuInterface.ModMenuName() { return "BingoUI"; } } internal class CanvasManager : IDisposable { private class CounterData { public required CanvasGroup CanvasGroup { get; set; } public required Text Text { get; set; } public DateTime NextCanvasFade { get; set; } = DateTime.MinValue; } [CompilerGenerated] private sealed class <FadeCanvas>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public CanvasGroup cg; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FadeCanvas>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; if (ConfigSettings.AlwaysDisplayCounters || ConfigSettings.NeverDisplayCounters) { return false; } if (!((Component)cg).gameObject.activeSelf) { FadeIn(cg); } <>2__current = (object)new WaitForSeconds(4f); <>1__state = 1; return true; case 1: <>1__state = -1; FadeOut(cg); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <GetDefaultPositions>d__4 : IEnumerable<Vector2>, IEnumerable, IEnumerator<Vector2>, IEnumerator, IDisposable { private int <>1__state; private Vector2 <>2__current; private int <>l__initialThreadId; private float <y>5__2; private int <x>5__3; Vector2 IEnumerator<Vector2>.Current { [DebuggerHidden] get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return <>2__current; } } [DebuggerHidden] public <GetDefaultPositions>d__4(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; if (num != 0) { if (num != 1) { return false; } <>1__state = -1; <x>5__3--; goto IL_006c; } <>1__state = -1; <y>5__2 = 0.01f; goto IL_0087; IL_006c: if (<x>5__3 >= 0) { <>2__current = new Vector2((float)<x>5__3 / 15f, <y>5__2); <>1__state = 1; return true; } <y>5__2 += 0.11f; goto IL_0087; IL_0087: if (<y>5__2 < 0.9f) { <x>5__3 = 14; goto IL_006c; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<Vector2> IEnumerable<Vector2>.GetEnumerator() { if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; return this; } return new <GetDefaultPositions>d__4(0); } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<Vector2>)this).GetEnumerator(); } } private GameObject _canvas; private Dictionary<string, CounterData> _canvasPanels; public CanvasManager() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) _canvas = CanvasUtil.CreateCanvas((RenderMode)1, new Vector2(1920f, 1080f)); Object.DontDestroyOnLoad((Object)(object)_canvas); AbstractCounter.OnUpdateText += OnUpdateText; _canvasPanels = new Dictionary<string, CounterData>(); using IEnumerator<Vector2> enumerator2 = GetDefaultPositions().GetEnumerator(); foreach (AbstractCounter value2 in BingoUIPlugin.Instance.CounterManager.Counters.Values) { if (value2.IsCounterDisplayEnabled) { enumerator2.MoveNext(); Vector2 current2 = enumerator2.Current; CounterData value = SetupCanvasIcon(value2, current2); _canvasPanels[value2.SpriteName] = value; } } } [IteratorStateMachine(typeof(<GetDefaultPositions>d__4))] private static IEnumerable<Vector2> GetDefaultPositions() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetDefaultPositions>d__4(-2); } public void Dispose() { AbstractCounter.OnUpdateText -= OnUpdateText; Object.Destroy((Object)(object)_canvas); } private CounterData SetupCanvasIcon(AbstractCounter counter, Vector2 position) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) GameObject obj = CanvasUtil.CreateImagePanel(_canvas, SpriteUtil.LoadEmbeddedSprite(GetType().Assembly, "BingoUI.Resources.Images." + counter.SpriteName + ".png", 64f, (Vector2?)null, false), new RectData(Vector2.zero, Vector2.zero, position, position + new Vector2(1f / 15f, 0.1f))); CanvasGroup val = obj.AddComponent<CanvasGroup>(); val.blocksRaycasts = false; val.interactable = false; if (!ConfigSettings.AlwaysDisplayCounters) { ((Component)val).gameObject.SetActive(false); } Text component = CanvasUtil.CreateTextPanel(obj, string.Empty, 23, (TextAnchor)7, new RectData(Vector2.zero, Vector2.zero, Vector2.zero, Vector2.one), true).GetComponent<Text>(); ((Graphic)component).color = Color.black; return new CounterData { CanvasGroup = val, Text = component }; } public void OnUpdateText(string key, ShowRule showRule) { if (!BingoUIPlugin.Instance.CounterManager.Counters.TryGetValue(key, out AbstractCounter value) || !_canvasPanels.TryGetValue(value.SpriteName, out CounterData value2)) { return; } string text = value.GetText(); if (!(value2.Text.text == text) || showRule == ShowRule.ForceShow) { value2.Text.text = text; if (showRule != ShowRule.DontShow && DateTime.Now >= value2.NextCanvasFade) { ((MonoBehaviour)BingoUIPlugin.Instance).StartCoroutine(FadeCanvas(value2.CanvasGroup)); value2.NextCanvasFade = DateTime.Now.AddSeconds(0.5); } } } public void FadeInAll() { foreach (var (key, counterData2) in _canvasPanels) { counterData2.Text.text = BingoUIPlugin.Instance.CounterManager.Counters[key].GetText(); FadeIn(counterData2.CanvasGroup); } } public void FadeOutAll() { foreach (CounterData value in _canvasPanels.Values) { FadeOut(value.CanvasGroup); } } [IteratorStateMachine(typeof(<FadeCanvas>d__10))] private static IEnumerator FadeCanvas(CanvasGroup cg) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FadeCanvas>d__10(0) { cg = cg }; } private static void FadeIn(CanvasGroup cg) { ((MonoBehaviour)BingoUIPlugin.Instance).StartCoroutine(CanvasUtil.FadeInCanvasGroup(cg)); } private static void FadeOut(CanvasGroup cg) { ((MonoBehaviour)BingoUIPlugin.Instance).StartCoroutine(CanvasUtil.FadeOutCanvasGroup(cg)); } } public class CounterManager { public Dictionary<string, AbstractCounter> Counters { get; } public static string GetDisplayName(string spriteKey) { return spriteKey switch { "flea" => "Fleas", "maps" => "Maps", "lockets" => "Lockets", "alltools" => "All Tools", "redtools" => "Red Tools", "yellowtools" => "Yellow Tools", "bluetools" => "Blue Tools", "allquest" => "All Quests", "deliveryquest" => "Delivery Quests", "donationquest" => "Donation Quests", "huntquest" => "Hunt Quests", "gatherquest" => "Gather Quests", "wayfarerquest" => "Wayfarer Quests", "shardbundles" => "Shard Bundles", "beastshards" => "Beast Shards", "strings" => "Rosary Strings", "necklaces" => "Rosary Necklaces", "mapper" => "Shakra Scenes", "silkeater" => "Silkeaters", "bonescroll" => "Bone Scrolls", "choralcommandment" => "Choral Commandments", "craftmetal" => "Craftmetal", "psalmcylinder" => "Psalm Cylinders", "relics" => "Relics", "runeharp" => "Rune Harps", "weavereffigy" => "Weaver Effigies", "rosaries" => "Spent Rosaries", _ => spriteKey, }; } private static List<AbstractCounter> GenerateDefaultCounters() { return new List<AbstractCounter>(27) { new FleaCounter("flea"), new MapCounter("maps"), new LocketCounter("lockets"), new ToolTypeCounter("alltools", (OwnToolsCheckFlags)7), new ToolTypeCounter("redtools", (OwnToolsCheckFlags)1), new ToolTypeCounter("yellowtools", (OwnToolsCheckFlags)4), new ToolTypeCounter("bluetools", (OwnToolsCheckFlags)2), new QuestCounter("allquest", "TYPE_"), new QuestCounter("donationquest", "TYPE_DONATE_"), new QuestCounter("huntquest", "TYPE_HUNT_"), new QuestCounter("gatherquest", "TYPE_GATHER_"), new QuestCounter("wayfarerquest", "TYPE_WAYFARER_"), new DeliveryQuestCounter("deliveryquest"), new PickedConsumableCounter("shardbundles", new HashSet<string> { "Shard Pouch" }), new PickedConsumableCounter("beastshards", new HashSet<string> { "Great Shard" }), new PickedConsumableCounter("strings", new HashSet<string> { "Rosary_Set_Small", "Rosary_Set_Frayed" }), new PickedConsumableCounter("necklaces", new HashSet<string> { "Rosary_Set_Huge_White", "Rosary_Set_Medium", "Rosary_Set_Large" }), new ShakraLocationsCounter("mapper"), new RelicCounter("relics", RelicTypes.AnyRelic, showDistinct: true), new RelicCounter("bonescroll", RelicTypes.BoneScroll, showDistinct: false), new RelicCounter("choralcommandment", RelicTypes.ChoralCommandment, showDistinct: false), new RelicCounter("runeharp", RelicTypes.RuneHarp, showDistinct: false), new RelicCounter("weavereffigy", RelicTypes.WeaverEffigy, showDistinct: false), new RelicCounter("psalmcylinder", RelicTypes.AnyCylinder, showDistinct: false), new TrackedItemCounter("craftmetal", "Tool Metal"), new TrackedItemCounter("silkeater", "Silk Grub"), new RosaryCounter("rosaries") }; } public CounterManager() { Counters = new Dictionary<string, AbstractCounter>(); foreach (AbstractCounter item in GenerateDefaultCounters()) { Counters[item.SpriteName] = item; } foreach (AbstractCounter value in Counters.Values) { value.SetupHooks(); value.UpdateText(); } } } [MonoDetourTargets(typeof(CurrencyCounterBase))] [MonoDetourTargets(typeof(CurrencyCounter))] public static class CurrencyTracker { private static readonly MonoDetourManager currencyMgr = new MonoDetourManager("BingoUI.Currency"); internal static void Hook() { Take.Postfix(RecordSpentCurrency, null, applyByDefault: true, currencyMgr); Md.CurrencyCounter.Awake.Postfix(AddCurrencyTrackers, null, applyByDefault: true, currencyMgr); } private static void AddCurrencyTrackers(CurrencyCounter self) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if ((int)self.currencyType == 0) { ((Component)self).gameObject.AddComponent<CurrencyCounterModifier>(); } } private static void RecordSpentCurrency(ref int amount, ref CurrencyType type) { int currencySpent = GetCurrencySpent(type); currencySpent += amount; SaveData.Instance.SpentCurrency[type] = currencySpent; } internal static int GetCurrencySpent(CurrencyType type) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (!SaveData.Instance.SpentCurrency.TryGetValue(type, out var value)) { return 0; } return value; } } public enum ShowRule { Default, ForceShow, DontShow } public enum DisplayMode { [Description("Show and hide counters")] Default, [Description("Show counters when possible")] AlwaysDisplay, [Description("Never show counters")] NeverDisplay } [Flags] public enum RelicTypes { Unknown = 0, ArcaneEgg = 1, BoneScroll = 2, ChoralCommandment = 4, RuneHarp = 8, WeaverEffigy = 0x10, PsalmCylinder = 0x20, SacredCylinder = 0x40, AnyRelic = 0x1F, AnyCylinder = 0x60, Any = 0x7F } internal static class Extensions { public static void Increment<TKey>(this Dictionary<TKey, int> data, TKey key, int value = 1) { int amount = data.GetAmount(key); data[key] = amount + value; } public static int GetAmount<TKey>(this Dictionary<TKey, int> data, TKey key) { if (data.TryGetValue(key, out var value)) { return value; } return 0; } public static int GetTotalAmount<TKey>(this Dictionary<TKey, int> data, IEnumerable<TKey> keys) { Dictionary<TKey, int> data2 = data; return keys.Select((TKey key) => data2.GetAmount(key)).Sum(); } } } namespace BingoUI.Data { public static class ConfigSettings { public static ConfigEntry<bool>? ShowSpentRosariesInHud; public static ConfigEntry<bool>? ShowSpentRosariesInInventory; public static ConfigEntry<DisplayMode>? CounterDisplayMode; public static Dictionary<string, ConfigEntry<bool>>? CounterSettings; public static bool AlwaysDisplayCounters { get { ConfigEntry<DisplayMode>? counterDisplayMode = CounterDisplayMode; if (counterDisplayMode == null) { return false; } return counterDisplayMode.Value == DisplayMode.AlwaysDisplay; } } public static bool NeverDisplayCounters { get { ConfigEntry<DisplayMode>? counterDisplayMode = CounterDisplayMode; if (counterDisplayMode == null) { return false; } return counterDisplayMode.Value == DisplayMode.NeverDisplay; } } public static void Setup(ConfigFile config, CounterManager counterManager) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown ShowSpentRosariesInHud = config.Bind<bool>("Currency", "ShowSpentRosariesInHud", true, "Show spent rosaries in HUD"); ShowSpentRosariesInInventory = config.Bind<bool>("Currency", "ShowSpentRosariesInInventory", true, "Show spent rosaries in inventory"); CounterDisplayMode = config.Bind<DisplayMode>("Counters", "CounterDisplayMode", DisplayMode.Default, new ConfigDescription("When to display counters", (AcceptableValueBase)null, new object[1] { MenuElementGenerators.CreateRightDescGenerator(true) })); CounterSettings = new Dictionary<string, ConfigEntry<bool>>(); foreach (string key in counterManager.Counters.Keys) { string displayName = CounterManager.GetDisplayName(key); CounterSettings[key] = config.Bind<bool>("Counters.Individual", displayName, key != "rosaries", "Show counter: " + displayName); } } } internal static class Menu { public static AbstractMenuScreen GenerateMenu() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Expected O, but got Unknown ConfigEntryFactory val = new ConfigEntryFactory(); List<MenuElement> list = new List<MenuElement>(); List<MenuElement> list2 = new List<MenuElement>(); MenuElement val6 = default(MenuElement); foreach (var (val4, val5) in ((BaseUnityPlugin)BingoUIPlugin.Instance).Config) { if (val.GenerateMenuElement(val5, ref val6) && val6 != null) { if (val4.Section == "Counters.Individual") { list2.Add(val6); } else { list.Add(val6); } } } PaginatedMenuScreenBuilder val7 = new PaginatedMenuScreenBuilder("Counter Toggles", 8); val7.AddRange((IEnumerable<MenuElement>)list2); AbstractMenuScreen subPage = (AbstractMenuScreen)(object)val7.Build(); MenuElement item = (MenuElement)new TextButton("Counter Toggles") { OnSubmit = delegate { MenuScreenNavigation.Show(subPage, (HistoryMode)0); } }; list.Add(item); SimpleMenuScreen val8 = new SimpleMenuScreen("BingoUI"); val8.AddRange((IEnumerable<MenuElement>)list); return (AbstractMenuScreen)val8; } } public class SaveData { private static SaveData? _instance; public static SaveData Instance { get { if (_instance == null) { _instance = new SaveData(); } return _instance; } [param: AllowNull] internal set { _instance = value; } } public Dictionary<CurrencyType, int> SpentCurrency { get; set; } = new Dictionary<CurrencyType, int> { [(CurrencyType)0] = 0, [(CurrencyType)1] = 0 }; public Dictionary<string, int> PickedShinies { get; set; } = new Dictionary<string, int>(); public Dictionary<string, int> ItemsEverObtained { get; set; } = new Dictionary<string, int>(); public HashSet<string> ShakraScenes { get; set; } = new HashSet<string>(); public Dictionary<string, int> DeliveryQuestsCompleted { get; set; } = new Dictionary<string, int>(); } } namespace BingoUI.Counters { [MonoDetourTargets(typeof(FullQuestBase))] public class DeliveryQuestCounter : AbstractCounter { public DeliveryQuestCounter(string spriteName) : base(spriteName) { } public override void SetupHooks() { TryEndQuest.Postfix(OnCompleteQuest); } private void OnCompleteQuest(FullQuestBase self, ref Action afterPrompt, ref bool consumeCurrency, ref bool forceEnd, ref bool showPrompt, ref bool returnValue) { if (returnValue && ((BasicQuestBase)self).QuestType.displayName.Key.StartsWith("TYPE_COURIER_")) { string name = ((Object)self).name; int value; int num = (SaveData.Instance.DeliveryQuestsCompleted.