Decompiled source of CommandDropletFix v1.0.2

CommandDropletFix.dll

Decompiled 4 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using IL.RoR2;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using RoR2;
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.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("CommandDropletFix")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("CommandDropletFix")]
[assembly: AssemblyTitle("CommandDropletFix")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace TPDespair.CommandDropletFix;

[BepInPlugin("com.TPDespair.CommandDropletFix", "CommandDropletFix", "1.0.2")]
public class CommandDropletFixPlugin : BaseUnityPlugin
{
	[CompilerGenerated]
	private sealed class <>c__DisplayClass11_0
	{
		public MethodInfo methodInfo;

		internal bool <CommandDropletFix>b__1(Instruction x)
		{
			return ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)methodInfo);
		}
	}

	[Serializable]
	[CompilerGenerated]
	private sealed class <>c
	{
		public static readonly <>c <>9 = new <>c();

		public static Func<Instruction, bool> <>9__11_2;

		public static Func<Instruction, bool> <>9__11_3;

		public static Func<PickupDef, PickupDef> <>9__11_4;

		public static Manipulator <>9__11_0;

		internal void <CommandDropletFix>b__11_0(ILContext il)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Expected O, but got Unknown
			<>c__DisplayClass11_0 CS$<>8__locals0 = new <>c__DisplayClass11_0();
			ILCursor val = new ILCursor(il);
			CS$<>8__locals0.methodInfo = typeof(PickupCatalog).GetMethod("GetPickupDef");
			int num2 = default(int);
			int num = default(int);
			if (val.TryGotoNext(new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)CS$<>8__locals0.methodInfo),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2),
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num)
			}))
			{
				val.Index += 3;
				val.EmitDelegate<Func<PickupDef, PickupDef>>((Func<PickupDef, PickupDef>)delegate(PickupDef pickupDef)
				{
					//IL_001e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0024: Invalid comparison between Unknown and I4
					//IL_0071: Unknown result type (might be due to invalid IL or missing references)
					//IL_0077: Invalid comparison between Unknown and I4
					//IL_0053: Unknown result type (might be due to invalid IL or missing references)
					//IL_003a: 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)
					//IL_008d: Unknown result type (might be due to invalid IL or missing references)
					if (ZetAspects && !AspectsResolved)
					{
						ResolveAspects();
					}
					if ((int)pickupDef.itemIndex != -1 && (!ZetAspects || !AspectCommandGroupItems || !aspectItemIndexes.Contains(pickupDef.itemIndex)))
					{
						ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
						if (itemDef.ContainsTag((ItemTag)9))
						{
							return null;
						}
					}
					if ((int)pickupDef.equipmentIndex != -1 && (!ZetAspects || !AspectCommandGroupEquip || !aspectEquipIndexes.Contains(pickupDef.equipmentIndex)))
					{
						EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex);
						if (!equipmentDef.canDrop)
						{
							return null;
						}
					}
					return pickupDef;
				});
			}
			else
			{
				Debug.LogWarning((object)"CommandDropletFix Failed!");
			}
		}

		internal bool <CommandDropletFix>b__11_2(Instruction x)
		{
			int num = default(int);
			return ILPatternMatchingExt.MatchStloc(x, ref num);
		}

		internal bool <CommandDropletFix>b__11_3(Instruction x)
		{
			int num = default(int);
			return ILPatternMatchingExt.MatchLdloc(x, ref num);
		}

		internal PickupDef <CommandDropletFix>b__11_4(PickupDef pickupDef)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Invalid comparison between Unknown and I4
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Invalid comparison between Unknown and I4
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: 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)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			if (ZetAspects && !AspectsResolved)
			{
				ResolveAspects();
			}
			if ((int)pickupDef.itemIndex != -1 && (!ZetAspects || !AspectCommandGroupItems || !aspectItemIndexes.Contains(pickupDef.itemIndex)))
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
				if (itemDef.ContainsTag((ItemTag)9))
				{
					return null;
				}
			}
			if ((int)pickupDef.equipmentIndex != -1 && (!ZetAspects || !AspectCommandGroupEquip || !aspectEquipIndexes.Contains(pickupDef.equipmentIndex)))
			{
				EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex);
				if (!equipmentDef.canDrop)
				{
					return null;
				}
			}
			return pickupDef;
		}
	}

	public const string ModVer = "1.0.2";

	public const string ModName = "CommandDropletFix";

	public const string ModGuid = "com.TPDespair.CommandDropletFix";

	public static bool ZetAspects = false;

	internal static bool AspectsResolved = false;

	internal static bool AspectCommandGroupItems = false;

	internal static bool AspectCommandGroupEquip = false;

	internal static List<ItemIndex> aspectItemIndexes = new List<ItemIndex>();

	internal static List<EquipmentIndex> aspectEquipIndexes = new List<EquipmentIndex>();

	public void Awake()
	{
		RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(LateSetup));
	}

	public void LateSetup()
	{
		if (Chainloader.PluginInfos.ContainsKey("com.TPDespair.ZetAspects"))
		{
			ZetAspects = true;
		}
		CommandDropletFix();
	}

	private static void CommandDropletFix()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Expected O, but got Unknown
		object obj = <>c.<>9__11_0;
		if (obj == null)
		{
			Manipulator val = delegate(ILContext il)
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_000e: Expected O, but got Unknown
				ILCursor val2 = new ILCursor(il);
				MethodInfo methodInfo = typeof(PickupCatalog).GetMethod("GetPickupDef");
				int num2 = default(int);
				int num = default(int);
				if (val2.TryGotoNext(new Func<Instruction, bool>[3]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)methodInfo),
					(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2),
					(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num)
				}))
				{
					val2.Index += 3;
					val2.EmitDelegate<Func<PickupDef, PickupDef>>((Func<PickupDef, PickupDef>)delegate(PickupDef pickupDef)
					{
						//IL_001e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0024: Invalid comparison between Unknown and I4
						//IL_0071: Unknown result type (might be due to invalid IL or missing references)
						//IL_0077: Invalid comparison between Unknown and I4
						//IL_0053: Unknown result type (might be due to invalid IL or missing references)
						//IL_003a: 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)
						//IL_008d: Unknown result type (might be due to invalid IL or missing references)
						if (ZetAspects && !AspectsResolved)
						{
							ResolveAspects();
						}
						if ((int)pickupDef.itemIndex != -1 && (!ZetAspects || !AspectCommandGroupItems || !aspectItemIndexes.Contains(pickupDef.itemIndex)))
						{
							ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
							if (itemDef.ContainsTag((ItemTag)9))
							{
								return null;
							}
						}
						if ((int)pickupDef.equipmentIndex != -1 && (!ZetAspects || !AspectCommandGroupEquip || !aspectEquipIndexes.Contains(pickupDef.equipmentIndex)))
						{
							EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex);
							if (!equipmentDef.canDrop)
							{
								return null;
							}
						}
						return pickupDef;
					});
				}
				else
				{
					Debug.LogWarning((object)"CommandDropletFix Failed!");
				}
			};
			<>c.<>9__11_0 = val;
			obj = (object)val;
		}
		PickupDropletController.CreatePickup += (Manipulator)obj;
	}

	private static void ResolveAspects()
	{
		BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
		BaseUnityPlugin instance = Chainloader.PluginInfos["com.TPDespair.ZetAspects"].Instance;
		Assembly assembly = Assembly.GetAssembly(((object)instance).GetType());
		Type type = Type.GetType("TPDespair.ZetAspects.Configuration, " + assembly.FullName, throwOnError: false);
		if (type != null)
		{
			MethodInfo method = type.GetMethod("get_AspectCommandGroupItems", bindingAttr);
			if (method != null)
			{
				try
				{
					ConfigEntry<bool> val = (ConfigEntry<bool>)method.Invoke(null, null);
					AspectCommandGroupItems = val.Value;
				}
				catch (Exception ex)
				{
					Debug.LogError((object)ex);
				}
			}
			else
			{
				Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] - Could Not Find Method : Configuration.get_AspectCommandGroupItems");
			}
			method = type.GetMethod("get_AspectCommandGroupEquip", bindingAttr);
			if (method != null)
			{
				try
				{
					ConfigEntry<bool> val2 = (ConfigEntry<bool>)method.Invoke(null, null);
					AspectCommandGroupEquip = val2.Value;
				}
				catch (Exception ex2)
				{
					Debug.LogError((object)ex2);
				}
			}
			else
			{
				Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] - Could Not Find Method : Configuration.get_AspectCommandGroupEquip");
			}
		}
		else
		{
			Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] Could Not Find Type : TPDespair.ZetAspects.Configuration");
		}
		if (AspectCommandGroupItems || AspectCommandGroupEquip)
		{
			type = Type.GetType("TPDespair.ZetAspects.Catalog, " + assembly.FullName, throwOnError: false);
			if (type != null)
			{
				if (AspectCommandGroupItems)
				{
					FieldInfo field = type.GetField("aspectItemIndexes", bindingAttr);
					if (field != null)
					{
						try
						{
							aspectItemIndexes = (List<ItemIndex>)field.GetValue(null);
						}
						catch (Exception ex3)
						{
							Debug.LogError((object)ex3);
						}
					}
					else
					{
						Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] - Could Not Find Field : Catalog.aspectItemIndexes");
					}
				}
				if (AspectCommandGroupEquip)
				{
					FieldInfo field2 = type.GetField("aspectEquipIndexes", bindingAttr);
					if (field2 != null)
					{
						try
						{
							aspectEquipIndexes = (List<EquipmentIndex>)field2.GetValue(null);
						}
						catch (Exception ex4)
						{
							Debug.LogError((object)ex4);
						}
					}
					else
					{
						Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] - Could Not Find Field : Catalog.aspectEquipIndexes");
					}
				}
			}
			else
			{
				Debug.LogWarning((object)"[CommandDropletFix - ResolveAspects] Could Not Find Type : TPDespair.ZetAspects.Catalog");
			}
		}
		AspectsResolved = true;
	}
}