Please disclose if any significant portion of your mod was created 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 Cursed Voodoo v1.0.0
VoodooNerf.dll
Decompiled 6 months agousing System; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Omniscye")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("VoodooNerf")] [assembly: AssemblyTitle("VoodooNerf")] [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 VoodooNerf { [BepInPlugin("Omniscye.VoodooNerf", "VoodooNerf", "1.0")] public class VoodooNerf : BaseUnityPlugin { internal static VoodooNerf Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } } namespace Empress.Repo.VoodooKillPatch { [BepInPlugin("empress.repo.voodookillpatch", "Voodoo Kill Patch", "1.0.4")] [BepInProcess("REPO.exe")] public sealed class Plugin : BaseUnityPlugin { public const string PluginGuid = "empress.repo.voodookillpatch"; public const string PluginName = "Voodoo Kill Patch"; public const string PluginVersion = "1.0.4"; internal static ManualLogSource LogSrc; private Harmony _harmony; private bool _patched; internal static Type VoodooType; private void Awake() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown LogSrc = ((BaseUnityPlugin)this).Logger; _harmony = new Harmony("empress.repo.voodookillpatch"); TryPatch(); AppDomain.CurrentDomain.AssemblyLoad += OnAssemblyLoad; } private void OnDestroy() { try { AppDomain.CurrentDomain.AssemblyLoad -= OnAssemblyLoad; Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } catch { } } private void OnAssemblyLoad(object sender, AssemblyLoadEventArgs e) { if (_patched) { return; } try { string a = e.LoadedAssembly?.GetName()?.Name; if (string.Equals(a, "WesleysEnemies", StringComparison.Ordinal)) { LogSrc.LogInfo((object)"Detected WesleysEnemies assembly load; attempting patch..."); TryPatch(); } } catch (Exception arg) { LogSrc.LogError((object)$"OnAssemblyLoad handler errored: {arg}"); } } private void TryPatch() { //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Expected O, but got Unknown //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Expected O, but got Unknown //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Expected O, but got Unknown //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Expected O, but got Unknown //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Expected O, but got Unknown if (_patched) { return; } Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(delegate(Assembly a) { try { return a.GetName().Name.Equals("WesleysEnemies", StringComparison.Ordinal); } catch { return false; } }); if (assembly == null) { LogSrc.LogInfo((object)"WesleysEnemies not loaded yet. Waiting..."); return; } VoodooType = assembly.GetType("WesleysEnemies.AI.Voodoo", throwOnError: false) ?? assembly.GetType("WesleysEnemies.Voodoo", throwOnError: false) ?? assembly.GetTypes().FirstOrDefault((Type t) => t.Name == "Voodoo"); if (VoodooType == null) { LogSrc.LogWarning((object)"Type 'Voodoo' not found in WesleysEnemies; nothing to patch."); return; } MethodInfo method = VoodooType.GetMethod("OnHurt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { _harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(Patches).GetMethod("Voodoo_OnHurt_Prefix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { LogSrc.LogWarning((object)"Method Voodoo.OnHurt() not found; kill-fix may be incomplete."); } MethodInfo method2 = VoodooType.GetMethod("OnSpawn", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 != null) { _harmony.Patch((MethodBase)method2, (HarmonyMethod)null, new HarmonyMethod(typeof(Patches).GetMethod("Voodoo_OnSpawn_Postfix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } Type typeFromHandle = typeof(EnemyHealth); MethodInfo method3 = typeFromHandle.GetMethod("Hurt", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[2] { typeof(int), typeof(Vector3) }, null); if (method3 != null) { _harmony.Patch((MethodBase)method3, (HarmonyMethod)null, new HarmonyMethod(typeof(Patches).GetMethod("EnemyHealth_Hurt_Postfix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } MethodInfo method4 = typeFromHandle.GetMethod("DeathImpulseRPC", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method4 != null) { _harmony.Patch((MethodBase)method4, (HarmonyMethod)null, new HarmonyMethod(typeof(Patches).GetMethod("EnemyHealth_DeathImpulse_Postfix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } Type type = (from a in AppDomain.CurrentDomain.GetAssemblies() select a.GetType("EnemyRigidbody", throwOnError: false)).FirstOrDefault((Type t) => t != null); if (type != null) { MethodInfo method5 = type.GetMethod("FixedUpdate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method5 != null) { _harmony.Patch((MethodBase)method5, new HarmonyMethod(typeof(Patches).GetMethod("EnemyRigidbody_FixedUpdate_Prefix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } Type type2 = (from a in AppDomain.CurrentDomain.GetAssemblies() select a.GetType("EnemyDirector", throwOnError: false)).FirstOrDefault((Type t) => t != null); if (type2 != null) { MethodInfo method6 = type2.GetMethod("SetInvestigate", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[3] { typeof(Vector3), typeof(float), typeof(bool) }, null); if (method6 != null) { _harmony.Patch((MethodBase)method6, new HarmonyMethod(typeof(Patches).GetMethod("EnemyDirector_SetInvestigate_Prefix", BindingFlags.Static | BindingFlags.Public)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } _patched = true; LogSrc.LogInfo((object)"Patched WesleysEnemies.Voodoo.OnHurt() – Voodoo can now be killed normally."); } internal static void SafeQuarantine(GameObject go) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)go == (Object)null) { return; } Behaviour[] componentsInChildren = go.GetComponentsInChildren<Behaviour>(true); foreach (Behaviour val in componentsInChildren) { try { val.enabled = false; } catch { } } Collider[] componentsInChildren2 = go.GetComponentsInChildren<Collider>(true); foreach (Collider val2 in componentsInChildren2) { try { val2.enabled = false; } catch { } } Rigidbody[] componentsInChildren3 = go.GetComponentsInChildren<Rigidbody>(true); foreach (Rigidbody val3 in componentsInChildren3) { try { val3.isKinematic = true; val3.velocity = Vector3.zero; val3.angularVelocity = Vector3.zero; val3.Sleep(); } catch { } } } catch (Exception ex) { ManualLogSource logSrc = LogSrc; if (logSrc != null) { logSrc.LogWarning((object)("SafeQuarantine failed: " + ex.Message)); } } } } public static class Patches { public static bool Voodoo_OnHurt_Prefix(object __instance) { return false; } public static void Voodoo_OnSpawn_Postfix(object __instance) { try { object? obj = __instance.GetType().GetField("_enemyHealth", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)?.GetValue(__instance); EnemyHealth val = (EnemyHealth)((obj is EnemyHealth) ? obj : null); if ((Object)(object)val != (Object)null) { if (val.health <= 0) { val.health = 100; } if (val.healthCurrent <= 0 || val.healthCurrent > val.health) { val.healthCurrent = val.health; } ManualLogSource logSrc = Plugin.LogSrc; if (logSrc != null) { logSrc.LogInfo((object)$"Voodoo OnSpawn: normalized health to {val.healthCurrent}."); } } } catch (Exception ex) { ManualLogSource logSrc2 = Plugin.LogSrc; if (logSrc2 != null) { logSrc2.LogWarning((object)("Voodoo_OnSpawn_Postfix failed: " + ex.Message)); } } } public static void EnemyHealth_Hurt_Postfix(EnemyHealth __instance, int _damage, Vector3 _hurtDirection) { //IL_012b: Unknown result type (might be due to invalid IL or missing references) try { Type voodooType = Plugin.VoodooType; if (voodooType == null) { return; } Component component = ((Component)__instance).gameObject.GetComponent(voodooType); if ((Object)(object)component == (Object)null) { return; } ManualLogSource logSrc = Plugin.LogSrc; if (logSrc != null) { logSrc.LogInfo((object)$"Voodoo took {_damage} damage. HP now {__instance.healthCurrent}/{__instance.health}."); } if (__instance.healthCurrent > 0) { return; } FieldInfo field = typeof(EnemyHealth).GetField("dead", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); bool flag = false; if (field != null && field.GetValue(__instance) is bool flag2) { flag = flag2; } if (!flag) { MethodInfo method = typeof(EnemyHealth).GetMethod("Death", BindingFlags.Instance | BindingFlags.NonPublic); if (method != null) { ManualLogSource logSrc2 = Plugin.LogSrc; if (logSrc2 != null) { logSrc2.LogInfo((object)"Voodoo at <=0 HP but not dead. Forcing Death()."); } method.Invoke(__instance, new object[1] { _hurtDirection }); } } Plugin.SafeQuarantine(((Component)__instance).gameObject); Object.Destroy((Object)(object)((Component)__instance).gameObject, 0.25f); } catch (Exception ex) { ManualLogSource logSrc3 = Plugin.LogSrc; if (logSrc3 != null) { logSrc3.LogWarning((object)("EnemyHealth_Hurt_Postfix failed: " + ex.Message)); } } } public static void EnemyHealth_DeathImpulse_Postfix(EnemyHealth __instance) { try { Type voodooType = Plugin.VoodooType; if (voodooType == null) { return; } Component component = ((Component)__instance).gameObject.GetComponent(voodooType); if (!((Object)(object)component == (Object)null)) { ManualLogSource logSrc = Plugin.LogSrc; if (logSrc != null) { logSrc.LogInfo((object)"Voodoo confirmed dead via DeathImpulse. Destroying GameObject."); } Plugin.SafeQuarantine(((Component)__instance).gameObject); Object.Destroy((Object)(object)((Component)__instance).gameObject); } } catch (Exception ex) { ManualLogSource logSrc2 = Plugin.LogSrc; if (logSrc2 != null) { logSrc2.LogWarning((object)("EnemyHealth_DeathImpulse_Postfix failed: " + ex.Message)); } } } public static bool EnemyRigidbody_FixedUpdate_Prefix(object __instance) { try { Component val = (Component)((__instance is Component) ? __instance : null); if (val != null) { EnemyHealth component = val.GetComponent<EnemyHealth>(); if ((Object)(object)component != (Object)null && component.healthCurrent <= 0) { return false; } } } catch { } return true; } public static bool EnemyDirector_SetInvestigate_Prefix(object __instance, Vector3 position, float radius, bool pathfindOnly) { try { Component val = (Component)((__instance is Component) ? __instance : null); if (val != null) { EnemyHealth componentInParent = val.GetComponentInParent<EnemyHealth>(); if ((Object)(object)componentInParent != (Object)null && componentInParent.healthCurrent <= 0) { return false; } } } catch { } return true; } } }