Decompiled source of Impossible pack 2 v1.4.4

plugins/AncientScepter.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AncientScepter.Buffs;
using AncientScepter.ScepterSkills;
using AncientScepter.ScepterSkillsMonster;
using BTP.RoR2Plugin;
using BTP.RoR2Plugin.Language;
using BTP.RoR2Plugin.Messages;
using BTP.RoR2Plugin.Utils;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Bandit2.Weapon;
using EntityStates.Captain.Weapon;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Huntress;
using EntityStates.Huntress.Weapon;
using EntityStates.Loader;
using EntityStates.Mage;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using EntityStates.Railgunner.Backpack;
using EntityStates.Railgunner.Weapon;
using EntityStates.TitanMonster;
using EntityStates.Toolbot;
using EntityStates.Treebot.TreebotFlower;
using EntityStates.VoidSurvivor.CorruptMode;
using EntityStates.VoidSurvivor.Weapon;
using EntityStates.Vulture.Weapon;
using FRCSharp;
using GuestUnion;
using HG.GeneralSerializer;
using HG.Reflection;
using IL.EntityStates.Captain.Weapon;
using IL.EntityStates.Loader;
using IL.EntityStates.Mage.Weapon;
using IL.EntityStates.Merc;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates;
using On.EntityStates.Bandit2.Weapon;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.Commando.CommandoWeapon;
using On.EntityStates.Huntress;
using On.EntityStates.Huntress.Weapon;
using On.EntityStates.Loader;
using On.EntityStates.Mage;
using On.EntityStates.Mage.Weapon;
using On.EntityStates.Merc;
using On.EntityStates.Merc.Weapon;
using On.EntityStates.Railgunner.Backpack;
using On.EntityStates.Railgunner.Weapon;
using On.EntityStates.TitanMonster;
using On.EntityStates.Toolbot;
using On.EntityStates.Treebot.TreebotFlower;
using On.EntityStates.VoidSurvivor.CorruptMode;
using On.EntityStates.VoidSurvivor.Weapon;
using On.EntityStates.Vulture.Weapon;
using On.RoR2;
using On.RoR2.Orbs;
using R2API;
using R2API.AddressReferencedAssets;
using R2API.Networking;
using RoR2;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI.MainMenu;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("AncientScepter")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("AncientScepter")]
[assembly: AssemblyTitle("AncientScepter")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[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 AncientScepter
{
	public class AncientScepterItem : ItemBase<AncientScepterItem>
	{
		public enum StridesInteractionMode
		{
			HeresyTakesPrecedence,
			ScepterTakesPrecedence,
			ScepterRerolls
		}

		private class ScepterReplacer
		{
			public SkillDef upgradeDef;

			public string bodyName;

			public SkillSlot slotIndex;

			public SkillDef targetDef;

			public int variantIndex;
		}

		public static bool altModel;

		public static bool artiFlamePerformanceMode;

		public static bool captainNukeFriendlyFire;

		public static bool enableMonsterSkills;

		public static bool enableSOTVTransforms;

		public static bool removeClassicItemsScepterFromPool;

		public static bool turretBlacklist;

		public static GameObject ancientWispPrefab;

		public static Material purpleFireMaterial;

		public static StridesInteractionMode stridesInteractionMode;

		internal List<ScepterSkill> skills = new List<ScepterSkill>();

		private readonly Dictionary<SkillSlot, SkillDef> heresyDefs = new Dictionary<SkillSlot, SkillDef>();

		private readonly List<ScepterReplacer> scepterReplacers = new List<ScepterReplacer>();

		private GameObject _itemDisplay;

		private GameObject _itemModel;

		private bool handlingInventory;

		private bool handlingOverride;

		public override GameObject ItemDisplayPrefab
		{
			get
			{
				if (!Object.op_Implicit((Object)(object)_itemDisplay))
				{
					return _itemDisplay = Assets.mainAssetBundle.LoadAsset<GameObject>("mdl" + AssetName + "Display");
				}
				return _itemDisplay;
			}
		}

		public override string ItemFullDescription => StringExtensions.ToGold("原始力量:来自原始传送器。") + "\n升级你的<style=cIsUtility>技能</style>。使特殊技能冷却时间减少" + StringExtensions.ToUtil<string>(StringExtensions.ToBaseAndStkPct<float>(0.25f, "(每层+_)")) + "。";

		public override Sprite ItemIcon => Assets.mainAssetBundle.LoadAsset<Sprite>("tex" + AssetName + "Icon");

		public override string ItemLangTokenName => "ANCIENT_SCEPTER";

		public override string ItemLore => "Perfected energies. <He> holds it before us. The crystal of foreign elements is not attached physically, yet it does not falter from the staff's structure.\n\nOverwhelming strength. We watch as <His> might splits the ground asunder with a single strike.\n\nWondrous possibilities. <His> knowledge unlocks further pathways of development. We are enlightened by <Him>.\n\nExcellent results. From <His> hands, [Nanga] takes hold. It is as <He> said: The weak are culled.\n\nRisking everything. The crystal destabilizies. [Nanga] is gone, and <He> is forced to wield it once again.\n\nPower comes at a cost. <He> is willing to pay.";

		public override GameObject ItemModel
		{
			get
			{
				if (!Object.op_Implicit((Object)(object)_itemModel))
				{
					return _itemModel = Assets.mainAssetBundle.LoadAsset<GameObject>("mdl" + AssetName + "Pickup");
				}
				return _itemModel;
			}
		}

		public override string ItemName => "Ancient Scepter";

		public override string ItemPickupDesc => "升级你的<style=cIsUtility>技能</style>。";

		public override ItemTag[] ItemTags
		{
			get
			{
				ItemTag[] array = new ItemTag[5];
				RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
				array[0] = (ItemTag)(AIBlacklisted ? 4 : 0);
				return (ItemTag[])(object)array;
			}
		}

		public override ItemTier Tier => (ItemTier)2;

		public override bool TILER2_MimicBlacklisted => true;

		private string AssetName
		{
			get
			{
				if (!altModel)
				{
					return "AncientScepter";
				}
				return "AghanimScepter";
			}
		}

		public AncientScepterItem()
		{
			skills.Add(new ArtificerFlamethrower2());
			skills.Add(new ArtificerFlyUp2());
			skills.Add(new Bandit2ResetRevolver2());
			skills.Add(new Bandit2SkullRevolver2());
			skills.Add(new CaptainAirstrike2());
			skills.Add(new CaptainAirstrikeAlt2());
			skills.Add(new CommandoBarrage2());
			skills.Add(new CommandoGrenade2());
			skills.Add(new CrocoDisease2());
			skills.Add(new EngiTurret2());
			skills.Add(new EngiWalker2());
			skills.Add(new HuntressBallista2());
			skills.Add(new HuntressRain2());
			skills.Add(new LoaderChargeFist2());
			skills.Add(new LoaderChargeZapFist2());
			skills.Add(new MercEvis2());
			skills.Add(new MercEvisProjectile2());
			skills.Add(new ToolbotDash2());
			skills.Add(new TreebotFlower2_2());
			skills.Add(new TreebotFireFruitSeed2());
			skills.Add(new RailgunnerSuper2());
			skills.Add(new RailgunnerCryo2());
			skills.Add(new VoidFiendCrush());
			if (enableMonsterSkills)
			{
				skills.Add(new AurelioniteEyeLaser2());
				skills.Add(new VultureWindblade2());
			}
		}

		public override void CreateConfig(ConfigFile config)
		{
			string text = "Item: " + ItemName;
			turretBlacklist = config.Bind<bool>("Engineer", "Blacklist Turrets", false, "If true, turrets will be blacklisted from getting the Ancient Scepter.\nIf false, they will get the scepter and will get rerolled depending on the reroll mode.").Value;
			artiFlamePerformanceMode = config.Bind<bool>("Artificer", "ArtiFlamePerformance", false, "If true, Dragon's Breath will use significantly lighter particle effects and no dynamic lighting.").Value;
			captainNukeFriendlyFire = config.Bind<bool>("Captain", "Captain Nuke Friendly Fire", false, "If true, then Captain's Scepter Nuke will also inflict blight on allies.").Value;
			stridesInteractionMode = config.Bind<StridesInteractionMode>(text, "Strides pickup mode", StridesInteractionMode.ScepterRerolls, "Changes what happens when a character whose skill is affected by Ancient Scepter has both Ancient Scepter and the corresponding heretic skill replacements (Visions/Hooks/Strides/Essence) at the same time.").Value;
			enableMonsterSkills = config.Bind<bool>(text, "Enable skills for monsters", true, "If true, certain monsters get the effects of the Ancient Scepter.").Value;
			altModel = config.Bind<bool>(text, "Alt Model", false, "Changes the model as a reference to a certain other scepter that upgrades abilities.").Value;
			removeClassicItemsScepterFromPool = config.Bind<bool>(text, "CLASSICITEMS: Remove Classic Items Ancient Scepter From Droplist If Installed", true, "If true, then the Ancient Scepter from Classic Items will be removed from the drop pool to prevent complications.").Value;
			enableSOTVTransforms = config.Bind<bool>(text, "Transformation Notification", true, "If true, then when scepters are re-rolled, then it will be accompanied by a transformation notification like other items.").Value;
		}

		public override ItemDisplayRuleDict CreateDisplayRules()
		{
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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_00a0: 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_00d1: 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_00dc: 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)
			//IL_00e7: Expected O, but got Unknown
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: 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_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0270: Unknown result type (might be due to invalid IL or missing references)
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_0329: Unknown result type (might be due to invalid IL or missing references)
			//IL_0343: Unknown result type (might be due to invalid IL or missing references)
			//IL_034c: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03df: Unknown result type (might be due to invalid IL or missing references)
			//IL_040e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0413: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_042e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Unknown result type (might be due to invalid IL or missing references)
			//IL_044e: Unknown result type (might be due to invalid IL or missing references)
			//IL_044f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_0472: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0505: Unknown result type (might be due to invalid IL or missing references)
			//IL_0534: Unknown result type (might be due to invalid IL or missing references)
			//IL_0539: Unknown result type (might be due to invalid IL or missing references)
			//IL_054f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0554: Unknown result type (might be due to invalid IL or missing references)
			//IL_056a: Unknown result type (might be due to invalid IL or missing references)
			//IL_056f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0574: Unknown result type (might be due to invalid IL or missing references)
			//IL_0575: Unknown result type (might be due to invalid IL or missing references)
			//IL_058f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0598: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0602: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_0608: Unknown result type (might be due to invalid IL or missing references)
			//IL_0622: Unknown result type (might be due to invalid IL or missing references)
			//IL_062b: Unknown result type (might be due to invalid IL or missing references)
			//IL_065a: Unknown result type (might be due to invalid IL or missing references)
			//IL_065f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0675: Unknown result type (might be due to invalid IL or missing references)
			//IL_067a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0690: Unknown result type (might be due to invalid IL or missing references)
			//IL_0695: Unknown result type (might be due to invalid IL or missing references)
			//IL_069a: Unknown result type (might be due to invalid IL or missing references)
			//IL_069b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0731: Unknown result type (might be due to invalid IL or missing references)
			//IL_0745: Unknown result type (might be due to invalid IL or missing references)
			//IL_0759: Unknown result type (might be due to invalid IL or missing references)
			//IL_075e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0763: Unknown result type (might be due to invalid IL or missing references)
			//IL_077d: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0808: Unknown result type (might be due to invalid IL or missing references)
			//IL_0838: Unknown result type (might be due to invalid IL or missing references)
			//IL_083d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0853: Unknown result type (might be due to invalid IL or missing references)
			//IL_0858: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0873: Unknown result type (might be due to invalid IL or missing references)
			//IL_0878: Unknown result type (might be due to invalid IL or missing references)
			//IL_0879: Unknown result type (might be due to invalid IL or missing references)
			//IL_0893: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_08de: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0903: Unknown result type (might be due to invalid IL or missing references)
			//IL_0904: Unknown result type (might be due to invalid IL or missing references)
			//IL_091e: Unknown result type (might be due to invalid IL or missing references)
			//IL_094e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0953: Unknown result type (might be due to invalid IL or missing references)
			//IL_0969: Unknown result type (might be due to invalid IL or missing references)
			//IL_096e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0984: Unknown result type (might be due to invalid IL or missing references)
			//IL_0989: Unknown result type (might be due to invalid IL or missing references)
			//IL_098e: Unknown result type (might be due to invalid IL or missing references)
			//IL_098f: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09de: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a0f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a14: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a19: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1a: Unknown result type (might be due to invalid IL or missing references)
			SetupMaterials(ItemModel);
			ItemModel.AddComponent<ItemDisplay>().rendererInfos = Assets.SetupRendererInfos(ItemModel);
			ItemBase.displayPrefab = ItemDisplayPrefab;
			SetupMaterials(ItemDisplayPrefab);
			ItemDisplayPrefab.AddComponent<ItemDisplay>().rendererInfos = Assets.SetupRendererInfos(ItemDisplayPrefab);
			ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Pelvis",
					localPos = new Vector3(0.1473f, -0.073f, -0.0935f),
					localAngles = new Vector3(333.2843f, 198.8161f, 165.1177f),
					localScale = new Vector3(0.2235f, 0.2235f, 0.2235f)
				}
			});
			val.Add("mdlHuntress", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Pelvis",
					localPos = new Vector3(0f, 0.0638f, 0.0973f),
					localAngles = new Vector3(76.6907f, 0f, 0f),
					localScale = new Vector3(0.2812f, 0.2812f, 0.2812f)
				}
			});
			val.Add("mdlMage", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "HandR",
					localPos = new Vector3(-0.0021f, 0.1183f, 0.063f),
					localAngles = new Vector3(0f, 34.1f, 90f),
					localScale = new Vector3(0.4416f, 0.4416f, 0.4416f)
				}
			});
			val.Add("mdlEngi", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "CannonHeadR",
					localPos = new Vector3(0.0186f, 0.3435f, 0.2246f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.5614f, 0.5614f, 0.5614f)
				}
			});
			val.Add("mdlMerc", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Pelvis",
					localPos = new Vector3(0.1712f, 0f, 0f),
					localAngles = new Vector3(69.8111f, 180f, 180f),
					localScale = new Vector3(0.2679f, 0.2679f, 0.2679f)
				}
			});
			val.Add("mdlLoader", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "MechLowerArmR",
					localPos = new Vector3(0.0813f, 0.4165f, -0.0212f),
					localAngles = new Vector3(0f, 180f, 180f),
					localScale = new Vector3(0.4063f, 0.4063f, 0.4063f)
				}
			});
			val.Add("mdlCaptain", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Chest",
					localPos = new Vector3(-0.0046f, 0.0099f, -0.286f),
					localAngles = new Vector3(10.4706f, 1.6895f, 24.8468f),
					localScale = new Vector3(0.4928f, 0.4928f, 0.4928f)
				}
			});
			val.Add("mdlToolbot", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Chest",
					localPos = new Vector3(1.1191f, 0.358f, -1.6717f),
					localAngles = new Vector3(0f, 0f, 270f),
					localScale = new Vector3(2.4696f, 2.4696f, 2.4696f)
				}
			});
			val.Add("mdlTreebot", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "CalfFrontL",
					localPos = new Vector3(0f, 0.8376f, -0.1766f),
					localAngles = new Vector3(0f, 0f, 0f),
					localScale = new Vector3(0.8037f, 0.8037f, 0.8037f)
				}
			});
			val.Add("mdlCroco", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "MouthMuzzle",
					localPos = new Vector3(0f, 2.1215f, 2.9939f),
					localAngles = new Vector3(0f, 0f, 270f),
					localScale = new Vector3(5.2969f, 5.2969f, 5.2969f)
				}
			});
			val.Add("mdlBandit", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					ruleType = (ItemDisplayRuleType)0,
					followerPrefab = ItemDisplayPrefab,
					childName = "Pelvis",
					localPos = new Vector3(-0.1152f, -0.1278f, 0.2056f),
					localAngles = new Vector3(20f, 285f, 10f),
					localScale = new Vector3(0.2235f, 0.2235f, 0.2235f)
				}
			});
			val.Add("mdlEnforcer", (ItemDisplayRule[])(object)new ItemDisplayRule[1] { ItemHelpers.CreateDisplayRule(ItemDisplayPrefab, "Pelvis", new Vector3(-0.08448f, 0.00357f, -0.35566f), new Vector3(43.57039f, 347.6845f, 69.64303f), new Vector3(0.31291f, 0.31291f, 0.31291f)) });
			val.Add("mdlNemforcer", (ItemDisplayRule[])(object)new ItemDisplayRule[1] { ItemHelpers.CreateDisplayRule(ItemDisplayPrefab, "Minigun", new Vector3(0.00287f, -0.00305f, -0.03029f), new Vector3(358.9499f, 89.5545f, 180.8908f), new Vector3(0.00837f, 0.00837f, 0.00837f)) });
			val.Add("mdlVoidSurvivor", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					childName = "Hand",
					followerPrefab = ItemDisplayPrefab,
					localPos = new Vector3(-0.02335f, 0.11837f, 0.11306f),
					localAngles = new Vector3(55.42191f, 299.1461f, 266.1845f),
					localScale = new Vector3(0.56092f, 0.56276f, 0.56092f)
				}
			});
			val.Add("mdlRailGunner", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					childName = "ThighR",
					followerPrefab = ItemDisplayPrefab,
					localPos = new Vector3(-0.11836f, 0.17205f, 0.0282f),
					localAngles = new Vector3(353.4687f, 184.4017f, 177.4758f),
					localScale = new Vector3(0.2235f, 0.2235f, 0.2235f)
				}
			});
			val.Add("mdlNemmando", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					childName = "Sword",
					followerPrefab = ItemDisplayPrefab,
					localPos = new Vector3(-5.576489E-05f, 0.001674413f, -2.617424E-05f),
					localAngles = new Vector3(1.114511f, 204.2958f, 177.8329f),
					localScale = new Vector3(0.0026f, 0.0026f, 0.0026f)
				}
			});
			val.Add("mdlHeretic", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					childName = "ThighL",
					followerPrefab = ItemDisplayPrefab,
					localPos = new Vector3(0.49264f, -0.16267f, -0.14486f),
					localAngles = new Vector3(9.97009f, 351.3801f, 100.2498f),
					localScale = new Vector3(0.5f, 0.5f, 0.5f)
				}
			});
			val.Add("mdlBrother", (ItemDisplayRule[])(object)new ItemDisplayRule[1]
			{
				new ItemDisplayRule
				{
					childName = "HandL",
					followerPrefab = ItemDisplayPrefab,
					localPos = new Vector3(-0.05066f, 0.13436f, 0.0282f),
					localAngles = new Vector3(79.95749f, 180f, 230.595f),
					localScale = new Vector3(0.4f, 0.4f, 0.4f)
				}
			});
			return val;
		}

		public override void Hooks()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			base.Hooks();
			CharacterBody.onBodyInventoryChangedGlobal += OnBodyInventoryChangedGlobal;
			CharacterMaster.GetDeployableSameSlotLimit += new hook_GetDeployableSameSlotLimit(OnGetDeployableSameSlotLimit);
			GenericSkill.SetSkillOverride += new hook_SetSkillOverride(OnSetSkillOverride);
			MainMenuController.OnMainMenuInitialised += OnMainMenuInitialised;
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
			Run.onRunStartGlobal += On_RunStartGlobal_UseOnce;
			TeleporterInteraction.onTeleporterChargedGlobal += OnTeleporterChargedGlobal;
		}

		public override void Init(ConfigFile config)
		{
			ancientWispPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/AncientWispBody");
			CreateConfig(config);
			CreateItem();
			CreateLang();
			Hooks();
			RegisterScepterSkills();
		}

		public void InstallSkills()
		{
			skills.ForEach(delegate(ScepterSkill s)
			{
				s.LoadBehavior();
			});
			MiscUtil.AliveList().ForEach(delegate(CharacterMaster master)
			{
				CharacterBody body = master.GetBody();
				if (Object.op_Implicit((Object)(object)body))
				{
					HandleScepterSkill(body);
				}
			});
		}

		public void InstallSkillsLanguage()
		{
			skills.ForEach(delegate(ScepterSkill skill)
			{
				if (!Utility.IsNullOrWhiteSpace(skill.oldDescToken))
				{
					languageOverlays.Add(LanguageAPI.AddOverlay(skill.newDescToken, Language.GetString(skill.oldDescToken) + skill.scepterSkillDesc));
				}
			});
		}

		public bool RegisterScepterSkill(SkillDef replacingDef, string targetBodyName, SkillSlot targetSlot, int targetVariant)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			if (targetVariant < 0)
			{
				AncientScepterMain._logger.LogError((object)"Can't register a scepter skill to negative variant index");
				return false;
			}
			ScepterReplacer scepterReplacer = scepterReplacers.FirstOrDefault((ScepterReplacer x) => x.bodyName == targetBodyName && x.slotIndex == targetSlot && x.variantIndex == targetVariant);
			if (scepterReplacer != null)
			{
				AncientScepterMain._logger.LogMessage((object)("Replacing scepter skill for \"" + targetBodyName + "\" (" + scepterReplacer.upgradeDef.skillName + ") with (" + replacingDef.skillName + ")"));
				scepterReplacers.Remove(scepterReplacer);
			}
			AncientScepterMain._logger.LogMessage((object)("Adding scepter skill for \"" + targetBodyName + "\" (" + replacingDef.skillName + ")"));
			scepterReplacers.Add(new ScepterReplacer
			{
				bodyName = targetBodyName,
				slotIndex = targetSlot,
				variantIndex = targetVariant,
				upgradeDef = replacingDef
			});
			return true;
		}

		public bool RegisterScepterSkill(SkillDef replacingDef, string targetBodyName, SkillDef targetDef)
		{
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			ScepterReplacer scepterReplacer = scepterReplacers.FirstOrDefault((ScepterReplacer x) => x.bodyName == targetBodyName && (Object)(object)x.targetDef == (Object)(object)targetDef);
			if (scepterReplacer != null)
			{
				AncientScepterMain._logger.LogMessage((object)("Replacing scepter skill for \"" + targetBodyName + "\" (" + scepterReplacer.upgradeDef.skillName + ") with (" + replacingDef.skillName + ")"));
				scepterReplacers.Remove(scepterReplacer);
			}
			AncientScepterMain._logger.LogMessage((object)("Adding scepter skill for \"" + targetBodyName + "\" (" + replacingDef.skillName + ")"));
			scepterReplacers.Add(new ScepterReplacer
			{
				bodyName = targetBodyName,
				slotIndex = (SkillSlot)(-1),
				variantIndex = -1,
				upgradeDef = replacingDef,
				targetDef = targetDef
			});
			return true;
		}

		public void RegisterScepterSkills()
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			skills.ForEach(delegate(ScepterSkill skill)
			{
				//IL_0014: Unknown result type (might be due to invalid IL or missing references)
				skill.SetupAttributes();
				RegisterScepterSkill(skill.scepterSkillDef, skill.targetBody, skill.targetSlot, skill.targetVariantIndex);
			});
			HereticNevermore2 hereticNevermore = new HereticNevermore2();
			hereticNevermore.SetupAttributes();
			skills.Add(hereticNevermore);
			RegisterScepterSkill(hereticNevermore.scepterSkillDef, hereticNevermore.targetBody, Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Heretic/HereticDefaultAbility.asset").WaitForCompletion());
			InstallSkills();
		}

		protected override void SetupMaterials(GameObject modelPrefab)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			purpleFireMaterial = ((Renderer)((Component)ancientWispPrefab.transform.Find("Model Base?/mdlAncientWisp/AncientWispArmature/chest/Fire, Main")).GetComponent<ParticleSystemRenderer>()).material;
			modelPrefab.GetComponentInChildren<Renderer>().material = Assets.CreateMaterial("mat" + AssetName, 1f, Color.white, 1f);
			ParticleSystemRenderer[] componentsInChildren = modelPrefab.GetComponentsInChildren<ParticleSystemRenderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				((Renderer)componentsInChildren[i]).material = purpleFireMaterial;
			}
		}

		private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
		{
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)sender.inventory))
			{
				args.specialCooldownMultAdd -= 1f - Mathf.Pow(0.75f, (float)sender.inventory.GetItemCount(base.ItemDef.itemIndex));
			}
		}

		private void OnMainMenuInitialised()
		{
			MainMenuController.OnMainMenuInitialised -= OnMainMenuInitialised;
			InstallSkillsLanguage();
		}

		private void CleanScepter(CharacterBody self, GenericSkill slot = null, bool force = false)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			string bodyName = BodyCatalog.GetBodyName(self.bodyIndex);
			List<ScepterReplacer> source = scepterReplacers.FindAll((ScepterReplacer x) => x.bodyName == bodyName);
			if ((Object)(object)slot != (Object)null)
			{
				if (source.Any((ScepterReplacer r) => (Object)(object)r.upgradeDef == (Object)(object)slot.skillDef && (force || ((Object)(object)slot.baseSkill != (Object)(object)r.targetDef && !slot.skillOverrides.Any((SkillOverride s) => (Object)(object)r.targetDef == (Object)(object)s.skillDef)))))
				{
					slot.UnsetSkillOverride((object)self, slot.skillDef, (SkillOverridePriority)2);
				}
				return;
			}
			GenericSkill[] allSkills = self.skillLocator.allSkills;
			foreach (GenericSkill val in allSkills)
			{
				if (source.Any((ScepterReplacer r) => (Object)(object)r.upgradeDef == (Object)(object)slot.skillDef && (force || ((Object)(object)slot.baseSkill != (Object)(object)r.targetDef && !slot.skillOverrides.Any((SkillOverride s) => (Object)(object)r.targetDef == (Object)(object)s.skillDef)))))
				{
					val.UnsetSkillOverride((object)self, val.skillDef, (SkillOverridePriority)2);
				}
			}
		}

		private bool HandleScepterSkill(CharacterBody self, bool forceOff = false)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Invalid comparison between Unknown and I4
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_040a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0354: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			ScepterReplacer replVar;
			if (Object.op_Implicit((Object)(object)self.skillLocator) && self.master?.loadout != null)
			{
				string bodyName = BodyCatalog.GetBodyName(self.bodyIndex);
				List<ScepterReplacer> list = scepterReplacers.FindAll((ScepterReplacer x) => x.bodyName == bodyName);
				if (list.Count > 0)
				{
					if (list.Select((ScepterReplacer x) => x.upgradeDef).Intersect(self.skillLocator.allSkills.Select((GenericSkill x) => x.skillDef)).Any() && GetCount(self) > 0)
					{
						return true;
					}
					GenericSkill val = null;
					SkillSlot val2 = (SkillSlot)(-1);
					replVar = null;
					bool flag = false;
					foreach (ScepterReplacer replacement in list)
					{
						foreach (GenericSkill item in self.skillLocator.allSkills.Reverse().ToList().FindAll((GenericSkill s) => (Object)(object)s.skillDef == (Object)(object)replacement.targetDef || (Object)(object)s.baseSkill == (Object)(object)replacement.targetDef))
						{
							val = item;
							val2 = (((int)replacement.slotIndex == -1) ? self.skillLocator.FindSkillSlot(val) : replacement.slotIndex);
							if ((stridesInteractionMode != StridesInteractionMode.ScepterTakesPrecedence || bodyName == "HereticBody") && hasHeresyForSlot(val2) && (Object)(object)replacement.targetDef != (Object)(object)heresyDefs[val2])
							{
								flag = true;
								continue;
							}
							replVar = replacement;
							break;
						}
						if (replVar != null && Object.op_Implicit((Object)(object)val) && (Object)(object)replVar.targetDef == (Object)(object)val.skillDef)
						{
							break;
						}
					}
					if (replVar == null)
					{
						if (flag)
						{
							return stridesInteractionMode != StridesInteractionMode.ScepterRerolls;
						}
						return false;
					}
					bool flag2 = handlingOverride;
					handlingOverride = true;
					if (!forceOff && GetCount(self) > 0)
					{
						if (stridesInteractionMode == StridesInteractionMode.ScepterTakesPrecedence && hasHeresyForSlot(val2))
						{
							self.skillLocator.GetSkill(val2).UnsetSkillOverride((object)self, heresyDefs[val2], (SkillOverridePriority)3);
						}
						val.SetSkillOverride((object)self, replVar.upgradeDef, (SkillOverridePriority)2);
						val.onSkillChanged += UnsetOverrideLater;
					}
					else
					{
						val.UnsetSkillOverride((object)self, replVar.upgradeDef, (SkillOverridePriority)2);
						if (stridesInteractionMode == StridesInteractionMode.ScepterTakesPrecedence && hasHeresyForSlot(val2))
						{
							self.skillLocator.GetSkill(val2).SetSkillOverride((object)self, heresyDefs[val2], (SkillOverridePriority)3);
						}
					}
					handlingOverride = flag2;
					return true;
				}
			}
			return false;
			void UnsetOverrideLater(GenericSkill skill)
			{
				skill.onSkillChanged -= UnsetOverrideLater;
				skill.UnsetSkillOverride((object)self, replVar.upgradeDef, (SkillOverridePriority)2);
			}
			bool hasHeresyForSlot(SkillSlot skillSlot)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0016: Expected I4, but got Unknown
				return (int)skillSlot switch
				{
					0 => self.inventory.GetItemCount(Items.LunarPrimaryReplacement) > 0, 
					1 => self.inventory.GetItemCount(Items.LunarSecondaryReplacement) > 0, 
					2 => self.inventory.GetItemCount(Items.LunarUtilityReplacement) > 0, 
					3 => self.inventory.GetItemCount(Items.LunarSpecialReplacement) > 0, 
					_ => false, 
				};
			}
		}

		private void OnBodyInventoryChangedGlobal(CharacterBody body)
		{
			if (!handlingInventory)
			{
				handlingInventory = true;
				HandleScepterSkill(body);
				handlingInventory = false;
			}
		}

		private int OnGetDeployableSameSlotLimit(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Invalid comparison between Unknown and I4
			//IL_0037: 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)
			if ((int)slot == 1)
			{
				CharacterBody body = self.GetBody();
				if ((Object)(object)body != (Object)null)
				{
					return orig.Invoke(self, slot) + body.skillLocator.special.skillDef.baseMaxStock - 2;
				}
			}
			return orig.Invoke(self, slot);
		}

		private void OnSetSkillOverride(orig_SetSkillOverride orig, GenericSkill self, object source, SkillDef skillDef, SkillOverridePriority priority)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, source, skillDef, priority);
			if (!handlingOverride && Object.op_Implicit((Object)(object)self.characterBody))
			{
				handlingOverride = true;
				CleanScepter(self.characterBody, self);
				HandleScepterSkill(self.characterBody);
				handlingOverride = false;
			}
		}

		private void On_RunStartGlobal_UseOnce(Run run)
		{
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Invalid comparison between Unknown and I4
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			heresyDefs.Add((SkillSlot)0, CommonAssets.lunarPrimaryReplacementSkillDef);
			heresyDefs.Add((SkillSlot)1, CommonAssets.lunarSecondaryReplacementSkillDef);
			heresyDefs.Add((SkillSlot)2, CommonAssets.lunarUtilityReplacementSkillDef);
			heresyDefs.Add((SkillSlot)3, CommonAssets.lunarSpecialReplacementSkillDef);
			foreach (ScepterReplacer item in scepterReplacers.Where((ScepterReplacer x) => (Object)(object)x.targetDef == (Object)null))
			{
				GameObject obj = BodyCatalog.FindBodyPrefab(item.bodyName);
				SkillLocator val = ((obj != null) ? obj.GetComponent<SkillLocator>() : null);
				if (Object.op_Implicit((Object)(object)val) && (int)item.slotIndex != -1 && item.variantIndex >= 0)
				{
					Variant[] variants = val.GetSkill(item.slotIndex).skillFamily.variants;
					if (variants.Length <= item.variantIndex)
					{
						AncientScepterMain._logger.LogError((object)$"Invalid Scepter Replacement for body:{item.bodyName},slot:{item.slotIndex},with skill:{item.upgradeDef.skillNameToken}");
						item.targetDef = null;
					}
					else
					{
						item.targetDef = variants[item.variantIndex].skillDef;
					}
				}
			}
			Run.onRunStartGlobal -= On_RunStartGlobal_UseOnce;
		}

		private void OnTeleporterChargedGlobal(TeleporterInteraction teleporter)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//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_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_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//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_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_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			if (NetworkServer.active && ((Object)teleporter).name.StartsWith("LunarTeleporter"))
			{
				int participatingPlayerCount = Run.instance.participatingPlayerCount;
				PickupIndex val = PickupCatalog.FindPickupIndex(base.ItemDef.itemIndex);
				Vector3 position = teleporter.bossGroup.dropPosition.position;
				Vector3 val2 = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 2.5f);
				Quaternion val3 = Quaternion.AngleAxis(360f / (float)participatingPlayerCount, Vector3.up);
				while (participatingPlayerCount-- > 0)
				{
					PickupDropletController.CreatePickupDroplet(val, position, val2);
					val2 = val3 * val2;
				}
			}
		}
	}
	public abstract class ScepterSkill
	{
		public abstract SkillDef scepterSkillDef { get; protected set; }

		public abstract string newDescToken { get; protected set; }

		public abstract string oldDescToken { get; protected set; }

		public abstract string scepterSkillDesc { get; }

		public abstract string targetBody { get; }

		public abstract SkillSlot targetSlot { get; }

		public abstract int targetVariantIndex { get; }

		internal virtual void LoadBehavior()
		{
		}

		internal abstract void SetupAttributes();

		internal virtual void UnloadBehavior()
		{
		}

		protected bool IsScepterSkill(SkillLocator skillLocator)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)skillLocator))
			{
				return false;
			}
			GenericSkill skill = skillLocator.GetSkill(targetSlot);
			if (!Object.op_Implicit((Object)(object)skill))
			{
				return false;
			}
			return skill.skillDef.skillIndex == scepterSkillDef.skillIndex;
		}

		protected bool IsScepterSkill(GenericSkill genericSkill)
		{
			if (!Object.op_Implicit((Object)(object)genericSkill))
			{
				return false;
			}
			return genericSkill.skillDef.skillIndex == scepterSkillDef.skillIndex;
		}
	}
	[BepInPlugin("com.DestroyedClone.AncientScepter", "StandaloneAncientScepter", "10.0.1")]
	[BepInDependency("com.bepis.r2api", "5.1.5")]
	public class AncientScepterMain : BaseUnityPlugin
	{
		public const string ModVer = "10.0.1";

		public const string ModName = "StandaloneAncientScepter";

		public const string ModGuid = "com.DestroyedClone.AncientScepter";

		internal static ManualLogSource _logger = null;

		internal static ConfigFile _config = null;

		public List<ItemBase> Items = new List<ItemBase>();

		public static readonly Dictionary<ItemBase, bool> ItemStatusDictionary = new Dictionary<ItemBase, bool>();

		private void Awake()
		{
			_logger = ((BaseUnityPlugin)this).Logger;
			_config = ((BaseUnityPlugin)this).Config;
			ModCompat.Init();
			CustomDamageTypes.SetupDamageTypes();
			PerishSong.SetUp();
			Assets.PopulateAssets();
			Assets.SpriteAssets.InitializeAssets();
			foreach (Type item in from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(ItemBase))
				select type)
			{
				ItemBase itemBase = (ItemBase)Activator.CreateInstance(item);
				if (ValidateItem(itemBase, Items))
				{
					itemBase.Init(((BaseUnityPlugin)this).Config);
				}
			}
			Run.onRunStartGlobal += Run_onRunStartGlobal;
		}

		private void Run_onRunStartGlobal(Run run)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			ItemBase<AncientScepterItem>.instance.rng = new Xoroshiro128Plus(run.runRNG.nextUlong);
		}

		private bool ValidateItem(ItemBase item, List<ItemBase> itemList)
		{
			item.AIBlacklisted = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Blacklist Item from AI Use?", false, "Should the AI not be able to obtain this item?").Value;
			ItemStatusDictionary.Add(item, ((Behaviour)this).enabled);
			itemList.Add(item);
			return ((Behaviour)this).enabled;
		}
	}
	public static class Assets
	{
		public static class SpriteAssets
		{
			public static Sprite ArtificerFlameThrower2;

			public static Sprite ArtificerFlyUp2;

			public static Sprite Bandit2ResetRevolver2;

			public static Sprite Bandit2SkullRevolver2;

			public static Sprite CaptainAirstrike2;

			public static Sprite CaptainAirstrikeAlt2;

			public static Sprite CommandoBarrage2;

			public static Sprite CommandoGrenade2;

			public static Sprite CrocoDisease2;

			public static Sprite EngiTurret2;

			public static Sprite EngiWalker2;

			public static Sprite HereticNevermore2;

			public static Sprite HuntressBallista2;

			public static Sprite HuntressRain2;

			public static Sprite LoaderChargeFist2;

			public static Sprite LoaderChargeZapFist2;

			public static Sprite MercEvis2;

			public static Sprite MercEvis2Projectile;

			public static Sprite ToolbotDash2;

			public static Sprite TreebotFireFruitSeed2;

			public static Sprite TreebotFlower2_2;

			public static Sprite RailgunnerSupercharge2;

			public static Sprite RailgunnerFireSupercharge2;

			public static Sprite RailgunnerCryocharge2;

			public static Sprite RailgunnerFireCryocharge2;

			public static Sprite VoidFiendSuppress2;

			public static Sprite VoidFiendCorruptedSuppress2;

			public static void InitializeAssets()
			{
				ArtificerFlameThrower2 = mainAssetBundle.LoadAsset<Sprite>("texArtiR1");
				ArtificerFlyUp2 = mainAssetBundle.LoadAsset<Sprite>("texArtiR2");
				Bandit2ResetRevolver2 = mainAssetBundle.LoadAsset<Sprite>("texBanditR1");
				Bandit2SkullRevolver2 = mainAssetBundle.LoadAsset<Sprite>("texBanditR2");
				CaptainAirstrike2 = mainAssetBundle.LoadAsset<Sprite>("texCapU1");
				CaptainAirstrikeAlt2 = mainAssetBundle.LoadAsset<Sprite>("texCapU2");
				CommandoBarrage2 = mainAssetBundle.LoadAsset<Sprite>("texCommandoR1");
				CommandoGrenade2 = mainAssetBundle.LoadAsset<Sprite>("texCommandoR2");
				CrocoDisease2 = mainAssetBundle.LoadAsset<Sprite>("texAcridR1");
				EngiTurret2 = mainAssetBundle.LoadAsset<Sprite>("texEngiR1");
				EngiWalker2 = mainAssetBundle.LoadAsset<Sprite>("texEngiR2");
				HereticNevermore2 = mainAssetBundle.LoadAsset<Sprite>("texHereticR2");
				HuntressBallista2 = mainAssetBundle.LoadAsset<Sprite>("texHuntressR2");
				HuntressRain2 = mainAssetBundle.LoadAsset<Sprite>("texHuntressR1");
				LoaderChargeFist2 = mainAssetBundle.LoadAsset<Sprite>("texLoaderU1");
				LoaderChargeZapFist2 = mainAssetBundle.LoadAsset<Sprite>("texLoaderU2");
				MercEvis2 = mainAssetBundle.LoadAsset<Sprite>("texMercR1");
				MercEvis2Projectile = mainAssetBundle.LoadAsset<Sprite>("texMercR2");
				ToolbotDash2 = mainAssetBundle.LoadAsset<Sprite>("texMultU1");
				TreebotFireFruitSeed2 = mainAssetBundle.LoadAsset<Sprite>("texRexR2");
				TreebotFlower2_2 = mainAssetBundle.LoadAsset<Sprite>("texRexR1");
				RailgunnerSupercharge2 = mainAssetBundle.LoadAsset<Sprite>("texRailgunnerR1");
				RailgunnerFireSupercharge2 = mainAssetBundle.LoadAsset<Sprite>("texRailgunnerP1");
				RailgunnerCryocharge2 = mainAssetBundle.LoadAsset<Sprite>("texRailgunnerR2");
				RailgunnerFireCryocharge2 = mainAssetBundle.LoadAsset<Sprite>("texRailgunnerP2");
				VoidFiendSuppress2 = mainAssetBundle.LoadAsset<Sprite>("texVoidFiendR1");
				VoidFiendCorruptedSuppress2 = mainAssetBundle.LoadAsset<Sprite>("texVoidFiendR1C");
			}
		}

		internal static AssetBundle mainAssetBundle;

		public static Shader hotpoo = Resources.Load<Shader>("Shaders/Deferred/HGStandard");

		public static Material commandoMat;

		public static void PopulateAssets()
		{
			if ((Object)(object)mainAssetBundle == (Object)null)
			{
				using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("AncientScepter.ancientscepter"))
				{
					mainAssetBundle = AssetBundle.LoadFromStream(stream);
				}
			}
		}

		public static Material CreateMaterial(string materialName, float emission, Color emissionColor, float normalStrength)
		{
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)commandoMat))
			{
				commandoMat = Resources.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial;
			}
			Material val = Object.Instantiate<Material>(commandoMat);
			Material val2 = mainAssetBundle.LoadAsset<Material>(materialName);
			if (!Object.op_Implicit((Object)(object)val2))
			{
				return commandoMat;
			}
			((Object)val).name = materialName;
			val.SetColor("_Color", val2.GetColor("_Color"));
			val.SetTexture("_MainTex", val2.GetTexture("_MainTex"));
			val.SetColor("_EmColor", emissionColor);
			val.SetFloat("_EmPower", emission);
			val.SetTexture("_EmTex", val2.GetTexture("_EmissionMap"));
			val.SetFloat("_NormalStrength", normalStrength);
			return val;
		}

		public static Material CreateMaterial(string materialName)
		{
			return CreateMaterial(materialName, 0f);
		}

		public static Material CreateMaterial(string materialName, float emission)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return CreateMaterial(materialName, emission, Color.black);
		}

		public static Material CreateMaterial(string materialName, float emission, Color emissionColor)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return CreateMaterial(materialName, emission, emissionColor, 0f);
		}

		public static RendererInfo[] SetupRendererInfos(GameObject obj)
		{
			//IL_0018: 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_0047: 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)
			Renderer[] componentsInChildren = obj.GetComponentsInChildren<Renderer>();
			RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[componentsInChildren.Length];
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				array[i] = new RendererInfo
				{
					defaultMaterial = componentsInChildren[i].material,
					renderer = componentsInChildren[i],
					defaultShadowCastingMode = (ShadowCastingMode)1,
					ignoreOverlays = false
				};
			}
			return array;
		}
	}
	public class BanditRicochetOrb : Orb
	{
		public delegate void HitCallback(BanditRicochetOrb orb);

		public const float DamageCoefficientPerBounce = 0.9f;

		public const float BaseRicochetChance = 25f;

		public const float StackRicochetChance = 0.1f;

		public const float Range = 25f;

		public const int Bounces = 5;

		public bool isCrit;

		public bool resetBouncedObjectsPerBounce;

		public CharacterBody attackerBody;

		public DamageColorIndex damageColorIndex;

		public DamageType damageType;

		public float damageValue;

		public float procCoefficient = 1f;

		public float range;

		public float speed = 60f;

		public GameObject hitEffectPrefab;

		public GameObject inflictor;

		public GameObject tracerEffectPrefab;

		public HitCallback hitCallback;

		public int bouncesRemaining;

		public List<HealthComponent> bouncedObjects;

		public ProcChainMask procChainMask;

		public string hitSoundString;

		public TeamIndex teamIndex;

		private static readonly BullseyeSearch _search = new BullseyeSearch
		{
			sortMode = (SortMode)1,
			filterByLoS = false,
			searchDirection = Vector3.zero
		};

		public static bool RollNextRicochet(CharacterBody characterBody, float chanceCoefficient = 1f)
		{
			if (!Object.op_Implicit((Object)(object)characterBody))
			{
				return false;
			}
			int buffCount = characterBody.GetBuffCount(Buffs.BanditSkull);
			return Util.CheckRoll((25f + 0.1f * (float)buffCount) * chanceCoefficient, 0f, (CharacterMaster)null);
		}

		public override void OnArrival()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: 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_00ab: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: 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)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Expected O, but got Unknown
			//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_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Expected O, but got Unknown
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			((Orb)this).OnArrival();
			if (Object.op_Implicit((Object)(object)base.target))
			{
				HealthComponent healthComponent = base.target.healthComponent;
				if (Object.op_Implicit((Object)(object)healthComponent))
				{
					DamageInfo val = new DamageInfo
					{
						damage = damageValue,
						attacker = (Object.op_Implicit((Object)(object)attackerBody) ? ((Component)attackerBody).gameObject : null),
						inflictor = inflictor,
						force = Vector3.zero,
						crit = isCrit,
						procChainMask = procChainMask,
						procCoefficient = procCoefficient,
						position = ((Component)base.target).transform.position,
						damageColorIndex = damageColorIndex,
						damageType = DamageTypeCombo.op_Implicit(damageType)
					};
					healthComponent.TakeDamage(val);
					GlobalEventManager.instance.OnHitEnemy(val, ((Component)healthComponent).gameObject);
					GlobalEventManager.instance.OnHitAll(val, ((Component)healthComponent).gameObject);
					if (Object.op_Implicit((Object)(object)tracerEffectPrefab))
					{
						EffectManager.SpawnEffect(tracerEffectPrefab, new EffectData
						{
							origin = ((Component)base.target).transform.position,
							start = base.origin
						}, true);
					}
				}
				hitCallback?.Invoke(this);
				if (bouncesRemaining > 0 && RollNextRicochet(attackerBody))
				{
					if (resetBouncedObjectsPerBounce)
					{
						bouncedObjects.Clear();
						bouncedObjects.Add(base.target.healthComponent);
					}
					if (Object.op_Implicit((Object)(object)(base.target = PickNextTarget(((Component)base.target).transform.position))))
					{
						bouncesRemaining--;
						OrbManager.instance.AddOrb((Orb)(object)this);
						return;
					}
				}
			}
			bouncedObjects.Clear();
		}

		public override void Begin()
		{
			((Orb)this).Begin();
			((Orb)this).duration = ((Orb)this).distanceToTarget / speed;
		}

		public HurtBox PickNextTarget(Vector3 position)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: 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_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)
			_search.searchOrigin = position;
			_search.teamMaskFilter = TeamMask.GetEnemyTeams(teamIndex);
			_search.maxDistanceFilter = range;
			_search.RefreshCandidates();
			HurtBox val = (from h in _search.GetResults()
				where !bouncedObjects.Contains(h.healthComponent)
				select h).FirstOrDefault();
			if (Object.op_Implicit((Object)(object)val))
			{
				bouncedObjects.Add(val.healthComponent);
			}
			return val;
		}
	}
	internal static class CustomDamageTypes
	{
		internal static ModdedDamageType BanditRicochetOnHit;

		internal static ModdedDamageType ScepterCaptainNukeDT;

		internal static ModdedDamageType ScepterDestroy20ArmorDT;

		internal static ModdedDamageType IceBlastOnHit;

		internal static ModdedDamageType ScepterFruitDT;

		internal static void SetupDamageTypes()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: 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_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_0023: 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)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			BanditRicochetOnHit = DamageAPI.ReserveDamageType();
			ScepterCaptainNukeDT = DamageAPI.ReserveDamageType();
			ScepterDestroy20ArmorDT = DamageAPI.ReserveDamageType();
			IceBlastOnHit = DamageAPI.ReserveDamageType();
			ScepterFruitDT = DamageAPI.ReserveDamageType();
		}
	}
	public abstract class ItemBase<T> : ItemBase where T : ItemBase<T>
	{
		public static T instance { get; private set; }

		public ItemBase()
		{
			if (instance != null)
			{
				throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting ItemBoilerplate/Item was instantiated twice");
			}
			instance = this as T;
		}
	}
	public abstract class ItemBase
	{
		public static GameObject displayPrefab;

		protected readonly List<LanguageOverlay> languageOverlays = new List<LanguageOverlay>();

		public virtual bool AIBlacklisted { get; set; }

		public virtual bool CanRemove { get; } = true;


		public ItemDef ItemDef { get; private set; }

		public abstract GameObject ItemDisplayPrefab { get; }

		public abstract string ItemFullDescription { get; }

		public abstract Sprite ItemIcon { get; }

		public abstract string ItemLangTokenName { get; }

		public abstract string ItemLore { get; }

		public abstract GameObject ItemModel { get; }

		public abstract string ItemName { get; }

		public abstract string ItemPickupDesc { get; }

		public abstract ItemTag[] ItemTags { get; }

		public bool languageInstalled { get; private set; }

		public Xoroshiro128Plus rng { get; internal set; }

		public abstract ItemTier Tier { get; }

		public virtual bool TILER2_MimicBlacklisted { get; set; }

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void TILER2_BlacklistItem(ItemDef itemDef)
		{
		}

		public virtual void CreateConfig(ConfigFile config)
		{
		}

		public virtual ItemDisplayRuleDict CreateDisplayRules()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Expected O, but got Unknown
			return new ItemDisplayRuleDict(Array.Empty<ItemDisplayRule>());
		}

		public int GetCount(CharacterBody body)
		{
			Inventory val = (Object.op_Implicit((Object)(object)body) ? body.inventory : null);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return 0;
			}
			return val.GetItemCount(ItemDef);
		}

		public int GetCount(CharacterMaster master)
		{
			Inventory val = (Object.op_Implicit((Object)(object)master) ? master.inventory : null);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return 0;
			}
			return val.GetItemCount(ItemDef);
		}

		public int GetCountSpecific(CharacterBody body, ItemDef itemDef)
		{
			Inventory val = (Object.op_Implicit((Object)(object)body) ? body.inventory : null);
			if (!Object.op_Implicit((Object)(object)val))
			{
				return 0;
			}
			return val.GetItemCount(itemDef);
		}

		public virtual void Hooks()
		{
		}

		public abstract void Init(ConfigFile config);

		protected void CreateItem()
		{
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Expected O, but got Unknown
			ItemDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)ItemDef).name = "ITEM_" + ItemLangTokenName;
			ItemDef.nameToken = "ITEM_" + ItemLangTokenName + "_NAME";
			ItemDef.pickupToken = "ITEM_" + ItemLangTokenName + "_PICKUP";
			ItemDef.descriptionToken = "ITEM_" + ItemLangTokenName + "_DESCRIPTION";
			ItemDef.loreToken = "ITEM_" + ItemLangTokenName + "_LORE";
			ItemDef.pickupModelPrefab = ItemModel;
			ItemDef.pickupIconSprite = ItemIcon;
			ItemDef.hidden = false;
			ItemDef.tags = ItemTags;
			ItemDef.canRemove = CanRemove;
			ItemDef.tier = Tier;
			ItemDef.deprecatedTier = Tier;
			if (TILER2_MimicBlacklisted && Chainloader.PluginInfos.ContainsKey("com.ThinkInvisible.TILER2"))
			{
				TILER2_BlacklistItem(ItemDef);
			}
			ItemAPI.Add(new CustomItem(ItemDef, CreateDisplayRules()));
		}

		protected void CreateLang()
		{
			if (!languageInstalled)
			{
				LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_NAME", ItemName);
				LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_PICKUP", ItemPickupDesc);
				LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_DESCRIPTION", ItemFullDescription);
				LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_LORE", ItemLore);
				languageInstalled = true;
			}
		}

		protected virtual void SetupMaterials(GameObject modelPrefab)
		{
			Renderer[] componentsInChildren = modelPrefab.GetComponentsInChildren<Renderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				componentsInChildren[i].material.shader = Assets.hotpoo;
			}
		}
	}
	internal class ItemHelpers
	{
		public static RendererInfo[] ItemDisplaySetup(GameObject obj)
		{
			//IL_0018: 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_0047: 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)
			MeshRenderer[] componentsInChildren = obj.GetComponentsInChildren<MeshRenderer>();
			RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[componentsInChildren.Length];
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				array[i] = new RendererInfo
				{
					defaultMaterial = ((Renderer)componentsInChildren[i]).material,
					renderer = (Renderer)(object)componentsInChildren[i],
					defaultShadowCastingMode = (ShadowCastingMode)1,
					ignoreOverlays = false
				};
			}
			return array;
		}

		public static KeyAssetRuleGroup CreateGenericDisplayRuleGroup(Object keyAsset_, GameObject itemPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			ItemDisplayRule val = CreateDisplayRule(itemPrefab, childName, position, rotation, scale);
			return CreateDisplayRuleGroupWithRules(keyAsset_, val);
		}

		public static ItemDisplayRule CreateDisplayRule(GameObject itemPrefab, string childName, Vector3 position, Vector3 rotation, Vector3 scale)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: 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_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			ItemDisplayRule result = default(ItemDisplayRule);
			result.ruleType = (ItemDisplayRuleType)0;
			result.childName = childName;
			result.followerPrefab = itemPrefab;
			result.limbMask = (LimbFlags)0;
			result.localPos = position;
			result.localAngles = rotation;
			result.localScale = scale;
			return result;
		}

		public static KeyAssetRuleGroup CreateDisplayRuleGroupWithRules(Object keyAsset_, params ItemDisplayRule[] rules)
		{
			//IL_0002: 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_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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)
			KeyAssetRuleGroup result = default(KeyAssetRuleGroup);
			result.keyAsset = keyAsset_;
			result.displayRuleGroup = new DisplayRuleGroup
			{
				rules = rules
			};
			return result;
		}

		public static string OrderManifestLoreFormatter(string deviceName, string estimatedDelivery, string sentTo, string trackingNumber, string devicePickupDesc, string shippingMethod, string orderDetails)
		{
			string[] value = new string[19]
			{
				"<align=left>Estimated Delivery:<indent=70%>Sent To:</indent></align>",
				"<align=left>" + estimatedDelivery + "<indent=70%>" + sentTo + "</indent></align>",
				"",
				"<indent=1%><style=cIsDamage><size=125%><u>  Shipping Details:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0</u></size></style></indent>",
				"",
				"<indent=2%>-Order: <style=cIsUtility>" + deviceName + "</style></indent>",
				"<indent=4%><style=cStack>Tracking Number:  " + trackingNumber + "</style></indent>",
				"",
				"<indent=2%>-Order Description: " + devicePickupDesc + "</indent>",
				"",
				"<indent=2%>-Shipping Method: <style=cIsHealth>" + shippingMethod + "</style></indent>",
				"",
				"",
				"",
				"<indent=2%>-Order Details: " + orderDetails + "</indent>",
				"",
				"",
				"",
				"<style=cStack>Delivery being brought to you by the brand new </style><style=cIsUtility>Orbital Drop-Crate System (TM)</style>. <style=cStack><u>No refunds.</u></style>"
			};
			return string.Join("\n", value);
		}
	}
	public static class MiscUtil
	{
		public class FilingDictionary<T> : IEnumerable<T>, IEnumerable
		{
			private readonly Dictionary<Type, T> _dict = new Dictionary<Type, T>();

			public int Count => _dict.Count;

			public void Add(T inst)
			{
				_dict.Add(inst.GetType(), inst);
			}

			public void Add<subT>(subT inst) where subT : T
			{
				_dict.Add(typeof(subT), (T)(object)inst);
			}

			public void Set<subT>(subT inst) where subT : T
			{
				_dict[typeof(subT)] = (T)(object)inst;
			}

			public subT Get<subT>() where subT : T
			{
				return (subT)(object)_dict[typeof(subT)];
			}

			public void Remove(T inst)
			{
				_dict.Remove(inst.GetType());
			}

			public void RemoveWhere(Func<T, bool> predicate)
			{
				foreach (T item in _dict.Values.Where(predicate).ToList())
				{
					_dict.Remove(item.GetType());
				}
			}

			public IEnumerator<T> GetEnumerator()
			{
				return _dict.Values.GetEnumerator();
			}

			IEnumerator IEnumerable.GetEnumerator()
			{
				return GetEnumerator();
			}

			public ReadOnlyFilingDictionary<T> AsReadOnly()
			{
				return new ReadOnlyFilingDictionary<T>(this);
			}
		}

		public class ReadOnlyFilingDictionary<T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
		{
			private readonly FilingDictionary<T> baseCollection;

			public int Count => baseCollection.Count;

			public ReadOnlyFilingDictionary(FilingDictionary<T> baseCollection)
			{
				this.baseCollection = baseCollection;
				base..ctor();
			}

			public IEnumerator<T> GetEnumerator()
			{
				return baseCollection.GetEnumerator();
			}

			IEnumerator IEnumerable.GetEnumerator()
			{
				return baseCollection.GetEnumerator();
			}
		}

		public static List<CharacterMaster> AliveList(bool playersOnly = false)
		{
			if (playersOnly)
			{
				return (from x in PlayerCharacterMasterController.instances
					where x.isConnected && Object.op_Implicit((Object)(object)x.master) && x.master.hasBody && x.master.GetBody().healthComponent.alive
					select x.master).ToList();
			}
			return CharacterMaster.readOnlyInstancesList.Where((CharacterMaster x) => x.hasBody && x.GetBody().healthComponent.alive).ToList();
		}

		public static void SpawnItemFromBody(CharacterBody src, int tier, Xoroshiro128Plus rng)
		{
			//IL_0094: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
			List<PickupIndex> list = tier switch
			{
				0 => Run.instance.availableTier1DropList, 
				1 => Run.instance.availableTier2DropList, 
				2 => Run.instance.availableTier3DropList, 
				3 => Run.instance.availableLunarItemDropList, 
				4 => Run.instance.availableEquipmentDropList, 
				5 => Run.instance.availableLunarEquipmentDropList, 
				_ => throw new ArgumentOutOfRangeException("tier", tier, "spawnItemFromBody: Item tier must be between 0 and 5 inclusive"), 
			};
			PickupDropletController.CreatePickupDroplet(list[rng.RangeInt(0, list.Count)], src.transform.position, new Vector3(Random.Range(-5f, 5f), 20f, Random.Range(-5f, 5f)));
		}
	}
	public class ModCompat
	{
		internal static bool compatBetterUI;

		public static void Init()
		{
			Chainloader.PluginInfos.ContainsKey("com.xoxfaby.BetterUI");
		}

		public static void BetterUICompatInit()
		{
			compatBetterUI = true;
		}
	}
	public static class SkillUtil
	{
		public static void GlobalUpdateSkillDef(SkillDef targetDef)
		{
			MiscUtil.AliveList().ForEach(delegate(CharacterMaster cb)
			{
				if (cb.hasBody)
				{
					SkillLocator skillLocator = cb.GetBody().skillLocator;
					if (!((Object)(object)skillLocator == (Object)null))
					{
						for (int i = 0; i < skillLocator.skillSlotCount; i++)
						{
							GenericSkill skillAtIndex = skillLocator.GetSkillAtIndex(i);
							if ((Object)(object)skillAtIndex.skillDef == (Object)(object)targetDef)
							{
								skillAtIndex.RecalculateValues();
							}
						}
					}
				}
			});
		}

		public static SkillFamily FindSkillFamilyFromBody(string bodyName, int slotIndex)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			BodyIndex val = BodyCatalog.FindBodyIndex(bodyName);
			if ((int)val == -1)
			{
				AncientScepterMain._logger.LogError((object)("FindSkillFamilyFromBody: Couldn't find body with name " + bodyName));
				return null;
			}
			GenericSkill[] bodyPrefabSkillSlots = BodyCatalog.GetBodyPrefabSkillSlots(val);
			if (slotIndex < 0 || slotIndex > bodyPrefabSkillSlots.Length)
			{
				AncientScepterMain._logger.LogError((object)$"FindSkillFamilyFromBody: Skill slot index {slotIndex} is invalid for body with name {bodyName}");
				return null;
			}
			return BodyCatalog.GetBodyPrefabSkillSlots(val)[slotIndex].skillFamily;
		}

		public static SkillFamily FindSkillFamilyFromBody(string bodyName, SkillSlot slot)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: 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_008a: Unknown result type (might be due to invalid IL or missing references)
			BodyIndex val = BodyCatalog.FindBodyIndex(bodyName);
			if ((int)val == -1)
			{
				AncientScepterMain._logger.LogError((object)("FindSkillFamilyFromBody: Couldn't find body with name " + bodyName));
				return null;
			}
			SkillLocator componentInChildren = BodyCatalog.GetBodyPrefab(val).GetComponentInChildren<SkillLocator>();
			if (!Object.op_Implicit((Object)(object)componentInChildren))
			{
				AncientScepterMain._logger.LogError((object)("FindSkillFamilyFromBody: Body with name " + bodyName + " has no SkillLocator"));
				return null;
			}
			GenericSkill[] bodyPrefabSkillSlots = BodyCatalog.GetBodyPrefabSkillSlots(val);
			foreach (GenericSkill val2 in bodyPrefabSkillSlots)
			{
				if (componentInChildren.FindSkillSlot(val2) == slot)
				{
					return val2.skillFamily;
				}
			}
			AncientScepterMain._logger.LogError((object)$"FindSkillFamilyFromBody: Body with name {bodyName} has no skill in slot {slot}");
			return null;
		}

		public static void ReplaceVariant(this SkillFamily targetFamily, SkillDef origDef, SkillDef newDef)
		{
			int num = Array.FindIndex(targetFamily.variants, (Variant x) => (Object)(object)x.skillDef == (Object)(object)origDef);
			if (num < 0)
			{
				AncientScepterMain._logger.LogError((object)$"SkillFamily.OverrideVariant: couldn't find target skilldef {origDef} in family {targetFamily}");
			}
			else
			{
				targetFamily.variants[num].skillDef = newDef;
			}
		}

		public static void ReplaceVariant(string targetBodyName, int targetSlot, SkillDef origDef, SkillDef newDef)
		{
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.ReplaceVariant(origDef, newDef);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to OverrideVariant for bodyname+slot (target not found)");
			}
		}

		public static void ReplaceVariant(string targetBodyName, SkillSlot targetSlot, SkillDef origDef, SkillDef newDef)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.ReplaceVariant(origDef, newDef);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to OverrideVariant for bodyname+slotname (target not found)");
			}
		}

		[Obsolete]
		public static void AddVariant(this SkillFamily targetFamily, SkillDef newDef, string unlockableName = "")
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			Array.Resize(ref targetFamily.variants, targetFamily.variants.Length + 1);
			Variant[] variants = targetFamily.variants;
			int num = targetFamily.variants.Length - 1;
			Variant val = new Variant
			{
				skillDef = newDef
			};
			((Variant)(ref val)).viewableNode = new Node(newDef.skillNameToken, false, (Node)null);
			val.unlockableName = unlockableName;
			variants[num] = val;
		}

		public static void AddVariant(this SkillFamily targetFamily, SkillDef newDef, UnlockableDef unlockableDef = null)
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			Array.Resize(ref targetFamily.variants, targetFamily.variants.Length + 1);
			Variant[] variants = targetFamily.variants;
			int num = targetFamily.variants.Length - 1;
			Variant val = new Variant
			{
				skillDef = newDef
			};
			((Variant)(ref val)).viewableNode = new Node(newDef.skillNameToken, false, (Node)null);
			val.unlockableDef = unlockableDef;
			variants[num] = val;
		}

		public static void AddVariant(string targetBodyName, int targetSlot, SkillDef newDef, string unlockableName = "")
		{
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.AddVariant(newDef, unlockableName);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to AddVariant for bodyname+slot (target not found)");
			}
		}

		public static void AddVariant(string targetBodyName, SkillSlot targetSlot, SkillDef newDef, string unlockableName = "")
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.AddVariant(newDef, unlockableName);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to AddVariant for bodyname+slotname (target not found)");
			}
		}

		public static void RemoveVariant(this SkillFamily targetFamily, SkillDef targetDef)
		{
			List<Variant> list = new List<Variant>(targetFamily.variants);
			int count = list.Count;
			list.RemoveAll((Variant x) => (Object)(object)x.skillDef == (Object)(object)targetDef);
			if (list.Count - count == 0)
			{
				AncientScepterMain._logger.LogError((object)$"SkillFamily.RemoveVariant: Couldn't find SkillDef {targetDef} for removal from SkillFamily {targetFamily}");
			}
			targetFamily.variants = list.ToArray();
		}

		public static void RemoveVariant(string targetBodyName, int targetSlot, SkillDef targetDef)
		{
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.RemoveVariant(targetDef);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to RemoveVariant for bodyname+slot (target not found)");
			}
		}

		public static void RemoveVariant(string targetBodyName, SkillSlot targetSlot, SkillDef targetDef)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			SkillFamily val = FindSkillFamilyFromBody(targetBodyName, targetSlot);
			if ((Object)(object)val != (Object)null)
			{
				val.RemoveVariant(targetDef);
			}
			else
			{
				AncientScepterMain._logger.LogError((object)"Failed to RemoveVariant for bodyname+slotname (target not found)");
			}
		}

		public static SkillDef CloneSkillDef(SkillDef oldDef)
		{
			//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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			SkillDef obj = ScriptableObject.CreateInstance<SkillDef>();
			obj.skillName = oldDef.skillName;
			obj.skillNameToken = oldDef.skillNameToken;
			obj.skillDescriptionToken = oldDef.skillDescriptionToken;
			obj.icon = oldDef.icon;
			obj.activationStateMachineName = oldDef.activationStateMachineName;
			obj.activationState = oldDef.activationState;
			obj.interruptPriority = oldDef.interruptPriority;
			obj.baseRechargeInterval = oldDef.baseRechargeInterval;
			obj.baseMaxStock = oldDef.baseMaxStock;
			obj.rechargeStock = oldDef.rechargeStock;
			obj.requiredStock = oldDef.requiredStock;
			obj.stockToConsume = oldDef.stockToConsume;
			obj.beginSkillCooldownOnSkillEnd = oldDef.beginSkillCooldownOnSkillEnd;
			obj.fullRestockOnAssign = oldDef.fullRestockOnAssign;
			obj.dontAllowPastMaxStocks = oldDef.dontAllowPastMaxStocks;
			obj.resetCooldownTimerOnUse = oldDef.resetCooldownTimerOnUse;
			obj.isCombatSkill = oldDef.isCombatSkill;
			obj.cancelSprintingOnActivation = oldDef.cancelSprintingOnActivation;
			obj.canceledFromSprinting = oldDef.canceledFromSprinting;
			obj.forceSprintDuringState = oldDef.forceSprintDuringState;
			obj.mustKeyPress = oldDef.mustKeyPress;
			obj.keywordTokens = oldDef.keywordTokens;
			return obj;
		}

		public static RailgunSkillDef CloneSkillDef(RailgunSkillDef oldDef)
		{
			//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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			RailgunSkillDef obj = ScriptableObject.CreateInstance<RailgunSkillDef>();
			((SkillDef)obj).skillName = ((SkillDef)oldDef).skillName;
			((SkillDef)obj).skillNameToken = ((SkillDef)oldDef).skillNameToken;
			((SkillDef)obj).skillDescriptionToken = ((SkillDef)oldDef).skillDescriptionToken;
			((SkillDef)obj).icon = ((SkillDef)oldDef).icon;
			((SkillDef)obj).activationStateMachineName = ((SkillDef)oldDef).activationStateMachineName;
			((SkillDef)obj).activationState = ((SkillDef)oldDef).activationState;
			((SkillDef)obj).interruptPriority = ((SkillDef)oldDef).interruptPriority;
			((SkillDef)obj).baseRechargeInterval = ((SkillDef)oldDef).baseRechargeInterval;
			((SkillDef)obj).baseMaxStock = ((SkillDef)oldDef).baseMaxStock;
			((SkillDef)obj).rechargeStock = ((SkillDef)oldDef).rechargeStock;
			((SkillDef)obj).requiredStock = ((SkillDef)oldDef).requiredStock;
			((SkillDef)obj).stockToConsume = ((SkillDef)oldDef).stockToConsume;
			((SkillDef)obj).beginSkillCooldownOnSkillEnd = ((SkillDef)oldDef).beginSkillCooldownOnSkillEnd;
			((SkillDef)obj).fullRestockOnAssign = ((SkillDef)oldDef).fullRestockOnAssign;
			((SkillDef)obj).dontAllowPastMaxStocks = ((SkillDef)oldDef).dontAllowPastMaxStocks;
			((SkillDef)obj).resetCooldownTimerOnUse = ((SkillDef)oldDef).resetCooldownTimerOnUse;
			((SkillDef)obj).isCombatSkill = ((SkillDef)oldDef).isCombatSkill;
			((SkillDef)obj).cancelSprintingOnActivation = ((SkillDef)oldDef).cancelSprintingOnActivation;
			((SkillDef)obj).canceledFromSprinting = ((SkillDef)oldDef).canceledFromSprinting;
			((SkillDef)obj).forceSprintDuringState = ((SkillDef)oldDef).forceSprintDuringState;
			((SkillDef)obj).mustKeyPress = ((SkillDef)oldDef).mustKeyPress;
			((SkillDef)obj).keywordTokens = ((SkillDef)oldDef).keywordTokens;
			obj.restockOnReload = oldDef.restockOnReload;
			obj.offlineIcon = oldDef.offlineIcon;
			return obj;
		}

		public static VoidSurvivorSkillDef CloneSkillDef(VoidSurvivorSkillDef oldDef)
		{
			//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_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			VoidSurvivorSkillDef obj = ScriptableObject.CreateInstance<VoidSurvivorSkillDef>();
			((SkillDef)obj).skillName = ((SkillDef)oldDef).skillName;
			((SkillDef)obj).skillNameToken = ((SkillDef)oldDef).skillNameToken;
			((SkillDef)obj).skillDescriptionToken = ((SkillDef)oldDef).skillDescriptionToken;
			((SkillDef)obj).icon = ((SkillDef)oldDef).icon;
			((SkillDef)obj).activationStateMachineName = ((SkillDef)oldDef).activationStateMachineName;
			((SkillDef)obj).activationState = ((SkillDef)oldDef).activationState;
			((SkillDef)obj).interruptPriority = ((SkillDef)oldDef).interruptPriority;
			((SkillDef)obj).baseRechargeInterval = ((SkillDef)oldDef).baseRechargeInterval;
			((SkillDef)obj).baseMaxStock = ((SkillDef)oldDef).baseMaxStock;
			((SkillDef)obj).rechargeStock = ((SkillDef)oldDef).rechargeStock;
			((SkillDef)obj).requiredStock = ((SkillDef)oldDef).requiredStock;
			((SkillDef)obj).stockToConsume = ((SkillDef)oldDef).stockToConsume;
			((SkillDef)obj).beginSkillCooldownOnSkillEnd = ((SkillDef)oldDef).beginSkillCooldownOnSkillEnd;
			((SkillDef)obj).fullRestockOnAssign = ((SkillDef)oldDef).fullRestockOnAssign;
			((SkillDef)obj).dontAllowPastMaxStocks = ((SkillDef)oldDef).dontAllowPastMaxStocks;
			((SkillDef)obj).resetCooldownTimerOnUse = ((SkillDef)oldDef).resetCooldownTimerOnUse;
			((SkillDef)obj).isCombatSkill = ((SkillDef)oldDef).isCombatSkill;
			((SkillDef)obj).cancelSprintingOnActivation = ((SkillDef)oldDef).cancelSprintingOnActivation;
			((SkillDef)obj).canceledFromSprinting = ((SkillDef)oldDef).canceledFromSprinting;
			((SkillDef)obj).forceSprintDuringState = ((SkillDef)oldDef).forceSprintDuringState;
			((SkillDef)obj).mustKeyPress = ((SkillDef)oldDef).mustKeyPress;
			((SkillDef)obj).keywordTokens = ((SkillDef)oldDef).keywordTokens;
			obj.minimumCorruption = oldDef.minimumCorruption;
			obj.maximumCorruption = oldDef.maximumCorruption;
			return obj;
		}
	}
}
namespace AncientScepter.ScepterSkills
{
	public class ArtificerFlamethrower2 : ScepterSkill
	{
		public const float FireCloudLifetime = 10f;

		public GameObject fireCloud { get; private set; }

		public override SkillDef scepterSkillDef { get; protected set; }

		public override string newDescToken { get; protected set; }

		public override string oldDescToken { get; protected set; }

		public override string scepterSkillDesc => StringExtensions.ToScepterDesc("火焰喷射距离增加" + StringExtensions.ToUtil<string>(StringExtensions.ToBaseAndStkPct<int>(1, "(每层+_)")) + ",击中时留下持续" + StringExtensions.ToUtil<float>(10f) + "秒的" + StringExtensions.ToFire("灼热火云") + ",每秒合计造成100%的伤害。");

		public override string targetBody => "MageBody";

		public override SkillSlot targetSlot => (SkillSlot)3;

		public override int targetVariantIndex => 0;

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		internal void doBetterUI()
		{
		}

		internal override void LoadBehavior()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected O, but got Unknown
			Flamethrower.OnEnter += new hook_OnEnter(Flamethrower_OnEnter);
			Flamethrower.FireGauntlet += new Manipulator(IL_FlamethrowerFireGauntlet);
		}

		internal override void SetupAttributes()
		{
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0256: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Unknown result type (might be due to invalid IL or missing references)
			//IL_027b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ff: Unknown result type (might be due to invalid IL or missing references)
			SkillDef val = LegacyResourcesAPI.Load<SkillDef>("SkillDefs/MageBody/MageBodyFlamethrower");
			scepterSkillDef = SkillUtil.CloneSkillDef(val);
			string text = "ANCIENTSCEPTER_MAGE_FLAMETHROWERNAME";
			newDescToken = "ANCIENTSCEPTER_MAGE_FLAMETHROWERDESC";
			oldDescToken = val.skillDescriptionToken;
			string text2 = "龙息";
			LanguageAPI.Add(text, text2);
			scepterSkillDef.skillName = val.skillName + "Scepter";
			((Object)scepterSkillDef).name = scepterSkillDef.skillName;
			scepterSkillDef.skillNameToken = text;
			scepterSkillDef.skillDescriptionToken = newDescToken;
			scepterSkillDef.fullRestockOnAssign = false;
			scepterSkillDef.icon = Assets.SpriteAssets.ArtificerFlameThrower2;
			ContentAddition.AddSkillDef(scepterSkillDef);
			fireCloud = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/projectiles/BeetleQueenAcid"), "AncientScepterMageFlamethrowerCloud");
			ProjectileDotZone component = fireCloud.GetComponent<ProjectileDotZone>();
			component.lifetime = 10f;
			component.impactEffect = null;
			component.fireFrequency = 2f;
			Transform val2 = fireCloud.transform.Find("FX");
			Object.Destroy((Object)(object)((Component)val2.Find("Spittle")).gameObject);
			Object.Destroy((Object)(object)((Component)val2.Find("Decal")).gameObject);
			Object.Destroy((Object)(object)((Component)val2.Find("Gas")).gameObject);
			GameObjectExtensions.RemoveComponents<AnimateShaderAlpha>(((Component)val2).gameObject);
			GameObject obj = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/FireTrail").GetComponent<DamageTrail>().segmentPrefab, val2);
			MainModule main = obj.GetComponent<ParticleSystem>().main;
			((MainModule)(ref main)).duration = 10f;
			((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(-0.05f);
			MinMaxCurve startSizeX = ((MainModule)(ref main)).startSizeX;
			((MinMaxCurve)(ref startSizeX)).constantMin = ((MinMaxCurve)(ref startSizeX)).constantMin * 0.75f;
			((MinMaxCurve)(ref startSizeX)).constantMax = ((MinMaxCurve)(ref startSizeX)).constantMax * 0.75f;
			MinMaxCurve startSizeY = 

plugins/BTP.RoR2Plugin.Tweaks.dll

Decompiled 3 weeks ago
using System;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using BTP.RoR2Plugin.Buffs;
using BTP.RoR2Plugin.Difficulities;
using BTP.RoR2Plugin.Items;
using BTP.RoR2Plugin.Language;
using BTP.RoR2Plugin.Messages;
using BTP.RoR2Plugin.Pools;
using BTP.RoR2Plugin.Pools.OrbPools;
using BTP.RoR2Plugin.Pools.ProjectilePools;
using BTP.RoR2Plugin.RoR2Indexes;
using BTP.RoR2Plugin.Skills;
using BTP.RoR2Plugin.Tweaks;
using BTP.RoR2Plugin.Tweaks.ItemTweaks;
using BTP.RoR2Plugin.Tweaks.MithrixTweaks.MithrixEntityStates;
using BTP.RoR2Plugin.Utils;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Bandit2.Weapon;
using EntityStates.BeetleQueenMonster;
using EntityStates.BrotherMonster;
using EntityStates.BrotherMonster.Weapon;
using EntityStates.Captain.Weapon;
using EntityStates.CaptainSupplyDrop;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.Croco;
using EntityStates.Duplicator;
using EntityStates.Engi.EngiBubbleShield;
using EntityStates.Engi.EngiWeapon;
using EntityStates.GlobalSkills.LunarDetonator;
using EntityStates.GlobalSkills.LunarNeedle;
using EntityStates.GoldGat;
using EntityStates.Heretic.Weapon;
using EntityStates.Huntress;
using EntityStates.Huntress.HuntressWeapon;
using EntityStates.ImpBossMonster;
using EntityStates.LaserTurbine;
using EntityStates.Loader;
using EntityStates.LunarGolem;
using EntityStates.Mage;
using EntityStates.Mage.Weapon;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using EntityStates.Missions.BrotherEncounter;
using EntityStates.Missions.LunarScavengerEncounter;
using EntityStates.NullifierMonster;
using EntityStates.Railgunner.Reload;
using EntityStates.Railgunner.Scope;
using EntityStates.Scrapper;
using EntityStates.TeleporterHealNovaController;
using EntityStates.TitanMonster;
using EntityStates.Toolbot;
using EntityStates.Treebot.TreebotFlower;
using EntityStates.Treebot.Weapon;
using EntityStates.VagrantNovaItem;
using EntityStates.VoidRaidCrab;
using FRCSharp;
using GoldenCoastPlusRevived;
using GrooveSaladSpikestripContent;
using GrooveSaladSpikestripContent.Content;
using GuestUnion;
using GuestUnion.ObjectPool.Generic;
using HG;
using HG.GeneralSerializer;
using IL.EntityStates.Duplicator;
using IL.EntityStates.LaserTurbine;
using IL.EntityStates.Loader;
using IL.EntityStates.Merc;
using IL.EntityStates.Railgunner.Reload;
using IL.EntityStates.Railgunner.Weapon;
using IL.EntityStates.TitanMonster;
using IL.EntityStates.VagrantNovaItem;
using IL.RoR2;
using IL.RoR2.Orbs;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour.HookGen;
using Newtonsoft.Json.Utilities;
using On.EntityStates;
using On.EntityStates.Bandit2.Weapon;
using On.EntityStates.BeetleQueenMonster;
using On.EntityStates.BrotherMonster;
using On.EntityStates.BrotherMonster.Weapon;
using On.EntityStates.Captain.Weapon;
using On.EntityStates.CaptainSupplyDrop;
using On.EntityStates.Croco;
using On.EntityStates.Engi.EngiBubbleShield;
using On.EntityStates.Engi.EngiWeapon;
using On.EntityStates.GlobalSkills.LunarDetonator;
using On.EntityStates.GlobalSkills.LunarNeedle;
using On.EntityStates.GoldGat;
using On.EntityStates.Heretic.Weapon;
using On.EntityStates.Huntress.HuntressWeapon;
using On.EntityStates.ImpBossMonster;
using On.EntityStates.LaserTurbine;
using On.EntityStates.Loader;
using On.EntityStates.Mage;
using On.EntityStates.Merc;
using On.EntityStates.Merc.Weapon;
using On.EntityStates.Missions.BrotherEncounter;
using On.EntityStates.Missions.LunarScavengerEncounter;
using On.EntityStates.Railgunner.Reload;
using On.EntityStates.Railgunner.Scope;
using On.EntityStates.TeleporterHealNovaController;
using On.EntityStates.Toolbot;
using On.EntityStates.VagrantNovaItem;
using On.EntityStates.VoidRaidCrab;
using On.PlasmaCoreSpikestripContent.Content.Skills;
using On.RoR2;
using On.RoR2.Achievements.Captain;
using On.RoR2.Artifacts;
using On.RoR2.Items;
using PlasmaCoreSpikestripContent.Content.Skills;
using PlasmaCoreSpikestripContent.Content.Skills.States;
using ProperSave;
using R2API;
using R2API.AddressReferencedAssets;
using R2API.Networking;
using R2API.Networking.Interfaces;
using R2API.Utils;
using RedGuyMod.Content.Components;
using RedGuyMod.SkillStates.Ravager;
using RiskOfOptions;
using RiskOfOptions.Lib;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Achievements;
using RoR2.Artifacts;
using RoR2.CharacterAI;
using RoR2.EntityLogic;
using RoR2.Items;
using RoR2.Navigation;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.Stats;
using RoR2.UI.MainMenu;
using TPDespair.ZetArtifacts;
using TPDespair.ZetAspects;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering.PostProcessing;
using vanillaVoid.Items;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BTP.RoR2Plugin.Tweaks")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+8acb6ebb816327c4ac6211d23a840966777e64ad")]
[assembly: AssemblyProduct("BTP.RoR2Plugin.Tweaks")]
[assembly: AssemblyTitle("BTP.RoR2Plugin.Tweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace BTP.RoR2Plugin
{
	public static class AssetReferences
	{
		public static readonly AddressReferencedPrefab affixWhiteDelayEffect = AddressReferencedPrefab.op_Implicit("RoR2/Base/EliteIce/AffixWhiteDelayEffect.prefab");

		public static readonly AddressReferencedPrefab affixWhiteExplosion = AddressReferencedPrefab.op_Implicit("RoR2/Base/EliteIce/AffixWhiteExplosion.prefab");

		public static readonly AddressReferencedPrefab bonusMoneyPack = AddressReferencedPrefab.op_Implicit("RoR2/Base/BonusGoldPackOnKill/BonusMoneyPack.prefab");

		public static readonly AddressReferencedPrefab brotherBodyPrefab = AddressReferencedPrefab.op_Implicit("RoR2/Base/Brother/BrotherBody.prefab");

		public static readonly AddressReferencedPrefab brotherUltLineProjectileStatic = AddressReferencedPrefab.op_Implicit("RoR2/Base/BrotherHaunt/BrotherUltLineProjectileStatic.prefab");

		public static readonly AddressReferencedPrefab critspark = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/VFX/Critspark.prefab");

		public static readonly AddressReferencedPrefab critsparkHeavy = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/VFX/CritsparkHeavy.prefab");

		public static readonly AddressReferencedPrefab electricOrbProjectile = AddressReferencedPrefab.op_Implicit("RoR2/Base/ElectricWorm/ElectricOrbProjectile.prefab");

		public static readonly AddressReferencedPrefab elementalRingVoidBlackHole = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/ElementalRingVoid/ElementalRingVoidBlackHole.prefab");

		public static readonly AddressReferencedPrefab fireMeatBallProjectile = AddressReferencedPrefab.op_Implicit("RoR2/Base/FireballsOnHit/FireMeatBall.prefab");

		public static readonly AddressReferencedPrefab fireTornado = AddressReferencedPrefab.op_Implicit("RoR2/Base/ElementalRings/FireTornado.prefab");

		public static readonly AddressReferencedPrefab fireworkLauncher = AddressReferencedPrefab.op_Implicit("RoR2/Base/Firework/FireworkLauncher.prefab");

		public static readonly AddressReferencedPrefab fireworkPrefab = AddressReferencedPrefab.op_Implicit("RoR2/Base/Firework/FireworkProjectile.prefab");

		public static readonly AddressReferencedPrefab fractureImpactEffect = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/BleedOnHitVoid/FractureImpactEffect.prefab");

		public static readonly AddressReferencedPrefab genericDelayBlast = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/GenericDelayBlast.prefab");

		public static readonly AddressReferencedPrefab helperPrefab = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/DirectorSpawnProbeHelperPrefab.prefab");

		public static readonly AddressReferencedPrefab iceRingExplosion = AddressReferencedPrefab.op_Implicit("RoR2/Base/ElementalRings/IceRingExplosion.prefab");

		public static readonly AddressReferencedPrefab lightningStake = AddressReferencedPrefab.op_Implicit("RoR2/Base/EliteLightning/LightningStake.prefab");

		public static readonly AddressReferencedPrefab lunarMissilePrefab = AddressReferencedPrefab.op_Implicit("RoR2/Base/EliteLunar/LunarMissileProjectile.prefab");

		public static readonly AddressReferencedPrefab magmaOrbProjectile = AddressReferencedPrefab.op_Implicit("RoR2/Base/MagmaWorm/MagmaOrbProjectile.prefab");

		public static readonly AddressReferencedPrefab molotovClusterProjectile = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/Molotov/MolotovClusterProjectile.prefab");

		public static readonly AddressReferencedPrefab molotovProjectileDotZone = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/Molotov/MolotovProjectileDotZone.prefab");

		public static readonly AddressReferencedPrefab molotovSingleProjectile = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/Molotov/MolotovSingleProjectile.prefab");

		public static readonly AddressReferencedPrefab moonExitArenaOrbEffect = AddressReferencedPrefab.op_Implicit("RoR2/Base/moon/MoonExitArenaOrbEffect.prefab");

		public static readonly AddressReferencedPrefab omniExplosionVFXQuick = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/VFX/OmniExplosionVFXQuick.prefab");

		public static readonly AddressReferencedPrefab omniRecycleEffect = AddressReferencedPrefab.op_Implicit("RoR2/Base/Recycle/OmniRecycleEffect.prefab");

		public static readonly AddressReferencedPrefab shrineUseEffect = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/VFX/ShrineUseEffect.prefab");

		public static readonly AddressReferencedPrefab stickyBombProjectile = AddressReferencedPrefab.op_Implicit("RoR2/Base/StickyBomb/StickyBomb.prefab");

		public static readonly AddressReferencedPrefab teamWarCryActivation = AddressReferencedPrefab.op_Implicit("RoR2/Base/TeamWarCry/TeamWarCryActivation.prefab");

		public static readonly AddressReferencedPrefab coinImpact = AddressReferencedPrefab.op_Implicit("RoR2/Base/Common/VFX/CoinImpact.prefab");

		public static readonly AddressReferencedPrefab titanGoldPreFistProjectile = AddressReferencedPrefab.op_Implicit("RoR2/Base/Titan/TitanGoldPreFistProjectile.prefab");

		public static readonly AddressReferencedPrefab randomEquipmentTriggerProcEffect = AddressReferencedPrefab.op_Implicit("RoR2/DLC1/RandomEquipmentTrigger/RandomEquipmentTriggerProcEffect.prefab");

		public static readonly Material helscourgeMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarWisp/matLunarWispFlames.mat").WaitForCompletion();

		public static readonly Material moonscourgeMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/moon2/matSkyboxMoon.mat").WaitForCompletion();

		public static readonly Material stormscourgeMat = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Mage/matMageCalibrateLightning.mat").WaitForCompletion();

		public static readonly GameObject stunAndPierceBoomerang = LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/StunAndPierceBoomerang");

		public static void Init()
		{
		}
	}
	public static class BetterEvents
	{
		public delegate void BetterHitEnemyEventHandler(DamageInfo damageInfo, CharacterBody attackerBody, CharacterBody victimBody);

		public delegate void BetterHitAllEventHandler(DamageInfo damageInfo, CharacterBody attackerBody);

		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__GlobalEventManager_OnHitEnemy;

			public static hook_OnHitAllProcess <1>__GlobalEventManager_OnHitAll;
		}

		public static event BetterHitEnemyEventHandler OnHitEnemy;

		public static event BetterHitAllEventHandler OnHitAll;

		static BetterEvents()
		{
			Init();
		}

		private static void Init()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			object obj = <>O.<0>__GlobalEventManager_OnHitEnemy;
			if (obj == null)
			{
				Manipulator val = GlobalEventManager_OnHitEnemy;
				<>O.<0>__GlobalEventManager_OnHitEnemy = val;
				obj = (object)val;
			}
			GlobalEventManager.ProcessHitEnemy += (Manipulator)obj;
			object obj2 = <>O.<1>__GlobalEventManager_OnHitAll;
			if (obj2 == null)
			{
				hook_OnHitAllProcess val2 = GlobalEventManager_OnHitAll;
				<>O.<1>__GlobalEventManager_OnHitAll = val2;
				obj2 = (object)val2;
			}
			GlobalEventManager.OnHitAllProcess += (hook_OnHitAllProcess)obj2;
		}

		private static void GlobalEventManager_OnHitAll(orig_OnHitAllProcess orig, GlobalEventManager self, DamageInfo damageInfo, GameObject hitObject)
		{
			CharacterBody val = default(CharacterBody);
			if (damageInfo.procCoefficient != 0f && !damageInfo.rejected && !((Object)(object)damageInfo.attacker == (Object)null) && damageInfo.attacker.TryGetComponent<CharacterBody>(ref val) && val.master != null)
			{
				BetterEvents.OnHitAll?.Invoke(damageInfo, val);
			}
		}

		private static void GlobalEventManager_OnHitEnemy(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[3]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 7),
				(Instruction x) => ILPatternMatchingExt.MatchCallvirt<CharacterMaster>(x, "get_inventory"),
				(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 8)
			}))
			{
				val.Emit(OpCodes.Ldarg_1).Emit(OpCodes.Ldloc_0).Emit(OpCodes.Ldloc_1)
					.EmitDelegate<Action<DamageInfo, CharacterBody, CharacterBody>>((Action<DamageInfo, CharacterBody, CharacterBody>)delegate(DamageInfo damageInfo, CharacterBody attackerBody, CharacterBody victimBody)
					{
						BetterEvents.OnHitEnemy?.Invoke(damageInfo, attackerBody, victimBody);
					});
			}
			else
			{
				"OnHitEnemy Hook Failed!".LogError();
			}
		}
	}
	internal class FRCSharpFix
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Init <0>__ItemDisplayRuleSet_Init;
		}

		[ModLoadMessageHandler]
		public static void Fix()
		{
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Expected O, but got Unknown
			HookEndpointManager.Modify<Action<ILContext>>((MethodBase)typeof(VF2ContentPackProvider).GetMethod("Init", BindingFlags.Static | BindingFlags.NonPublic), (Delegate)(Action<ILContext>)delegate(ILContext il)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				new ILCursor(il)
				{
					Index = 483
				}.RemoveRange(4);
			});
			object obj = <>O.<0>__ItemDisplayRuleSet_Init;
			if (obj == null)
			{
				hook_Init val = ItemDisplayRuleSet_Init;
				<>O.<0>__ItemDisplayRuleSet_Init = val;
				obj = (object)val;
			}
			ItemDisplayRuleSet.Init += (hook_Init)obj;
		}

		private static IEnumerator ItemDisplayRuleSet_Init(orig_Init orig)
		{
			try
			{
				FRItemIDRS.ItemDisplayRuleSet_Init((orig_Init)null);
			}
			catch (Exception)
			{
			}
			return orig.Invoke();
		}
	}
	internal interface IFixedTickable
	{
		void FixedTick();
	}
	internal static class FixedTickableExtensions
	{
		public static void RegisterFixedTick(this IFixedTickable fixedTickable)
		{
			Plugin.fixedTickableSet.Add(fixedTickable);
		}

		public static void UnregisterFixedTick(this IFixedTickable fixedTickable)
		{
			Plugin.fixedTickableSet.Remove(fixedTickable);
		}
	}
	internal interface IModLoadMessageHandler
	{
		void Handle();
	}
	internal interface IModUnloadMessageHandler
	{
		void Handle();
	}
	internal interface IRoR2LoadedMessageHandler
	{
		void Handle();
	}
	public static class LogExtensions
	{
		internal static ManualLogSource logger;

		public static void LogInfo<T>(this T data)
		{
			logger.LogInfo((object)data);
		}

		public static void LogWarning<T>(this T data)
		{
			logger.LogWarning((object)data);
		}

		public static void LogError<T>(this T data)
		{
			logger.LogError((object)data);
		}

		public static void LogMessage<T>(this T data)
		{
			logger.LogMessage((object)data);
		}

		public static void LogFormat<T>(this T format, LogLevel level = 0, params object[] args)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			logger.Log(level, (object)string.Format(format.ToString(), args));
		}
	}
	internal abstract class ModComponent
	{
	}
	[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
	internal class ModLoadMessageHandlerAttribute : Attribute
	{
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.BTP.Tweak", "BTP.Tweak", "3.0.1")]
	public class Plugin : BaseUnityPlugin
	{
		public const string PluginAuthor = "BTP";

		public const string PluginGUID = "com.BTP.Tweak";

		public const string PluginName = "BTP.Tweak";

		public const string PluginVersion = "3.0.1";

		internal static HashSet<IFixedTickable> fixedTickableSet = new HashSet<IFixedTickable>();

		private readonly List<IModLoadMessageHandler> modLoadMessageHandlers = new List<IModLoadMessageHandler>();

		private readonly List<IModUnloadMessageHandler> modUnloadMessageHandlers = new List<IModUnloadMessageHandler>();

		private readonly List<IRoR2LoadedMessageHandler> ror2LoadedMessageHandlers = new List<IRoR2LoadedMessageHandler>();

		private void Awake()
		{
			LogExtensions.logger = ((BaseUnityPlugin)this).Logger;
			Settings.Initialize(((BaseUnityPlugin)this).Config);
			MainMenuController.OnMainMenuInitialised += OnMainMenuFirstInitialised;
			AssetReferences.Init();
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			foreach (Type type in types)
			{
				if (!type.IsAbstract && !type.IsDefined(typeof(ObsoleteAttribute)) && type.IsSubclassOf(typeof(ModComponent)))
				{
					object? obj = Activator.CreateInstance(type);
					if (obj is IModLoadMessageHandler item)
					{
						modLoadMessageHandlers.Add(item);
					}
					if (obj is IModUnloadMessageHandler item2)
					{
						modUnloadMessageHandlers.Add(item2);
					}
					if (obj is IRoR2LoadedMessageHandler item3)
					{
						ror2LoadedMessageHandlers.Add(item3);
					}
				}
				Span<MethodInfo> span = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).AsSpan();
				for (int j = 0; j < span.Length; j++)
				{
					MethodInfo methodInfo = span[j];
					if (methodInfo.IsDefined(typeof(ModLoadMessageHandlerAttribute), inherit: true))
					{
						try
						{
							methodInfo.Invoke(null, null);
							((BaseUnityPlugin)this).Logger.LogMessage((object)(type.FullName + "." + methodInfo.Name + " has been called."));
						}
						catch (Exception ex)
						{
							((BaseUnityPlugin)this).Logger.LogError((object)ex);
						}
					}
				}
			}
		}

		private void OnEnable()
		{
			foreach (IModLoadMessageHandler modLoadMessageHandler2 in modLoadMessageHandlers)
			{
				try
				{
					IModLoadMessageHandler modLoadMessageHandler = modLoadMessageHandler2;
					modLoadMessageHandler.Handle();
					((BaseUnityPlugin)this).Logger.LogMessage((object)(modLoadMessageHandler.GetType().FullName + " :: Handle has been called."));
				}
				catch (Exception ex)
				{
					Debug.LogException(ex, (Object)(object)this);
				}
			}
		}

		private void OnMainMenuFirstInitialised()
		{
			MainMenuController.OnMainMenuInitialised -= OnMainMenuFirstInitialised;
			foreach (IRoR2LoadedMessageHandler ror2LoadedMessageHandler in ror2LoadedMessageHandlers)
			{
				try
				{
					IRoR2LoadedMessageHandler roR2LoadedMessageHandler = ror2LoadedMessageHandler;
					roR2LoadedMessageHandler.Handle();
					((BaseUnityPlugin)this).Logger.LogMessage((object)(roR2LoadedMessageHandler.GetType().FullName + " :: Handle has been called."));
				}
				catch (Exception ex)
				{
					Debug.LogException(ex, (Object)(object)this);
				}
			}
		}

		private void FixedUpdate()
		{
			IFixedTickable[] array = ArrayPool<IFixedTickable>.Shared.Rent(fixedTickableSet.Count);
			fixedTickableSet.CopyTo(array);
			Span<IFixedTickable> span = array.AsSpan();
			for (int i = 0; i < span.Length; i++)
			{
				ref IFixedTickable reference = ref span[i];
				if (reference == null)
				{
					break;
				}
				reference.FixedTick();
				reference = null;
			}
			ArrayPool<IFixedTickable>.Shared.Return(array);
		}

		private void OnDisable()
		{
			foreach (IModUnloadMessageHandler modUnloadMessageHandler2 in modUnloadMessageHandlers)
			{
				try
				{
					IModUnloadMessageHandler modUnloadMessageHandler = modUnloadMessageHandler2;
					modUnloadMessageHandler.Handle();
					((BaseUnityPlugin)this).Logger.LogMessage((object)(modUnloadMessageHandler.GetType().FullName + " :: Handle has been called."));
				}
				catch (Exception ex)
				{
					Debug.LogException(ex, (Object)(object)this);
				}
			}
		}
	}
	public interface ISaveData
	{
		void SaveData();

		void LoadData();
	}
	public static class ProperSaveSupport
	{
		private static readonly List<Type> _saveDataTypes = new List<Type>();

		public static void AddSaveDataType(Type type)
		{
			if (_saveDataTypes.Contains(type))
			{
				("此类型('" + type.FullName + "')已添加!请勿重复添加!").LogError();
			}
			else if (!TypeExtensions.ImplementInterface(type, typeof(ISaveData)))
			{
				("此类型('" + type.FullName + "')不实现接口('" + typeof(ISaveData).FullName + "')!请实现此接口!").LogError();
			}
			else
			{
				_saveDataTypes.Add(type);
				("存档类型('" + type.FullName + "')已添加。").LogMessage();
			}
		}

		public static void AddSaveDataType<T>() where T : ISaveData
		{
			Type typeFromHandle = typeof(T);
			if (_saveDataTypes.Contains(typeFromHandle))
			{
				("此类型('" + typeFromHandle.FullName + "')已添加!请勿重复添加!").LogError();
				return;
			}
			_saveDataTypes.Add(typeFromHandle);
			("存档类型('" + typeFromHandle.FullName + "')已添加。").LogMessage();
		}

		[ModLoadMessageHandler]
		internal static void Init()
		{
			SaveFile.OnGatherSaveData += SaveFile_OnGatherSaveData;
			Loading.OnLoadingEnded += Loading_OnLoadingEnded;
		}

		private static void SaveFile_OnGatherSaveData(Dictionary<string, object> obj)
		{
			foreach (Type saveDataType in _saveDataTypes)
			{
				ISaveData saveData = (ISaveData)Activator.CreateInstance(saveDataType);
				saveData.SaveData();
				obj.Add(saveDataType.FullName, saveData);
				("存档类型('" + saveDataType.FullName + "')已存入。").LogMessage();
			}
		}

		private static void Loading_OnLoadingEnded(SaveFile obj)
		{
			foreach (Type saveDataType in _saveDataTypes)
			{
				obj.GetModdedData<ISaveData>(saveDataType.FullName)?.LoadData();
				("存档类型('" + saveDataType.FullName + "')已载入。").LogMessage();
			}
		}
	}
	public static class RunInfo
	{
		private struct SaveData : ISaveData
		{
			[DataMember(Name = "m")]
			public bool 位于月球;

			[DataMember(Name = "a")]
			public bool 位于隔间;

			[DataMember(Name = "v")]
			public bool 位于天文馆;

			[DataMember(Name = "t")]
			public bool 位于时之墓;

			[DataMember(Name = "b")]
			public bool 位于月球商店;

			[DataMember(Name = "c")]
			public bool 是否选择造物难度;

			[DataMember(Name = "d")]
			public bool 造物主的试炼;

			readonly void ISaveData.LoadData()
			{
				RunInfo.位于月球 = 位于月球;
				RunInfo.位于隔间 = 位于隔间;
				RunInfo.位于天文馆 = 位于天文馆;
				RunInfo.位于时之墓 = 位于时之墓;
				RunInfo.位于月球商店 = 位于月球商店;
				已选择大旋风难度 = 是否选择造物难度;
				第二次大旋风 = 造物主的试炼;
			}

			void ISaveData.SaveData()
			{
				位于月球 = RunInfo.位于月球;
				位于隔间 = RunInfo.位于隔间;
				位于天文馆 = RunInfo.位于天文馆;
				位于时之墓 = RunInfo.位于时之墓;
				位于月球商店 = RunInfo.位于月球商店;
				是否选择造物难度 = 已选择大旋风难度;
				造物主的试炼 = 第二次大旋风;
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static Action<Run, RuleBook> <0>__OnRunSetRuleBookGlobal;

			public static Action<SceneDef> <1>__OnMostRecentSceneDefChanged;

			public static hook_OnEnter <2>__OnBrotherTrueDeath;
		}

		public static bool 位于月球 { get; private set; }

		public static bool 位于隔间 { get; private set; }

		public static bool 位于天文馆 { get; private set; }

		public static bool 位于时之墓 { get; private set; }

		public static bool 位于月球商店 { get; private set; }

		public static bool 已选择大旋风难度 { get; private set; }

		public static bool 第二次大旋风 { get; private set; }

		[ModLoadMessageHandler]
		internal static void Init()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			Run.onRunSetRuleBookGlobal += OnRunSetRuleBookGlobal;
			SceneCatalog.onMostRecentSceneDefChanged += OnMostRecentSceneDefChanged;
			object obj = <>O.<2>__OnBrotherTrueDeath;
			if (obj == null)
			{
				hook_OnEnter val = OnBrotherTrueDeath;
				<>O.<2>__OnBrotherTrueDeath = val;
				obj = (object)val;
			}
			TrueDeathState.OnEnter += (hook_OnEnter)obj;
			ProperSaveSupport.AddSaveDataType<SaveData>();
		}

		private static void OnRunSetRuleBookGlobal(Run run, RuleBook ruleBook)
		{
			//IL_0007: 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)
			第二次大旋风 = false;
			已选择大旋风难度 = run.selectedDifficulty == HarryRoadGreatWhirlwind.DifficultyIndex;
		}

		private static void OnBrotherTrueDeath(orig_OnEnter orig, TrueDeathState self)
		{
			orig.Invoke(self);
			if (已选择大旋风难度 && !第二次大旋风)
			{
				第二次大旋风 = true;
				if (NetworkServer.active)
				{
					ChatMessage.Send("世界不再是你熟悉的那样!!!".ToDeath());
				}
			}
		}

		private static void OnMostRecentSceneDefChanged(SceneDef mostRecentSceneDef)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: 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_0046: 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)
			SceneIndex sceneDefIndex = mostRecentSceneDef.sceneDefIndex;
			位于月球 = sceneDefIndex == SceneIndexes.Moon || sceneDefIndex == SceneIndexes.Moon2;
			位于隔间 = sceneDefIndex == SceneIndexes.Arena;
			位于天文馆 = sceneDefIndex == SceneIndexes.VoidRaid;
			位于时之墓 = sceneDefIndex == SceneIndexes.BulwarksHaunt_GhostWave;
			位于月球商店 = sceneDefIndex == SceneIndexes.Bazaar;
		}
	}
	public static class Settings
	{
		public static ConfigFile Config { get; private set; }

		public static KeyBindOption ReloadKey { get; private set; }

		public static CheckBoxOption 关闭所有特效 { get; private set; }

		public static CheckBoxOption 开启特效生成日志 { get; private set; }

		public static CheckBoxOption 开启战斗日志 { get; private set; }

		public static ChoiceOption 开启特拉法梅 { get; private set; }

		public static CheckBoxOption 启用阶梯触发链 { get; private set; }

		public static SliderOption Boss物品掉率 { get; private set; }

		public static SliderOption 物品传送时间 { get; private set; }

		public static SliderOption 商店物品传送时间 { get; private set; }

		public static SliderOption 导弹发射间隔 { get; private set; }

		public static SliderOption 每关难度增加量 { get; private set; }

		public static SliderOption 喷泉喷射间隔 { get; private set; }

		public static SliderOption 牺牲基础掉率 { get; private set; }

		public static SliderOption BubbleShieldLifetime { get; internal set; }

		public static SliderOption BubbleShieldRaius { get; internal set; }

		public static StringInputFieldOption 特效_间隔 { get; private set; }

		public static CheckBoxOption AddCheckBoxOption(ConfigFile config, string section, string key, bool defaultValue, string description, Action<bool> onChanged = null)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_0067: Expected O, but got Unknown
			ConfigEntry<bool> configEntry = config.Bind<bool>(section, key, defaultValue, description);
			CheckBoxOption val = new CheckBoxOption(configEntry);
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static ChoiceOption AddChoiceOption<T>(ConfigFile config, string section, string key, T defaultValue, string description, Action<T> onChanged = null) where T : Enum
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_0067: Expected O, but got Unknown
			ConfigEntry<T> configEntry = config.Bind<T>(section, key, defaultValue, description);
			ChoiceOption val = new ChoiceOption((ConfigEntryBase)(object)configEntry);
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static StepSliderOption AddStepSliderOption(ConfigFile config, string section, string key, float defaultValue, float min, float max, float step_size, string description, string formatString = "{0}", Action<float> onChanged = null)
		{
			//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_0032: 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_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_008c: Expected O, but got Unknown
			ConfigEntry<float> configEntry = config.Bind<float>(section, key, defaultValue, description);
			StepSliderOption val = new StepSliderOption(configEntry, new StepSliderConfig
			{
				min = min,
				max = max,
				increment = step_size,
				FormatString = formatString
			});
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static SliderOption AddSliderOption(ConfigFile config, string section, string key, float defaultValue, float min, float max, string description, string formatString = "{0}", Action<float> onChanged = null)
		{
			//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_0032: 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_0047: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_0064: Expected O, but got Unknown
			//IL_0084: Expected O, but got Unknown
			ConfigEntry<float> configEntry = config.Bind<float>(section, key, defaultValue, description);
			SliderOption val = new SliderOption(configEntry, new SliderConfig
			{
				min = min,
				max = max,
				FormatString = formatString
			});
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static KeyBindOption AddKeyBindOption(ConfigFile config, string section, string key, KeyboardShortcut defaultValue, string description, Action<KeyboardShortcut> onChanged = null)
		{
			//IL_0012: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_0067: Expected O, but got Unknown
			ConfigEntry<KeyboardShortcut> configEntry = config.Bind<KeyboardShortcut>(section, key, defaultValue, description);
			KeyBindOption val = new KeyBindOption(configEntry);
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					//IL_000c: Unknown result type (might be due to invalid IL or missing references)
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static StringInputFieldOption AddStringInputFieldOption(ConfigFile config, string section, string key, string defaultValue, string description, SubmitEnum submitOn = 6, Action<string> onChanged = null)
		{
			//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_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0032: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0074: Expected O, but got Unknown
			ConfigEntry<string> configEntry = config.Bind<string>(section, key, defaultValue, description);
			StringInputFieldOption val = new StringInputFieldOption(configEntry, new InputFieldConfig
			{
				submitOn = submitOn
			});
			ModMetaData modMetaData = Assembly.GetCallingAssembly().GetModMetaData();
			ModSettingsManager.AddOption((BaseOption)val, modMetaData.Guid, modMetaData.Name);
			if (onChanged != null)
			{
				configEntry.SettingChanged += delegate
				{
					onChanged(configEntry.Value);
				};
			}
			return val;
		}

		public static ModMetaData GetModMetaData(this Assembly assembly)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			ModMetaData result = default(ModMetaData);
			Type[] exportedTypes = assembly.GetExportedTypes();
			for (int i = 0; i < exportedTypes.Length; i++)
			{
				BepInPlugin customAttribute = ((MemberInfo)exportedTypes[i]).GetCustomAttribute<BepInPlugin>();
				if (customAttribute != null)
				{
					result.Guid = customAttribute.GUID;
					result.Name = customAttribute.Name;
				}
			}
			return result;
		}

		internal static void Initialize(ConfigFile config)
		{
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			Config = config;
			ModSettingsManager.SetModIcon("RoR2/DLC1/VoidCoin/texVoidCoinIcon.png".Load<Sprite>(), "com.BTP.Tweak", "BTP.Tweak");
			ModSettingsManager.SetModDescription("这里是关于BTP的整合包的内部的Mod设置", "com.BTP.Tweak", "BTP.Tweak");
			Boss物品掉率 = AddSliderOption(config, "测试", "Boss物品掉率", 2f, 0f, 100f, "任意模式下,具有特殊奖励的敌人死亡时,掉落该物品的概率,不受运气影响。", "{0}%");
			ReloadKey = AddKeyBindOption(config, "按键", "磁轨炮手上弹按键", new KeyboardShortcut((KeyCode)98, Array.Empty<KeyCode>()), "按此按键进入上弹模式。");
			物品传送时间 = AddSliderOption(config, "物品", "一般情况下,物品在经过此时间后会传送到最近的安全地带。(单位:秒)", 0f, 1f, 60f, "");
			商店物品传送时间 = AddSliderOption(config, "物品", "在月球商店中,物品在经过此时间后会传送到最近的安全地带。(单位:秒)", 0f, 0f, 90f, "");
			导弹发射间隔 = AddSliderOption(config, "物品", "导弹池发射间隔(单位:秒)(弃用)", 1f, 0f, 10f, "每隔~发射一发导弹,间隔内添加的相同触发链的导弹将会整合为一枚。");
			关闭所有特效 = AddCheckBoxOption(config, "特效-间隔", "开启时禁用所有特效", defaultValue: false, "用于后期防止卡顿。");
			开启特效生成日志 = AddCheckBoxOption(config, "日志", "是否开启特效生成日志", defaultValue: false, "用于获取特效的ID。");
			开启战斗日志 = AddCheckBoxOption(config, "日志", "是否开启战斗日志", defaultValue: false, "原版默认不开启,仅供测试用。", delegate(bool newValue)
			{
				CombatDirector.cvDirectorCombatEnableInternalLogs.value = newValue;
			});
			每关难度增加量 = AddSliderOption(config, "难度", "造物难度下,每完成一关增加的难度", 25f, 0f, 100000000f, "开始时难度为50%。难度计算公式:开始难度 + 当前关卡数 x ~", "{0}%", delegate
			{
				if (Object.op_Implicit((Object)(object)Run.instance))
				{
					Run.instance.RecalculateDifficultyCoefficent();
				}
			});
			喷泉喷射间隔 = AddSliderOption(config, "物品", "发射池喷射间隔(单位:秒)(弃用)", 1f, 0f, 10f, "每隔~喷射一次投射物,间隔内添加的相同触发链的投射物将会整合为一枚。");
			启用阶梯触发链 = AddCheckBoxOption(config, "测试", "启用阶梯触发链", defaultValue: false, "开启后,某些物品的触发方向将受到限制,未列出的物品不受影响。目前受影响的物品:完美巨兽 <= 黏弹 <= Atg-MK1导弹 = 等离子虾 = 尤克里里 = 聚合鲁特琴 = 冰火双环 <= 感应肉钩 <= 雷火双钻。('<'左边的不能触发右边的,'='左右的可以互相触发)");
			特效_间隔 = AddStringInputFieldOption(config, "特效-间隔", "通过特效ID指定某些特效的生成间隔", "", "默认已含有某些会导致游戏卡顿的特效。\neg:假如共生蝎的特效ID为1,我想让其有0.1秒的生成间隔,那么应该填入:1:0.1,如果间隔为负数则表示取消间隔。\n每个设置之间用“;”隔开,所有标点均用英文标点!", (SubmitEnum)6, EffectTweak.EffectSpawnLimit.AddAddLimitToEffects);
			牺牲基础掉率 = AddSliderOption(config, "牺牲神器", "牺牲基础掉率", 5f, 0f, 100f, "基础掉率,非最终掉率。最终掉率与敌人种类和等级等属性相关。Boss基础掉率x150%,精英基础掉率x125%。\n在同一关卡中,每次击杀敌人后,如果未掉落物品,则临时增加掉率,掉落后重置;如果掉落物品,则临时降低掉率,过关后重置。", "{0}%");
		}
	}
}
namespace BTP.RoR2Plugin.Utils
{
	public static class Texture2DPaths
	{
		public const string texAttackSpeedIcon = "RoR2/Base/Achievements/texAttackSpeedIcon.png";

		public const string texAutomationActivationIcon = "RoR2/Base/Achievements/texAutomationActivationIcon.png";

		public const string texAutomationActivationIconNew = "RoR2/Base/Achievements/texAutomationActivationIcon_New.png";

		public const string texBandit2ClearGameMonsoonIcon = "RoR2/Base/Achievements/texBandit2ClearGameMonsoonIcon.png";

		public const string texBandit2ConsecutiveResetIcon = "RoR2/Base/Achievements/texBandit2ConsecutiveResetIcon.png";

		public const string texBandit2RevolverFinaleIcon = "RoR2/Base/Achievements/texBandit2RevolverFinaleIcon.png";

		public const string texBandit2StackSuperBleedIcon = "RoR2/Base/Achievements/texBandit2StackSuperBleedIcon.png";

		public const string texBeatArenaIcon = "RoR2/Base/Achievements/texBeatArenaIcon.png";

		public const string texBurnToDeathIcon = "RoR2/Base/Achievements/texBurnToDeathIcon.png";

		public const string texCaptainBuyMegaDroneIcon = "RoR2/Base/Achievements/texCaptainBuyMegaDroneIcon.png";

		public const string texCaptainClearGameMonsoonIcon = "RoR2/Base/Achievements/texCaptainClearGameMonsoonIcon.png";

		public const string texCaptainSupplyDropFinaleIcon = "RoR2/Base/Achievements/texCaptainSupplyDropFinaleIcon.png";

		public const string texCaptainVisitSeveralStagesIcon = "RoR2/Base/Achievements/texCaptainVisitSeveralStagesIcon.png";

		public const string texCarryLunarItemsIcon = "RoR2/Base/Achievements/texCarryLunarItemsIcon.png";

		public const string texChargeTeleporterWhileNearDeathIcon = "RoR2/Base/Achievements/texChargeTeleporterWhileNearDeathIcon.png";

		public const string texCleanupDutyIcon = "RoR2/Base/Achievements/texCleanupDutyIcon.png";

		public const string texCommandoClearGameMonsoonIcon = "RoR2/Base/Achievements/texCommandoClearGameMonsoonIcon.png";

		public const string texCommandoFastFirstStageClearIcon = "RoR2/Base/Achievements/texCommandoFastFirstStageClearIcon.png";

		public const string texCommandoKillOverloadingWormIcon = "RoR2/Base/Achievements/texCommandoKillOverloadingWormIcon.png";

		public const string texCommandoNonLunarEnduranceIcon = "RoR2/Base/Achievements/texCommandoNonLunarEnduranceIcon.png";

		public const string texComplete20StagesIcon = "RoR2/Base/Achievements/texComplete20StagesIcon.png";

		public const string texComplete30StagesCareerIcon = "RoR2/Base/Achievements/texComplete30StagesCareerIcon.png";

		public const string texCompleteMainEndingHardIcon = "RoR2/Base/Achievements/texCompleteMainEndingHardIcon.png";

		public const string texCompleteMainEndingIcon = "RoR2/Base/Achievements/texCompleteMainEndingIcon.png";

		public const string texCompleteMultiBossShrineIcon = "RoR2/Base/Achievements/texCompleteMultiBossShrineIcon.png";

		public const string texCompletePrismaticTrialIcon = "RoR2/Base/Achievements/texCompletePrismaticTrialIcon.png";

		public const string texCompleteTeleporterIcon = "RoR2/Base/Achievements/texCompleteTeleporterIcon.png";

		public const string texCompleteTeleporterWithoutInjuryIcon = "RoR2/Base/Achievements/texCompleteTeleporterWithoutInjuryIcon.png";

		public const string texCompleteThreeStagesIcon = "RoR2/Base/Achievements/texCompleteThreeStagesIcon.png";

		public const string texCompleteThreeStagesIconOLD = "RoR2/Base/Achievements/texCompleteThreeStagesIconOLD.png";

		public const string texCompleteThreeStagesWithoutHealingIcon = "RoR2/Base/Achievements/texCompleteThreeStagesWithoutHealingIcon.png";

		public const string texCompleteUnknownEndingIcon = "RoR2/Base/Achievements/texCompleteUnknownEndingIcon.png";

		public const string texCrocoClearGameMonsoonIcon = "RoR2/Base/Achievements/texCrocoClearGameMonsoonIcon.png";

		public const string texCrocoKillScavengerIcon = "RoR2/Base/Achievements/texCrocoKillScavengerIcon.png";

		public const string texCrocoKillWeakEnemiesMilestoneIcon = "RoR2/Base/Achievements/texCrocoKillWeakEnemiesMilestoneIcon.png";

		public const string texCrocoTotalInfectionsMilestoneIcon = "RoR2/Base/Achievements/texCrocoTotalInfectionsMilestoneIcon.png";

		public const string texDefeatSuperRoboBallBossIcon = "RoR2/Base/Achievements/texDefeatSuperRoboBallBossIcon.png";

		public const string texDie20TimesIcon = "RoR2/Base/Achievements/texDie20TimesIcon.png";

		public const string texDie5TimesIcon = "RoR2/Base/Achievements/texDie5TimesIcon.png";

		public const string texDiscover10UniqueTier1Icon = "RoR2/Base/Achievements/texDiscover10UniqueTier1Icon.png";

		public const string texDiscover5EquipmentIcon = "RoR2/Base/Achievements/texDiscover5EquipmentIcon.png";

		public const string texEngiArmyIcon = "RoR2/Base/Achievements/texEngiArmyIcon.png";

		public const string texEngiClearGameMonsoonIcon = "RoR2/Base/Achievements/texEngiClearGameMonsoonIcon.png";

		public const string texEngiClearTeleporterWithZeroMonstersIcon = "RoR2/Base/Achievements/texEngiClearTeleporterWithZeroMonstersIcon.png";

		public const string texEngiKillBossQuickIcon = "RoR2/Base/Achievements/texEngiKillBossQuickIcon.png";

		public const string texFailShrineChanceIcon = "RoR2/Base/Achievements/texFailShrineChanceIcon.png";

		public const string texFindDevilAltarIcon = "RoR2/Base/Achievements/texFindDevilAltarIcon.png";

		public const string texFindTimedChestIcon = "RoR2/Base/Achievements/texFindTimedChestIcon.png";

		public const string texFindUniqueNewtStatuesIcon = "RoR2/Base/Achievements/texFindUniqueNewtStatuesIcon.png";

		public const string texFreeMageIcon = "RoR2/Base/Achievements/texFreeMageIcon.png";

		public const string texHardEliteBossKillIcon = "RoR2/Base/Achievements/texHardEliteBossKillIcon.png";

		public const string texHardHitterIcon = "RoR2/Base/Achievements/texHardHitterIcon.png";

		public const string texHuntressAllGlaiveBouncesKillIcon = "RoR2/Base/Achievements/texHuntressAllGlaiveBouncesKillIcon.png";

		public const string texHuntressAttackSpeedIcon = "RoR2/Base/Achievements/texHuntressAttackSpeedIcon.png";

		public const string texHuntressClearGameMonsoonIcon = "RoR2/Base/Achievements/texHuntressClearGameMonsoonIcon.png";

		public const string texHuntressCollectCrowbarsIcon = "RoR2/Base/Achievements/texHuntressCollectCrowbarsIcon.png";

		public const string texHuntressMaintainFullHealthOnFrozenWallIcon = "RoR2/Base/Achievements/texHuntressMaintainFullHealthOnFrozenWallIcon.png";

		public const string texKillBossQuantityInRunIcon = "RoR2/Base/Achievements/texKillBossQuantityInRunIcon.png";

		public const string texKillBossQuickIcon = "RoR2/Base/Achievements/texKillBossQuickIcon.png";

		public const string texKillElementalLemuriansIcon = "RoR2/Base/Achievements/texKillElementalLemuriansIcon.png";

		public const string texKillEliteMonsterIcon = "RoR2/Base/Achievements/texKillEliteMonsterIcon.png";

		public const string texKillElitesMilestoneIcon = "RoR2/Base/Achievements/texKillElitesMilestoneIcon.png";

		public const string texKillGoldTitanInOneCycleIcon = "RoR2/Base/Achievements/texKillGoldTitanInOneCycleIcon.png";

		public const string texKillTotalEnemiesIcon = "RoR2/Base/Achievements/texKillTotalEnemiesIcon.png";

		public const string texLoaderBigSlamIcon = "RoR2/Base/Achievements/texLoaderBigSlamIcon.png";

		public const string texLoaderClearGameMonsoonIcon = "RoR2/Base/Achievements/texLoaderClearGameMonsoonIcon.png";

		public const string texLoaderKillLoadersIcon = "RoR2/Base/Achievements/texLoaderKillLoadersIcon.png";

		public const string texLoaderSpeedRunIcon = "RoR2/Base/Achievements/texLoaderSpeedRunIcon.png";

		public const string texLoaderThatsWeirdIcon = "RoR2/Base/Achievements/texLoaderThatsWeirdIcon.png";

		public const string texLogCollectorIcon = "RoR2/Base/Achievements/texLogCollectorIcon.png";

		public const string texLoopOnceIcon = "RoR2/Base/Achievements/texLoopOnceIcon.png";

		public const string texMageAirborneMultiKillIcon = "RoR2/Base/Achievements/texMageAirborneMultiKillIcon.png";

		public const string texMageClearGameMonsoonIcon = "RoR2/Base/Achievements/texMageClearGameMonsoonIcon.png";

		public const string texMageFastBossIcon = "RoR2/Base/Achievements/texMageFastBossIcon.png";

		public const string texMageMultiExecuteIcon = "RoR2/Base/Achievements/texMageMultiExecuteIcon.png";

		public const string texMageMultiKillIcon = "RoR2/Base/Achievements/texMageMultiKillIcon.png";

		public const string texMajorMultikillIcon = "RoR2/Base/Achievements/texMajorMultikillIcon.png";

		public const string texMaxHealingShrineIcon = "RoR2/Base/Achievements/texMaxHealingShrineIcon.png";

		public const string texMercClearGameMonsoonIcon = "RoR2/Base/Achievements/texMercClearGameMonsoonIcon.png";

		public const string texMercCompleteTrialWithFullHealthIcon = "RoR2/Base/Achievements/texMercCompleteTrialWithFullHealthIcon.png";

		public const string texMercDontTouchGroundIcon = "RoR2/Base/Achievements/texMercDontTouchGroundIcon.png";

		public const string texMercXSkillsInYSecondsIcon = "RoR2/Base/Achievements/texMercXSkillsInYSecondsIcon.png";

		public const string texMoveSpeedIcon = "RoR2/Base/Achievements/texMoveSpeedIcon.png";

		public const string texMultiCombatShrineIcon = "RoR2/Base/Achievements/texMultiCombatShrineIcon.png";

		public const string texNeverBackDownIcon = "RoR2/Base/Achievements/texNeverBackDownIcon.png";

		public const string texObtainArtifactBombIcon = "RoR2/Base/Achievements/texObtainArtifactBombIcon.png";

		public const string texObtainArtifactCommandIcon = "RoR2/Base/Achievements/texObtainArtifactCommandIcon.png";

		public const string texObtainArtifactEliteOnlyIcon = "RoR2/Base/Achievements/texObtainArtifactEliteOnlyIcon.png";

		public const string texObtainArtifactEnigmaIcon = "RoR2/Base/Achievements/texObtainArtifactEnigmaIcon.png";

		public const string texObtainArtifactFriendlyFireIcon = "RoR2/Base/Achievements/texObtainArtifactFriendlyFireIcon.png";

		public const string texObtainArtifactGlassIcon = "RoR2/Base/Achievements/texObtainArtifactGlassIcon.png";

		public const string texObtainArtifactMixEnemyIcon = "RoR2/Base/Achievements/texObtainArtifactMixEnemyIcon.png";

		public const string texObtainArtifactMonsterTeamGainsItemsIcon = "RoR2/Base/Achievements/texObtainArtifactMonsterTeamGainsItemsIcon.png";

		public const string texObtainArtifactRandomSurvivorOnRespawnIcon = "RoR2/Base/Achievements/texObtainArtifactRandomSurvivorOnRespawnIcon.png";

		public const string texObtainArtifactSacrificeIcon = "RoR2/Base/Achievements/texObtainArtifactSacrificeIcon.png";

		public const string texObtainArtifactShadowCloneIcon = "RoR2/Base/Achievements/texObtainArtifactShadowCloneIcon.png";

		public const string texObtainArtifactSingleMonsterTypeIcon = "RoR2/Base/Achievements/texObtainArtifactSingleMonsterTypeIcon.png";

		public const string texObtainArtifactSwarmsIcon = "RoR2/Base/Achievements/texObtainArtifactSwarmsIcon.png";

		public const string texObtainArtifactTeamDeathIcon = "RoR2/Base/Achievements/texObtainArtifactTeamDeathIcon.png";

		public const string texObtainArtifactWeakAssKneesIcon = "RoR2/Base/Achievements/texObtainArtifactWeakAssKneesIcon.png";

		public const string texObtainArtifactWispOnDeathIcon = "RoR2/Base/Achievements/texObtainArtifactWispOnDeathIcon.png";

		public const string texPlaceholderAchievement = "RoR2/Base/Achievements/texPlaceholderAchievement.png";

		public const string texRepeatedlyDuplicateItemsIcon = "RoR2/Base/Achievements/texRepeatedlyDuplicateItemsIcon.png";

		public const string texRepeatFirstTeleporterIcon = "RoR2/Base/Achievements/texRepeatFirstTeleporterIcon.png";

		public const string texRescueTreebotIcon = "RoR2/Base/Achievements/texRescueTreebotIcon.png";

		public const string texStayAlive1Icon = "RoR2/Base/Achievements/texStayAlive1Icon.png";

		public const string texSuicideHermitCrabsIcon = "RoR2/Base/Achievements/texSuicideHermitCrabsIcon.png";

		public const string texToolbotBeatArenaLaterIcon = "RoR2/Base/Achievements/texToolbotBeatArenaLaterIcon.png";

		public const string texToolbotClearGameMonsoonIcon = "RoR2/Base/Achievements/texToolbotClearGameMonsoonIcon.png";

		public const string texToolbotGuardTeleporterIcon = "RoR2/Base/Achievements/texToolbotGuardTeleporterIcon.png";

		public const string texToolbotKillImpBossWithBfgIcon = "RoR2/Base/Achievements/texToolbotKillImpBossWithBfgIcon.png";

		public const string texTotalDronesRepairedIcon = "RoR2/Base/Achievements/texTotalDronesRepairedIcon.png";

		public const string texTotalMoneyCollectedIcon = "RoR2/Base/Achievements/texTotalMoneyCollectedIcon.png";

		public const string texTreebotBigHealIcon = "RoR2/Base/Achievements/texTreebotBigHealIcon.png";

		public const string texTreebotClearGameMonsoonIcon = "RoR2/Base/Achievements/texTreebotClearGameMonsoonIcon.png";

		public const string texTreebotDunkClayBossIcon = "RoR2/Base/Achievements/texTreebotDunkClayBossIcon.png";

		public const string texTreebotLowHealthTeleporterIcon = "RoR2/Base/Achievements/texTreebotLowHealthTeleporterIcon.png";

		public const string texUseThreePortalsIcon = "RoR2/Base/Achievements/texUseThreePortalsIcon.png";

		public const string texArtifactCompoundCircleMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundCircleMask.png";

		public const string texArtifactCompoundCircleNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundCircleNormal.png";

		public const string texArtifactCompoundDiamondMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundDiamondMask.png";

		public const string texArtifactCompoundDiamondNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundDiamondNormal.png";

		public const string texArtifactCompoundFrameMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundFrameMask.png";

		public const string texArtifactCompoundFrameNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundFrameNormal.png";

		public const string texArtifactCompoundScavScarMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundScavScarMask.png";

		public const string texArtifactCompoundScavScarNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundScavScarNormal.png";

		public const string texArtifactCompoundSquareMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundSquareMask.png";

		public const string texArtifactCompoundSquareNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundSquareNormal.png";

		public const string texArtifactCompoundTriangleMask = "RoR2/Base/ArtifactCompounds/texArtifactCompoundTriangleMask.png";

		public const string texArtifactCompoundTriangleNormal = "RoR2/Base/ArtifactCompounds/texArtifactCompoundTriangleNormal.png";

		public const string texArtifactBombDisabled = "RoR2/Base/Bomb/texArtifactBombDisabled.png";

		public const string texArtifactBombEnabled = "RoR2/Base/Bomb/texArtifactBombEnabled.png";

		public const string texArtifactCommandDisabled = "RoR2/Base/Command/texArtifactCommandDisabled.png";

		public const string texArtifactCommandEnabled = "RoR2/Base/Command/texArtifactCommandEnabled.png";

		public const string texArtifactEliteOnlyDisabled = "RoR2/Base/EliteOnly/texArtifactEliteOnlyDisabled.png";

		public const string texArtifactEliteOnlyEnabled = "RoR2/Base/EliteOnly/texArtifactEliteOnlyEnabled.png";

		public const string texArtifactRandomEquipmentDisabled = "RoR2/Base/Enigma/texArtifactRandomEquipmentDisabled.png";

		public const string texArtifactRandomEquipmentEnabled = "RoR2/Base/Enigma/texArtifactRandomEquipmentEnabled.png";

		public const string texArtifactFriendlyFireDisabled = "RoR2/Base/FriendlyFire/texArtifactFriendlyFireDisabled.png";

		public const string texArtifactFriendlyFireEnabled = "RoR2/Base/FriendlyFire/texArtifactFriendlyFireEnabled.png";

		public const string texArtifactGlassDisabled = "RoR2/Base/Glass/texArtifactGlassDisabled.png";

		public const string texArtifactGlassEnabled = "RoR2/Base/Glass/texArtifactGlassEnabled.png";

		public const string texArtifactMixEnemyDisabled = "RoR2/Base/MixEnemy/texArtifactMixEnemyDisabled.png";

		public const string texArtifactMixEnemyEnabled = "RoR2/Base/MixEnemy/texArtifactMixEnemyEnabled.png";

		public const string texArtifactEvolutionDisabled = "RoR2/Base/MonsterTeamGainsItems/texArtifactEvolutionDisabled.png";

		public const string texArtifactEvolutionEnabled = "RoR2/Base/MonsterTeamGainsItems/texArtifactEvolutionEnabled.png";

		public const string texArtifactMetamorphDisabled = "RoR2/Base/RandomSurvivorOnRespawn/texArtifactMetamorphDisabled.png";

		public const string texArtifactMetamorphEnabled = "RoR2/Base/RandomSurvivorOnRespawn/texArtifactMetamorphEnabled.png";

		public const string texArtifactSacrificeDisabled = "RoR2/Base/Sacrifice/texArtifactSacrificeDisabled.png";

		public const string texArtifactSacrificeEnabled = "RoR2/Base/Sacrifice/texArtifactSacrificeEnabled.png";

		public const string texArtifactShadowCloneDisabled = "RoR2/Base/ShadowClone/texArtifactShadowCloneDisabled.png";

		public const string texArtifactShadowCloneEnabled = "RoR2/Base/ShadowClone/texArtifactShadowCloneEnabled.png";

		public const string texArtifactKinDisabled = "RoR2/Base/SingleMonsterType/texArtifactKinDisabled.png";

		public const string texArtifactKinEnabled = "RoR2/Base/SingleMonsterType/texArtifactKinEnabled.png";

		public const string texArtifactSwarmsDisabled = "RoR2/Base/Swarms/texArtifactSwarmsDisabled.png";

		public const string texArtifactSwarmsEnabled = "RoR2/Base/Swarms/texArtifactSwarmsEnabled.png";

		public const string texArtifactDeathDisabled = "RoR2/Base/TeamDeath/texArtifactDeathDisabled.png";

		public const string texArtifactDeathEnabled = "RoR2/Base/TeamDeath/texArtifactDeathEnabled.png";

		public const string texArtifactFallDamageDisabled = "RoR2/Base/WeakAssKnees/texArtifactFallDamageDisabled.png";

		public const string texArtifactFallDamageEnabled = "RoR2/Base/WeakAssKnees/texArtifactFallDamageEnabled.png";

		public const string texArtifactWispDisabled = "RoR2/Base/WispOnDeath/texArtifactWispDisabled.png";

		public const string texArtifactWispEnabled = "RoR2/Base/WispOnDeath/texArtifactWispEnabled.png";

		public const string texUnidentifiedKillerIcon = "RoR2/Base/ArtifactShell/texUnidentifiedKillerIcon.png";

		public const string texBanditKnifeEmissive = "RoR2/Base/Bandit2/texBanditKnifeEmissive.png";

		public const string texBanditKnifeFresnelMask = "RoR2/Base/Bandit2/texBanditKnifeFresnelMask.png";

		public const string texBanditKnifeNormal = "RoR2/Base/Bandit2/texBanditKnifeNormal.png";

		public const string texBanditRevolverFresnelMask = "RoR2/Base/Bandit2/texBanditRevolverFresnelMask.png";

		public const string texBanditShotgunAltDiffuse = "RoR2/Base/Bandit2/texBanditShotgunAltDiffuse.png";

		public const string texBanditShotgunDiffuse = "RoR2/Base/Bandit2/texBanditShotgunDiffuse.png";

		public const string texBanditShotgunEmissive = "RoR2/Base/Bandit2/texBanditShotgunEmissive.png";

		public const string texBandit2SkillIcons = "RoR2/Base/Bandit2/texBandit2SkillIcons.png";

		public const string texBandit2AltEmission = "RoR2/Base/Bandit2/texBandit2AltEmission.png";

		public const string texBandit2CoatAltDiffuse = "RoR2/Base/Bandit2/texBandit2CoatAltDiffuse.png";

		public const string texBandit2DiffuseAlt = "RoR2/Base/Bandit2/texBandit2DiffuseAlt.png";

		public const string texBandit2CoatDiffuse = "RoR2/Base/Bandit2/texBandit2CoatDiffuse.png";

		public const string texBandit2CoatNormal = "RoR2/Base/Bandit2/texBandit2CoatNormal.png";

		public const string texBandit2Diffuse = "RoR2/Base/Bandit2/texBandit2Diffuse.png";

		public const string texBandit2Emission = "RoR2/Base/Bandit2/texBandit2Emission.png";

		public const string texBandit2Normal = "RoR2/Base/Bandit2/texBandit2Normal.png";

		public const string texBanditCoatDiffuse = "RoR2/Base/Bandit2/texBanditCoatDiffuse.png";

		public const string texBanditCoatEmissive = "RoR2/Base/Bandit2/texBanditCoatEmissive.png";

		public const string texBanditIcon = "RoR2/Base/Bandit2/texBanditIcon.png";

		public const string texBuffBanditSkullIcon = "RoR2/Base/Bandit2/texBuffBanditSkullIcon.tif";

		public const string texBuffSuperBleedingIcon = "RoR2/Base/Bandit2/texBuffSuperBleedingIcon.tif";

		public const string texBandit2BackstabMask = "RoR2/Base/Bandit2/texBandit2BackstabMask.png";

		public const string texBanditSkullMask = "RoR2/Base/Bandit2/texBanditSkullMask.png";

		public const string BeetleBody = "RoR2/Base/Beetle/BeetleBody.png";

		public const string texSulfurBeetleDiffuse = "RoR2/Base/Beetle/texSulfurBeetleDiffuse.png";

		public const string texSulfurBeetleFresnelMask = "RoR2/Base/Beetle/texSulfurBeetleFresnelMask.png";

		public const string texBeetleDiffuse = "RoR2/Base/Beetle/texBeetleDiffuse.png";

		public const string texBeetleEmission = "RoR2/Base/Beetle/texBeetleEmission.png";

		public const string BeetleGuardBody = "RoR2/Base/Beetle/BeetleGuardBody.png";

		public const string texSulfurBeetleGuardDiffuse = "RoR2/Base/Beetle/texSulfurBeetleGuardDiffuse.png";

		public const string texSulfurBeetleGuardFresnelMask = "RoR2/Base/Beetle/texSulfurBeetleGuardFresnelMask.png";

		public const string BeetleQueen2Body = "RoR2/Base/Beetle/BeetleQueen2Body.png";

		public const string texAcidDecalDiffuse = "RoR2/Base/Beetle/texAcidDecalDiffuse.png";

		public const string texBuggyMask = "RoR2/Base/Beetle/texBuggyMask.png";

		public const string texSulfurBeetleQueenDiffuse = "RoR2/Base/Beetle/texSulfurBeetleQueenDiffuse.png";

		public const string texSulfurBeetleQueenFresnelMask = "RoR2/Base/Beetle/texSulfurBeetleQueenFresnelMask.png";

		public const string texAcidDecalMask = "RoR2/Base/Beetle/texAcidDecalMask.png";

		public const string texAcidDecalNormal = "RoR2/Base/Beetle/texAcidDecalNormal.png";

		public const string texBeetleDiffuse2 = "RoR2/Base/Beetle/texBeetleDiffuse2.png";

		public const string texBeetleGrubRangeIndicator = "RoR2/Base/Beetle/texBeetleGrubRangeIndicator.png";

		public const string texBeetleGuardAllyDiffuse = "RoR2/Base/Beetle/texBeetleGuardAllyDiffuse.png";

		public const string texBeetleGuardAllyFresnelMask = "RoR2/Base/Beetle/texBeetleGuardAllyFresnelMask.png";

		public const string texBeetleGuardDiffuse = "RoR2/Base/Beetle/texBeetleGuardDiffuse.png";

		public const string texBeetleGuardEmission = "RoR2/Base/Beetle/texBeetleGuardEmission.png";

		public const string texBeetleGuardNormal = "RoR2/Base/Beetle/texBeetleGuardNormal.png";

		public const string texBeetleGuardShellMask = "RoR2/Base/Beetle/texBeetleGuardShellMask.png";

		public const string texBeetleNormal = "RoR2/Base/Beetle/texBeetleNormal.png";

		public const string texBeetleQueenDiffuse = "RoR2/Base/Beetle/texBeetleQueenDiffuse.png";

		public const string texBeetleQueenEyeMask = "RoR2/Base/Beetle/texBeetleQueenEyeMask.png";

		public const string texBeetleQueenNormal = "RoR2/Base/Beetle/texBeetleQueenNormal.png";

		public const string texBeetleQueenSplatmap = "RoR2/Base/Beetle/texBeetleQueenSplatmap.png";

		public const string texBeetleStrike = "RoR2/Base/Beetle/texBeetleStrike.png";

		public const string texBuffBeetleJuiceIcon = "RoR2/Base/Beetle/texBuffBeetleJuiceIcon.tif";

		public const string BellBody = "RoR2/Base/Bell/BellBody.png";

		public const string texBellBallDiffuse = "RoR2/Base/Bell/texBellBallDiffuse.png";

		public const string texBellBallNormal = "RoR2/Base/Bell/texBellBallNormal.png";

		public const string texBellDeviceDiffuse = "RoR2/Base/Bell/texBellDeviceDiffuse.png";

		public const string texBellDeviceNormal = "RoR2/Base/Bell/texBellDeviceNormal.png";

		public const string texBellDiffuse = "RoR2/Base/Bell/texBellDiffuse.png";

		public const string texBellNormal = "RoR2/Base/Bell/texBellNormal.png";

		public const string texBirdsharkDiffuse = "RoR2/Base/Birdshark/texBirdsharkDiffuse.png";

		public const string BisonBody = "RoR2/Base/Bison/BisonBody.png";

		public const string texBisonDiffuse = "RoR2/Base/Bison/texBisonDiffuse.png";

		public const string texBisonHairDiffuse = "RoR2/Base/Bison/texBisonHairDiffuse.png";

		public const string texBisonNormal = "RoR2/Base/Bison/texBisonNormal.png";

		public const string texBrotherIcon = "RoR2/Base/Brother/texBrotherIcon.png";

		public const string texBrotherClothRipped = "RoR2/Base/Brother/texBrotherClothRipped.png";

		public const string texBrotherDiffuse = "RoR2/Base/Brother/texBrotherDiffuse.png";

		public const string texBrotherEyeDiffuse = "RoR2/Base/Brother/texBrotherEyeDiffuse.png";

		public const string texBrotherEyeHurtDiffuse = "RoR2/Base/Brother/texBrotherEyeHurtDiffuse.png";

		public const string texBrotherNormal = "RoR2/Base/Brother/texBrotherNormal.png";

		public const string texCaptainSupplyRadius = "RoR2/Base/Captain/texCaptainSupplyRadius.png";

		public const string texCrosshairDrone1 = "RoR2/Base/Captain/texCrosshairDrone1.png";

		public const string texScanlineMask = "RoR2/Base/Captain/texScanlineMask.jpg";

		public const string texWarning = "RoR2/Base/Captain/texWarning.png";

		public const string texCaptainJacketDiffuse = "RoR2/Base/Captain/texCaptainJacketDiffuse.png";

		public const string texCaptainJacketDiffuseAlt = "RoR2/Base/Captain/texCaptainJacketDiffuseAlt.png";

		public const string texCaptainJacketNormal = "RoR2/Base/Captain/texCaptainJacketNormal.png";

		public const string texCaptainPalette = "RoR2/Base/Captain/texCaptainPalette.psd";

		public const string texCaptainPaletteAlt = "RoR2/Base/Captain/texCaptainPaletteAlt.psd";

		public const string texCaptainCrosshairInner = "RoR2/Base/Captain/texCaptainCrosshairInner.png";

		public const string texCaptainCrosshairOuter = "RoR2/Base/Captain/texCaptainCrosshairOuter.png";

		public const string texCaptainSkillIcons = "RoR2/Base/Captain/texCaptainSkillIcons.png";

		public const string texCaptainIcon = "RoR2/Base/Captain/texCaptainIcon.png";

		public const string texRampCrosshair2 = "RoR2/Base/Captain/texRampCrosshair2.png";

		public const string texClayFlowmap = "RoR2/Base/Clay/texClayFlowmap.png";

		public const string ClayBossBody = "RoR2/Base/ClayBoss/ClayBossBody.png";

		public const string texClayBossDiffuse = "RoR2/Base/ClayBoss/texClayBossDiffuse.png";

		public const string texClayBossNormal = "RoR2/Base/ClayBoss/texClayBossNormal.png";

		public const string texClayProjectileDiffuse = "RoR2/Base/ClayBoss/texClayProjectileDiffuse.png";

		public const string texClayProjectileMask = "RoR2/Base/ClayBoss/texClayProjectileMask.png";

		public const string ClayBruiserBody = "RoR2/Base/ClayBruiser/ClayBruiserBody.png";

		public const string texClayBruiserDeathDecalMask = "RoR2/Base/ClayBruiser/texClayBruiserDeathDecalMask.png";

		public const string texClayBruiserDiffuse = "RoR2/Base/ClayBruiser/texClayBruiserDiffuse.png";

		public const string texClayBruiserNormal = "RoR2/Base/ClayBruiser/texClayBruiserNormal.png";

		public const string texCommandoSkillIcons = "RoR2/Base/Commando/texCommandoSkillIcons.png";

		public const string texCommandoIcon = "RoR2/Base/Commando/texCommandoIcon.png";

		public const string texCommandoPaletteDiffuse = "RoR2/Base/Commando/texCommandoPaletteDiffuse.png";

		public const string texCommandoPaletteDiffuseAlt = "RoR2/Base/Commando/texCommandoPaletteDiffuseAlt.psd";

		public const string texCommandoPaletteEmission = "RoR2/Base/Commando/texCommandoPaletteEmission.png";

		public const string CrocoBody = "RoR2/Base/Croco/CrocoBody.png";

		public const string texCrocoSkillIcons = "RoR2/Base/Croco/texCrocoSkillIcons.png";

		public const string texBuffRegenBoostIcon = "RoR2/Base/Croco/texBuffRegenBoostIcon.tif";

		public const string texCrocoAltDiffuse = "RoR2/Base/Croco/texCrocoAltDiffuse.png";

		public const string texCrocoBiteMask = "RoR2/Base/Croco/texCrocoBiteMask.png";

		public const string texCrocoDecalMask = "RoR2/Base/Croco/texCrocoDecalMask.png";

		public const string texCrocoDiffuse = "RoR2/Base/Croco/texCrocoDiffuse.png";

		public const string texCrocoEmission = "RoR2/Base/Croco/texCrocoEmission.png";

		public const string texCrocoNormal = "RoR2/Base/Croco/texCrocoNormal.png";

		public const string texCrocoPoisonMask = "RoR2/Base/Croco/texCrocoPoisonMask.png";

		public const string texCrocoSlashMask1 = "RoR2/Base/Croco/texCrocoSlashMask 1.png";

		public const string texCrocoSlashMask = "RoR2/Base/Croco/texCrocoSlashMask.png";

		public const string texCrocoSlashMaskSharp = "RoR2/Base/Croco/texCrocoSlashMaskSharp.png";

		public const string texCrocoSpinesDiffuse = "RoR2/Base/Croco/texCrocoSpinesDiffuse.png";

		public const string texCrocoSpinesMask = "RoR2/Base/Croco/texCrocoSpinesMask.png";

		public const string texPoisonMask = "RoR2/Base/Croco/texPoisonMask.png";

		public const string texPoisonNormal = "RoR2/Base/Croco/texPoisonNormal.png";

		public const string texBackupDroneBodyIcon = "RoR2/Base/Drones/texBackupDroneBodyIcon.png";

		public const string texDrone1Icon = "RoR2/Base/Drones/texDrone1Icon.png";

		public const string texDrone2Icon = "RoR2/Base/Drones/texDrone2Icon.png";

		public const string EmergencyDroneBody = "RoR2/Base/Drones/EmergencyDroneBody.png";

		public const string EquipmentDroneBody = "RoR2/Base/Drones/EquipmentDroneBody.png";

		public const string FlameDroneBody = "RoR2/Base/Drones/FlameDroneBody.png";

		public const string MegaDroneBody = "RoR2/Base/Drones/MegaDroneBody.png";

		public const string texMissileDroneIcon = "RoR2/Base/Drones/texMissileDroneIcon.png";

		public const string texDroneBlades = "RoR2/Base/Drones/texDroneBlades.png";

		public const string texTurret1Diffuse = "RoR2/Base/Drones/texTurret1Diffuse.png";

		public const string texTurret1Icon = "RoR2/Base/Drones/texTurret1Icon.png";

		public const string ElectricWormBody = "RoR2/Base/ElectricWorm/ElectricWormBody.png";

		public const string texEngiSkillIcons = "RoR2/Base/Engi/texEngiSkillIcons.png";

		public const string texEngiIcon = "RoR2/Base/Engi/texEngiIcon.png";

		public const string texUIEngiMissileLockedOn = "RoR2/Base/Engi/texUIEngiMissileLockedOn.png";

		public const string texUIEngiMissilePaint = "RoR2/Base/Engi/texUIEngiMissilePaint.png";

		public const string texEngiTurretDiffuse = "RoR2/Base/Engi/texEngiTurretDiffuse.png";

		public const string texEngiTurretEmission = "RoR2/Base/Engi/texEngiTurretEmission.png";

		public const string texEngiTurretIcon = "RoR2/Base/Engi/texEngiTurretIcon.png";

		public const string texEngiFlare = "RoR2/Base/Engi/texEngiFlare.png";

		public const string texEngiDiffuse = "RoR2/Base/Engi/texEngiDiffuse.png";

		public const string texEngiDiffuseAlt = "RoR2/Base/Engi/texEngiDiffuseAlt.png";

		public const string texEngiEmission = "RoR2/Base/Engi/texEngiEmission.png";

		public const string texEngiEmissionAlt = "RoR2/Base/Engi/texEngiEmissionAlt.png";

		public const string texEngiShield = "RoR2/Base/Engi/texEngiShield.png";

		public const string texEngiShieldBlurred = "RoR2/Base/Engi/texEngiShieldBlurred.png";

		public const string GolemBody = "RoR2/Base/Golem/GolemBody.png";

		public const string texGolemNormal1 = "RoR2/Base/Golem/texGolemNormal 1.png";

		public const string texNatureGolemDiffuse = "RoR2/Base/Golem/texNatureGolemDiffuse.png";

		public const string texSandyGolemDiffuse = "RoR2/Base/Golem/texSandyGolemDiffuse.png";

		public const string texZap1Mask = "RoR2/Base/Golem/texZap1Mask.png";

		public const string texSnowyGolemDiffuse = "RoR2/Base/Golem/texSnowyGolemDiffuse.png";

		public const string texGolemDiffuse = "RoR2/Base/Golem/texGolemDiffuse.png";

		public const string texGolemEmission = "RoR2/Base/Golem/texGolemEmission.png";

		public const string texGolemNormal = "RoR2/Base/Golem/texGolemNormal.png";

		public const string GrandparentBody = "RoR2/Base/Grandparent/GrandparentBody.png";

		public const string texBuffOverheat = "RoR2/Base/Grandparent/texBuffOverheat.tif";

		public const string texGrandparentDetailBDiffuse = "RoR2/Base/Grandparent/texGrandparentDetailBDiffuse.png";

		public const string texGrandparentDetailBNormal = "RoR2/Base/Grandparent/texGrandparentDetailBNormal.png";

		public const string texGrandparentDetailGDiffuse = "RoR2/Base/Grandparent/texGrandparentDetailGDiffuse.png";

		public const string texGrandparentDetailGNormal = "RoR2/Base/Grandparent/texGrandparentDetailGNormal.png";

		public const string texGrandparentDiffuse = "RoR2/Base/Grandparent/texGrandparentDiffuse.png";

		public const string texGrandparentEmission = "RoR2/Base/Grandparent/texGrandparentEmission.png";

		public const string texGrandparentNormal = "RoR2/Base/Grandparent/texGrandparentNormal.png";

		public const string texGrandparentSplat = "RoR2/Base/Grandparent/texGrandparentSplat.png";

		public const string GravekeeperBody = "RoR2/Base/Gravekeeper/GravekeeperBody.png";

		public const string texChainTrailMask = "RoR2/Base/Gravekeeper/texChainTrailMask.png";

		public const string texChainTrailNormal = "RoR2/Base/Gravekeeper/texChainTrailNormal.png";

		public const string texGravekeeperFurDiffuse = "RoR2/Base/Gravekeeper/texGravekeeperFurDiffuse.png";

		public const string texGravekeeperTestDiffuse = "RoR2/Base/Gravekeeper/texGravekeeperTestDiffuse.png";

		public const string GreaterWispBody = "RoR2/Base/GreaterWisp/GreaterWispBody.png";

		public const string texGreaterWispCracks = "RoR2/Base/GreaterWisp/texGreaterWispCracks.png";

		public const string texGreaterWispDiffuse = "RoR2/Base/GreaterWisp/texGreaterWispDiffuse.png";

		public const string texHandDiffuse = "RoR2/Base/HAND/texHandDiffuse.png";

		public const string texHandEmission = "RoR2/Base/HAND/texHandEmission.png";

		public const string texHereticBodyDiffuse = "RoR2/Base/Heretic/texHereticBody_Diffuse.png";

		public const string texHereticBodyEmission = "RoR2/Base/Heretic/texHereticBody_Emission.png";

		public const string texHereticBodyNormals = "RoR2/Base/Heretic/texHereticBody_Normals.png";

		public const string texHereticClothesDiffuse = "RoR2/Base/Heretic/texHereticClothes_Diffuse.png";

		public const string texHereticClothesNormal = "RoR2/Base/Heretic/texHereticClothes_Normal.png";

		public const string texHereticFeather = "RoR2/Base/Heretic/texHereticFeather.png";

		public const string texHereticFeatherEmission = "RoR2/Base/Heretic/texHereticFeatherEmission.png";

		public const string texHereticIcon = "RoR2/Base/Heretic/texHereticIcon.png";

		public const string HermitCrabBody = "RoR2/Base/HermitCrab/HermitCrabBody.png";

		public const string texHermitCrabDiffuse = "RoR2/Base/HermitCrab/texHermitCrabDiffuse.png";

		public const string texHermitCrabNormal = "RoR2/Base/HermitCrab/texHermitCrabNormal.png";

		public const string texHuntressDiffuseAlt = "RoR2/Base/Huntress/texHuntressDiffuseAlt.png";

		public const string texHuntressSkillIcons = "RoR2/Base/Huntress/texHuntressSkillIcons.png";

		public const string texBowDiffuse = "RoR2/Base/Huntress/texBowDiffuse.png";

		public const string texBowEmission = "RoR2/Base/Huntress/texBowEmission.png";

		public const string texHuntressArrowBigMask = "RoR2/Base/Huntress/texHuntressArrowBigMask.png";

		public const string texHuntressArrowMask = "RoR2/Base/Huntress/texHuntressArrowMask.png";

		public const string texHuntressDiffuse = "RoR2/Base/Huntress/texHuntressDiffuse.png";

		public const string texHuntressEmission = "RoR2/Base/Huntress/texHuntressEmission.png";

		public const string texHuntressIcon = "RoR2/Base/Huntress/texHuntressIcon.png";

		public const string texHuntressNormal = "RoR2/Base/Huntress/texHuntressNormal.png";

		public const string texHuntressScarfDiffuseAlt = "RoR2/Base/Huntress/texHuntressScarfDiffuseAlt.png";

		public const string ImpBody = "RoR2/Base/Imp/ImpBody.png";

		public const string texImpBossDiffuse = "RoR2/Base/Imp/texImpBossDiffuse.png";

		public const string texImpBossEmission = "RoR2/Base/Imp/texImpBossEmission.png";

		public const string texImpBossNormals = "RoR2/Base/Imp/texImpBossNormals.png";

		public const string texImpDiffuse = "RoR2/Base/Imp/texImpDiffuse.png";

		public const string texImpEmission = "RoR2/Base/Imp/texImpEmission.png";

		public const string texImpNormal = "RoR2/Base/Imp/texImpNormal.png";

		public const string texImpSwipeMask = "RoR2/Base/Imp/texImpSwipeMask.png";

		public const string ImpBossBody = "RoR2/Base/ImpBoss/ImpBossBody.png";

		public const string JellyfishBody = "RoR2/Base/Jellyfish/JellyfishBody.png";

		public const string texJellyfishAO = "RoR2/Base/Jellyfish/texJellyfishAO.png";

		public const string texJellyfishDiffuse = "RoR2/Base/Jellyfish/texJellyfishDiffuse.png";

		public const string texJellyfishEmission = "RoR2/Base/Jellyfish/texJellyfishEmission.png";

		public const string texJellyfishNormal = "RoR2/Base/Jellyfish/texJellyfishNormal.png";

		public const string LemurianBody = "RoR2/Base/Lemurian/LemurianBody.png";

		public const string texLemurianBruiserDiffuse = "RoR2/Base/Lemurian/texLemurianBruiserDiffuse.png";

		public const string texLemurianBruiserEmission = "RoR2/Base/Lemurian/texLemurianBruiserEmission.png";

		public const string texLemurianBruiserNormal = "RoR2/Base/Lemurian/texLemurianBruiserNormal.png";

		public const string texLemurianDiffuse = "RoR2/Base/Lemurian/texLemurianDiffuse.tga";

		public const string texLemurianEmission = "RoR2/Base/Lemurian/texLemurianEmission.png";

		public const string texLemurianNormal = "RoR2/Base/Lemurian/texLemurianNormal.png";

		public const string texLemurianSlash = "RoR2/Base/Lemurian/texLemurianSlash.png";

		public const string LemurianBruiserBody = "RoR2/Base/LemurianBruiser/LemurianBruiserBody.png";

		public const string LoaderBody = "RoR2/Base/Loader/LoaderBody.png";

		public const string texLoaderSkillIcons = "RoR2/Base/Loader/texLoaderSkillIcons.png";

		public const string texLoaderPilotDiffuse = "RoR2/Base/Loader/texLoaderPilotDiffuse.png";

		public const string texLoaderPilotDiffuseAlt = "RoR2/Base/Loader/texLoaderPilotDiffuseAlt.png";

		public const string texLoaderPilotEmission = "RoR2/Base/Loader/texLoaderPilotEmission.png";

		public const string texLoaderRopeNormal = "RoR2/Base/Loader/texLoaderRopeNormal.png";

		public const string LunarExploderBody = "RoR2/Base/LunarExploder/LunarExploderBody.png";

		public const string LunarGolemBody = "RoR2/Base/LunarGolem/LunarGolemBody.png";

		public const string texBuffLunarShellIcon = "RoR2/Base/LunarGolem/texBuffLunarShellIcon.tif";

		public const string texLunarGolemDiffuse = "RoR2/Base/LunarGolem/texLunarGolemDiffuse.png";

		public const string texLunarGolemEmmission = "RoR2/Base/LunarGolem/texLunarGolemEmmission.png";

		public const string texLunarGolemNormal = "RoR2/Base/LunarGolem/texLunarGolemNormal.png";

		public const string LunarWispBody = "RoR2/Base/LunarWisp/LunarWispBody.png";

		public const string texChargeRing = "RoR2/Base/LunarWisp/texChargeRing.png";

		public const string texLunarWispDiffuse = "RoR2/Base/LunarWisp/texLunarWispDiffuse.png";

		public const string texLunarWispNormal = "RoR2/Base/LunarWisp/texLunarWispNormal.png";

		public const string texLunarWispTracerLead = "RoR2/Base/LunarWisp/texLunarWispTracerLead.png";

		public const string texMageMatrixMask = "RoR2/Base/Mage/texMageMatrixMask.png";

		public const string texMageMatrixMaskDirectional = "RoR2/Base/Mage/texMageMatrixMaskDirectional.png";

		public const string texMageMatrixTri = "RoR2/Base/Mage/texMageMatrixTri.png";

		public const string texMageSkillIcons = "RoR2/Base/Mage/texMageSkillIcons.png";

		public const string texMageDiffuse = "RoR2/Base/Mage/texMageDiffuse.png";

		public const string texMageDiffuseAlt = "RoR2/Base/Mage/texMageDiffuseAlt.png";

		public const string texMageIcon = "RoR2/Base/Mage/texMageIcon.png";

		public const string texMageMask = "RoR2/Base/Mage/texMageMask.png";

		public const string MagmaWormBody = "RoR2/Base/MagmaWorm/MagmaWormBody.png";

		public const string texMagma1 = "RoR2/Base/MagmaWorm/texMagma1.png";

		public const string texMagmaWormDiffuse = "RoR2/Base/MagmaWorm/texMagmaWormDiffuse.png";

		public const string texMagmaWormDiffuseOff = "RoR2/Base/MagmaWorm/texMagmaWormDiffuseOff.png";

		public const string texMagmaWormHeight = "RoR2/Base/MagmaWorm/texMagmaWormHeight.png";

		public const string texMagmaWormHeight2 = "RoR2/Base/MagmaWorm/texMagmaWormHeight2.png";

		public const string texMagmaWormNormal = "RoR2/Base/MagmaWorm/texMagmaWormNormal.png";

		public const string texMagmaWormSplat = "RoR2/Base/MagmaWorm/texMagmaWormSplat.png";

		public const string texMercSkillIcons = "RoR2/Base/Merc/texMercSkillIcons.png";

		public const string texBuffMercExposeIcon = "RoR2/Base/Merc/texBuffMercExposeIcon.tif";

		public const string texMercAltDiffuse = "RoR2/Base/Merc/texMercAltDiffuse.png";

		public const string texMercAltEmission = "RoR2/Base/Merc/texMercAltEmission.png";

		public const string texMercDiffuse = "RoR2/Base/Merc/texMercDiffuse.png";

		public const string texMercExposedMask = "RoR2/Base/Merc/texMercExposedMask.png";

		public const string texMercIcon = "RoR2/Base/Merc/texMercIcon.png";

		public const string texMercNormal = "RoR2/Base/Merc/texMercNormal.png";

		public const string texMercSwipeMask = "RoR2/Base/Merc/texMercSwipeMask.png";

		public const string texMercSwordDiffuse = "RoR2/Base/Merc/texMercSwordDiffuse.png";

		public const string texMercSwordMask = "RoR2/Base/Merc/texMercSwordMask.png";

		public const string texMercTestingDiffuse = "RoR2/Base/Merc/texMercTestingDiffuse.png";

		public const string MiniMushroomBody = "RoR2/Base/MiniMushroom/MiniMushroomBody.png";

		public const string texMiniMushroomDiffuse = "RoR2/Base/MiniMushroom/texMiniMushroomDiffuse.png";

		public const string texMiniMushroomEmission = "RoR2/Base/MiniMushroom/texMiniMushroomEmission.png";

		public const string texMiniMushroomNormal = "RoR2/Base/MiniMushroom/texMiniMushroomNormal.png";

		public const string texMushDecalMask = "RoR2/Base/MiniMushroom/texMushDecalMask.png";

		public const string texNullifierAllyDiffuse = "RoR2/Base/Nullifier/texNullifierAllyDiffuse.png";

		public const string NullifierAllyBody = "RoR2/Base/Nullifier/NullifierAllyBody.png";

		public const string NullifierBody = "RoR2/Base/Nullifier/NullifierBody.png";

		public const string texBuffNullifiedIcon = "RoR2/Base/Nullifier/texBuffNullifiedIcon.tif";

		public const string texBuffNullifyStackIcon = "RoR2/Base/Nullifier/texBuffNullifyStackIcon.tif";

		public const string texNullifierDiffuse = "RoR2/Base/Nullifier/texNullifierDiffuse.png";

		public const string texNullifierDiffuse2 = "RoR2/Base/Nullifier/texNullifierDiffuse2.png";

		public const string texNullifierEmission = "RoR2/Base/Nullifier/texNullifierEmission.png";

		public const string texNullifierNormal = "RoR2/Base/Nullifier/texNullifierNormal.png";

		public const string texNullifierSky = "RoR2/Base/Nullifier/texNullifierSky.png";

		public const string texNullifierSky2 = "RoR2/Base/Nullifier/texNullifierSky2.png";

		public const string texNullifierSky3Alpha = "RoR2/Base/Nullifier/texNullifierSky3Alpha.png";

		public const string texNullifierSkySparse = "RoR2/Base/Nullifier/texNullifierSkySparse.png";

		public const string ParentBody = "RoR2/Base/Parent/ParentBody.png";

		public const string texParentDiffuse = "RoR2/Base/Parent/texParentDiffuse.png";

		public const string texParentEmission = "RoR2/Base/Parent/texParentEmission.png";

		public const string texParentEyeMask = "RoR2/Base/Parent/texParentEyeMask.png";

		public const string texParentNormal = "RoR2/Base/Parent/texParentNormal.png";

		public const string RoboBallBossBody = "RoR2/Base/RoboBallBoss/RoboBallBossBody.png";

		public const string RoboBallMiniBody = "RoR2/Base/RoboBallBoss/RoboBallMiniBody.png";

		public const string SuperRoboBallBossBody = "RoR2/Base/RoboBallBoss/SuperRoboBallBossBody.png";

		public const string texBuffEngiShieldIcon = "RoR2/Base/RoboBallBoss/texBuffEngiShieldIcon.tif";

		public const string ScavBody = "RoR2/Base/Scav/ScavBody.png";

		public const string texScavBackpackDiffuse = "RoR2/Base/Scav/texScavBackpackDiffuse.png";

		public const string texScavBackpackNormal = "RoR2/Base/Scav/texScavBackpackNormal.png";

		public const string texScavDiffuse = "RoR2/Base/Scav/texScavDiffuse.png";

		public const string texScavEyeDiffuse = "RoR2/Base/Scav/texScavEyeDiffuse.png";

		public const string texScavEyeMask = "RoR2/Base/Scav/texScavEyeMask.png";

		public const string texScavEyeNormal = "RoR2/Base/Scav/texScavEyeNormal.png";

		public const string texScavLunarDiffuse = "RoR2/Base/Scav/texScavLunarDiffuse.png";

		public const string texScavNormal = "RoR2/Base/Scav/texScavNormal.png";

		public const string ScavLunarBody = "RoR2/Base/ScavLunar/ScavLunarBody.png";

		public const string ShopkeeperBody = "RoR2/Base/Shopkeeper/ShopkeeperBody.png";

		public const string texNewtDiffuse = "RoR2/Base/Shopkeeper/texNewtDiffuse.png";

		public const string texNewtJewlery = "RoR2/Base/Shopkeeper/texNewtJewlery.png";

		public const string texNewtNormal = "RoR2/Base/Shopkeeper/texNewtNormal.png";

		public const string texNewtShopkeeperArmMap = "RoR2/Base/Shopkeeper/texNewtShopkeeperArmMap.png";

		public const string texNewtTattooMap = "RoR2/Base/Shopkeeper/texNewtTattooMap.png";

		public const string texTitanAO = "RoR2/Base/Titan/texTitanAO.png";

		public const string texTitanDiffuse = "RoR2/Base/Titan/texTitanDiffuse.png";

		public const string texTitanNormals = "RoR2/Base/Titan/texTitanNormals.png";

		public const string TitanBody = "RoR2/Base/Titan/TitanBody.png";

		public const string TitanGoldBody = "RoR2/Base/Titan/TitanGoldBody.png";

		public const string texToolbotSkillIcons = "RoR2/Base/Toolbot/texToolbotSkillIcons.png";

		public const string texToolbotIcon = "RoR2/Base/Toolbot/texToolbotIcon.png";

		public const string texTrimSheetConstruction2 = "RoR2/Base/Toolbot/texTrimSheetConstruction2.png";

		public const string texTrimSheetConstructionAlt = "RoR2/Base/Toolbot/texTrimSheetConstructionAlt.png";

		public const string texTrimSheetWoodDiffuse = "RoR2/Base/Toolbot/texTrimSheetWoodDiffuse.png";

		public const string texRebarDiffuse = "RoR2/Base/Toolbot/texRebarDiffuse.png";

		public const string texRebarNormal = "RoR2/Base/Toolbot/texRebarNormal.png";

		public const string texRoboChunksDiffuse = "RoR2/Base/Toolbot/texRoboChunksDiffuse.png";

		public const string texRoboChunksNormal = "RoR2/Base/Toolbot/texRoboChunksNormal.png";

		public const string texToolbotBlades1 = "RoR2/Base/Toolbot/texToolbotBlades 1.png";

		public const string texToolbotBlades = "RoR2/Base/Toolbot/texToolbotBlades.png";

		public const string texToolbotNailMask = "RoR2/Base/Toolbot/texToolbotNailMask.png";

		public const string texTreebotSkillIcons = "RoR2/Base/Treebot/texTreebotSkillIcons.png";

		public const string texFSTreeBarkDiffuse = "RoR2/Base/Treebot/texFSTreeBarkDiffuse.tga";

		public const string treebottreeAtlas = "RoR2/Base/Treebot/treebot tree_Atlas.tga";

		public const string texBuffEntangleIcon = "RoR2/Base/Treebot/texBuffEntangleIcon.tif";

		public const string texBuffFruiting = "RoR2/Base/Treebot/texBuffFruiting.tif";

		public const string texTreebotFlowerDiffuse = "RoR2/Base/Treebot/texTreebotFlowerDiffuse.png";

		public const string texTreebotFlowerDiffuse2 = "RoR2/Base/Treebot/texTreebotFlowerDiffuse2.png";

		public const string texTreebotFlowerDiffuseAlt = "RoR2/Base/Treebot/texTreebotFlowerDiffuseAlt.png";

		public const string texTreebotFlowerNormal = "RoR2/Base/Treebot/texTreebotFlowerNormal.png";

		public const string texTreebotLeafAltDiffuse = "RoR2/Base/Treebot/texTreebotLeafAltDiffuse.png";

		public const string texTreebotLeafAltNormal = "RoR2/Base/Treebot/texTreebotLeafAltNormal.png";

		public const string texTreebotLeafDiffuse = "RoR2/Base/Treebot/texTreebotLeafDiffuse.png";

		public const string texTreebotLeafDiffuse2 = "RoR2/Base/Treebot/texTreebotLeafDiffuse2.png";

		public const string texTreebotLeafNormal = "RoR2/Base/Treebot/texTreebotLeafNormal.png";

		public const string texTreebotTreeBarkDiffuse = "RoR2/Base/Treebot/texTreebotTreeBarkDiffuse.tga";

		public const string TreebotBody = "RoR2/Base/Treebot/TreebotBody.png";

		public const string texTreebotRoot1Mask = "RoR2/Base/Treebot/texTreebotRoot1Mask.png";

		public const string texTreebotRoot1Normal = "RoR2/Base/Treebot/texTreebotRoot1Normal.png";

		public const string texTreebotRoot2Mask = "RoR2/Base/Treebot/texTreebotRoot2Mask.png";

		public const string texTreebotRoot2Normal = "RoR2/Base/Treebot/texTreebotRoot2Normal.png";

		public const string texTreebotRoot3Mask = "RoR2/Base/Treebot/texTreebotRoot3Mask.png";

		public const string texTreebotRoot3Normal = "RoR2/Base/Treebot/texTreebotRoot3Normal.png";

		public const string texBuffWeakIcon = "RoR2/Base/Treebot/texBuffWeakIcon.tif";

		public const string texVagrantDiffuse = "RoR2/Base/Vagrant/texVagrantDiffuse.png";

		public const string texVagrantEmission = "RoR2/Base/Vagrant/texVagrantEmission.png";

		public const string texVagrantNormal = "RoR2/Base/Vagrant/texVagrantNormal.png";

		public const string texVagrantTentacleMask = "RoR2/Base/Vagrant/texVagrantTentacleMask.png";

		public const string VagrantBody = "RoR2/Base/Vagrant/VagrantBody.png";

		public const string texVultureAO = "RoR2/Base/Vulture/texVultureAO.png";

		public const string texVultureDiffuse = "RoR2/Base/Vulture/texVultureDiffuse.png";

		public const string texVultureNormal = "RoR2/Base/Vulture/texVultureNormal.png";

		public const string texVultureSingleFeatherDiffuse = "RoR2/Base/Vulture/texVultureSingleFeatherDiffuse.png";

		public const string texVultureSingleFeatherDiffuse2 = "RoR2/Base/Vulture/texVultureSingleFeatherDiffuse2.png";

		public const string texVultureSingleFeatherDiffuse3 = "RoR2/Base/Vulture/texVultureSingleFeatherDiffuse3.png";

		public const string texVultureSingleFeatherDiffuse4 = "RoR2/Base/Vulture/texVultureSingleFeatherDiffuse4.png";

		public const string texVultureSingleFeatherDiffuse5 = "RoR2/Base/Vulture/texVultureSingleFeatherDiffuse5.png";

		public const string texVultureSingleFeatherNormal = "RoR2/Base/Vulture/texVultureSingleFeatherNormal.png";

		public const string texVultureTestDiffuse1 = "RoR2/Base/Vulture/texVultureTestDiffuse 1.png";

		public const string texVultureTestDiffuse2 = "RoR2/Base/Vulture/texVultureTestDiffuse 2.png";

		public const string texVultureTestDiffuse = "RoR2/Base/Vulture/texVultureTestDiffuse.png";

		public const string texVultureTileFeatherDiffuse = "RoR2/Base/Vulture/texVultureTileFeatherDiffuse.png";

		public const string texVultureTileFeatherNormal = "RoR2/Base/Vulture/texVultureTileFeatherNormal.png";

		public const string VultureBody = "RoR2/Base/Vulture/VultureBody.png";

		public const string texWisp1AO = "RoR2/Base/Wisp/texWisp1AO.png";

		public const string WispBody = "RoR2/Base/Wisp/WispBody.png";

		public const string texBuffBleedingIcon = "RoR2/Base/Common/texBuffBleedingIcon.tif";

		public const string texBuffCloakIcon = "RoR2/Base/Common/texBuffCloakIcon.tif";

		public const string texBuffCrippleIcon = "RoR2/Base/Common/texBuffCrippleIcon.tif";

		public const string texBuffOnFireIcon = "RoR2/Base/Common/texBuffOnFireIcon.tif";

		public const string texBuffSlow50Icon = "RoR2/Base/Common/texBuffSlow50Icon.tif";

		public const string texBuffGenericShield = "RoR2/Base/Common/texBuffGenericShield.tif";

		public const string texMovespeedBuffIcon = "RoR2/Base/Common/texMovespeedBuffIcon.tif";

		public const string texCloudCaustic1 = "RoR2/Base/Common/texCloudCaustic1.jpg";

		public const string texCloudCaustic2 = "RoR2/Base/Common/texCloudCaustic2.png";

		public const string texCloudCaustic3 = "RoR2/Base/Common/texCloudCaustic3.jpg";

		public const string texCloudGradient = "RoR2/Base/Common/texCloudGradient.png";

		public const string texCloudWaterFoam1 = "RoR2/Base/Common/texCloudWaterFoam1.jpg";

		public const string texCloudWaterFoam2 = "RoR2/Base/Common/texCloudWaterFoam2.psd";

		public const string texBehemothRamp = "RoR2/Base/Common/ColorRamps/texBehemothRamp.png";

		public const string texClayGooRamp = "RoR2/Base/Common/ColorRamps/texClayGooRamp.png";

		public const string texClayGooSiphonRamp = "RoR2/Base/Common/ColorRamps/texClayGooSiphonRamp.png";

		public const string texDustRamp = "RoR2/Base/Common/ColorRamps/texDustRamp.png";

		public const string texFogRamp1 = "RoR2/Base/Common/ColorRamps/texFogRamp1.png";

		public const string texFogRampPurple = "RoR2/Base/Common/ColorRamps/texFogRampPurple.png";

		public const string texFogRampTest = "RoR2/Base/Common/ColorRamps/texFogRampTest.png";

		public const string texHippoRezRamp = "RoR2/Base/Common/ColorRamps/texHippoRezRamp.png";

		public const string texLunarWispTracer1 = "RoR2/Base/Common/ColorRamps/texLunarWispTracer 1.png";

		public const string texMagmaFireball = "RoR2/Base/Common/ColorRamps/texMagmaFireball.png";

		public const string texRampAncientWisp = "RoR2/Base/Common/ColorRamps/texRampAncientWisp.png";

		public const string texRampAntler = "RoR2/Base/Common/ColorRamps/texRampAntler.png";

		public const string texRampArcaneCircle = "RoR2/Base/Common/ColorRamps/texRampArcaneCircle.png";

		public const string texRampArchWisp = "RoR2/Base/Common/ColorRamps/texRampArchWisp.png";

		public const string texRampAreaIndicator = "RoR2/Base/Common/ColorRamps/texRampAreaIndicator.png";

		public const string texRampArmorReduction = "RoR2/Base/Common/ColorRamps/texRampArmorReduction.png";

		public const string texRampArtifactShellSoft = "RoR2/Base/Common/ColorRamps/texRampArtifactShellSoft.png";

		public const string texRampBandit = "RoR2/Base/Common/ColorRamps/texRampBandit.png";

		public const string texRampBanditAlt = "RoR2/Base/Common/ColorRamps/texRampBanditAlt.png";

		public const string texRampBanditSlash = "RoR2/Base/Common/ColorRamps/texRampBanditSlash.png";

		public const string texRampBanditSmokescreen = "RoR2/Base/Common/ColorRamps/texRampBanditSmokescreen.png";

		public const string texRampBanditSplatter = "RoR2/Base/Common/ColorRamps/texRampBanditSplatter.png";

		public const string texRampBanditSplatterAlt = "RoR2/Base/Common/ColorRamps/texRampBanditSplatterAlt.png";

		public const string texRampBeamLightning = "RoR2/Base/Common/ColorRamps/texRampBeamLightning.png";

		public const string texRampBeamSphere = "RoR2/Base/Common/ColorRamps/texRampBeamSphere.png";

		public const string texRampBeetleBreath = "RoR2/Base/Common/ColorRamps/texRampBeetleBreath.png";

		public const string texRampBeetleQueen = "RoR2/Base/Common/ColorRamps/texRampBeetleQueen.png";

		public const string texRampBeetleQueen2 = "RoR2/Base/Common/ColorRamps/texRampBeetleQueen2.png";

		public const string texRampBell = "RoR2/Base/Common/ColorRamps/texRampBell.png";

		public const string texRampBirdHeart = "RoR2/Base/Common/ColorRamps/texRampBirdHeart.png";

		public const string texRampBombOrb = "RoR2/Base/Common/ColorRamps/texRampBombOrb.png";

		public const string texRampBrotherPillar = "RoR2/Base/Common/ColorRamps/texRampBrotherPillar.png";

		public const string texRampCaptainAirstrike = "RoR2/Base/Common/ColorRamps/texRampCaptainAirstrike.png";

		public const string texRampCaptainBodyArmor = "RoR2/Base/Common/ColorRamps/texRampCaptainBodyArmor.png";

		public const string texRampCaptainDefenseMatrix = "RoR2/Base/Common/ColorRamps/texRampCaptainDefenseMatrix.png";

		public const string texRampCaptainDefenseMatrixSoft = "RoR2/Base/Common/ColorRamps/texRampCaptainDefenseMatrixSoft.png";

		public const string texRampClaySwordSwing = "RoR2/Base/Common/ColorRamps/texRampClaySwordSwing.png";

		public const string texRampCloth = "RoR2/Base/Common/ColorRamps/texRampCloth.jpg";

		public const string texRampCompositeLight = "RoR2/Base/Common/ColorRamps/texRampCompositeLight.psd";

		public const string texRampCrippleWard = "RoR2/Base/Common/ColorRamps/texRampCrippleWard.png";

		public const string texRampCrocoDisease = "RoR2/Base/Common/ColorRamps/texRampCrocoDisease.png";

		public const string texRampCrocoDiseaseDark = "RoR2/Base/Common/ColorRamps/texRampCrocoDiseaseDark.png";

		public const string texRampCrowbar = "RoR2/Base/Common/ColorRamps/texRampCrowbar.png";

		public const string texRampDeathmark = "RoR2/Base/Common/ColorRamps/texRampDeathmark.png";

		public const string texRampDeathProjectile = "RoR2/Base/Common/ColorRamps/texRampDeathProjectile.png";

		public const string texRampDefault = "RoR2/Base/Common/ColorRamps/texRampDefault.png";

		public const string texRampDefaultNoTransparency = "RoR2/Base/Common/ColorRamps/texRampDefaultNoTransparency.png";

		public const string texRampDiamondLaser = "RoR2/Base/Common/ColorRamps/texRampDiamondLaser.png";

		public const string texRampDroneFire = "RoR2/Base/Common/ColorRamps/texRampDroneFire.png";

		public const string texRampDroneFire2 = "RoR2/Base/Common/ColorRamps/texRampDroneFire2.png";

		public const string texRampEliteLunar = "RoR2/Base/Common/ColorRamps/texRampEliteLunar.png";

		public const string texRampElitePoison = "RoR2/Base/Common/ColorRamps/texRampElitePoison.png";

		public const string texRampElitePoison2 = "RoR2/Base/Common/ColorRamps/texRampElitePoison2.png";

		public const string texRampElites = "RoR2/Base/Common/ColorRamps/texRampElites.psd";

		public const string texRampEngi = "RoR2/Base/Comm

plugins/GuestUnion.GenericExtensions.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("GuestUnion.GenericExtensions")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+eb843446fb06e971bdf3cecc5e0ab04c9f29ae41")]
[assembly: AssemblyProduct("GuestUnion.GenericExtensions")]
[assembly: AssemblyTitle("GuestUnion.GenericExtensions")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace GuestUnion
{
	public static class ArrayExtensions
	{
		public static bool TrueForAll<T>(this T[] array, Predicate<T> match)
		{
			return Array.TrueForAll(array, match);
		}

		public static int FindIndex<T>(this T[] array, Predicate<T> match)
		{
			return Array.FindIndex(array, match);
		}

		public static int FindLastIndex<T>(this T[] array, Predicate<T> match)
		{
			return Array.FindLastIndex(array, match);
		}

		public static int IndexOf<T>(this T[] array, T value)
		{
			return Array.IndexOf(array, value);
		}

		public static int LastIndexOf<T>(this T[] array, T value)
		{
			return Array.LastIndexOf(array, value);
		}

		public static T Find<T>(this T[] array, Predicate<T> match)
		{
			return Array.Find(array, match);
		}

		public static T FindLast<T>(this T[] array, Predicate<T> match)
		{
			return Array.FindLast(array, match);
		}

		public static T[] FindAll<T>(this T[] array, Predicate<T> match)
		{
			return Array.FindAll(array, match);
		}

		public static TOutput[] ConvertAll<TInput, TOutput>(this TInput[] array, Converter<TInput, TOutput> converter)
		{
			return Array.ConvertAll(array, converter);
		}

		public static void BinarySearch<T>(this T[] array, T value)
		{
			Array.BinarySearch(array, value);
		}

		public static void BinarySearch<T>(this T[] array, T value, IComparer<T> comparer)
		{
			Array.BinarySearch(array, value, comparer);
		}

		public static void Clear<T>(this T[] array)
		{
			Array.Clear(array, 0, array.Length);
		}

		public static void Fill<T>(this T[] array, T value)
		{
			Array.Fill(array, value);
		}

		public static void ForEach<T>(this T[] array, Action<T> action)
		{
			Array.ForEach(array, action);
		}

		public static void Reverse<T>(this T[] array)
		{
			Array.Reverse(array);
		}

		public static void Sort<T>(this T[] array)
		{
			Array.Sort(array);
		}

		public static void Sort<T>(this T[] array, IComparer<T> comparer)
		{
			Array.Sort(array, comparer);
		}
	}
	public static class CollectionExtensions
	{
		public static bool IsNullOrEmpty<T>(this ICollection<T> collection)
		{
			if (collection != null)
			{
				return collection.Count == 0;
			}
			return true;
		}
	}
	public static class DoubleExtensions
	{
		public static double Abs(this double value)
		{
			if (!(value < 0.0))
			{
				return value;
			}
			return 0.0 - value;
		}

		public static double Clamp(this double value, double min, double max)
		{
			if (!(value < min))
			{
				if (!(value > max))
				{
					return value;
				}
				return max;
			}
			return min;
		}

		public static double Clamp01(this double value)
		{
			if (!(value < 0.0))
			{
				if (!(value > 1.0))
				{
					return value;
				}
				return 1.0;
			}
			return 0.0;
		}

		public static double LerpTo(this double from, double to, double t)
		{
			return from + (to - from) * t.Clamp01();
		}

		public static double LerpToUnclamped(this double from, double to, double t)
		{
			return from + (to - from) * t;
		}

		public static double MoveTowards(this double from, double to, double maxDelta)
		{
			double num = to - from;
			if (!(num >= 0.0))
			{
				if (!(0.0 - num <= maxDelta))
				{
					return from - maxDelta;
				}
				return to;
			}
			if (!(num <= maxDelta))
			{
				return from + maxDelta;
			}
			return to;
		}

		public static double NormalizeAngle(this double angle)
		{
			if (!(angle < 0.0))
			{
				return angle % 360.0;
			}
			return angle % 360.0 + 360.0;
		}

		public static double NormalizeAngleOne360(this double angle)
		{
			if (!(angle < 0.0))
			{
				if (!(angle > 360.0))
				{
					return angle;
				}
				return angle - 360.0;
			}
			return angle + 360.0;
		}
	}
	public static class Int32Extensions
	{
		public static int Abs(this int value)
		{
			if (value >= 0)
			{
				return value;
			}
			return -value;
		}

		public static int Clamp(this int value, int min, int max)
		{
			if (value >= min)
			{
				if (value <= max)
				{
					return value;
				}
				return max;
			}
			return min;
		}

		public static bool HasFlag(this int value, int flag)
		{
			return (value & flag) == flag;
		}
	}
	public static class SingleExtensions
	{
		public static float Abs(this float value)
		{
			if (!(value < 0f))
			{
				return value;
			}
			return 0f - value;
		}

		public static float Clamp(this float value, float min, float max)
		{
			if (!(value < min))
			{
				if (!(value > max))
				{
					return value;
				}
				return max;
			}
			return min;
		}

		public static float Clamp01(this float value)
		{
			if (!(value < 0f))
			{
				if (!(value > 1f))
				{
					return value;
				}
				return 1f;
			}
			return 0f;
		}

		public static float LerpTo(this float from, float to, float t)
		{
			return from + (to - from) * t.Clamp01();
		}

		public static float LerpToUnclamped(this float from, float to, float t)
		{
			return from + (to - from) * t;
		}

		public static float MoveTowards(this float from, float to, float maxDelta)
		{
			float num = to - from;
			if (!(num >= 0f))
			{
				if (!(0f - num <= maxDelta))
				{
					return from - maxDelta;
				}
				return to;
			}
			if (!(num <= maxDelta))
			{
				return from + maxDelta;
			}
			return to;
		}

		public static float NormalizeAngle(this float angle)
		{
			if (!(angle < 0f))
			{
				return angle % 360f;
			}
			return angle % 360f + 360f;
		}

		public static float NormalizeAngleOne360(this float angle)
		{
			if (!(angle < 0f))
			{
				if (!(angle > 360f))
				{
					return angle;
				}
				return angle - 360f;
			}
			return angle + 360f;
		}
	}
	public static class StringBuilderExtensions
	{
		private static readonly Stack<StringBuilder> pool = new Stack<StringBuilder>();

		public static StringBuilder ToStringBuilder<T>(this ref T obj) where T : struct
		{
			if (!pool.TryPop(out StringBuilder result))
			{
				result = new StringBuilder();
			}
			return result.Append(obj.ToString());
		}

		public static StringBuilder ToStringBuilder<T>(this T obj) where T : class
		{
			if (!pool.TryPop(out StringBuilder result))
			{
				result = new StringBuilder();
			}
			return result.Append(obj);
		}

		public static string ToStringAndReturn(this StringBuilder sb)
		{
			if (sb == null)
			{
				return string.Empty;
			}
			string result = sb.ToString();
			pool.Push(sb.Clear());
			return result;
		}
	}
	public static class StringExtensions
	{
		public static bool IsNullOrEmpty(this string s)
		{
			if (s != null)
			{
				return s.Length == 0;
			}
			return true;
		}

		public static bool IsNullOrWhiteSpace(this string s)
		{
			if (s == null)
			{
				return true;
			}
			ReadOnlySpan<char> readOnlySpan = s.AsSpan();
			for (int i = 0; i < readOnlySpan.Length; i++)
			{
				if (!char.IsWhiteSpace(readOnlySpan[i]))
				{
					return false;
				}
			}
			return true;
		}
	}
}

plugins/GuestUnion.ObjectPool.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("GuestUnion.ObjectPool")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+eb843446fb06e971bdf3cecc5e0ab04c9f29ae41")]
[assembly: AssemblyProduct("GuestUnion.ObjectPool")]
[assembly: AssemblyTitle("GuestUnion.ObjectPool")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace GuestUnion.ObjectPool
{
	public interface IPool<T> where T : class
	{
		T Rent();

		bool Return(T value);
	}
	public struct PooledObjectScope<T> : IDisposable where T : class
	{
		private readonly IPool<T> _pool;

		private T? _buffer;

		public readonly T? Buffer => _buffer;

		public PooledObjectScope(IPool<T> pool, T? buffer)
		{
			_pool = pool;
			_buffer = buffer;
		}

		public void Dispose()
		{
			if (_buffer != null)
			{
				_pool.Return(_buffer);
				_buffer = null;
			}
		}
	}
}
namespace GuestUnion.ObjectPool.Generic
{
	public struct CollectionScope<TCollection, TElement> : IDisposable where TCollection : class, ICollection<TElement>
	{
		private readonly IPool<TCollection> _pool;

		private TCollection? _collection;

		public readonly TCollection? Collection => _collection;

		public CollectionScope(IPool<TCollection> pool, TCollection? collection)
		{
			if (pool == null)
			{
				throw new ArgumentNullException("pool");
			}
			_pool = pool;
			_collection = collection;
		}

		public void Dispose()
		{
			if (_collection != null)
			{
				_collection.Clear();
				_pool.Return(_collection);
				_collection = null;
			}
		}
	}
	public class DictionaryPool<TKey, TValue> : GenericPool<Dictionary<TKey, TValue>>
	{
		public static readonly DictionaryPool<TKey, TValue> shared = new DictionaryPool<TKey, TValue>();

		public static CollectionScope<Dictionary<TKey, TValue>, KeyValuePair<TKey, TValue>> Rent(out Dictionary<TKey, TValue> dictionary)
		{
			dictionary = shared.Rent();
			return new CollectionScope<Dictionary<TKey, TValue>, KeyValuePair<TKey, TValue>>(shared, dictionary);
		}

		public DictionaryPool()
			: base((ushort)16)
		{
		}
	}
	public class GenericPool<T> : IPool<T>, IDisposable where T : class, new()
	{
		public ushort capacity;

		private readonly Stack<T> pool;

		public GenericPool(ushort capacity = 16)
		{
			pool = new Stack<T>(capacity);
		}

		public T Rent()
		{
			if (!pool.TryPop(out var result))
			{
				return new T();
			}
			return result;
		}

		public bool Return(T value)
		{
			if (value != null && pool.Count < capacity)
			{
				pool.Push(value);
				return true;
			}
			return false;
		}

		public void Clear()
		{
			pool.Clear();
		}

		void IDisposable.Dispose()
		{
			Clear();
		}
	}
	public class HashSetPool<T> : GenericPool<HashSet<T>>
	{
		public static readonly HashSetPool<T> shared = new HashSetPool<T>();

		public static CollectionScope<HashSet<T>, T> Rent(out HashSet<T> set)
		{
			set = shared.Rent();
			return new CollectionScope<HashSet<T>, T>(shared, set);
		}

		public HashSetPool()
			: base((ushort)16)
		{
		}
	}
	public class ListPool<T> : GenericPool<List<T>>
	{
		public static readonly ListPool<T> shared = new ListPool<T>();

		public static CollectionScope<List<T>, T> Rent(out List<T> list)
		{
			list = shared.Rent();
			return new CollectionScope<List<T>, T>(shared, list);
		}

		public ListPool()
			: base((ushort)16)
		{
		}
	}
	public class QueuePool<T> : GenericPool<Queue<T>>
	{
		public static readonly QueuePool<T> shared = new QueuePool<T>();

		public QueuePool()
			: base((ushort)16)
		{
		}
	}
	public class StackPool<T> : GenericPool<Stack<T>>
	{
		public static readonly StackPool<T> shared = new StackPool<T>();

		public StackPool()
			: base((ushort)16)
		{
		}
	}
}

plugins/GuestUnion.UnityExtensions.dll

Decompiled 3 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using GuestUnion.ObjectPool.Generic;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("GuestUnion.UnityExtensions")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+eb843446fb06e971bdf3cecc5e0ab04c9f29ae41")]
[assembly: AssemblyProduct("GuestUnion.UnityExtensions")]
[assembly: AssemblyTitle("GuestUnion.UnityExtensions")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace GuestUnion
{
	public static class GameObjectExtensions
	{
		public static void RemoveComponent<T>(this GameObject gameObject) where T : Component
		{
			T val = default(T);
			if (gameObject.TryGetComponent<T>(ref val))
			{
				Object.Destroy((Object)(object)val);
			}
		}

		public static void RemoveComponents<T>(this GameObject gameObject) where T : Component
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			List<T> list = default(List<T>);
			CollectionScope<List<T>, T> val = ListPool<T>.Rent(ref list);
			try
			{
				gameObject.GetComponents<T>(list);
				foreach (T item in list)
				{
					Object.Destroy((Object)(object)item);
				}
			}
			finally
			{
				((IDisposable)val).Dispose();
			}
		}
	}
	public static class QuaternionExtensions
	{
		public static Quaternion ApplySpread(this in Quaternion rotation, float pitchAngle, float yawAngle)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0017: 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_0021: 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)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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_0049: 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_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			Vector3 lhs = rotation * Vector3.forward;
			Vector3 rhs = rotation * Vector3.up;
			Vector3 val = lhs.Cross(in rhs);
			Vector3 rhs2 = ((SingleExtensions.Abs(yawAngle) > Mathf.Epsilon) ? (Quaternion.AngleAxis(yawAngle, rhs) * val) : val);
			Vector3 lhs2 = ((SingleExtensions.Abs(pitchAngle) > Mathf.Epsilon) ? (Quaternion.AngleAxis(pitchAngle, val) * rhs) : rhs);
			return Quaternion.LookRotation(lhs2.Cross(in rhs2), rhs);
		}

		public static Quaternion ApplySpread2(this Quaternion rotation, float pitchAngle, float rollAngle)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: 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_001c: 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_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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_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_0056: Unknown result type (might be due to invalid IL or missing references)
			Vector3 lhs = rotation * Vector3.forward;
			if (SingleExtensions.Abs(rollAngle) > Mathf.Epsilon)
			{
				rotation *= Quaternion.AngleAxis(rollAngle, lhs);
			}
			if (SingleExtensions.Abs(pitchAngle) > Mathf.Epsilon)
			{
				Quaternion val = rotation;
				Vector3 rhs = rotation * Vector3.up;
				rotation = val * Quaternion.AngleAxis(pitchAngle, lhs.Cross(in rhs));
			}
			return rotation;
		}
	}
	public static class Vector3Extensions
	{
		public static float Dot(this in Vector3 lhs, in Vector3 rhs)
		{
			return lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;
		}

		public static Vector3 Cross(this in Vector3 lhs, in Vector3 rhs)
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			return new Vector3(lhs.y * rhs.z - lhs.z * rhs.y, lhs.z * rhs.x - lhs.x * rhs.z, lhs.x * rhs.y - lhs.y * rhs.x);
		}

		public static Vector3 LerpTo(this in Vector3 from, in Vector3 to, float t)
		{
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			t = Mathf.Clamp01(t);
			return new Vector3(from.x + (to.x - from.x) * t, from.y + (to.y - from.y) * t, from.z + (to.z - from.z) * t);
		}

		public static Vector3 MoveTowords(this in Vector3 current, in Vector3 target, float maxDistanceDelta)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			float num = target.x - current.x;
			float num2 = target.y - current.y;
			float num3 = target.z - current.z;
			float num4 = num * num + num2 * num2 + num3 * num3;
			if (num4 < Mathf.Epsilon || (maxDistanceDelta > Mathf.Epsilon && num4 <= maxDistanceDelta * maxDistanceDelta))
			{
				return target;
			}
			float num5 = (float)Math.Sqrt(num4);
			return new Vector3(current.x + num / num5 * maxDistanceDelta, current.y + num2 / num5 * maxDistanceDelta, current.z + num3 / num5 * maxDistanceDelta);
		}

		public static Vector3 Project(this in Vector3 vector, in Vector3 onNormal)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = onNormal;
			float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
			if (sqrMagnitude < Mathf.Epsilon)
			{
				return Vector3.zero;
			}
			float num = vector.Dot(in onNormal);
			return new Vector3(onNormal.x * num / sqrMagnitude, onNormal.y * num / sqrMagnitude, onNormal.z * num / sqrMagnitude);
		}

		public static Vector3 ProjectOnPlane(this in Vector3 vector, in Vector3 planeNormal)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = planeNormal;
			float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
			if (sqrMagnitude < Mathf.Epsilon)
			{
				return vector;
			}
			float num = vector.Dot(in planeNormal);
			return new Vector3(vector.x - planeNormal.x * num / sqrMagnitude, vector.y - planeNormal.y * num / sqrMagnitude, vector.z - planeNormal.z * num / sqrMagnitude);
		}

		public static float Sum(this in Vector3 vector3)
		{
			return vector3.x + vector3.y + vector3.z;
		}

		public static Vector3 ApplySpread(this in Vector3 direction, in Vector3 upwards, float horizontal, float vertical)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//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_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			if (horizontal > Mathf.Epsilon)
			{
				Vector3 val = Quaternion.AngleAxis(horizontal, upwards) * direction;
				if (vertical > Mathf.Epsilon)
				{
					Vector3 rhs = Vector3.up;
					val = Quaternion.AngleAxis(vertical, direction.Cross(in rhs)) * val;
				}
				return val;
			}
			if (vertical > Mathf.Epsilon)
			{
				return Quaternion.AngleAxis(vertical, direction.Cross(in upwards)) * direction;
			}
			return direction;
		}
	}
}