Decompiled source of BetterJadeElephant v1.0.1

BetterJadeElephant.dll

Decompiled 5 hours ago
using System;
using System.Diagnostics;
using System.IO;
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 BepInEx.Logging;
using HarmonyLib;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using On.RoR2.CharacterAI;
using RoR2;
using RoR2.CharacterAI;
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.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BetterJadeElephant")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BetterJadeElephant")]
[assembly: AssemblyTitle("BetterJadeElephant")]
[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 BetterJadeElephant
{
	[BepInPlugin("prodzpod.BetterJadeElephant", "BetterJadeElephant", "1.0.0")]
	public class Main : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action <>9__14_0;

			public static Action <>9__14_1;

			public static Func<TimedBuff, bool> <>9__14_7;

			public static hook_UpdateBuffs <>9__14_2;

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

			public static Manipulator <>9__14_3;

			public static hook_RecalculateStats <>9__14_4;

			public static hook_ManagedFixedUpdate <>9__14_5;

			public static hook_GetVisibilityLevel_TeamIndex <>9__14_6;

			internal void <Awake>b__14_0()
			{
				Equipment.GainArmor.cooldown = Cooldown.Value;
			}

			internal void <Awake>b__14_1()
			{
				if (Elephant > 0f)
				{
					Elephant -= Time.fixedDeltaTime;
				}
			}

			internal void <Awake>b__14_2(orig_UpdateBuffs orig, CharacterBody self, float dt)
			{
				orig.Invoke(self, dt);
				if (self.HasBuff(Buffs.ElephantArmorBoost))
				{
					Elephant = Mathf.Max(Elephant, self.timedBuffs.First((TimedBuff x) => x.buffIndex == Buffs.ElephantArmorBoost.buffIndex).timer);
				}
			}

			internal bool <Awake>b__14_7(TimedBuff x)
			{
				//IL_0001: 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)
				return x.buffIndex == Buffs.ElephantArmorBoost.buffIndex;
			}

			internal void <Awake>b__14_3(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				float num = default(float);
				val.GotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num)
				});
				val.Emit(OpCodes.Pop);
				val.Emit(OpCodes.Ldc_R4, Duration.Value);
			}

			internal bool <Awake>b__14_8(Instruction x)
			{
				float num = default(float);
				return ILPatternMatchingExt.MatchLdcR4(x, ref num);
			}

			internal void <Awake>b__14_4(orig_RecalculateStats orig, CharacterBody self)
			{
				orig.Invoke(self);
				if (self.HasBuff(Buffs.ElephantArmorBoost))
				{
					self.armor += Armor.Value - 500f;
				}
			}

			internal void <Awake>b__14_5(orig_ManagedFixedUpdate orig, BaseAI self, float dt)
			{
				//IL_0022: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: 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_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Expected O, but got Unknown
				<>c__DisplayClass14_0 CS$<>8__locals0 = new <>c__DisplayClass14_0
				{
					self = self
				};
				if (Elephant > 0f)
				{
					SphereSearch val = new SphereSearch
					{
						mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
						origin = CS$<>8__locals0.self.body.corePosition,
						radius = AggroRange.Value
					};
					val.RefreshCandidates();
					val.FilterCandidatesByDistinctHurtBoxEntities();
					HurtBox[] array = val.GetHurtBoxes().Where(delegate(HurtBox x)
					{
						//IL_0025: Unknown result type (might be due to invalid IL or missing references)
						//IL_002a: Unknown result type (might be due to invalid IL or missing references)
						//IL_002f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0038: Unknown result type (might be due to invalid IL or missing references)
						CharacterBody body = x.healthComponent.body;
						int result;
						if (Object.op_Implicit((Object)(object)body))
						{
							TeamMask enemyTeams = TeamMask.GetEnemyTeams(CS$<>8__locals0.self.body.teamComponent.teamIndex);
							if (((TeamMask)(ref enemyTeams)).HasTeam(body.teamComponent.teamIndex))
							{
								result = (body.HasBuff(Buffs.ElephantArmorBoost) ? 1 : 0);
								goto IL_0052;
							}
						}
						result = 0;
						goto IL_0052;
						IL_0052:
						return (byte)result != 0;
					}).ToArray();
					if (array.Length != 0)
					{
						CS$<>8__locals0.self.currentEnemy.gameObject = ((Component)array[0].healthComponent.body).gameObject;
					}
				}
				orig.Invoke(CS$<>8__locals0.self, dt);
			}

			internal VisibilityLevel <Awake>b__14_6(orig_GetVisibilityLevel_TeamIndex orig, CharacterBody self, TeamIndex team)
			{
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//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: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: 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_0079: 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_008f: Expected O, but got Unknown
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
				<>c__DisplayClass14_1 CS$<>8__locals0 = new <>c__DisplayClass14_1
				{
					self = self
				};
				VisibilityLevel result = orig.Invoke(CS$<>8__locals0.self, team);
				if (Elephant > 0f && !CS$<>8__locals0.self.HasBuff(Buffs.ElephantArmorBoost) && CS$<>8__locals0.self.teamComponent.teamIndex != team)
				{
					SphereSearch val = new SphereSearch
					{
						mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
						origin = CS$<>8__locals0.self.corePosition,
						radius = AggroRange.Value
					};
					val.RefreshCandidates();
					val.FilterCandidatesByDistinctHurtBoxEntities();
					if (val.GetHurtBoxes().Any(delegate(HurtBox x)
					{
						//IL_0024: 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)
						CharacterBody body = x.healthComponent.body;
						if (!Object.op_Implicit((Object)(object)body))
						{
							return false;
						}
						return body.teamComponent.teamIndex == CS$<>8__locals0.self.teamComponent.teamIndex && body.HasBuff(Buffs.ElephantArmorBoost);
					}))
					{
						return (VisibilityLevel)0;
					}
				}
				return result;
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass14_0
		{
			public BaseAI self;

			internal bool <Awake>b__9(HurtBox x)
			{
				//IL_0025: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Unknown result type (might be due to invalid IL or missing references)
				CharacterBody body = x.healthComponent.body;
				int result;
				if (Object.op_Implicit((Object)(object)body))
				{
					TeamMask enemyTeams = TeamMask.GetEnemyTeams(self.body.teamComponent.teamIndex);
					if (((TeamMask)(ref enemyTeams)).HasTeam(body.teamComponent.teamIndex))
					{
						result = (body.HasBuff(Buffs.ElephantArmorBoost) ? 1 : 0);
						goto IL_0052;
					}
				}
				result = 0;
				goto IL_0052;
				IL_0052:
				return (byte)result != 0;
			}
		}

		[CompilerGenerated]
		private sealed class <>c__DisplayClass14_1
		{
			public CharacterBody self;

			internal bool <Awake>b__10(HurtBox x)
			{
				//IL_0024: 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)
				CharacterBody body = x.healthComponent.body;
				if (!Object.op_Implicit((Object)(object)body))
				{
					return false;
				}
				if (body.teamComponent.teamIndex != self.teamComponent.teamIndex)
				{
					return false;
				}
				return body.HasBuff(Buffs.ElephantArmorBoost);
			}
		}

		public const string PluginGUID = "prodzpod.BetterJadeElephant";

		public const string PluginAuthor = "prodzpod";

		public const string PluginName = "BetterJadeElephant";

		public const string PluginVersion = "1.0.0";

		public static ManualLogSource Log;

		internal static PluginInfo pluginInfo;

		public static ConfigFile Config;

		public static Harmony Harmony;

		public static ConfigEntry<float> Cooldown;

		public static ConfigEntry<float> Armor;

		public static ConfigEntry<float> Duration;

		public static ConfigEntry<float> AggroRange;

		public static ConfigEntry<bool> CloakNearby;

		public static float Elephant;

		public void Awake()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Expected O, but got Unknown
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Expected O, but got Unknown
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Expected O, but got Unknown
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Expected O, but got Unknown
			pluginInfo = ((BaseUnityPlugin)this).Info;
			Log = ((BaseUnityPlugin)this).Logger;
			Config = new ConfigFile(Path.Combine(Paths.ConfigPath, "prodzpod.BetterJadeElephant.cfg"), true);
			Harmony = new Harmony("prodzpod.BetterJadeElephant");
			Cooldown = Config.Bind<float>("General", "Cooldown", 45f, "in seconds, default is vanilla");
			Armor = Config.Bind<float>("General", "Armor", 500f, "in armor number, default is vanilla");
			Duration = Config.Bind<float>("General", "Duration", 5f, "in seconds, default is vanilla");
			AggroRange = Config.Bind<float>("General", "Aggro Range", 16f, "in meter, default is warbanner, set to 0 to disable");
			CloakNearby = Config.Bind<bool>("General", "Cloak Nearby", true, "also cloaks nearby players");
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
			{
				Equipment.GainArmor.cooldown = Cooldown.Value;
			});
			RoR2Application.onFixedUpdate += delegate
			{
				if (Elephant > 0f)
				{
					Elephant -= Time.fixedDeltaTime;
				}
			};
			object obj = <>c.<>9__14_2;
			if (obj == null)
			{
				hook_UpdateBuffs val = delegate(orig_UpdateBuffs orig, CharacterBody self, float dt)
				{
					orig.Invoke(self, dt);
					if (self.HasBuff(Buffs.ElephantArmorBoost))
					{
						Elephant = Mathf.Max(Elephant, self.timedBuffs.First((TimedBuff x) => x.buffIndex == Buffs.ElephantArmorBoost.buffIndex).timer);
					}
				};
				<>c.<>9__14_2 = val;
				obj = (object)val;
			}
			CharacterBody.UpdateBuffs += (hook_UpdateBuffs)obj;
			object obj2 = <>c.<>9__14_3;
			if (obj2 == null)
			{
				Manipulator val2 = 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_0039: Unknown result type (might be due to invalid IL or missing references)
					//IL_0045: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val8 = new ILCursor(il);
					float num = default(float);
					val8.GotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num)
					});
					val8.Emit(OpCodes.Pop);
					val8.Emit(OpCodes.Ldc_R4, Duration.Value);
				};
				<>c.<>9__14_3 = val2;
				obj2 = (object)val2;
			}
			EquipmentSlot.FireGainArmor += (Manipulator)obj2;
			object obj3 = <>c.<>9__14_4;
			if (obj3 == null)
			{
				hook_RecalculateStats val3 = delegate(orig_RecalculateStats orig, CharacterBody self)
				{
					orig.Invoke(self);
					if (self.HasBuff(Buffs.ElephantArmorBoost))
					{
						self.armor += Armor.Value - 500f;
					}
				};
				<>c.<>9__14_4 = val3;
				obj3 = (object)val3;
			}
			CharacterBody.RecalculateStats += (hook_RecalculateStats)obj3;
			if (AggroRange.Value > 0f)
			{
				object obj4 = <>c.<>9__14_5;
				if (obj4 == null)
				{
					hook_ManagedFixedUpdate val4 = delegate(orig_ManagedFixedUpdate orig, BaseAI self, float dt)
					{
						//IL_0022: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: 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_0037: Unknown result type (might be due to invalid IL or missing references)
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0048: Unknown result type (might be due to invalid IL or missing references)
						//IL_004d: Unknown result type (might be due to invalid IL or missing references)
						//IL_005e: Expected O, but got Unknown
						if (Elephant > 0f)
						{
							SphereSearch val7 = new SphereSearch
							{
								mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
								origin = self.body.corePosition,
								radius = AggroRange.Value
							};
							val7.RefreshCandidates();
							val7.FilterCandidatesByDistinctHurtBoxEntities();
							HurtBox[] array = val7.GetHurtBoxes().Where(delegate(HurtBox x)
							{
								//IL_0025: Unknown result type (might be due to invalid IL or missing references)
								//IL_002a: Unknown result type (might be due to invalid IL or missing references)
								//IL_002f: Unknown result type (might be due to invalid IL or missing references)
								//IL_0038: Unknown result type (might be due to invalid IL or missing references)
								CharacterBody body2 = x.healthComponent.body;
								int result2;
								if (Object.op_Implicit((Object)(object)body2))
								{
									TeamMask enemyTeams = TeamMask.GetEnemyTeams(self.body.teamComponent.teamIndex);
									if (((TeamMask)(ref enemyTeams)).HasTeam(body2.teamComponent.teamIndex))
									{
										result2 = (body2.HasBuff(Buffs.ElephantArmorBoost) ? 1 : 0);
										goto IL_0052;
									}
								}
								result2 = 0;
								goto IL_0052;
								IL_0052:
								return (byte)result2 != 0;
							}).ToArray();
							if (array.Length != 0)
							{
								self.currentEnemy.gameObject = ((Component)array[0].healthComponent.body).gameObject;
							}
						}
						orig.Invoke(self, dt);
					};
					<>c.<>9__14_5 = val4;
					obj4 = (object)val4;
				}
				BaseAI.ManagedFixedUpdate += (hook_ManagedFixedUpdate)obj4;
			}
			if (!CloakNearby.Value || !(AggroRange.Value > 0f))
			{
				return;
			}
			object obj5 = <>c.<>9__14_6;
			if (obj5 == null)
			{
				hook_GetVisibilityLevel_TeamIndex val5 = delegate(orig_GetVisibilityLevel_TeamIndex orig, CharacterBody self, TeamIndex team)
				{
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					//IL_0016: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0045: Unknown result type (might be due to invalid IL or missing references)
					//IL_004a: Unknown result type (might be due to invalid IL or missing references)
					//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
					//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
					//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: Unknown result type (might be due to invalid IL or missing references)
					//IL_0068: Unknown result type (might be due to invalid IL or missing references)
					//IL_006d: 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_0079: 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_008f: Expected O, but got Unknown
					//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
					//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
					VisibilityLevel result = orig.Invoke(self, team);
					if (Elephant > 0f && !self.HasBuff(Buffs.ElephantArmorBoost) && self.teamComponent.teamIndex != team)
					{
						SphereSearch val6 = new SphereSearch
						{
							mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
							origin = self.corePosition,
							radius = AggroRange.Value
						};
						val6.RefreshCandidates();
						val6.FilterCandidatesByDistinctHurtBoxEntities();
						if (val6.GetHurtBoxes().Any(delegate(HurtBox x)
						{
							//IL_0024: 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)
							CharacterBody body = x.healthComponent.body;
							if (!Object.op_Implicit((Object)(object)body))
							{
								return false;
							}
							return body.teamComponent.teamIndex == self.teamComponent.teamIndex && body.HasBuff(Buffs.ElephantArmorBoost);
						}))
						{
							return (VisibilityLevel)0;
						}
					}
					return result;
				};
				<>c.<>9__14_6 = val5;
				obj5 = (object)val5;
			}
			CharacterBody.GetVisibilityLevel_TeamIndex += (hook_GetVisibilityLevel_TeamIndex)obj5;
		}
	}
}