Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Void Fiend Corrupt API v1.0.0
VoidFiendCorruptAPI.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using EntityStates; using EntityStates.VoidSurvivor.CorruptMode; using HG.Reflection; using IL.EntityStates.VoidSurvivor.CorruptMode; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using RoR2; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("VoidFiendCorruptAPI")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+938b6da7564d472fa2f6a242c4b43edf9014a083")] [assembly: AssemblyProduct("VoidFiendCorruptAPI")] [assembly: AssemblyTitle("VoidFiendCorruptAPI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 VoidFiendCorruptAPI { [Serializable] [BepInPlugin("com.brynzananas.voidfiendcorruptapi", "Void Fiend Corrupt API", "1.0.0")] public class VoidFiendCorruptAPI : BaseUnityPlugin { public const string ModGuid = "com.brynzananas.voidfiendcorruptapi"; public const string ModName = "Void Fiend Corrupt API"; public const string ModVer = "1.0.0"; private static SkillDef corruptedPrimarySkill; private static SkillDef corruptedSecondarySkill; private static SkillDef corruptedUtilitySkill; private static SkillDef corruptedSpecialSkill; private static Dictionary<SkillDef, SkillDef> uncorruptSkillToCorruptSkill = new Dictionary<SkillDef, SkillDef>(); private bool hooksSet; public void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) corruptedPrimarySkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/FireCorruptBeam.asset").WaitForCompletion(); corruptedSecondarySkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/FireCorruptDisk.asset").WaitForCompletion(); corruptedUtilitySkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/VoidBlinkDown.asset").WaitForCompletion(); corruptedSpecialSkill = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/CrushHealth.asset").WaitForCompletion(); SetHooks(); } public void Destroy() { UnsetHooks(); } private void SetHooks() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown if (!hooksSet) { CorruptMode.OnEnter += new Manipulator(CorruptMode_OnEnter); hooksSet = true; } } private void UnsetHooks() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (hooksSet) { CorruptMode.OnEnter -= new Manipulator(CorruptMode_OnEnter); hooksSet = false; } } private void CorruptMode_OnEnter(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CorruptMode>(x, "primaryOverrideSkillDef") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CorruptMode>>((Action<CorruptMode>)GetCorruptedPrimarySkill); } else { ((BaseUnityPlugin)this).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 1 failed!")); } if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CorruptMode>(x, "secondaryOverrideSkillDef") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CorruptMode>>((Action<CorruptMode>)GetCorruptedSecondarySkill); } else { ((BaseUnityPlugin)this).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 2 failed!")); } if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CorruptMode>(x, "utilityOverrideSkillDef") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CorruptMode>>((Action<CorruptMode>)GetCorruptedUtilitySkill); } else { ((BaseUnityPlugin)this).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 3 failed!")); } if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CorruptMode>(x, "specialOverrideSkillDef") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CorruptMode>>((Action<CorruptMode>)GetCorruptedSpecialSkill); } else { ((BaseUnityPlugin)this).Logger.LogError((object)(((MemberReference)il.Method).Name + " IL Hook 4 failed!")); } } private void GetCorruptedPrimarySkill(CorruptMode corruptMode) { GenericSkill primary = ((EntityState)corruptMode).skillLocator.primary; SkillDef val = ((primary != null) ? primary.baseSkill : null); if (!((Object)(object)val == (Object)null) && uncorruptSkillToCorruptSkill.TryGetValue(val, out var value)) { corruptMode.primaryOverrideSkillDef = value; } } private void GetCorruptedSecondarySkill(CorruptMode corruptMode) { GenericSkill secondary = ((EntityState)corruptMode).skillLocator.secondary; SkillDef val = ((secondary != null) ? secondary.baseSkill : null); if (!((Object)(object)val == (Object)null) && uncorruptSkillToCorruptSkill.TryGetValue(val, out var value)) { corruptMode.secondaryOverrideSkillDef = value; } } private void GetCorruptedUtilitySkill(CorruptMode corruptMode) { GenericSkill utility = ((EntityState)corruptMode).skillLocator.utility; SkillDef val = ((utility != null) ? utility.baseSkill : null); if (!((Object)(object)val == (Object)null) && uncorruptSkillToCorruptSkill.TryGetValue(val, out var value)) { corruptMode.utilityOverrideSkillDef = value; } } private void GetCorruptedSpecialSkill(CorruptMode corruptMode) { GenericSkill special = ((EntityState)corruptMode).skillLocator.special; SkillDef val = ((special != null) ? special.baseSkill : null); if (!((Object)(object)val == (Object)null) && uncorruptSkillToCorruptSkill.TryGetValue(val, out var value)) { corruptMode.specialOverrideSkillDef = value; } } public static void AddCorruptedSkillDef(SkillDef originalSkillDef, SkillDef corruptedSkillDef) { if (!uncorruptSkillToCorruptSkill.ContainsKey(originalSkillDef)) { uncorruptSkillToCorruptSkill.Add(originalSkillDef, corruptedSkillDef); } } } }