Decompiled source of EclipsedShoresBaseMod v2.0.3

ESBM.dll

Decompiled 3 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ESBM.TweakHelpers;
using ESBM.Utils;
using ESBM.Utils.Assets;
using EntityStates;
using EntityStates.BeetleMonster;
using EntityStates.Captain.Weapon;
using EntityStates.MeridianEvent;
using EntityStates.Missions.BrotherEncounter;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using On.EntityStates.BeetleMonster;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.MeridianEvent;
using On.EntityStates.Missions.BrotherEncounter;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;

[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("ESBM")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6d6d844bbae1f1ed1aeb6c6755f8ac36b8186a69")]
[assembly: AssemblyProduct("ESBM")]
[assembly: AssemblyTitle("ESBM")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
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 ESBM
{
	public class Beetles
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OnEnter <0>__HandleBeetleJump;

			public static hook_FixedUpdate <1>__HandleBeetleHitbox;

			public static hook_Start <2>__OnStageStart;
		}

		public static bool currentRunNotInferno = true;

		public static bool Enabled => ESBM.Bind("Enemy Tweaks", "Jumping Beetles", "Should Beetles perform leaps to close distance. Leaps are more effective and precise at longer ranges, and leaps are much shorter up close.", val: true);

		public static void Initialize()
		{
			//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: Expected O, but got Unknown
			//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_004e: Expected O, but got Unknown
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Expected O, but got Unknown
			if (Enabled)
			{
				object obj = <>O.<0>__HandleBeetleJump;
				if (obj == null)
				{
					hook_OnEnter val = HandleBeetleJump;
					<>O.<0>__HandleBeetleJump = val;
					obj = (object)val;
				}
				HeadbuttState.OnEnter += (hook_OnEnter)obj;
				object obj2 = <>O.<1>__HandleBeetleHitbox;
				if (obj2 == null)
				{
					hook_FixedUpdate val2 = HandleBeetleHitbox;
					<>O.<1>__HandleBeetleHitbox = val2;
					obj2 = (object)val2;
				}
				HeadbuttState.FixedUpdate += (hook_FixedUpdate)obj2;
				GameObject beetleMaster = GameObject.BeetleMaster;
				SkillDef.BeetleBodyHeadbutt.baseRechargeInterval = 2f;
				SkillDef.BeetleBodyHeadbutt.beginSkillCooldownOnSkillEnd = true;
				AISkillDriver[] array = (from x in beetleMaster.GetComponents<AISkillDriver>()
					where (int)x.skillSlot == 0
					select x).ToArray();
				AISkillDriver[] array2 = array;
				foreach (AISkillDriver val3 in array2)
				{
					val3.maxDistance = 50f;
					val3.aimType = (AimType)2;
				}
				Transform transform = ((Component)GameObject.BeetleBody.GetComponentInChildren<HitBox>()).transform;
				transform.localScale *= 1.4f;
				object obj3 = <>O.<2>__OnStageStart;
				if (obj3 == null)
				{
					hook_Start val4 = OnStageStart;
					<>O.<2>__OnStageStart = val4;
					obj3 = (object)val4;
				}
				Stage.Start += (hook_Start)obj3;
			}
		}

		private static IEnumerator OnStageStart(orig_Start orig, Stage self)
		{
			yield return orig.Invoke(self);
		}

		private static void HandleBeetleHitbox(orig_FixedUpdate orig, HeadbuttState self)
		{
			orig.Invoke(self);
			if (self.attack != null && ((EntityState)self).isAuthority)
			{
				self.attack.Fire((List<HurtBox>)null);
			}
		}

		private static void HandleBeetleJump(orig_OnEnter orig, HeadbuttState self)
		{
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: 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_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			self.duration *= 0.75f;
			if (!((BaseState)self).isGrounded)
			{
				return;
			}
			float num = 60f;
			float num2 = 15f;
			CharacterMaster master = ((EntityState)self).characterBody.master;
			BaseAI component = ((Component)master).GetComponent<BaseAI>();
			if (Object.op_Implicit((Object)(object)component.currentEnemy.gameObject))
			{
				num = Mathf.Clamp(Vector3.Distance(((EntityState)self).transform.position, component.currentEnemy.gameObject.transform.position), 15f, 45f);
				Vector3 position = component.currentEnemy.gameObject.transform.position;
				if (position.y > ((EntityState)self).transform.position.y)
				{
					num2 = position.y - ((EntityState)self).transform.position.y;
				}
				if (num < 30f)
				{
					num *= 1.75f;
				}
			}
			((BaseCharacterController)((EntityState)self).characterMotor).Motor.ForceUnground(0.1f);
			((EntityState)self).characterMotor.velocity = ((EntityState)self).characterDirection.forward * num + Vector3.up * Util.Remap(num, 0f, 60f, 1f, num2 * 2f);
		}
	}
	public class Mithrix
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_TakeDamageProcess <0>__OnHitEnemy;
		}

		public static bool NoCripple;

		public static void Initialize()
		{
			//IL_0035: 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_0040: Expected O, but got Unknown
			NoCripple = ESBM.Bind("Enemy Tweaks", "No Phase 4 Cripple", "Prevent Mithrix from applying Crippled during phase 4?", val: true);
			if (NoCripple)
			{
				object obj = <>O.<0>__OnHitEnemy;
				if (obj == null)
				{
					hook_TakeDamageProcess val = OnHitEnemy;
					<>O.<0>__OnHitEnemy = val;
					obj = (object)val;
				}
				HealthComponent.TakeDamageProcess += (hook_TakeDamageProcess)obj;
			}
		}

		private static void OnHitEnemy(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			if (NoCripple && ((Enum)damageInfo.damageType.damageType).HasFlag((Enum)(object)(DamageType)4194304) && Object.op_Implicit((Object)(object)PhaseCounter.instance) && PhaseCounter._instance.phase > 2)
			{
				ref DamageType damageType = ref damageInfo.damageType.damageType;
				damageType = (DamageType)((uint)damageType & 0xFFBFFFFFu);
			}
			orig.Invoke(self, damageInfo);
		}
	}
	[BepInPlugin("_0.Smxrez.ESBM", "ESBM", "1.0.1")]
	public class ESBM : BaseUnityPlugin
	{
		public const string PluginGUID = "_0.Smxrez.ESBM";

		public const string PluginAuthor = "Smxrez";

		public const string PluginName = "ESBM";

		public const string PluginVersion = "1.0.1";

		public static ManualLogSource ModLogger;

		private static ConfigFile conf;

		public static BindingFlags FLAGS = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		public void Awake()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			ModLogger = ((BaseUnityPlugin)this).Logger;
			conf = new ConfigFile(Path.Combine(Paths.ConfigPath, "Smxrez.ESBM.cfg"), true);
			MiscTweaks.Initialize();
			ItemWeightImprovement.Initialize();
			BodyCustomizer.Initializer();
			Beetles.Initialize();
			Mithrix.Initialize();
			PlayerRespawns.Initialize();
			NoDiabloDamage.Initialize();
		}

		public void Start()
		{
			StunResistance.Initialize();
		}

		public static T Bind<T>(string sec, string key, string desc, T val)
		{
			return conf.Bind<T>(sec, key, val, desc).Value;
		}

		public static void ApplyIfExists(string assembly, Action<Assembly> handler)
		{
			Assembly assembly2 = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly x) => x.GetName().Name == assembly);
			if (assembly2 != null)
			{
				handler(assembly2);
			}
		}
	}
	public class BodyCustomizer
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Init <0>__OnCatalogInit;
		}

		[StructLayout(LayoutKind.Auto)]
		[CompilerGenerated]
		private struct <>c__DisplayClass3_0
		{
			public string bodyName;
		}

		public static ConfigFile BodyConfig;

		public static ConfigFile BodyEnableConfig;

		public static void Initializer()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			//IL_0011: 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_001c: Expected O, but got Unknown
			object obj = <>O.<0>__OnCatalogInit;
			if (obj == null)
			{
				hook_Init val = OnCatalogInit;
				<>O.<0>__OnCatalogInit = val;
				obj = (object)val;
			}
			BodyCatalog.Init += (hook_Init)obj;
			BodyConfig = new ConfigFile(Path.Combine(Paths.ConfigPath, "ESBM-BodyConfig.cfg"), true);
		}

		private static IEnumerator OnCatalogInit(orig_Init orig)
		{
			yield return orig.Invoke();
			<>c__DisplayClass3_0 CS$<>8__locals0 = default(<>c__DisplayClass3_0);
			foreach (GameObject body in BodyCatalog.allBodyPrefabs)
			{
				CS$<>8__locals0.bodyName = ((Object)body).name.Replace("'", "");
				if (BodyConfig.Bind<bool>("Config Generation", CS$<>8__locals0.bodyName, false, "Generate configs for this body.").Value)
				{
					CharacterBody c = body.GetComponent<CharacterBody>();
					c.baseDamage = Bind<float>("Base Damage", "The base damage of the survivor.", c.baseDamage, ref c.levelDamage);
					c.baseAttackSpeed = Bind<float>("Base Attack Speed", "The base attack speed of the survivor.", c.baseAttackSpeed, ref c.levelAttackSpeed);
					c.baseMaxHealth = Bind<float>("Base Max Health", "The base maximum health of the survivor.", c.baseMaxHealth, ref c.levelMaxHealth);
					c.baseArmor = Bind<float>("Base Armor", "The base armor of the survivor.", c.baseArmor, ref c.levelArmor);
					c.baseMoveSpeed = Bind<float>("Base Movement Speed", "The base movement speed of the survivor.", c.baseMoveSpeed, ref c.levelMoveSpeed);
					c.baseRegen = Bind<float>("Base Regen", "The base regen of the survivor.", c.baseRegen, ref c.levelRegen);
				}
				CS$<>8__locals0 = default(<>c__DisplayClass3_0);
				T Bind<T>(string name, string desc, T val, ref T levelVal)
				{
					T value = BodyConfig.Bind<T>(CS$<>8__locals0.bodyName, name, val, desc).Value;
					levelVal = BodyConfig.Bind<T>(CS$<>8__locals0.bodyName, name.Replace("Base", "Level"), levelVal, desc.Replace("base", "level")).Value;
					return value;
				}
			}
		}
	}
	public class ItemWeightImprovement
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OnInteractionBegin <0>__HandleChestLootReroll;
		}

		public static bool Enabled => ESBM.Bind("Item Weight Tweaks", "Enabled", "Enable item weight scaling? This scales weights so that you are more likely to receive duplicates the more diverse your inventory is.", val: false);

		public static float Ratio => ESBM.Bind("Item Weight Tweaks", "Inventory Ratio", "The percentage ratio of stacked to unstacked items, as a percentage of stacked compared to total inventory. Item weights of duplicates are increased the further the ratio is from this config.", 2.5f);

		public static void Initialize()
		{
			//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_0030: Expected O, but got Unknown
			if (Enabled)
			{
				_ = Ratio;
				object obj = <>O.<0>__HandleChestLootReroll;
				if (obj == null)
				{
					hook_OnInteractionBegin val = HandleChestLootReroll;
					<>O.<0>__HandleChestLootReroll = val;
					obj = (object)val;
				}
				PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj;
			}
		}

		private static void HandleChestLootReroll(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)((Component)self).GetComponent<ChestBehavior>()))
			{
				Scene activeScene = SceneManager.GetActiveScene();
				if (!((Scene)(ref activeScene)).name.StartsWith("it"))
				{
					ChestBehavior component = ((Component)self).GetComponent<ChestBehavior>();
					if (component.dropTable is BasicPickupDropTable && Object.op_Implicit((Object)(object)((Component)activator).GetComponent<CharacterBody>()))
					{
						PickupDropTable dropTable = component.dropTable;
						BasicPickupDropTable val = (BasicPickupDropTable)(object)((dropTable is BasicPickupDropTable) ? dropTable : null);
						if (!(val.equipmentWeight > 0f) && !(val.lunarItemWeight > 0f) && !(val.lunarEquipmentWeight > 0f) && !(val.lunarCombinedWeight > 0f))
						{
							? val2 = component;
							PickupDropTable dropTable2 = component.dropTable;
							((ChestBehavior)val2).dropPickup = RollModifiedDrop((BasicPickupDropTable)(object)((dropTable2 is BasicPickupDropTable) ? dropTable2 : null), ((Component)activator).GetComponent<CharacterBody>());
						}
					}
				}
			}
			orig.Invoke(self, activator);
		}

		public static PickupIndex RollModifiedDrop(BasicPickupDropTable table, CharacterBody user)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			DiversePickupTable diversePickupTable = new DiversePickupTable(table, Run.instance.stageRng);
			return diversePickupTable.GenerateDropForPlayer(user.inventory);
		}
	}
	public class DiversePickupTable
	{
		public WeightedSelection<List<PickupIndex>> TierSelection = new WeightedSelection<List<PickupIndex>>(8);

		public Xoroshiro128Plus rng;

		public void PopulateFromDropTable(BasicPickupDropTable table)
		{
			TierSelection.Clear();
			TierSelection.AddChoice(new List<PickupIndex>(), table.tier1Weight);
			AddToSelection(Run.instance.availableTier1DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
			TierSelection.AddChoice(new List<PickupIndex>(), table.tier2Weight);
			AddToSelection(Run.instance.availableTier2DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
			TierSelection.AddChoice(new List<PickupIndex>(), table.tier3Weight);
			AddToSelection(Run.instance.availableTier3DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
			TierSelection.AddChoice(new List<PickupIndex>(), table.voidTier1Weight);
			AddToSelection(Run.instance.availableVoidTier1DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
			TierSelection.AddChoice(new List<PickupIndex>(), table.voidTier2Weight);
			AddToSelection(Run.instance.availableVoidTier2DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
			TierSelection.AddChoice(new List<PickupIndex>(), table.voidTier3Weight);
			AddToSelection(Run.instance.availableVoidTier3DropList, ref TierSelection.choices[TierSelection.Count - 1].value, table);
		}

		public DiversePickupTable(BasicPickupDropTable table, Xoroshiro128Plus rng)
		{
			PopulateFromDropTable(table);
			this.rng = rng;
		}

		public PickupIndex GenerateDropForPlayer(Inventory inventory)
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: 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_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			List<PickupIndex> list = TierSelection.Evaluate(rng.nextNormalizedFloat);
			WeightedSelection<PickupIndex> val = new WeightedSelection<PickupIndex>(8);
			float sameTypeWeightMultiplier = GetSameTypeWeightMultiplier(GetTierForSelection(list), inventory);
			ESBM.ModLogger.LogError((object)("Stackable Weight For Player: " + sameTypeWeightMultiplier));
			foreach (PickupIndex item in list)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(item).itemIndex);
				float num = 1f;
				if (inventory.GetItemCount(itemDef) > 0)
				{
					num *= ((inventory.GetItemCount(itemDef) > 1) ? sameTypeWeightMultiplier : (sameTypeWeightMultiplier * 0.5f));
				}
				val.AddChoice(item, num);
			}
			return val.Evaluate(rng.nextNormalizedFloat);
		}

		public static float GetSameTypeWeightMultiplier(ItemTierDef tier, Inventory inventory)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			float result = 1f;
			int num = 0;
			int num2 = 0;
			foreach (ItemIndex item in inventory.itemAcquisitionOrder)
			{
				int itemCount = inventory.GetItemCount(item);
				num += itemCount;
				if (itemCount > 1)
				{
					num2 += itemCount;
				}
			}
			float num3 = (float)num2 / (float)num;
			if (num3 < ItemWeightImprovement.Ratio)
			{
				result = 1f + (ItemWeightImprovement.Ratio - num3);
			}
			return result;
		}

		public ItemTierDef GetTierForSelection(List<PickupIndex> selection)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			return ItemCatalog.GetItemDef(PickupCatalog.GetPickupDef(selection[0]).itemIndex)._itemTierDef;
		}

		public void AddToSelection(List<PickupIndex> indices, ref List<PickupIndex> selection, BasicPickupDropTable table)
		{
			//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_0025: 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)
			foreach (PickupIndex index in indices)
			{
				if (!IsFilterRequired() || PassesFilter(index))
				{
					selection.Add(index);
				}
			}
			bool IsFilterRequired()
			{
				if (table.requiredItemTags.Length == 0)
				{
					return table.bannedItemTags.Length == 0;
				}
				return true;
			}
			bool PassesFilter(PickupIndex index)
			{
				//IL_0001: 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)
				//IL_000f: Invalid comparison between Unknown and I4
				//IL_001d: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: 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_008f: Unknown result type (might be due to invalid IL or missing references)
				PickupDef pickupDef = PickupCatalog.GetPickupDef(index);
				if ((int)pickupDef.itemIndex != -1)
				{
					ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
					ItemTag[] bannedItemTags = table.bannedItemTags;
					foreach (ItemTag value in bannedItemTags)
					{
						if (Array.IndexOf(itemDef.tags, value) != -1)
						{
							return false;
						}
					}
					ItemTag[] requiredItemTags = table.requiredItemTags;
					foreach (ItemTag value2 in requiredItemTags)
					{
						if (Array.IndexOf(itemDef.tags, value2) == -1)
						{
							return false;
						}
					}
					return true;
				}
				return false;
			}
		}
	}
	public static class MiscTweaks
	{
		public static void Initialize()
		{
			ESBM.ApplyIfExists("RazorhiveMod", delegate(Assembly x)
			{
				if (ESBM.Bind("Mod Changes :: Razorhive", "Disable Hit Refresh", "Removes Razorhives ability to refresh on hit.", val: false))
				{
					new FieldPatch(x, "RazorwireMod.Items.HiveOrb", "damageType", new ValueData
					{
						iVals = new int[0]
					}, "OnArrival", "r2api_moddedDamageTypes");
					new FieldPatch(x, "RazorwireMod.Items.Razorhive", "ItemFullDescription", new ValueData
					{
						sVal = "",
						filter = new Filter
						{
							StringFilter = "Each sting <style=cIsUtility>refreshes</style> the duration. "
						},
						operation = "Replace"
					});
				}
			});
			ESBM.ApplyIfExists("Hex3Mod", delegate(Assembly x)
			{
				//IL_0113: Unknown result type (might be due to invalid IL or missing references)
				//IL_011d: Expected O, but got Unknown
				//IL_0118: Unknown result type (might be due to invalid IL or missing references)
				//IL_011e: Expected O, but got Unknown
				if (ESBM.Bind("Mod Changes :: Hex3Mod", "Captains Favor Corruption", "Makes Captains Favor corrupt Sale Star.", val: false))
				{
					new MethodPatch(x, "Hex3Mod.Items.CaptainsFavor", "AddHooks", new ValueData
					{
						sVal = "LowerPricedChests",
						filter = new Filter
						{
							StringFilter = "FourHundredTickets"
						}
					}, Operation.Replace);
					new MethodPatch(x, "Hex3Mod.Items.CaptainsFavor", "AddTokens", new ValueData
					{
						sVal = "The first chests you open each stage will be replaced by a Void Potential. <style=cIsVoid>Corrupts all Sale Stars.</style>",
						filter = new Filter
						{
							StringFilter = "The first chests you open each stage will be replaced by a Void Potential. <style=cIsVoid>Corrupts all 400 Tickets.</style>"
						}
					}, Operation.Replace);
					new MethodPatch(x, "Hex3Mod.Items.CaptainsFavor", "UpdateItemStatus", new ValueData
					{
						sVal = "The first <style=cStack>(+1 per stack)</style> chest you open each stage will be replaced by a <style=cIsVoid>Void Potential</style>, inheriting the chest's item tiers. <style=cIsVoid>Corrupts all Sale Stars.</style>",
						filter = new Filter
						{
							StringFilter = "The first <style=cStack>(+1 per stack)</style> chest you open each stage will be replaced by a <style=cIsVoid>Void Potential</style>, inheriting the chest's item tiers. <style=cIsVoid>Corrupts all 400 Tickets.</style>"
						}
					}, Operation.Replace);
				}
				float nerf = ESBM.Bind("Mod Changes :: Hex3Mod", "The Unforgivable Stack Nerf", "Nerfs the reduction per stack on The Unforgivable. Default is 0.5", 0.5f);
				ILHook val = new ILHook((MethodBase)x.GetType("Hex3Mod.Items.TheUnforgivable/UnforgivableBehavior").GetMethod("FixedUpdate", ESBM.FLAGS), (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
					ILCursor val2 = new ILCursor(il);
					val2.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchDiv(x)
					});
					val2.Remove();
					val2.EmitDelegate<Func<float, float, float>>((Func<float, float, float>)((float interval, float stack) => (stack >= 2f) ? (interval * Mathf.Pow(1f - nerf, stack)) : interval));
				});
				new MethodPatch(x, "Hex3Mod.Items.TheUnforgivable", "UpdateItemStatus", new ValueData
				{
					sVal = "Activate your <style=cIsDamage>on-kill effects</style> at your location every <style=cIsDamage>{0}</style> <style=cStack>" + $"(-{nerf * 100f}% per stack)</style> seconds.",
					filter = new Filter
					{
						StringFilter = "Activate your <style=cIsDamage>on-kill effects</style> at your location every <style=cIsDamage>{0}</style> <style=cStack>(-50% per stack)</style> seconds."
					}
				}, Operation.Replace);
			});
			ESBM.ApplyIfExists("UmbralMithrix", delegate(Assembly x)
			{
				if (ESBM.Bind("Mod Changes :: Umbral Mithrix", "No Glass Clones", "Removes the glass clones from the Umbral Mithrix fight.", val: false))
				{
					new MethodPatch(x, "UmbralMithrix.CloneController", "FixedUpdate", new ValueData(), Operation.Return);
				}
			});
			ESBM.ApplyIfExists("MysticsItemsPlugin", delegate(Assembly x)
			{
				if (ESBM.Bind("Mod Changes :: MysticsItems", "Black Monolith Retier", "Makes Black Monolith a red item.", val: false))
				{
					new FieldPatch(x, "MysticsItems.Items.ExtraShrineUse", "itemDef", new ValueData
					{
						spVal = SpriteHandler.ProcessSprite("texRedMonolith.png")
					}, "OnLoad", "pickupIconSprite", InjectionTiming.End);
					new MethodPatch(x, "MysticsItems.Items.ExtraShrineUse", "SetItemTierWhenAvailable", new ValueData
					{
						eVal = "Tier3"
					}, Operation.Input, "OnLoad", 1);
				}
				int num = ESBM.Bind("Mod Changes :: MysticsItems", "Black Monolith Usages", "Increases the use count of Black Monolith. Default is 1.", 1);
				new MethodPatch(x, "MysticsItems.Items.ExtraShrineUse", "UpdateShrine", new ValueData
				{
					iVal = 2,
					operation = "Multiply"
				}, Operation.Input, null, 2);
				LanguageAPI.AddOverlay("ITEM_MYSTICSITEMS_EXTRASHRINEUSE_DESC", $"All Shrines can be used <style=cIsUtility>{num} <style=cStack>(+{num} per stack)</style></style> more times.");
				LanguageAPI.AddOverlay("ITEM_MYSTICSITEMS_EXTRASHRINEUSE_PICKUP", "All Shrines can be used " + HumanFriendlyInteger.IntegerToWritten(num) + " more time" + ((num > 1) ? "s" : "") + ".");
			});
		}
	}
	public static class NoDiabloDamage
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_ModifyProjectile <0>__ModifyProjectile;

			public static hook_TakeDamage <1>__TakeDamage;
		}

		public static ModdedDamageType DiabloType = DamageAPI.ReserveDamageType();

		public static void Initialize()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			if (ESBM.Bind("Vanilla Changes :: Diablo Strike", "Ally Protection", "Prevents Diablo damage against allies (knockback still applies)", val: false))
			{
				object obj = <>O.<0>__ModifyProjectile;
				if (obj == null)
				{
					hook_ModifyProjectile val = ModifyProjectile;
					<>O.<0>__ModifyProjectile = val;
					obj = (object)val;
				}
				CallAirstrikeAlt.ModifyProjectile += (hook_ModifyProjectile)obj;
				object obj2 = <>O.<1>__TakeDamage;
				if (obj2 == null)
				{
					hook_TakeDamage val2 = TakeDamage;
					<>O.<1>__TakeDamage = val2;
					obj2 = (object)val2;
				}
				HealthComponent.TakeDamage += (hook_TakeDamage)obj2;
			}
		}

		private static void TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Invalid comparison between Unknown and I4
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: 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_006a: 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)
			if (DamageAPI.HasModdedDamageType(ref damageInfo.damageType, DiabloType) && (int)self.body.teamComponent.teamIndex == 1 && (Object)(object)damageInfo.attacker != (Object)(object)((Component)self).gameObject)
			{
				damageInfo.damage = 1f;
				damageInfo.damageType |= DamageTypeCombo.op_Implicit((DamageType)2048);
				damageInfo.force *= 0.35f;
			}
			orig.Invoke(self, damageInfo);
		}

		private static void ModifyProjectile(orig_ModifyProjectile orig, CallAirstrikeAlt self, ref FireProjectileInfo fireProjectileInfo)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, ref fireProjectileInfo);
			DamageTypeCombo value = default(DamageTypeCombo);
			((DamageTypeCombo)(ref value))..ctor(DamageTypeCombo.op_Implicit((DamageType)32), (DamageTypeExtended)0, (DamageSource)4);
			DamageAPI.AddModdedDamageType(ref value, DiabloType);
			fireProjectileInfo.damageTypeOverride = value;
		}
	}
	public class PlayerRespawns
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action<TeleporterInteraction> <>9__6_0;

			public static hook_OnEnter <>9__6_1;

			public static hook_OnEnter <>9__6_2;

			public static hook_OnEnter <>9__6_3;

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

			internal void <Initialize>b__6_0(TeleporterInteraction x)
			{
				AttemptRespawnDeadPlayers();
			}

			internal void <Initialize>b__6_1(orig_OnEnter x, MissionCompleted y)
			{
				x.Invoke(y);
				AttemptRespawnDeadPlayers();
			}

			internal void <Initialize>b__6_2(orig_OnEnter x, Phase1 y)
			{
				x.Invoke(y);
				AttemptRespawnDeadPlayers();
			}

			internal void <Initialize>b__6_3(orig_OnEnter x, Phase1 y)
			{
				x.Invoke(y);
				AttemptRespawnDeadPlayers();
			}

			internal bool <AttemptRespawnDeadPlayers>b__7_0(PlayerCharacterMasterController x)
			{
				return Object.op_Implicit((Object)(object)x.body);
			}
		}

		public static bool BeforeMithrixEnabled => ESBM.Bind("Player Respawns", "Before Final Bosses", "Should all dead players respawn at the start of a final boss?", val: false);

		public static bool AfterVieldsEnabled => ESBM.Bind("Player Respawns", "After Void Cells", "Should all dead players respawn upon completion of the Void Fields?", val: false);

		public static bool AfterTeleporterEnabled => ESBM.Bind("Player Respawns", "After Teleporter", "Should all dead players respawn after the teleporter event is over?", val: false);

		public static void Initialize()
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Expected O, but got Unknown
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Expected O, but got Unknown
			if (AfterTeleporterEnabled)
			{
				TeleporterInteraction.onTeleporterChargedGlobal += delegate
				{
					AttemptRespawnDeadPlayers();
				};
			}
			if (AfterVieldsEnabled)
			{
				object obj = <>c.<>9__6_1;
				if (obj == null)
				{
					hook_OnEnter val = delegate(orig_OnEnter x, MissionCompleted y)
					{
						x.Invoke(y);
						AttemptRespawnDeadPlayers();
					};
					<>c.<>9__6_1 = val;
					obj = (object)val;
				}
				MissionCompleted.OnEnter += (hook_OnEnter)obj;
			}
			if (!BeforeMithrixEnabled)
			{
				return;
			}
			object obj2 = <>c.<>9__6_2;
			if (obj2 == null)
			{
				hook_OnEnter val2 = delegate(orig_OnEnter x, Phase1 y)
				{
					x.Invoke(y);
					AttemptRespawnDeadPlayers();
				};
				<>c.<>9__6_2 = val2;
				obj2 = (object)val2;
			}
			Phase1.OnEnter += (hook_OnEnter)obj2;
			object obj3 = <>c.<>9__6_3;
			if (obj3 == null)
			{
				hook_OnEnter val3 = delegate(orig_OnEnter x, Phase1 y)
				{
					x.Invoke(y);
					AttemptRespawnDeadPlayers();
				};
				<>c.<>9__6_3 = val3;
				obj3 = (object)val3;
			}
			Phase1.OnEnter += (hook_OnEnter)obj3;
		}

		public static void AttemptRespawnDeadPlayers()
		{
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active)
			{
				return;
			}
			PlayerCharacterMasterController[] array = PlayerCharacterMasterController.instances.Where((PlayerCharacterMasterController x) => Object.op_Implicit((Object)(object)x.body)).ToArray();
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				if (Object.op_Implicit((Object)(object)instance.master) && (!Object.op_Implicit((Object)(object)instance.body) || !instance.body.healthComponent.alive) && (!Object.op_Implicit((Object)(object)instance.master.bodyInstanceObject) || !instance.master.bodyInstanceObject.GetComponent<CharacterBody>().healthComponent.alive))
				{
					instance.master.deathFootPosition = array[Random.Range(0, array.Length)].body.footPosition;
					instance.master.RespawnExtraLifeShrine();
				}
			}
		}
	}
	public static class StunResistance
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_SetStun <0>__ResistStun;

			public static hook_SetFrozen <1>__ResistFreeze;

			public static hook_SetShock <2>__ResistShock;
		}

		public static BuffDef bdStunRes;

		public static float ResistPerStack;

		public static float LargeEnemyMultiplier;

		public static void Initialize()
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected O, but got Unknown
			if (ESBM.Bind("Enemy CC Resistance", "Enabled", "Whether enemies should build up a tolerance to CC effects.", val: false))
			{
				bdStunRes = ScriptableObject.CreateInstance<BuffDef>();
				bdStunRes.isHidden = true;
				bdStunRes.canStack = true;
				bdStunRes.isDebuff = false;
				ContentAddition.AddBuffDef(bdStunRes);
				object obj = <>O.<0>__ResistStun;
				if (obj == null)
				{
					hook_SetStun val = ResistStun;
					<>O.<0>__ResistStun = val;
					obj = (object)val;
				}
				SetStateOnHurt.SetStun += (hook_SetStun)obj;
				object obj2 = <>O.<1>__ResistFreeze;
				if (obj2 == null)
				{
					hook_SetFrozen val2 = ResistFreeze;
					<>O.<1>__ResistFreeze = val2;
					obj2 = (object)val2;
				}
				SetStateOnHurt.SetFrozen += (hook_SetFrozen)obj2;
				object obj3 = <>O.<2>__ResistShock;
				if (obj3 == null)
				{
					hook_SetShock val3 = ResistShock;
					<>O.<2>__ResistShock = val3;
					obj3 = (object)val3;
				}
				SetStateOnHurt.SetShock += (hook_SetShock)obj3;
				ResistPerStack = ESBM.Bind("Enemy CC Resistance", "Resist Percentage", "How much to resist CC effects by for each CC re-application.", 0.2f);
				LargeEnemyMultiplier = ESBM.Bind("Enemy CC Resistance", "Large Enemy Multiplier", "The effectiveness multiplier against elites and bosses.", 1.5f);
			}
		}

		private static void ResistStun(orig_SetStun orig, SetStateOnHurt self, float duration)
		{
			//IL_00b6: 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)
			CharacterBody component = ((Component)self).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component))
			{
				int buffCount = component.GetBuffCount(bdStunRes);
				duration = ((!component.isElite && !component.isChampion) ? (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack, (float)(buffCount - 1)) : 1f)) : (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack * LargeEnemyMultiplier, (float)(buffCount - 1)) : 1f)));
				component.AddTimedBuff(bdStunRes, 8f);
				foreach (TimedBuff timedBuff in component.timedBuffs)
				{
					if (timedBuff.buffIndex == bdStunRes.buffIndex)
					{
						timedBuff.timer = 8f;
					}
				}
			}
			orig.Invoke(self, duration);
		}

		private static void ResistFreeze(orig_SetFrozen orig, SetStateOnHurt self, float duration)
		{
			//IL_00b6: 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)
			CharacterBody component = ((Component)self).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component))
			{
				int buffCount = component.GetBuffCount(bdStunRes);
				duration = ((!component.isElite && !component.isChampion) ? (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack, (float)(buffCount - 1)) : 1f)) : (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack * LargeEnemyMultiplier, (float)(buffCount - 1)) : 1f)));
				component.AddTimedBuff(bdStunRes, 8f);
				foreach (TimedBuff timedBuff in component.timedBuffs)
				{
					if (timedBuff.buffIndex == bdStunRes.buffIndex)
					{
						timedBuff.timer = timedBuff.totalDuration;
					}
				}
			}
			orig.Invoke(self, duration);
		}

		private static void ResistShock(orig_SetShock orig, SetStateOnHurt self, float duration)
		{
			//IL_00b6: 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)
			CharacterBody component = ((Component)self).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component))
			{
				int buffCount = component.GetBuffCount(bdStunRes);
				duration = ((!component.isElite && !component.isChampion) ? (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack, (float)(buffCount - 1)) : 1f)) : (duration * ((buffCount > 1) ? Mathf.Pow(1f - ResistPerStack * LargeEnemyMultiplier, (float)(buffCount - 1)) : 1f)));
				component.AddTimedBuff(bdStunRes, 8f);
				foreach (TimedBuff timedBuff in component.timedBuffs)
				{
					if (timedBuff.buffIndex == bdStunRes.buffIndex)
					{
						timedBuff.timer = timedBuff.totalDuration;
					}
				}
			}
			orig.Invoke(self, duration);
		}
	}
}
namespace ESBM.TweakHelpers
{
	public enum InjectionTiming
	{
		Before,
		End
	}
	public class FieldPatch
	{
		public string typeName;

		public string fieldName;

		public ValueData mod;

		public string injection;

		public InjectionTiming timing;

		private FieldInfo info;

		private PropertyInfo pInfo;

		private Sprite sprite;

		public string path;

		private FieldInfo[] infos;

		private bool post = false;

		public FieldPatch(Assembly assembly, string type, string field, ValueData mod, string method = null, string childPath = null, InjectionTiming timing = InjectionTiming.Before, Sprite sprite = null)
		{
			typeName = type;
			fieldName = field;
			this.mod = mod;
			injection = method;
			this.timing = timing;
			this.sprite = sprite;
			path = childPath;
			Apply(assembly);
		}

		public void Apply(Assembly assembly)
		{
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Expected O, but got Unknown
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			Type type = assembly.GetType(typeName);
			if (mod == null || (Object)(object)mod.spVal != (Object)null)
			{
			}
			info = type.GetField(fieldName, ESBM.FLAGS);
			if (info == null)
			{
				TryApplyProperty(type);
				return;
			}
			infos = ResolveFields(info);
			if (infos == null)
			{
				return;
			}
			if (timing == InjectionTiming.End)
			{
				post = true;
			}
			if (string.IsNullOrEmpty(injection) && infos[infos.Length - 1].IsStatic)
			{
				FieldInfo fieldInfo = infos[infos.Length - 1];
				if (!(fieldInfo == null))
				{
					mod.Apply(fieldInfo);
				}
			}
			else
			{
				new ILHook((MethodBase)type.GetMethod(injection, ESBM.FLAGS), new Manipulator(Hook));
			}
		}

		public FieldInfo[] ResolveFields(FieldInfo info)
		{
			if (string.IsNullOrEmpty(path))
			{
				return new FieldInfo[1] { info };
			}
			string[] array = path.Split("/");
			FieldInfo[] array2 = new FieldInfo[array.Length + 1];
			array2[0] = info;
			for (int i = 0; i < array.Length; i++)
			{
				info = info.FieldType.GetField(array[i], ESBM.FLAGS);
				array2[i + 1] = info;
			}
			return array2;
		}

		public void TryApplyProperty(Type type)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			pInfo = type.GetProperty(fieldName, ESBM.FLAGS);
			new ILHook((MethodBase)pInfo.GetMethod, new Manipulator(PropertyHook));
		}

		public void Hook(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (post)
			{
				while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchRet(x)
				}))
				{
					int index = val.Index;
					val.Index = index - 1;
					EmitIL(val);
					val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchRet(x)
					});
				}
			}
			else
			{
				EmitIL(val);
			}
		}

		public void EmitIL(ILCursor c)
		{
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			if (infos[infos.Length - 1].IsStatic)
			{
				mod.EmitValue(infos[infos.Length - 1], c);
				c.Emit(OpCodes.Stsfld, infos[infos.Length - 1]);
				return;
			}
			c.Emit(OpCodes.Ldarg_0);
			for (int i = 0; i < infos.Length; i++)
			{
				FieldInfo fieldInfo = infos[i];
				if (i == infos.Length - 1)
				{
					mod.EmitValue(fieldInfo, c);
					c.Emit(OpCodes.Stfld, fieldInfo);
				}
				else if (fieldInfo.FieldType.IsValueType)
				{
					c.Emit(OpCodes.Ldflda, fieldInfo);
				}
				else
				{
					c.Emit(OpCodes.Ldfld, fieldInfo);
				}
			}
		}

		public void PropertyHook(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			if (mod.operation == null)
			{
				mod.EmitValue(pInfo, val);
				val.Emit(OpCodes.Ret);
				return;
			}
			while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchRet(x)
			}))
			{
				int index = val.Index;
				val.Index = index - 1;
				mod.EmitValue(pInfo, val, op: true);
				val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchRet(x)
				});
			}
		}
	}
	public enum Operation
	{
		Replace,
		Suppress,
		Return,
		Input
	}
	public class MethodPatch
	{
		public string typeName;

		public string methodName;

		public ValueData mod;

		public Operation operation;

		public int index;

		public string injection;

		private MethodInfo info;

		private MethodInfo target;

		private ParameterInfo param;

		private int paramCount;

		public MethodPatch(Assembly assembly, string type, string method, ValueData mod, Operation operation, string replace = null, int param = 0)
		{
			typeName = type;
			methodName = method;
			this.mod = mod;
			injection = replace;
			this.operation = operation;
			index = param;
			Apply(assembly);
		}

		public void Apply(Assembly assembly)
		{
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Expected O, but got Unknown
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Expected O, but got Unknown
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Expected O, but got Unknown
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Expected O, but got Unknown
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Expected O, but got Unknown
			//IL_013d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Expected O, but got Unknown
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			Type type = assembly.GetType(typeName);
			try
			{
				info = type.GetMethod(methodName, ESBM.FLAGS);
			}
			catch
			{
				info = type.GetMethods(ESBM.FLAGS).FirstOrDefault((MethodInfo x) => x.GetParameters().Count() >= index);
			}
			paramCount = info.GetParameters().Length;
			if (injection != null)
			{
				target = type.GetMethod(injection, ESBM.FLAGS);
				if (operation == Operation.Suppress)
				{
					new ILHook((MethodBase)target, new Manipulator(SuppressI));
				}
				else if (operation == Operation.Return)
				{
					new ILHook((MethodBase)target, new Manipulator(ReturnI));
				}
				else if (operation == Operation.Input)
				{
					ParameterInfo[] parameters = info.GetParameters();
					if (index - 1 < parameters.Length)
					{
						param = parameters[index - 1];
						new ILHook((MethodBase)target, new Manipulator(InputI));
					}
				}
			}
			else if (operation == Operation.Suppress)
			{
				new ILHook((MethodBase)info, new Manipulator(Suppress));
			}
			else if (operation == Operation.Return)
			{
				new ILHook((MethodBase)info, new Manipulator(Return));
			}
			else if (operation == Operation.Replace)
			{
				new ILHook((MethodBase)info, new Manipulator(Replace));
			}
			else if (operation == Operation.Input)
			{
				ParameterInfo[] parameters2 = info.GetParameters();
				if (index - 1 < parameters2.Length)
				{
					param = parameters2[index - 1];
					new ILHook((MethodBase)info, new Manipulator(Input));
				}
			}
		}

		public void Replace(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (mod.sVal != null)
			{
				while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, mod.filter.StringFilter)
				}))
				{
					val.Prev.Operand = mod.sVal;
				}
			}
			else if (mod.filter.FloatFilter != null)
			{
				while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, float.Parse(mod.filter.FloatFilter))
				}))
				{
					val.Prev.Operand = mod.fVal;
				}
			}
			else if (mod.filter.IntFilter != null)
			{
				while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, (float)int.Parse(mod.filter.IntFilter))
				}))
				{
					val.Prev.Operand = mod.iVal;
				}
			}
		}

		public void Suppress(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			if (info.ReturnType != typeof(void))
			{
				val.EmitDelegate<Func<object>>((Func<object>)(() => GetDefaultValue(info.ReturnType)));
			}
			val.Emit(OpCodes.Ret);
		}

		public void Return(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			mod.EmitValue(info, val);
			val.Emit(OpCodes.Ret);
		}

		public void Input(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			if (mod.operation != null)
			{
				val.Emit(OpCodes.Ldarg, info.IsStatic ? (index - 1) : index);
			}
			mod.EmitValue(param.ParameterType, val, mod.operation != null);
			val.Emit(OpCodes.Starg, info.IsStatic ? (index - 1) : index);
		}

		public void SuppressI(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)info)
			}))
			{
				int num = val.Index;
				val.Index = num - 1;
				val.Remove();
				for (int i = 0; i < paramCount; i++)
				{
					val.Emit(OpCodes.Pop);
				}
				if (!info.IsStatic)
				{
					val.Emit(OpCodes.Pop);
				}
				if (info.ReturnType != typeof(void))
				{
					val.EmitDelegate<Func<object>>((Func<object>)(() => GetDefaultValue(info.ReturnType)));
				}
			}
		}

		public void ReturnI(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)info)
			}))
			{
				int num = val.Index;
				val.Index = num - 1;
				val.Remove();
				for (int i = 0; i < paramCount; i++)
				{
					val.Emit(OpCodes.Pop);
				}
				if (!info.IsStatic)
				{
					val.Emit(OpCodes.Pop);
				}
				if (info.ReturnType != typeof(void))
				{
					mod.EmitValue(info, val);
				}
				val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)info)
				});
			}
		}

		public void InputI(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			while (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)info)
			}))
			{
				int num = val.Index;
				val.Index = num - 1;
				int num2 = val.Index;
				Instruction val2 = FindParameter(il, val.Next);
				val.Index = il.IndexOf(val2);
				if (mod.operation == null)
				{
					val.Emit(OpCodes.Pop);
				}
				mod.EmitValue(param, val, mod.operation != null);
				val.Index = num2;
				val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)info)
				});
			}
		}

		private object GetDefaultValue(Type t)
		{
			if (t.IsValueType)
			{
				return Activator.CreateInstance(t);
			}
			return null;
		}

		private Instruction FindParameter(ILContext il, Instruction call)
		{
			List<Instruction> list = ((IEnumerable<Instruction>)il.Body.Instructions).ToList();
			Stack<Instruction> stack = new Stack<Instruction>();
			foreach (Instruction item in list)
			{
				int num = StackChange(item);
				if (num > 0)
				{
					for (int i = 0; i < num; i++)
					{
						stack.Push(item);
					}
				}
				if (num < 0)
				{
					for (int j = 0; j < Math.Abs(num); j++)
					{
						if (stack.Count > 0)
						{
							stack.Pop();
						}
					}
				}
				if (item == call)
				{
					int num2 = paramCount + ((!info.IsStatic) ? 1 : 0);
					return stack.ElementAt(stack.Count - (num2 - (index - 1)));
				}
			}
			return null;
		}

		private int StackChange(Instruction i)
		{
			//IL_0004: 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)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Invalid comparison between Unknown and I4
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Invalid comparison between Unknown and I4
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Invalid comparison between Unknown and I4
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Invalid comparison between Unknown and I4
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			int num = 0;
			OpCode opCode = i.OpCode;
			StackBehaviour stackBehaviourPop = ((OpCode)(ref opCode)).StackBehaviourPop;
			StackBehaviour val = stackBehaviourPop;
			if ((int)val != 1)
			{
				if ((int)val != 2)
				{
					if ((int)val == 27 && (i.OpCode == OpCodes.Call || i.OpCode == OpCodes.Callvirt))
					{
						object operand = i.Operand;
						IMethodSignature val2 = (IMethodSignature)((operand is IMethodSignature) ? operand : null);
						int num2 = val2.Parameters.Count;
						if (val2.HasThis)
						{
							num2++;
						}
						num += num2;
					}
				}
				else
				{
					num += 2;
				}
			}
			else
			{
				num++;
			}
			opCode = i.OpCode;
			StackBehaviour stackBehaviourPush = ((OpCode)(ref opCode)).StackBehaviourPush;
			StackBehaviour val3 = stackBehaviourPush;
			if ((int)val3 != 20)
			{
				if ((int)val3 != 21)
				{
					if ((int)val3 == 28 && (i.OpCode == OpCodes.Call || i.OpCode == OpCodes.Callvirt))
					{
						object operand2 = i.Operand;
						IMethodSignature val4 = (IMethodSignature)((operand2 is IMethodSignature) ? operand2 : null);
						if (((MemberReference)val4.ReturnType).FullName != typeof(void).FullName)
						{
							num--;
						}
					}
				}
				else
				{
					num -= 2;
				}
			}
			else
			{
				num--;
			}
			return num;
		}
	}
	public static class SpriteHandler
	{
		public static Sprite ProcessSprite(string resource)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Expected O, but got Unknown
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Expected O, but got Unknown
			//IL_00e3: 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)
			Stream manifestResourceStream = typeof(SpriteHandler).Assembly.GetManifestResourceStream("ESBM.Resources." + resource);
			byte[] array = new byte[manifestResourceStream.Length];
			manifestResourceStream.Read(array);
			Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
			ImageConversion.LoadImage(val, array);
			((Texture)val).filterMode = (FilterMode)1;
			((Texture)val).wrapMode = (TextureWrapMode)1;
			val.Apply(false, false);
			int width = ((Texture)val).width;
			int height = ((Texture)val).height;
			int num = Math.Max(width, height);
			int num2 = (num - width) / 2;
			int num3 = (num - height) / 2;
			Texture2D val2 = val;
			if (width != height)
			{
				val2 = new Texture2D(num, num, val.format, false);
				Color val3 = default(Color);
				((Color)(ref val3))..ctor(0f, 0f, 0f, 0f);
				for (int i = 0; i < num; i++)
				{
					for (int j = 0; j < num; j++)
					{
						val2.SetPixel(j, i, val3);
					}
				}
				for (int k = 0; k < height; k++)
				{
					for (int l = 0; l < width; l++)
					{
						val2.SetPixel(l + num2, k + num3, val.GetPixel(l, k));
					}
				}
				val2.Apply(false, false);
			}
			return Sprite.Create(val2, new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), new Vector2(0.5f, 0.5f), 100f, 0u, (SpriteMeshType)0);
		}
	}
	public class ValueData
	{
		public string sVal;

		public int iVal;

		public float fVal;

		public bool bVal;

		public string eVal;

		public Sprite spVal;

		public string[] sVals;

		public int[] iVals;

		public float[] fVals;

		public bool[] bVals;

		public string operation;

		public Filter filter;

		public void Apply(FieldInfo info, object instance = null)
		{
			object obj = null;
			if (info.FieldType == typeof(string))
			{
				obj = sVal;
			}
			else if (info.FieldType == typeof(int))
			{
				obj = iVal;
			}
			else if (info.FieldType == typeof(byte))
			{
				obj = (byte)iVal;
			}
			else if (info.FieldType == typeof(float))
			{
				obj = fVal;
			}
			else if (info.FieldType == typeof(bool))
			{
				obj = sVal;
			}
			else if (info.FieldType.IsEnum)
			{
				obj = Enum.Parse(info.FieldType, eVal);
			}
			else if (info.FieldType == typeof(string[]))
			{
				obj = sVals;
			}
			else if (info.FieldType == typeof(int[]))
			{
				obj = iVals;
			}
			else if (info.FieldType == typeof(byte[]))
			{
				obj = CastArray<byte>(iVals);
			}
			else if (info.FieldType == typeof(float[]))
			{
				obj = fVals;
			}
			else if (info.FieldType == typeof(bool[]))
			{
				obj = bVals;
			}
			else
			{
				if (!(info.FieldType == typeof(Sprite)))
				{
					return;
				}
				obj = spVal;
			}
			info.SetValue(instance, v(obj));
			object v(object f)
			{
				object value = info.GetValue(instance);
				if (value != null)
				{
					return ResolveOperation(value, f);
				}
				return f;
			}
		}

		public void Apply(PropertyInfo info, object instance)
		{
			object obj = null;
			if (info.PropertyType == typeof(string))
			{
				obj = sVal;
			}
			else if (info.PropertyType == typeof(int))
			{
				obj = iVal;
			}
			else if (info.PropertyType == typeof(byte))
			{
				obj = (byte)iVal;
			}
			else if (info.PropertyType == typeof(float))
			{
				obj = fVal;
			}
			else if (info.PropertyType == typeof(bool))
			{
				obj = sVal;
			}
			else if (info.PropertyType.IsEnum)
			{
				obj = Enum.Parse(info.PropertyType, eVal);
			}
			else if (info.PropertyType == typeof(string[]))
			{
				obj = sVals;
			}
			else if (info.PropertyType == typeof(int[]))
			{
				obj = iVals;
			}
			else if (info.PropertyType == typeof(byte[]))
			{
				obj = CastArray<byte>(iVals);
			}
			else if (info.PropertyType == typeof(float[]))
			{
				obj = fVals;
			}
			else if (info.PropertyType == typeof(bool[]))
			{
				obj = bVals;
			}
			else
			{
				if (!(info.PropertyType == typeof(Sprite)))
				{
					return;
				}
				obj = spVal;
			}
			info.SetValue(instance, v(obj));
			object v(object f)
			{
				object value = info.GetValue(instance);
				if (value != null)
				{
					return ResolveOperation(value, f);
				}
				return f;
			}
		}

		public void EmitValue(PropertyInfo info, ILCursor c, bool op = false)
		{
			EmitValue(info.PropertyType, c, op);
		}

		public void EmitValue(FieldInfo info, ILCursor c, bool op = false)
		{
			EmitValue(info.FieldType, c, op);
		}

		public void EmitValue(MethodInfo info, ILCursor c, bool op = false)
		{
			EmitValue(info.ReturnType, c, op);
		}

		public void EmitValue(ParameterInfo info, ILCursor c, bool op = false)
		{
			EmitValue(info.ParameterType, c, op);
		}

		public void EmitValue(Type type, ILCursor c, bool ope = false)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: 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_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_028a: Unknown result type (might be due to invalid IL or missing references)
			if (type == typeof(string))
			{
				Emit(OpCodes.Ldstr, sVal);
			}
			else if (type == typeof(int) || type == typeof(byte))
			{
				Emit(OpCodes.Ldc_I4, iVal);
			}
			else if (type == typeof(float))
			{
				Emit(OpCodes.Ldc_R4, fVal);
			}
			else if (type == typeof(bool))
			{
				Emit(OpCodes.Ldc_I4, bVal ? 1 : 0);
			}
			else if (type == typeof(int[]))
			{
				EmitArray(c, iVals);
			}
			else if (type == typeof(byte[]))
			{
				EmitArray(c, CastArray<byte>(iVals));
			}
			else if (type == typeof(string[]))
			{
				EmitArray(c, sVals);
			}
			else if (type == typeof(float[]))
			{
				EmitArray(c, fVals);
			}
			else if (type == typeof(bool[]))
			{
				EmitArray(c, bVals);
			}
			else if (type == typeof(Sprite))
			{
				c.EmitDelegate<Func<Sprite>>((Func<Sprite>)(() => spVal));
			}
			else if (type.IsEnum)
			{
				Type underlyingType = Enum.GetUnderlyingType(type);
				c.Emit(GetOpCode(underlyingType), Convert.ChangeType(Enum.Parse(type, eVal), underlyingType));
			}
			void Emit(OpCode op, object val)
			{
				//IL_002b: Unknown result type (might be due to invalid IL or missing references)
				if (ope)
				{
					ToObject(c, type);
				}
				c.Emit(op, val);
				if (ope)
				{
					ToObject(c, type);
					c.EmitDelegate<Func<object, object, object>>((Func<object, object, object>)((object l, object r) => ResolveOperation(l, r)));
					FromObject(c, type);
				}
			}
		}

		public void FromObject(ILCursor c, Type t)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			if (t.IsValueType)
			{
				c.Emit(OpCodes.Unbox_Any, t);
			}
			else
			{
				c.Emit(OpCodes.Castclass, t);
			}
		}

		public void ToObject(ILCursor c, Type t)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			if (t.IsValueType)
			{
				c.Emit(OpCodes.Box, t);
			}
			else
			{
				c.Emit(OpCodes.Castclass, typeof(object));
			}
		}

		public OpCode GetOpCode(Type type)
		{
			//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_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: 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_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_0097: 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_00b6: 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)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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)
			if (type == typeof(byte))
			{
				return OpCodes.Ldc_I4;
			}
			if (type == typeof(int))
			{
				return OpCodes.Ldc_I4;
			}
			if (type == typeof(short))
			{
				return OpCodes.Ldc_I4;
			}
			if (type == typeof(long))
			{
				return OpCodes.Ldc_I8;
			}
			if (type == typeof(ulong))
			{
				return OpCodes.Ldc_I8;
			}
			if (type == typeof(float))
			{
				return OpCodes.Ldc_R4;
			}
			if (type == typeof(double))
			{
				return OpCodes.Ldc_R8;
			}
			return OpCodes.Ldc_I4;
		}

		public T[] CastArray<T>(Array array)
		{
			T[] array2 = new T[array.Length];
			for (int i = 0; i < array.Length; i++)
			{
				array2[i] = (T)array.GetValue(i);
			}
			return array2;
		}

		public void EmitArray<T>(ILCursor c, T[] array)
		{
			c.EmitDelegate<Func<T[]>>((Func<T[]>)(() => array));
		}

		public object ResolveOperation(object left, object right)
		{
			if (operation == null)
			{
				return right;
			}
			bool flag = left is float || right is float;
			switch (operation.ToLower())
			{
			case "add":
				if (left is string text && right is string text2)
				{
					return text + text2;
				}
				if (flag)
				{
					return Convert.ToSingle(left) + Convert.ToSingle(right);
				}
				return Convert.ToInt32(left) + Convert.ToInt32(right);
			case "sub":
			case "subtract":
				if (flag)
				{
					return Convert.ToSingle(left) - Convert.ToSingle(right);
				}
				return Convert.ToInt32(left) - Convert.ToInt32(right);
			case "mul":
			case "mult":
			case "multiply":
				if (flag)
				{
					return Convert.ToSingle(left) * Convert.ToSingle(right);
				}
				return Convert.ToInt32(left) * Convert.ToInt32(right);
			case "div":
			case "divide":
				if (flag)
				{
					return Convert.ToSingle(left) / Convert.ToSingle(right);
				}
				return Convert.ToInt32(left) / Convert.ToInt32(right);
			case "mod":
			case "modulo":
				if (flag)
				{
					return Convert.ToSingle(left) % Convert.ToSingle(right);
				}
				return Convert.ToInt32(left) % Convert.ToInt32(right);
			case "replace":
				return (left as string).Replace(filter.StringFilter, right as string);
			default:
				return right;
			}
		}
	}
	public class Filter
	{
		public string StringFilter;

		public string FloatFilter;

		public string IntFilter;
	}
}
namespace ESBM.Utils
{
	public static class StringExtensions
	{
		public static void Add(this string token, string text)
		{
			LanguageAPI.Add(token, text);
		}

		public static void RemoveComponent<T>(this GameObject gameObject) where T : Component
		{
			Object.Destroy((Object)(object)gameObject.GetComponent<T>());
		}

		public static void RemoveComponents<T>(this GameObject gameObject) where T : Component
		{
			T[] components = gameObject.GetComponents<T>();
			for (int i = 0; i < components.Length; i++)
			{
				Object.Destroy((Object)(object)components[i]);
			}
		}

		public static T GetRandom<T>(this List<T> list, Xoroshiro128Plus rng = null)
		{
			if (rng == null)
			{
				return list[Random.RandomRangeInt(0, list.Count)];
			}
			return list[rng.RangeInt(0, list.Count)];
		}

		public static void AddComponent<T>(this Component self) where T : Component
		{
			self.gameObject.AddComponent<T>();
		}
	}
	public static class HumanFriendlyInteger
	{
		private static string[] ones = new string[10] { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };

		private static string[] teens = new string[10] { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };

		private static string[] tens = new string[8] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };

		private static string[] thousandsGroups = new string[4] { "", " Thousand", " Million", " Billion" };

		private static string FriendlyInteger(int n, string leftDigits, int thousands)
		{
			if (n == 0)
			{
				return leftDigits;
			}
			string text = leftDigits;
			if (text.Length > 0)
			{
				text += " ";
			}
			if (n < 10)
			{
				text += ones[n];
			}
			else if (n < 20)
			{
				text += teens[n - 10];
			}
			else if (n < 100)
			{
				text += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
			}
			else if (n < 1000)
			{
				text += FriendlyInteger(n % 100, ones[n / 100] + " Hundred", 0);
			}
			else
			{
				text += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000, "", thousands + 1), 0);
				if (n % 1000 == 0)
				{
					return text;
				}
			}
			return text + thousandsGroups[thousands];
		}

		public static string IntegerToWritten(int n)
		{
			if (n == 0)
			{
				return "Zero";
			}
			if (n < 0)
			{
				return "Negative " + IntegerToWritten(-n);
			}
			return FriendlyInteger(n, "", 0).ToLower();
		}
	}
	public static class Keywords
	{
		public static string Poison = "KEYWORD_POISON";

		public static string Regenerative = "KEYWORD_RAPID_REGEN";

		public static string Agile = "KEYWORD_AGILE";

		public static string HealthCost = "KEYWORD_PERCENT_HP";

		public static string Disperse = "KEYWORD_SONIC_BOOM";

		public static string Weak = "KEYWORD_WEAK";

		public static string Heavy = "KEYWORD_HEAVY";

		public static string Freeze = "KEYWORD_FREEZING";

		public static string Stun = "KEYWORD_STUNNING";

		public static string Expose = "KEYWORD_EXPOSE";

		public static string Shock = "KEYWORD_SHOCKING";

		public static string Slayer = "KEYWORD_SLAYER";

		public static string Hemorrhage = "KEYWORD_SUPERBLEED";

		public static string Ignite = "KEYWORD_IGNITE";

		public static string Weakpoint = "KEYWORD_WEAKPOINT";

		public static string ActiveReload = "KEYWORD_ACTIVERELOAD";

		public static string VoidCorruption = "KEYWORD_VOIDCORRUPTION";
	}
	public static class Events
	{
		public static uint Play_item_proc_increasePrimaryDamage = 3525110178u;

		public static uint Play_item_proc_lowerPricedChest = 2861334124u;

		public static uint Play_obj_portalShaping_activate = 3169369792u;

		public static uint Play_item_proc_lowerHealthHigherDamage_active_loop = 2806077218u;

		public static uint Play_item_proc_lowerHealthHigherDamage_proc = 3144264115u;

		public static uint Stop_item_proc_lowerHealthHigherDamage_active_loop = 1766373184u;

		public static uint Play_AMB_zone_helminthRoost = 1401190132u;

		public static uint Play_env_helminth_jumppad_launch = 804535113u;

		public static uint Play_env_helminth_jumppad_loop = 1121351506u;

		public static uint Stop_env_helminth_jumppad_loop = 1859759472u;

		public static uint Play_item_proc_onLevelUpFreeUnlock_activate = 2156400271u;

		public static uint Play_item_proc_onLevelUpFreeUnlock_idle = 2826299554u;

		public static uint Play_item_proc_extraStatsOnLevelUp = 1263627182u;

		public static uint Play_AMB_zone_villageNight = 446631000u;

		public static uint Play_item_proc_extraShrineItem = 3488308441u;

		public static uint Play_ui_artifact_delusion_activate = 2155448709u;

		public static uint Play_ui_artifact_delusion_failure = 2684473644u;

		public static uint Play_ui_artifact_delusion_reset = 708431835u;

		public static uint Play_ui_artifact_delusion_success = 3325363891u;

		public static uint Play_halcyonite_death = 3525343637u;

		public static uint Play_halcyonite_idle_loop = 983867080u;

		public static uint Play_halcyonite_impact = 33305611u;

		public static uint Play_halcyonite_move_loop = 480080479u;

		public static uint Play_halcyonite_skill1_chargeup = 1290182503u;

		public static uint Play_halcyonite_skill1_swing = 936256326u;

		public static uint Play_halcyonite_skill1_thrust = 1083715706u;

		public static uint Play_halcyonite_skill2_chargeup = 3979952754u;

		public static uint Play_halcyonite_skill2_shoot = 3274455546u;

		public static uint Play_halcyonite_skill3_end = 3079505645u;

		public static uint Play_halcyonite_skill3_loop = 67562408u;

		public static uint Play_halcyonite_skill3_start = 970916454u;

		public static uint Play_halcyonite_spawn = 3688151658u;

		public static uint Play_halcyonite_VO_alert = 1322088115u;

		public static uint Stop_halcyonite_idle_loop = 1332844866u;

		public static uint Stop_halcyonite_move_loop = 2962578225u;

		public static uint Stop_halcyonite_skill3_loop = 3070087286u;

		public static uint Play_AMB_zone_lakesDay = 3374250540u;

		public static uint Play_env_lakes_jumppad_launch = 1567260962u;

		public static uint Play_env_lakes_jumppad_loop = 3135402281u;

		public static uint Play_env_lakes_waterfall_loop = 1015031338u;

		public static uint Stop_env_lakes_jumppad_loop = 417186615u;

		public static uint Stop_env_lakes_waterfall_loop = 3880166920u;

		public static uint Play_seeker_selectScreen_idle = 1955843131u;

		public static uint Play_seeker_skill1_fire = 3158006061u;

		public static uint Play_seeker_skill1_fire_orb = 39374599u;

		public static uint Play_seeker_skill1_impact = 2378122475u;

		public static uint Play_seeker_skill1_orb_explo = 3861306019u;

		public static uint Play_seeker_skill2_active_loop = 2229939235u;

		public static uint Play_seeker_skill2_alt_fire = 3268729620u;

		public static uint Play_seeker_skill2_alt_loop = 2382979698u;

		public static uint Play_seeker_skill2_end = 3897039939u;

		public static uint Play_seeker_skill2_fire = 2101638456u;

		public static uint Play_seeker_skill2_flight_loop = 3838730855u;

		public static uint Play_seeker_skill2_start = 1063538712u;

		public static uint Play_seeker_skill3_explo = 985996859u;

		public static uint Play_seeker_skill3_start = 90951373u;

		public static uint Play_seeker_skill4_combo_correct = 177463755u;

		public static uint Play_seeker_skill4_combo_wrong = 884291666u;

		public static uint Play_seeker_skill4_start = 3296174602u;

		public static uint Play_seeker_skill4_timeout = 2305681923u;

		public static uint Play_seeker_skill4_win = 732991608u;

		public static uint Play_seeker_step = 4226349104u;

		public static uint Play_seeker_step_sprint = 1145656191u;

		public static uint Stop_seeker_skill2_active_loop = 127139369u;

		public static uint Stop_seeker_skill2_alt_loop = 3707674044u;

		public static uint Stop_seeker_skill2_flight_loop = 2720151021u;

		public static uint Stop_seeker_skill3_loop = 1337233567u;

		public static uint Stop_seeker_skill4_start = 2327375048u;

		public static uint Play_wBisonDeath = 1113517888u;

		public static uint Play_wBisonHit = 1197473233u;

		public static uint Play_wBisonShoot1 = 3268390400u;

		public static uint Play_wBisonSpawn = 1249767875u;

		public static uint Play_wBlastdoor = 3043230225u;

		public static uint Play_wBoarDeath = 3944593657u;

		public static uint Play_wBoarExplosion = 3091761946u;

		public static uint Play_wBoarHit = 1332006904u;

		public static uint Play_wBoarMDeath = 2887033908u;

		public static uint Play_wBoarShoot1 = 2651342963u;

		public static uint Play_wBoss1Shoot1 = 3380168965u;

		public static uint Play_wBoss1Shoot2 = 3380168966u;

		public static uint Play_wBossSkill2 = 857592033u;

		public static uint Play_wBubbleShield = 3999340508u;

		public static uint Play_wBullet1 = 3448409474u;

		public static uint Play_wBullet2 = 3448409473u;

		public static uint Play_wBullet3 = 3448409472u;

		public static uint Play_wCasing = 1800381192u;

		public static uint Play_wChainLightning = 1913174254u;

		public static uint Play_wChat = 1231583519u;

		public static uint Play_wChefShoot2_1 = 4002996080u;

		public static uint Play_wChest0 = 273185112u;

		public static uint Play_wChest1 = 273185113u;

		public static uint Play_wChest2 = 273185114u;

		public static uint Play_wChest5 = 273185117u;

		public static uint Play_wChildDeath = 3731152613u;

		public static uint Play_wChildGShoot1 = 2978407106u;

		public static uint Play_wChildHit = 4072685316u;

		public static uint Play_wChildShoot1 = 4260787991u;

		public static uint Play_wClayDeath = 1853199952u;

		public static uint Play_wClayHit = 2864197409u;

		public static uint Play_wClayShoot1 = 1969574576u;

		public static uint Play_wClaySpawn = 1481867283u;

		public static uint Play_wClick = 1105771879u;

		public static uint Play_wCoin = 1232716514u;

		public static uint Play_wCoins = 2360199605u;

		public static uint Play_wCrabDeath = 2914438815u;

		public static uint Play_wCrabSpawn = 400103432u;

		public static uint Play_wCrit_01 = 3774687669u;

		public static uint Play_wCrowbar = 2755541643u;

		public static uint Play_wCutsceneAlarm = 2172459452u;

		public static uint Play_wCutsceneJet = 197474154u;

		public static uint Play_wCutscenePass = 1461112566u;

		public static uint Play_wDifficulty = 3657652262u;

		public static uint Play_wDoll = 1118795882u;

		public static uint Play_wDrill = 1252691444u;

		public static uint Play_wDrone1Spawn = 3109566651u;

		public static uint Play_wEfMushroom = 3355655210u;

		public static uint Play_wEmbryo = 3519041107u;

		public static uint Play_wError = 2120356473u;

		public static uint Play_wExplosiveShot = 1244890662u;

		public static uint Play_wFeralShoot1 = 732734997u;

		public static uint Play_wFeralShoot2 = 732734998u;

		public static uint Play_wFrozen = 1850209911u;

		public static uint Play_wGeyser = 2014257388u;

		public static uint Play_wGiantJellyExplosion = 923348941u;

		public static uint Play_wGiantJellyHit = 3830172407u;

		public static uint Play_wGolemAttack1 = 1019251312u;

		public static uint Play_wGolemDeath = 469957963u;

		public static uint Play_wGolemHit = 1924739498u;

		public static uint Play_wGolemSpawn = 2658053020u;

		public static uint Play_wGuardDeath = 2195517878u;

		public static uint Play_wGuardHit = 3726358359u;

		public static uint Play_wGuardSpawn = 1193575573u;

		public static uint Play_wHeavyShoot1 = 2266555164u;

		public static uint Play_wHitlist = 1828045284u;

		public static uint Play_wHuntressShoot1 = 2714607293u;

		public static uint Play_wHuntressShoot3 = 2714607295u;

		public static uint Play_wImpDeath = 1405469125u;

		public static uint Play_wImpGShoot1 = 702433570u;

		public static uint Play_wImpHit = 2697432036u;

		public static uint Play_wImpShoot1 = 2776445175u;

		public static uint Play_wImpShoot2 = 2776445172u;

		public static uint Play_wJanitorShoot1_1 = 2483794322u;

		public static uint Play_wJanitorShoot1_2 = 2483794321u;

		public static uint Play_wJanitorShoot2_1 = 1409879677u;

		public static uint Play_wJanitorShoot2_2 = 1409879678u;

		public static uint Play_wJanitorShoot4_1 = 1410865383u;

		public static uint Play_wJanitorShoot4_2 = 1410865380u;

		public static uint Play_wJarSouls = 4162844532u;

		public static uint Play_wJellyDeath = 2679553851u;

		public static uint Play_wJellyHit = 213554906u;

		public static uint Play_wLevelUp = 1919980434u;

		public static uint Play_wLevelUpWar = 4023542052u;

		public static uint Play_wLightning = 1330288141u;

		public static uint Play_wLizardDeath = 2074794113u;

		public static uint Play_wLizardGDeath = 4177291774u;

		public static uint Play_wLizardGHit = 1425978735u;

		public static uint Play_wLizardGShoot1 = 1170430294u;

		public static uint Play_wLizardGSpawn = 2684018717u;

		public static uint Play_wLizardHit = 4207177744u;

		public static uint Play_wLizardShoot1 = 287412267u;

		public static uint Play_wLizardSpawn = 1283696654u;

		public static uint Play_wMine = 1021358464u;

		public static uint Play_wMinerShoot1 = 1056078324u;

		public static uint Play_wMinerShoot2 = 1056078327u;

		public static uint Play_wMinerShoot3 = 1056078326u;

		public static uint Play_wMinerShoot4 = 1056078321u;

		public static uint Play_wMissileLaunch = 3415171634u;

		public static uint Play_wMS = 3023098025u;

		public static uint Play_wMush = 1473662818u;

		public static uint Play_wMushDeath = 3463803836u;

		public static uint Play_wMushHit = 2887429069u;

		public static uint Play_wMushShoot1 = 487910212u;

		public static uint Play_wMushSpawn = 4208364455u;

		public static uint Play_wNautShoot1 = 874719151u;

		public static uint Play_wPickup = 745840569u;

		public static uint Play_wPigShoot1 = 4172429713u;

		public static uint Play_wPodDeath = 368641344u;

		public static uint Play_wPodHit = 4069172177u;

		public static uint Play_wPyroShoot1 = 1977581991u;

		public static uint Play_wReflect = 3534459008u;

		public static uint Play_wReload = 1935874270u;

		public static uint Play_wRevive = 3924543518u;

		public static uint Play_wRiotGrenade = 1170699791u;

		public static uint Play_wRiotShoot1 = 392428577u;

		public static uint Play_wSamuraiShoot1 = 2292726403u;

		public static uint Play_wSamuraiShoot2 = 2292726400u;

		public static uint Play_wScavengerHit = 3803292342u;

		public static uint Play_wShield = 144484126u;

		public static uint Play_wShrine1 = 1516352125u;

		public static uint Play_wSmite = 1676655215u;

		public static uint Play_wSniper = 1326789400u;

		public static uint Play_wSniper2 = 2522836730u;

		public static uint Play_wSniperShoot3 = 3029163620u;

		public static uint Play_wSpiderHit = 1534240581u;

		public static uint Play_wSpiderShoot1 = 4018099836u;

		public static uint Play_wSpitterHit = 530229631u;

		public static uint Play_wSpitterShoot1 = 1863108870u;

		public static uint Play_wSpitterSpawn = 291139117u;

		public static uint Play_wSqueaky = 1860044956u;

		public static uint Play_wTeleporter = 1289080377u;

		public static uint Play_wUse = 1100859862u;

		public static uint Play_wWatch = 3354880454u;

		public static uint Play_wWispBDeath = 3021624856u;

		public static uint Play_wWispBShoot1 = 2025586984u;

		public static uint Play_wWispDeath = 3169292106u;

		public static uint Play_wWispGDeath = 1968672835u;

		public static uint Play_wWispGShoot1 = 969982957u;

		public static uint Play_wWispHit = 2561235483u;

		public static uint Play_wWispShoot1 = 914723770u;

		public static uint Play_wWispSpawn = 3436613665u;

		public static uint Play_wWormBurning = 2192059253u;

		public static uint Play_wWormDeath = 3793594386u;

		public static uint Play_wWormExplosion = 2529227609u;

		public static uint Play_wWormHit = 3504753139u;

		public static uint Play_wWormRoar = 1700089088u;

		public static uint Play_obj_portalColossus_activate = 812056455u;

		public static uint Play_obj_portalColossus_loop = 1986410382u;

		public static uint Play_obj_shrineColossus_activate = 2363010998u;

		public static uint Play_obj_shrineColossus_locked_loop = 3583777048u;

		public static uint Stop_obj_portalColossus_loop = 1709721620u;

		public static uint Stop_obj_shrineColossus_locked_loop = 602838254u;

		public static uint Play_AMB_zone_village = 2140215618u;

		public static uint Kill_loops = 3633988413u;

		public static uint Kill_SelectScreen = 314485028u;

		public static uint Pause_All = 3864097025u;

		public static uint Play_Achievement = 3433956687u;

		public static uint Play_acid_larva_attack1_explo = 2451117845u;

		public static uint Play_acid_larva_attack1_loop = 3362763155u;

		public static uint Play_acid_larva_attack1_start = 1646746355u;

		public static uint Play_acid_larva_death = 3568098837u;

		public static uint Play_acid_larva_idle = 2621183947u;

		public static uint Play_acid_larva_impact = 2231265675u;

		public static uint Play_acid_larva_spawn = 3730906858u;

		public static uint Play_acid_larva_sprint_land = 2824450583u;

		public static uint Play_acid_larva_sprint_leap = 2639308470u;

		public static uint Play_acid_larva_step = 828559811u;

		public static uint Play_acrid_m1_bigSlash = 1656148530u;

		public static uint Play_acrid_m1_hit = 1822928838u;

		public static uint Play_acrid_m1_slash = 1719910342u;

		public static uint Play_acrid_m2_bite_hit = 2714436782u;

		public static uint Play_acrid_m2_bite_shoot = 456215952u;

		public static uint Play_acrid_m2_explode = 2736075181u;

		public static uint Play_acrid_m2_fly_loop = 644013190u;

		public static uint Play_acrid_m2_shoot = 999289595u;

		public static uint Play_acrid_R_fly_loop = 1915769387u;

		public static uint Play_acrid_R_infect = 1007919396u;

		public static uint Play_acrid_R_shoot = 1160201708u;

		public static uint Play_acrid_shift_fly_loop = 642600073u;

		public static uint Play_acrid_shift_jump = 1749522733u;

		public static uint Play_acrid_shift_land = 320622162u;

		public static uint Play_acrid_shift_puddle_loop = 1556265730u;

		public static uint Play_acrid_sprint_start = 801642819u;

		public static uint Play_acrid_sprint_stop = 3680364993u;

		public static uint Play_acrid_step = 372958860u;

		public static uint Play_acrid_step_sprint = 2575316715u;

		public static uint Play_acrid_step_sprint_hand = 3560327381u;

		public static uint Play_affix_mendingBomb_explode = 841626335u;

		public static uint Play_affix_mendingChain_loop = 3768810533u;

		public static uint Play_affix_void_bug_infect = 939369398u;

		public static uint Play_affix_void_bug_loop = 1959624827u;

		public static uint Play_affix_void_bug_spawn = 3394761874u;

		public static uint Play_affix_void_spawn = 1535219985u;

		public static uint Play_AMB_zone_arena = 1539048487u;

		public static uint Play_AMB_zone_artifactWorld = 4134483156u;

		public static uint Play_AMB_zone_char_select = 1641027481u;

		public static uint Play_AMB_zone_damp_cave_simple = 1142851345u;

		public static uint Play_AMB_zone_dark_rain = 938309267u;

		public static uint Play_AMB_zone_desert = 56392161u;

		public static uint Play_AMB_zone_lakesDay_01 = 438484882u;

		public static uint Play_AMB_zone_limbo = 1359925925u;

		public static uint Play_AMB_zone_moon = 3075336325u;

		public static uint Play_AMB_zone_rootJungle = 2348244945u;

		public static uint Play_AMB_zone_ship_graveyard = 642154978u;

		public static uint Play_AMB_zone_skyMeadow = 3453798682u;

		public static uint Play_AMB_zone_skyMeadow_hiddenLab = 3040657526u;

		public static uint Play_AMB_zone_tundra = 38798342u;

		public static uint Play_AMB_zone_wisp_graveyard = 751162865u;

		public static uint Play_arenaCrab_idle_VO = 158852972u;

		public static uint Play_arenaCrab_swim_land = 2386788264u;

		public static uint Play_arenaCrab_swim_loop = 2401300333u;

		public static uint Play_arenaCrab_swim_plant = 1572198610u;

		public static uint Play_arenaCrab_swim_stroke = 2022745195u;

		public static uint Play_arenaCrab_swim_uproot = 3172304260u;

		public static uint Play_artifactBoss_attack1_explode = 71177277u;

		public static uint Play_artifactBoss_attack1_flightLoop = 2591078442u;

		public static uint Play_artifactBoss_attack1_shoot = 2196529419u;

		public static uint Play_artifactBoss_death = 4163357724u;

		public static uint Play_artifactBoss_idle_VO = 1345400638u;

		public static uint Play_artifactBoss_loop_level1 = 184703648u;

		public static uint Play_artifactBoss_loop_level2 = 184703651u;

		public static uint Play_artifactBoss_loop_level3 = 184703650u;

		public static uint Play_artifactBoss_spawn = 188493575u;

		public static uint Play_artifactBoss_takehit = 1098257974u;

		public static uint Play_bandit2_m1_reload_bullet = 452712768u;

		public static uint Play_bandit2_m1_reload_finish = 888917029u;

		public static uint Play_bandit2_m1_rifle = 2347126876u;

		public static uint Play_bandit2_m1_shotgun = 4206201632u;

		public static uint Play_bandit2_m2_alt_throw = 595565201u;

		public static uint Play_bandit2_m2_impact = 2278422317u;

		public static uint Play_bandit2_m2_slash = 4103120750u;

		public static uint Play_bandit2_R_alt_kill = 4143438424u;

		public static uint Play_bandit2_R_fire = 1435016856u;

		public static uint Play_bandit2_R_kill = 3719464252u;

		public static uint Play_bandit2_R_load = 3765877048u;

		public static uint Play_bandit2_shift_enter = 2967307668u;

		public static uint Play_bandit2_shift_exit = 850833398u;

		public static uint Play_bandit2_step = 3692683083u;

		public static uint Play_bandit2_step_sprint = 1764271662u;

		public static uint Play_bandit_M1_pump = 1853111450u;

		public static uint Play_bandit_M1_shot = 3033552564u;

		public static uint Play_bandit_M2_load = 2190546849u;

		public static uint Play_bandit_M2_shot = 1980580961u;

		public static uint Play_bandit_shift_end = 2770013503u;

		public static uint Play_bandit_shift_jump = 1325724668u;

		public static uint Play_bandit_shift_land = 1259710815u;

		public static uint Play_beetle_guard_attack1 = 763398245u;

		public static uint Play_beetle_guard_attack2_initial = 2581251415u;

		public static uint Play_beetle_guard_attack2_spikeLoop = 542781083u;

		public static uint Play_beetle_guard_death = 1527577102u;

		public static uint Play_beetle_guard_idle_VO = 3561602500u;

		public static uint Play_beetle_guard_impact = 2349109310u;

		public static uint Play_beetle_guard_spawn = 515189165u;

		public static uint Play_beetle_guard_step = 2628071246u;

		public static uint Play_beetle_queen_attack1 = 555937964u;

		public static uint Play_beetle_queen_attack2_impact = 3157521796u;

		public static uint Play_beetle_queen_attack2_projectile_loop = 1477410428u;

		public static uint Play_beetle_queen_attack2_shoot = 4217844119u;

		public static uint Play_beetle_queen_death = 451763711u;

		public static uint Play_beetle_queen_impact = 806513485u;

		public static uint Play_beetle_queen_spawn = 2698326632u;

		public static uint Play_beetle_queen_step = 2551161845u;

		public static uint Play_beetle_queen_VO_idle = 1845046503u;

		public static uint Play_beetle_worker_attack = 4241852727u;

		public static uint Play_beetle_worker_death = 383219511u;

		public static uint Play_beetle_worker_idle = 1901530073u;

		public static uint Play_beetle_worker_impact = 1338816453u;

		public static uint Play_beetle_worker_spawn = 1471942880u;

		public static uint Play_beetle_worker_step = 1809191501u;

		public static uint Play_bellBody_attackCreate = 780374380u;

		public static uint Play_bellBody_attackLand = 1732098311u;

		public static uint Play_bellBody_attackShoot = 4097802741u;

		public static uint Play_bellBody_death = 2182572274u;

		public static uint Play_bellBody_idle_loop = 345208571u;

		public static uint Play_bellBody_idle_VO = 4021378928u;

		public static uint Play_bellBody_impact = 2147523650u;

		public static uint Play_bellBody_spawn = 4144720393u;

		public static uint Play_bison_charge_attack_collide = 2909411958u;

		public static uint Play_bison_charge_attack_end_skid = 2235015895u;

		public static uint Play_bison_charge_attack_start = 2509443544u;

		public static uint Play_bison_charge_attack_tell = 4101791573u;

		public static uint Play_bison_death = 3590751484u;

		public static uint Play_bison_headbutt_attack_hit = 3802411724u;

		public static uint Play_bison_headbutt_attack_swing = 1417054473u;

		public static uint Play_bison_idle_graze = 2516815946u;

		public static uint Play_bison_idle_VO = 3855060446u;

		public static uint Play_bison_impact = 4030239748u;

		public static uint Play_bison_spawn = 3910957799u;

		public static uint Play_bison_step = 2839275484u;

		public static uint Play_bison_step_charge = 532574671u;

		public static uint Play_bleedOnCritAndExplode_explode = 2693964769u;

		public static uint Play_bleedOnCritAndExplode_impact = 3570667772u;

		public static uint Play_blindVermin_attack1_bite = 901504895u;

		public static uint Play_blindVermin_death = 3786262665u;

		public static uint Play_blindVermin_idle_VO = 2536191415u;

		public static uint Play_blindVermin_impact = 121244671u;

		public static uint Play_blindVermin_spawn = 2995165238u;

		public static uint Play_blindVermin_step = 294344023u;

		public static uint Play_boss_spawn_radius_appear = 4035156426u;

		public static uint Play_boss_spawn_rumble = 2327315087u;

		public static uint Play_captain_drone_idle_VO = 1028355892u;

		public static uint Play_captain_drone_quick_move = 8118127u;

		public static uint Play_captain_drone_zap = 3992615829u;

		public static uint Play_captain_m1_chargeStart = 2544146878u;

		public static uint Play_captain_m1_hit = 3819278833u;

		public static uint Play_captain_m1_reload = 2226849933u;

		public static uint Play_captain_m1_shootWide = 532604026u;

		public static uint Play_captain_m1_shotgun_charge_loop = 2453063032u;

		public static uint Play_captain_m1_shotgun_shootTight = 1348536996u;

		public static uint Play_captain_m2_tazed_loop = 3117407908u;

		public static uint Play_captain_m2_tazer_bounce = 1888136956u;

		public static uint Play_captain_m2_tazer_impact = 58834266u;

		public static uint Play_captain_m2_tazer_shoot = 832597929u;

		public static uint Play_captain_R_aim = 364785367u;

		public static uint Play_captain_R_aiming_loop = 1040620982u;

		public static uint Play_captain_R_confirmLocation = 1531948689u;

		public static uint Play_captain_R_impact = 3902637834u;

		public static uint Play_captain_R_turret_build = 1359756347u;

		public static uint Play_captain_R_turret_healing_loop = 788149618u;

		public static uint Play_captain_shift_active_loop = 3941125189u;

		public static uint Play_captain_shift_confirm = 2140775262u;

		public static uint Play_captain_shift_end = 803261989u;

		public static uint Play_captain_shift_impact = 3269630552u;

		public static uint Play_captain_shift_preImpact = 1069989355u;

		public static uint Play_captain_shift_start = 2113266862u;

		public static uint Play_captain_sprint_start = 3430012852u;

		public static uint Play_captain_sprint_stop = 1094493224u;

		public static uint Play_captain_step = 1226612947u;

		public static uint Play_captain_step_sprint = 2831720022u;

		public static uint Play_captain_utility_variant_impact = 1357225738u;

		public static uint Play_captain_utility_variant_laser_loop = 2451237826u;

		public static uint Play_captain_utility_variant_preImpact = 3461917085u;

		public static uint Play_char_glass_death = 359633836u;

		public static uint Play_char_jump_VO = 1654395377u;

		public static uint Play_char_land = 81910470u;

		public static uint Play_char_land_fall_damage = 2642009198u;

		public static uint Play_clayboss_death = 2559714313u;

		public static uint Play_clayboss_idle_loop = 3870838284u;

		public static uint Play_clayboss_idle_VO = 628079927u;

		public static uint Play_clayboss_impact = 1890981503u;

		public static uint Play_clayboss_M1_explo = 2368148000u;

		public static uint Play_clayboss_m1_lidClose = 1576056771u;

		public static uint Play_clayboss_m1_lidOpen = 1470926389u;

		public static uint Play_clayboss_m1_shoot = 2922284055u;

		public static uint Play_clayboss_m2_explo = 4043539191u;

		public static uint Play_clayboss_m2_projectile_loop = 3593581531u;

		public static uint Play_clayboss_m2_rise = 916955724u;

		public static uint Play_clayboss_m2_shoot = 600290068u;

		public static uint Play_clayboss_R_mulch_loop = 968500644u;

		public static uint Play_clayboss_R_start = 988517284u;

		public static uint Play_clayboss_R_tether_loop = 3132967749u;

		public static uint Play_clayboss_spawn = 1768616886u;

		public static uint Play_clayboss_step = 3088890839u;

		public static uint Play_clayboss_step_legMove = 869404285u;

		public static uint Play_clayboss_walk_loop = 212114079u;

		public static uint Play_clayBruiser_attack1_shoot_bullet = 491470286u;

		public static uint Play_clayBruiser_attack1_shoot_flyby = 3572694566u;

		public static uint Play_clayBruiser_attack1_shootLoop = 649113537u;

		public static uint Play_clayBruiser_attack1_windDown = 263088688u;

		public static uint Play_clayBruiser_attack1_windUp = 1916278867u;

		public static uint Play_clayBruiser_attack2_shoot = 1288244652u;

		public static uint Play_clayBruiser_death = 3332873880u;

		public static uint Play_clayBruiser_idle_VO = 2519366882u;

		public static uint Play_clayBruiser_impact = 1250949200u;

		public static uint Play_clayBruiser_spawn = 817063995u;

		public static uint Play_clayBruiser_step = 1697475496u;

		public static uint Play_clayGrenadier_attack1_chargeup = 318212996u;

		public static uint Play_clayGrenadier_attack1_explode = 2432531130u;

		public static uint Play_clayGrenadier_attack1_launch = 1826024586u;

		public static uint Play_clayGrenadier_attack2_chargeup = 1264580