Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CoronerScopophobia v1.0.2
Coroner - Scopophobia.dll
Decompiled 7 months agousing System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Coroner; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using ShyGuy.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Turkeysteaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Provides integration between Coroner and Scopophobia.")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Coroner - Scopophobia")] [assembly: AssemblyTitle("Coroner - Scopophobia")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [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 CoronerScopophobia { public static class PluginInfo { public const string PLUGIN_ID = "coroner.scopophobia"; public const string PLUGIN_NAME = "Coroner - Scopophobia"; public const string PLUGIN_VERSION = "1.0.0"; public const string PLUGIN_GUID = "Turkeysteaks.coroner.scopophobia"; } [BepInPlugin("Turkeysteaks.coroner.scopophobia", "Coroner - Scopophobia", "1.0.0")] public class Plugin : BaseUnityPlugin { public ManualLogSource PluginLogger; public string KEY = "DeathEnemyShyGuy"; public AdvancedCauseOfDeath SHY_GUY; public static Plugin Instance { get; private set; } private void Awake() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) Instance = this; PluginLogger = ((BaseUnityPlugin)this).Logger; Harmony val = new Harmony("Turkeysteaks.coroner.scopophobia"); val.PatchAll(); PluginLogger.LogInfo((object)"Plugin Coroner - Scopophobia (Turkeysteaks.coroner.scopophobia) is loaded!"); if (!API.IsRegistered(KEY)) { SHY_GUY = API.Register(KEY); } } } } namespace CoronerScopophobia.Patch { [HarmonyPatch(typeof(ShyGuyAI))] [HarmonyPatch("killPlayerAnimation")] internal class KillPlayerAnimationPatch { public static void Postfix(ShyGuyAI __instance, ulong playerId, ref IEnumerator __result) { try { Action prefixAction = delegate { Console.WriteLine("--> beginning"); }; Action postfixAction = delegate { HandleShyGuyKill(playerId); }; Action<object> preItemAction = delegate(object item) { Console.WriteLine($"--> before {item}"); }; Action<object> postItemAction = delegate(object item) { Console.WriteLine($"--> after {item}"); }; Func<object, object> itemAction = delegate(object item) { string text = item?.ToString() + "+"; Console.WriteLine($"--> item {item} => {text}"); return text; }; SimpleEnumerator simpleEnumerator = new SimpleEnumerator { enumerator = __result, prefixAction = prefixAction, postfixAction = postfixAction, preItemAction = preItemAction, postItemAction = postItemAction, itemAction = itemAction }; __result = simpleEnumerator.GetEnumerator(); } catch (Exception ex) { Plugin.Instance.PluginLogger.LogError((object)("Error in KillPlayerAnimationPatch.Postfix: " + ex)); Plugin.Instance.PluginLogger.LogError((object)ex.StackTrace); } } private static void HandleShyGuyKill(ulong playerId) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) Plugin.Instance.PluginLogger.LogDebug((object)"Player was killed by Shy Guy! Processing..."); PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerId]; Plugin.Instance.PluginLogger.LogDebug((object)$"Player {playerId} was killed by Shy Guy! Setting cause of death..."); API.SetCauseOfDeath(val, (AdvancedCauseOfDeath?)Plugin.Instance.SHY_GUY); } } internal class SimpleEnumerator : IEnumerable { public IEnumerator enumerator; public Action prefixAction; public Action postfixAction; public Action<object> preItemAction; public Action<object> postItemAction; public Func<object, object> itemAction; IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public IEnumerator GetEnumerator() { prefixAction(); while (enumerator.MoveNext()) { object item = enumerator.Current; preItemAction(item); yield return itemAction(item); postItemAction(item); } postfixAction(); } } }