Decompiled source of TweaksForDaltonGoesFast v1.1.0

TweaksForDaltonGoesFast.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
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.Configuration;
using EntityStates;
using EntityStates.Missions.BrotherEncounter;
using HG.Reflection;
using HarmonyLib;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.Missions.BrotherEncounter;
using On.RoR2;
using R2API.Utils;
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: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("TweaksForDaltonGoesFast")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TweaksForDaltonGoesFast")]
[assembly: AssemblyTitle("TweaksForDaltonGoesFast")]
[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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace TweaksForDaltonGoesFast
{
	[BepInPlugin("GiGaGon.TweaksForDaltonGoesFast", "TweaksForDaltonGoesFast", "1.1.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class TweaksForDaltonGoesFast : BaseUnityPlugin
	{
		internal class ModConfig
		{
			public static ConfigEntry<bool> blockPortalInteraction;

			public static ConfigEntry<bool> blockSeerInteraction;

			public static ConfigEntry<bool> blockTeleporterInteraction;

			public static ConfigEntry<bool> blockSafeWardInteraction;

			public static ConfigEntry<string> trustedPlayerList;

			public static ConfigEntry<float> simulacrumRewardVectorMultiplyer;

			public static ConfigEntry<string> interactionBlockMessage;

			public static void InitConfig(ConfigFile config)
			{
				blockPortalInteraction = config.Bind<bool>("General", "Block Portal Interaction", true, "Block non-trusted players from interacting with Portals");
				blockSeerInteraction = config.Bind<bool>("General", "Block Seer Interaction", true, "Block non-trusted players from interacting with Lunar Seers");
				blockTeleporterInteraction = config.Bind<bool>("General", "Block Teleporter Interaction", true, "Block non-trusted players from interacting with Teleporters");
				blockSafeWardInteraction = config.Bind<bool>("General", "Block SafeWard Interaction", true, "Block non-trusted players from interacting with the Safe Ward");
				trustedPlayerList = config.Bind<string>("General", "Trusted Player List", "", "Comma seperated list of trusted player ids. Will get copied when installed from modpack code, so watch out.");
				simulacrumRewardVectorMultiplyer = config.Bind<float>("General", "Simulacrum Reward Vector Multiplyer", 1f, "Float to multiply the velocity of Simularcum reward item droplets by.");
				interactionBlockMessage = config.Bind<string>("General", "Interaction Blocked Message", "Non-trusted player {player_name} tried to activate {interactable_name}, interaction blocked.", "Message to send when an interaction is blocked. The special strings {player_name} and {interactable_name} will be replaced with the relevent details when sent.");
			}
		}

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

			public static Func<ItemTierDef, bool> <>9__7_0;

			public static Func<ItemTierDef, ItemTier> <>9__7_1;

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

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

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

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

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

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

			public static Func<Vector3, int, Vector3> <>9__8_30;

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

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

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

			public static Func<string, bool> <>9__8_37;

			public static hook_OnEnter <>9__8_9;

			internal bool <GetItemTiers>b__7_0(ItemTierDef x)
			{
				return (Object)(object)x != (Object)null;
			}

			internal ItemTier <GetItemTiers>b__7_1(ItemTierDef x)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				return x.tier;
			}

			internal bool <Awake>b__8_23(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdloca(x, 6);
			}

			internal bool <Awake>b__8_24(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdarg(x, 0);
			}

			internal bool <Awake>b__8_25(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld<InfiniteTowerWaveController>(x, "rewardOptionCount");
			}

			internal bool <Awake>b__8_27(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdloca(x, 6);
			}

			internal bool <Awake>b__8_28(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdloc(x, 4);
			}

			internal bool <Awake>b__8_29(Instruction x)
			{
				return ILPatternMatchingExt.MatchStfld<CreatePickupInfo>(x, "position");
			}

			internal Vector3 <Awake>b__8_30(Vector3 original_position, int index)
			{
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_0086: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_007e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0083: Unknown result type (might be due to invalid IL or missing references)
				//IL_006a: Unknown result type (might be due to invalid IL or missing references)
				//IL_006b: Unknown result type (might be due to invalid IL or missing references)
				if (index >= PlayerCharacterMasterController.instances.Count)
				{
					return original_position;
				}
				PlayerCharacterMasterController val = PlayerCharacterMasterController.instances[index];
				if (!val.master.IsDeadAndOutOfLivesServer() && !((Object)(object)val.master.GetBody().transform == (Object)null))
				{
					_ = val.master.GetBody().transform.position;
					if (0 == 0)
					{
						return val.master.GetBody().transform.position;
					}
				}
				return original_position;
			}

			internal bool <Awake>b__8_31(Instruction x)
			{
				return ILPatternMatchingExt.MatchDup(x);
			}

			internal bool <Awake>b__8_32(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld<CreatePickupInfo>(x, "position");
			}

			internal bool <Awake>b__8_33(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdloc(x, 2);
			}

			internal bool <Awake>b__8_37(string x)
			{
				return x != "";
			}

			internal void <Awake>b__8_9(orig_OnEnter orig, EncounterFinished self)
			{
				((EntityState)self).outer.SetNextState((EntityState)(object)new BrotherEncounterLowerWalls());
			}
		}

		public static TweaksForDaltonGoesFast instance;

		private static Harmony test;

		public const string PluginGUID = "GiGaGon.TweaksForDaltonGoesFast";

		public const string PluginAuthor = "GiGaGon";

		public const string PluginName = "TweaksForDaltonGoesFast";

		public const string PluginVersion = "1.1.0";

		private void GetItemTiers()
		{
			//IL_0002: 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_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			foreach (ItemTier item in from x in (IEnumerable<ItemTierDef>)(object)ItemTierCatalog.allItemTierDefs
				where (Object)(object)x != (Object)null
				select x.tier)
			{
				((BaseUnityPlugin)this).Config.Bind<int>("Simulacrum Reward Potential Settings", $"{item} Options", 1, $"How many options to give when a item potential of {item} is dropped as a simulacrum wave reward.");
			}
		}

		public void Awake()
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Expected O, but got Unknown
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Expected O, but got Unknown
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Expected O, but got Unknown
			instance = this;
			test = Harmony.CreateAndPatchAll(typeof(MonoBehaviourCallbackHooks), (string)null);
			ModConfig.InitConfig(((BaseUnityPlugin)this).Config);
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(GetItemTiers));
			InfiniteTowerWaveController.DropRewards += (Manipulator)delegate(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_012c: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val4 = new ILCursor(il);
				val4.GotoNext(new Func<Instruction, bool>[3]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdloca(x, 6),
					(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
					(Instruction x) => ILPatternMatchingExt.MatchLdfld<InfiniteTowerWaveController>(x, "rewardOptionCount")
				});
				val4.Index += 3;
				val4.Emit(OpCodes.Ldarg_0);
				val4.EmitDelegate<Func<int, InfiniteTowerWaveController, int>>((Func<int, InfiniteTowerWaveController, int>)delegate(int original_count, InfiniteTowerWaveController wave_controller)
				{
					//IL_001e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0054: Unknown result type (might be due to invalid IL or missing references)
					//IL_006a: Unknown result type (might be due to invalid IL or missing references)
					((BaseUnityPlugin)this).Config.Reload();
					ConfigEntry<int> val7 = default(ConfigEntry<int>);
					if (((BaseUnityPlugin)this).Config.TryGetEntry<int>("Simulacrum Reward Potential Settings", $"{wave_controller.rewardDisplayTier} Options", ref val7))
					{
						return val7.Value;
					}
					((BaseUnityPlugin)this).Config.Bind<int>("Simulacrum Reward Potential Settings", $"{wave_controller.rewardDisplayTier} Options", original_count, $"How many options to give when a item potential of {wave_controller.rewardDisplayTier} is dropped as a simulacrum wave reward.");
					return original_count;
				});
				val4.GotoNext(new Func<Instruction, bool>[3]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdloca(x, 6),
					(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 4),
					(Instruction x) => ILPatternMatchingExt.MatchStfld<CreatePickupInfo>(x, "position")
				});
				val4.Index += 2;
				val4.Emit(OpCodes.Ldloc, 5);
				val4.EmitDelegate<Func<Vector3, int, Vector3>>((Func<Vector3, int, Vector3>)delegate(Vector3 original_position, int index)
				{
					//IL_0016: Unknown result type (might be due to invalid IL or missing references)
					//IL_0017: Unknown result type (might be due to invalid IL or missing references)
					//IL_0086: Unknown result type (might be due to invalid IL or missing references)
					//IL_005b: Unknown result type (might be due to invalid IL or missing references)
					//IL_007e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0083: Unknown result type (might be due to invalid IL or missing references)
					//IL_006a: Unknown result type (might be due to invalid IL or missing references)
					//IL_006b: Unknown result type (might be due to invalid IL or missing references)
					if (index >= PlayerCharacterMasterController.instances.Count)
					{
						return original_position;
					}
					PlayerCharacterMasterController val6 = PlayerCharacterMasterController.instances[index];
					if (!val6.master.IsDeadAndOutOfLivesServer() && !((Object)(object)val6.master.GetBody().transform == (Object)null))
					{
						_ = val6.master.GetBody().transform.position;
						if (0 == 0)
						{
							return val6.master.GetBody().transform.position;
						}
					}
					return original_position;
				});
				val4.GotoNext(new Func<Instruction, bool>[3]
				{
					(Instruction x) => ILPatternMatchingExt.MatchDup(x),
					(Instruction x) => ILPatternMatchingExt.MatchLdfld<CreatePickupInfo>(x, "position"),
					(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 2)
				});
				val4.Index += 3;
				val4.Emit(OpCodes.Ldloc, 5);
				val4.EmitDelegate<Func<Vector3, int, Vector3>>((Func<Vector3, int, Vector3>)delegate(Vector3 original_velocity, int index)
				{
					//IL_0022: Unknown result type (might be due to invalid IL or missing references)
					//IL_002d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0032: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
					//IL_0076: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
					//IL_0091: Unknown result type (might be due to invalid IL or missing references)
					//IL_009c: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
					if (index >= PlayerCharacterMasterController.instances.Count)
					{
						((BaseUnityPlugin)this).Config.Reload();
						return original_velocity * ModConfig.simulacrumRewardVectorMultiplyer.Value;
					}
					PlayerCharacterMasterController val5 = PlayerCharacterMasterController.instances[index];
					if (!val5.master.IsDeadAndOutOfLivesServer() && !((Object)(object)val5.master.GetBody().transform == (Object)null))
					{
						_ = val5.master.GetBody().transform.position;
						if (0 == 0)
						{
							return Vector3.zero;
						}
					}
					((BaseUnityPlugin)this).Config.Reload();
					return original_velocity * ModConfig.simulacrumRewardVectorMultiplyer.Value;
				});
			};
			Interactor.PerformInteraction += (hook_PerformInteraction)delegate(orig_PerformInteraction orig, Interactor self, GameObject interactableObject)
			{
				//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bc: Expected O, but got Unknown
				((BaseUnityPlugin)this).Config.Reload();
				string[] source = new string[4] { "Portal", "Seer", "Teleporter", "SafeWard" };
				if ((Object)(object)interactableObject == (Object)null)
				{
					orig.Invoke(self, interactableObject);
				}
				else
				{
					string[] array = source.Where((string x) => ((Object)interactableObject).name.Contains(x)).ToArray();
					if (array.Length == 0)
					{
						orig.Invoke(self, interactableObject);
					}
					else
					{
						ConfigEntry<bool> val2 = default(ConfigEntry<bool>);
						((BaseUnityPlugin)this).Config.TryGetEntry<bool>("General", "Block " + array[0] + " Interaction", ref val2);
						if (!val2.Value)
						{
							orig.Invoke(self, interactableObject);
						}
						else if ((Object)(object)((Component)self).GetComponent<CharacterBody>() == (Object)(object)PlayerCharacterMasterController.instances[0].master.GetBody())
						{
							orig.Invoke(self, interactableObject);
						}
						else
						{
							string[] array2 = (from x in ModConfig.trustedPlayerList.Value.Split(',')
								where x != ""
								select x).ToArray();
							if (array2.Length != 0)
							{
								string[] array3 = array2;
								foreach (string value in array3)
								{
									if (((Component)self).GetComponent<CharacterBody>().GetUserName().Contains(value))
									{
										orig.Invoke(self, interactableObject);
										return;
									}
								}
							}
							SimpleChatMessage val3 = new SimpleChatMessage();
							val3.baseToken = "<color=#ff0000>{0}</color>";
							val3.paramTokens = new string[1] { ModConfig.interactionBlockMessage.Value.Replace("{player_name}", ((Component)self).GetComponent<CharacterBody>().GetUserName()).Replace("{interactable_name}", array[0]) };
							Chat.SendBroadcastChat((ChatMessageBase)(object)val3);
						}
					}
				}
			};
			object obj = <>c.<>9__8_9;
			if (obj == null)
			{
				hook_OnEnter val = delegate(orig_OnEnter orig, EncounterFinished self)
				{
					((EntityState)self).outer.SetNextState((EntityState)(object)new BrotherEncounterLowerWalls());
				};
				<>c.<>9__8_9 = val;
				obj = (object)val;
			}
			EncounterFinished.OnEnter += (hook_OnEnter)obj;
		}

		private void OnDestroy()
		{
			test.UnpatchSelf();
		}
	}
	public class BrotherEncounterLowerWalls : BrotherEncounterBaseState
	{
		public override bool shouldEnableArenaWalls => false;

		public override void OnEnter()
		{
			((BrotherEncounterBaseState)this).OnEnter();
		}
	}
}