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 R2API ProcType v1.0.2
plugins/R2API.ProcType/R2API.ProcType.dll
Decompiled a year 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 System.Text; using BepInEx; using BepInEx.Logging; using HG; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using R2API.AutoVersionGen; using RoR2; using UnityEngine.Networking; [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("R2API.ProcType")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2+de906744166246d147865416a8acd4b143a0b856")] [assembly: AssemblyProduct("R2API.ProcType")] [assembly: AssemblyTitle("R2API.ProcType")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.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 System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] 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] [DebuggerNonUserCode] 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; } } } namespace R2API { public enum ModdedProcType { Invalid } [AutoVersion] public static class ProcTypeAPI { private delegate bool ProcChainMask_AppendToStringBuilder_Delegate(ref ProcChainMask procChainMask, StringBuilder stringBuilder, bool flag); [CompilerGenerated] private static class <>O { public static Manipulator <0>__ProcChainMask_AppendToStringBuilder; public static hook_Write_NetworkWriter_ProcChainMask <1>__NetworkExtensions_Write_NetworkWriter_ProcChainMask; public static hook_ReadProcChainMask <2>__NetworkExtensions_ReadProcChainMask; public static hook_GetHashCode <3>__ProcChainMask_GetHashCode; public static hook_Equals_ProcChainMask <4>__ProcChainMask_Equals_ProcChainMask; } public const string PluginGUID = "com.bepis.r2api.proctype"; public const string PluginName = "R2API.ProcType"; private static bool _hookEnabled; private static int _moddedProcTypeCount; private static int byteCount; private static byte[] buffer; public const string PluginVersion = "1.0.2"; public static int ModdedProcTypeCount { get { return _moddedProcTypeCount; } private set { if (_moddedProcTypeCount != value) { _moddedProcTypeCount = value; if (byteCount != (byteCount = value + 7 >> 3)) { buffer = new byte[byteCount]; } } } } public static ModdedProcType ReserveProcType() { SetHooks(); if (ModdedProcTypeCount == int.MaxValue) { throw new IndexOutOfRangeException($"Reached the ModdedProcType limit ({int.MaxValue})! Please contact R2API developers to increase the limit"); } ModdedProcTypeCount++; return (ModdedProcType)ModdedProcTypeCount; } public static void AddModdedProc(this ref ProcChainMask procChainMask, ModdedProcType procType) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) if (procType <= ModdedProcType.Invalid || (int)procType > ModdedProcTypeCount) { ProcTypePlugin.Logger.LogError((object)string.Format("Parameter '{0}' with value {1} is out of range of registered types (1-{2})\n{3}", "procType", procType, ModdedProcTypeCount, new StackTrace(fNeedFileInfo: true))); return; } SetHooks(); procType--; byte[] moddedMask = ProcTypeInterop.GetModdedMask(procChainMask); int num = (int)procType >> 3; byte[] array; if (moddedMask == null) { array = new byte[num + 1]; array[num] = GetMaskingBit(num, procType); } else if (moddedMask.Length > num) { byte b = (byte)(moddedMask[num] | GetMaskingBit(num, procType)); if (b == moddedMask[num]) { return; } array = ArrayUtils.Clone<byte>(moddedMask); array[num] = b; } else { array = moddedMask; Array.Resize(ref array, num + 1); array[num] = GetMaskingBit(num, procType); } ProcTypeInterop.SetModdedMask(ref procChainMask, array); } public static void RemoveModdedProc(this ref ProcChainMask procChainMask, ModdedProcType procType) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) if (procType <= ModdedProcType.Invalid || (int)procType > ModdedProcTypeCount) { ProcTypePlugin.Logger.LogError((object)string.Format("Parameter '{0}' with value {1} is out of range of registered types (1-{2})\n{3}", "procType", procType, ModdedProcTypeCount, new StackTrace(fNeedFileInfo: true))); return; } SetHooks(); procType--; byte[] array = ProcTypeInterop.GetModdedMask(procChainMask); if (array == null) { return; } int num = (int)procType >> 3; if (array.Length <= num) { return; } byte b = (byte)(array[num] & ~GetMaskingBit(num, procType)); if (b == array[num]) { return; } if (b == 0 && array.Length == num + 1) { int num2 = 0; for (int num3 = array.Length - 2; num3 >= 0; num3--) { if (array[num3] != 0) { num2 = num3 + 1; break; } } if (num2 == 0) { array = null; } else { Array.Resize(ref array, num2); } } else { array = ArrayUtils.Clone<byte>(array); array[num] = b; } ProcTypeInterop.SetModdedMask(ref procChainMask, array); } public static bool HasModdedProc(this ProcChainMask procChainMask, ModdedProcType procType) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) if (procType <= ModdedProcType.Invalid || (int)procType > ModdedProcTypeCount) { ProcTypePlugin.Logger.LogError((object)string.Format("Parameter '{0}' with value {1} is out of range of registered types (1-{2})\n{3}", "procType", procType, ModdedProcTypeCount, new StackTrace(fNeedFileInfo: true))); return false; } procType--; byte[] moddedMask = ProcTypeInterop.GetModdedMask(procChainMask); if (moddedMask == null) { return false; } int num = (int)procType >> 3; if (moddedMask.Length > num) { return (moddedMask[num] & GetMaskingBit(num, procType)) > 0; } return false; } public static BitArray GetModdedMask(ProcChainMask procChainMask) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) BitArray moddedMaskRaw = GetModdedMaskRaw(procChainMask); moddedMaskRaw.Length = ModdedProcTypeCount; return moddedMaskRaw; } public static void GetModdedMask(ProcChainMask procChainMask, BitArray dest) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) GetModdedMaskRaw(procChainMask, dest); dest.Length = ModdedProcTypeCount; } public static BitArray GetModdedMaskRaw(ProcChainMask procChainMask) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) SetHooks(); byte[] moddedMask = ProcTypeInterop.GetModdedMask(procChainMask); if (moddedMask == null) { return new BitArray(0); } return new BitArray(moddedMask); } public static void GetModdedMaskRaw(ProcChainMask procChainMask, BitArray dest) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (dest == null) { throw new ArgumentNullException("dest"); } SetHooks(); byte[] moddedMask = ProcTypeInterop.GetModdedMask(procChainMask); if (moddedMask != null) { dest.Length = moddedMask.Length << 3; for (int i = 0; i < moddedMask.Length; i++) { byte b = moddedMask[i]; int num = i << 3; dest[num] = (b & 1) > 0; dest[num + 1] = (b & 2) > 0; dest[num + 2] = (b & 4) > 0; dest[num + 3] = (b & 8) > 0; dest[num + 4] = (b & 0x10) > 0; dest[num + 5] = (b & 0x20) > 0; dest[num + 6] = (b & 0x40) > 0; dest[num + 7] = (b & 0x80) > 0; } } else { dest.Length = 0; } } public static void SetModdedMask(ref ProcChainMask procChainMask, BitArray value) { if (value == null) { throw new ArgumentNullException("value"); } SetHooks(); int num = 0; for (int num2 = value.Length - 1; num2 >= 0; num2--) { if (value[num2]) { num = num2 + 7 >> 3; break; } } if (num > 0) { byte[] array = new byte[num]; value.CopyTo(buffer, 0); Array.Copy(buffer, 0, array, 0, num); ProcTypeInterop.SetModdedMask(ref procChainMask, array); } else { ProcTypeInterop.SetModdedMask(ref procChainMask, (byte[])null); } } internal static void SetHooks() { //IL_0018: 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_0023: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown if (!_hookEnabled) { object obj = <>O.<0>__ProcChainMask_AppendToStringBuilder; if (obj == null) { Manipulator val = ProcChainMask_AppendToStringBuilder; <>O.<0>__ProcChainMask_AppendToStringBuilder = val; obj = (object)val; } ProcChainMask.AppendToStringBuilder += (Manipulator)obj; object obj2 = <>O.<1>__NetworkExtensions_Write_NetworkWriter_ProcChainMask; if (obj2 == null) { hook_Write_NetworkWriter_ProcChainMask val2 = NetworkExtensions_Write_NetworkWriter_ProcChainMask; <>O.<1>__NetworkExtensions_Write_NetworkWriter_ProcChainMask = val2; obj2 = (object)val2; } NetworkExtensions.Write_NetworkWriter_ProcChainMask += (hook_Write_NetworkWriter_ProcChainMask)obj2; object obj3 = <>O.<2>__NetworkExtensions_ReadProcChainMask; if (obj3 == null) { hook_ReadProcChainMask val3 = NetworkExtensions_ReadProcChainMask; <>O.<2>__NetworkExtensions_ReadProcChainMask = val3; obj3 = (object)val3; } NetworkExtensions.ReadProcChainMask += (hook_ReadProcChainMask)obj3; object obj4 = <>O.<3>__ProcChainMask_GetHashCode; if (obj4 == null) { hook_GetHashCode val4 = ProcChainMask_GetHashCode; <>O.<3>__ProcChainMask_GetHashCode = val4; obj4 = (object)val4; } ProcChainMask.GetHashCode += (hook_GetHashCode)obj4; object obj5 = <>O.<4>__ProcChainMask_Equals_ProcChainMask; if (obj5 == null) { hook_Equals_ProcChainMask val5 = ProcChainMask_Equals_ProcChainMask; <>O.<4>__ProcChainMask_Equals_ProcChainMask = val5; obj5 = (object)val5; } ProcChainMask.Equals_ProcChainMask += (hook_Equals_ProcChainMask)obj5; _hookEnabled = true; } } internal static void UnsetHooks() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown object obj = <>O.<0>__ProcChainMask_AppendToStringBuilder; if (obj == null) { Manipulator val = ProcChainMask_AppendToStringBuilder; <>O.<0>__ProcChainMask_AppendToStringBuilder = val; obj = (object)val; } ProcChainMask.AppendToStringBuilder -= (Manipulator)obj; object obj2 = <>O.<1>__NetworkExtensions_Write_NetworkWriter_ProcChainMask; if (obj2 == null) { hook_Write_NetworkWriter_ProcChainMask val2 = NetworkExtensions_Write_NetworkWriter_ProcChainMask; <>O.<1>__NetworkExtensions_Write_NetworkWriter_ProcChainMask = val2; obj2 = (object)val2; } NetworkExtensions.Write_NetworkWriter_ProcChainMask -= (hook_Write_NetworkWriter_ProcChainMask)obj2; object obj3 = <>O.<2>__NetworkExtensions_ReadProcChainMask; if (obj3 == null) { hook_ReadProcChainMask val3 = NetworkExtensions_ReadProcChainMask; <>O.<2>__NetworkExtensions_ReadProcChainMask = val3; obj3 = (object)val3; } NetworkExtensions.ReadProcChainMask -= (hook_ReadProcChainMask)obj3; object obj4 = <>O.<3>__ProcChainMask_GetHashCode; if (obj4 == null) { hook_GetHashCode val4 = ProcChainMask_GetHashCode; <>O.<3>__ProcChainMask_GetHashCode = val4; obj4 = (object)val4; } ProcChainMask.GetHashCode -= (hook_GetHashCode)obj4; object obj5 = <>O.<4>__ProcChainMask_Equals_ProcChainMask; if (obj5 == null) { hook_Equals_ProcChainMask val5 = ProcChainMask_Equals_ProcChainMask; <>O.<4>__ProcChainMask_Equals_ProcChainMask = val5; obj5 = (object)val5; } ProcChainMask.Equals_ProcChainMask -= (hook_Equals_ProcChainMask)obj5; _hookEnabled = false; } private static void ProcChainMask_AppendToStringBuilder(ILContext il) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) int locFlagIndex = -1; ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref locFlagIndex) }) && val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 1), (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, ")"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<StringBuilder>(x, "Append") })) { val.Emit(OpCodes.Ldarg, 0); val.Emit(OpCodes.Ldarg, 1); val.Emit(OpCodes.Ldloc, locFlagIndex); val.EmitDelegate<ProcChainMask_AppendToStringBuilder_Delegate>((ProcChainMask_AppendToStringBuilder_Delegate)delegate(ref ProcChainMask procChainMask, StringBuilder stringBuilder, bool flag) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) byte[] moddedMask = ProcTypeInterop.GetModdedMask(procChainMask); if (moddedMask != null) { for (int i = 0; i < moddedMask.Length; i++) { for (int j = 0; j < 8; j++) { if ((moddedMask[i] & (1 << j)) > 0) { if (flag) { stringBuilder.Append("|"); } stringBuilder.Append(string.Format("({0}){1}", "ModdedProcType", (i << 3) + j)); flag = true; } } } } return flag; }); val.Emit(OpCodes.Stloc, locFlagIndex); } else { ProcTypePlugin.Logger.LogError((object)"ProcTypeAPI.ProcChainMask_AppendToStringBuilder IL match failed."); } } private static void NetworkExtensions_Write_NetworkWriter_ProcChainMask(orig_Write_NetworkWriter_ProcChainMask orig, NetworkWriter writer, ProcChainMask procChainMask) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(writer, procChainMask); writer.NetworkWriteModdedMask(ProcTypeInterop.GetModdedMask(procChainMask)); } private static ProcChainMask NetworkExtensions_ReadProcChainMask(orig_ReadProcChainMask orig, NetworkReader reader) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) ProcChainMask result = orig.Invoke(reader); ProcTypeInterop.SetModdedMask(ref result, NetworkReadModdedMask(reader)); return result; } private static int ProcChainMask_GetHashCode(orig_GetHashCode orig, ref ProcChainMask self) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) return (orig.Invoke(ref self) * 397) ^ ModdedMaskHashCode(ProcTypeInterop.GetModdedMask(self)); } private static bool ProcChainMask_Equals_ProcChainMask(orig_Equals_ProcChainMask orig, ref ProcChainMask self, ProcChainMask other) { //IL_0002: 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_0015: Unknown result type (might be due to invalid IL or missing references) if (orig.Invoke(ref self, other)) { return ModdedMaskEquals(ProcTypeInterop.GetModdedMask(self), ProcTypeInterop.GetModdedMask(other)); } return false; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static byte GetMaskingBit(int maskIndex, ModdedProcType procType) { return (byte)(1 << (int)(procType - (maskIndex << 3))); } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static void NetworkWriteModdedMask(this NetworkWriter writer, byte[] mask) { int num = ((mask != null) ? mask.Length : 0); if (ModdedProcTypeCount <= 255) { writer.Write((byte)num); } else if (ModdedProcTypeCount <= 65535) { writer.Write((ushort)num); } else { writer.Write(num); } if (num != 0) { writer.Write(mask, num); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static byte[] NetworkReadModdedMask(NetworkReader reader) { int moddedProcTypeCount = ModdedProcTypeCount; int num = ((moddedProcTypeCount <= 255) ? reader.ReadByte() : ((moddedProcTypeCount > 65535) ? reader.ReadInt32() : reader.ReadUInt16())); int num2 = num; if (num2 <= 0) { return null; } return reader.ReadBytes(num2); } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static int ModdedMaskHashCode(byte[] mask) { int num = 0; if (mask != null) { for (int i = 0; i < mask.Length; i++) { num = HashCode.Combine(num, mask[i]); } } return num; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static bool ModdedMaskEquals(byte[] a, byte[] b) { return ArrayUtils.SequenceEquals<byte>(a ?? Array.Empty<byte>(), b ?? Array.Empty<byte>()); } } [BepInPlugin("com.bepis.r2api.proctype", "R2API.ProcType", "1.0.2")] public sealed class ProcTypePlugin : BaseUnityPlugin { internal static ManualLogSource Logger { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; } private void OnDestroy() { ProcTypeAPI.UnsetHooks(); } } } namespace R2API.AutoVersionGen { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] internal class AutoVersionAttribute : Attribute { } }
plugins/R2API.ProcType/R2API.ProcType.Interop.dll
Decompiled a year agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using Microsoft.CodeAnalysis; using RoR2; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("R2API.ProcType")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("R2API.ProcType.Interop")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+de906744166246d147865416a8acd4b143a0b856")] [assembly: AssemblyProduct("R2API.ProcType.Interop")] [assembly: AssemblyTitle("R2API.ProcType.Interop")] [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 R2API { internal static class ProcTypeInterop { public static byte[] GetModdedMask(ProcChainMask procChainMask) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return procChainMask.r2api_moddedMask; } public static void SetModdedMask(ref ProcChainMask procChainMask, byte[] value) { procChainMask.r2api_moddedMask = value; } } }
patchers/R2API.ProcType/R2API.ProcType.Patcher.dll
Decompiled a year 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 Microsoft.CodeAnalysis; using Mono.Cecil; [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("R2API.ProcType.Patcher")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+de906744166246d147865416a8acd4b143a0b856")] [assembly: AssemblyProduct("R2API.ProcType.Patcher")] [assembly: AssemblyTitle("R2API.ProcType.Patcher")] [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 R2API { internal static class ProcTypePatcher { public static IEnumerable<string> TargetDLLs { get { yield return "RoR2.dll"; } } public static void Patch(AssemblyDefinition assembly) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown TypeDefinition type = assembly.MainModule.GetType("RoR2", "ProcChainMask"); if (type != null) { type.Fields.Add(new FieldDefinition("r2api_moddedMask", (FieldAttributes)6, assembly.MainModule.ImportReference(typeof(byte[])))); } } } }