Decompiled source of Taunt Binds v1.1.0

TauntBinds.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using ComputerysModdingUtilities;
using HarmonyLib;
using HarmonyLib.Tools;
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: StraftatMod(true)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ComputerysModdingUtilities")]
[assembly: IgnoresAccessChecksTo("FishNet.Runtime")]
[assembly: AssemblyCompany("Koki")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6baf723e29bc9b3bb3d61509fd2e101bfb160ed9")]
[assembly: AssemblyProduct("TauntBinds")]
[assembly: AssemblyTitle("TauntBinds")]
[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 TauntBinds
{
	[BepInPlugin("TauntBinds", "Taunt Binds", "1.1.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class TauntBindPlugin : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(FirstPersonController), "HandleTaunt")]
		public static class TauntBindPatch
		{
			public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
			{
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Expected O, but got Unknown
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Expected O, but got Unknown
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_006b: Expected O, but got Unknown
				//IL_0079: Unknown result type (might be due to invalid IL or missing references)
				//IL_007f: Expected O, but got Unknown
				//IL_008d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Expected O, but got Unknown
				//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c9: Expected O, but got Unknown
				//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e2: Expected I4, but got Unknown
				//IL_0111: Unknown result type (might be due to invalid IL or missing references)
				//IL_0117: Expected O, but got Unknown
				//IL_0125: Unknown result type (might be due to invalid IL or missing references)
				//IL_012f: Expected I4, but got Unknown
				//IL_014b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Expected O, but got Unknown
				FieldInfo fieldInfo = AccessTools.Field(typeof(FirstPersonController), "tauntTimer");
				CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
				if (_infTaunt)
				{
					val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[5]
					{
						new CodeMatch((OpCode?)OpCodes.Ldarg_0, (object)null, (string)null),
						new CodeMatch((OpCode?)OpCodes.Ldfld, (object)fieldInfo, (string)null),
						new CodeMatch((OpCode?)OpCodes.Ldc_R4, (object)null, (string)null),
						new CodeMatch((OpCode?)OpCodes.Ble_Un, (object)null, (string)null),
						new CodeMatch((OpCode?)OpCodes.Ret, (object)null, (string)null)
					}).RemoveInstructions(5);
				}
				for (int i = 0; i < 2; i++)
				{
					for (int j = 1; j < 10; j++)
					{
						val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
						{
							new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null)
						});
						val.SetOperandAndAdvance((object)(int)_tauntKeys[j].Value);
					}
					val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
					{
						new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null)
					});
					val.SetOperandAndAdvance((object)(int)_tauntKeys[0].Value);
					val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
					{
						new CodeMatch((OpCode?)OpCodes.Ldc_I4_S, (object)null, (string)null)
					}).Advance(1);
				}
				return val.InstructionEnumeration();
			}
		}

		private static Harmony _harmony;

		private static ConfigEntry<KeyCode>[] _tauntKeys = new ConfigEntry<KeyCode>[10];

		private static readonly KeyCode[] _defaultKeys;

		private static bool _infTaunt;

		private static bool _limitTaunts;

		private void Awake()
		{
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			for (int i = 0; i < 10; i++)
			{
				_tauntKeys[i] = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Bindings", "Key for taunt #" + i, _defaultKeys[i], (ConfigDescription)null);
			}
			_infTaunt = ((BaseUnityPlugin)this).Config.Bind<bool>("Infinite Taunt", "Remove cooldown on taunts", false, "Having the InfTaunt mod enabled will automatically set this to true.").Value;
			_limitTaunts = ((BaseUnityPlugin)this).Config.Bind<bool>("Infinite Taunt", "Limit Received Taunts", true, "Vanilla limits the max taunts/second you can receive. This removes that limit for your client.").Value;
			if (Chainloader.PluginInfos.ContainsKey("dimolade.dimolade.InfTaunt"))
			{
				_infTaunt = true;
				Harmony.UnpatchID("dimolade.harmony.InfTaunt");
			}
			HarmonyFileLog.Enabled = true;
			_harmony = new Harmony("TauntBinds");
			_harmony.PatchAll(typeof(TauntBindPatch));
			if (!_limitTaunts)
			{
				_harmony.PatchAll(typeof(RemoveTauntLimiter));
			}
		}

		private void OnDestroy()
		{
			_harmony.UnpatchSelf();
		}

		static TauntBindPlugin()
		{
			KeyCode[] array = new KeyCode[10];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			_defaultKeys = (KeyCode[])(object)array;
		}
	}
	[HarmonyPatch(typeof(FirstPersonController), "RpcLogic___AboubiPlayObservers_3316948804")]
	public static class RemoveTauntLimiter
	{
		public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			return new CodeMatcher(instructions, (ILGenerator)null).Start().RemoveInstructions(10).InstructionEnumeration();
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "TauntBinds";

		public const string PLUGIN_NAME = "TauntBinds";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}