Decompiled source of VanillaArtifactsPlus v3.5.0

VanillaArtifactsPlus.dll

Decompiled 5 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates.VoidInfestor;
using HG;
using IL.RoR2;
using IL.RoR2.Artifacts;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On;
using On.RoR2;
using On.RoR2.Artifacts;
using On.RoR2.UI;
using On.RoR2.UI.LogBook;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using RoR2.CharacterAI;
using RoR2.ExpansionManagement;
using RoR2.Items;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.UI;
using RoR2.UI.LogBook;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;

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

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace VanillaArtifactsPlus
{
	public class Command
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_RebuildPickupGroups <0>__AddEliteEquipmentsToCommand;

			public static hook_IsEquipmentAvailable <1>__Make_EliteEquipmentAvailable;
		}

		public static void OnArtifactDisable()
		{
		}

		public static void OnArtifactEnable()
		{
		}

		public static void Start()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//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_003d: Expected O, but got Unknown
			object obj = <>O.<0>__AddEliteEquipmentsToCommand;
			if (obj == null)
			{
				hook_RebuildPickupGroups val = AddEliteEquipmentsToCommand;
				<>O.<0>__AddEliteEquipmentsToCommand = val;
				obj = (object)val;
			}
			PickupTransmutationManager.RebuildPickupGroups += (hook_RebuildPickupGroups)obj;
			object obj2 = <>O.<1>__Make_EliteEquipmentAvailable;
			if (obj2 == null)
			{
				hook_IsEquipmentAvailable val2 = Make_EliteEquipmentAvailable;
				<>O.<1>__Make_EliteEquipmentAvailable = val2;
				obj2 = (object)val2;
			}
			Run.IsEquipmentAvailable += (hook_IsEquipmentAvailable)obj2;
		}

		private static bool Make_EliteEquipmentAvailable(orig_IsEquipmentAvailable orig, Run self, EquipmentIndex equipmentIndex)
		{
			//IL_0001: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(equipmentIndex);
			if (Object.op_Implicit((Object)(object)equipmentDef) && Object.op_Implicit((Object)(object)equipmentDef.passiveBuffDef))
			{
				return !self.IsEquipmentExpansionLocked(equipmentIndex);
			}
			return orig.Invoke(self, equipmentIndex);
		}

		private static void AddEliteEquipmentsToCommand(orig_RebuildPickupGroups orig)
		{
			List<EquipmentDef> list = new List<EquipmentDef>();
			for (int i = 0; i < EliteCatalog.eliteDefs.Length; i++)
			{
				EliteDef val = EliteCatalog.eliteDefs[i];
				EquipmentDef eliteEquipmentDef = val.eliteEquipmentDef;
				if ((Object)(object)eliteEquipmentDef != (Object)null && !((Object)val).name.EndsWith("Gold") && eliteEquipmentDef.dropOnDeathChance > 0f)
				{
					list.Add(eliteEquipmentDef);
					eliteEquipmentDef.canDrop = true;
					eliteEquipmentDef.isBoss = true;
					eliteEquipmentDef.isLunar = false;
				}
			}
			orig.Invoke();
			for (int j = 0; j < list.Count; j++)
			{
				list[j].canDrop = false;
			}
		}
	}
	public class DevotionEquipmentHolder : MonoBehaviour
	{
		public EquipmentIndex equipmentIndex = (EquipmentIndex)(-1);

		public void OnEnable()
		{
			//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)
			CharacterBody component = ((Component)this).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory))
			{
				equipmentIndex = component.inventory.currentEquipmentIndex;
			}
		}
	}
	public class Devotion
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Rebuild <0>__AddLemurianInventory;

			public static hook_SetOptionsFromInteractor <1>__VoidForLemurians;

			public static hook_DropScrapOnDeath <2>__ScrapForVoids;

			public static hook_Start <3>__TeleportMoreOften;

			public static hook_OnDevotedBodyDead <4>__RemoveVoidDiosLikeRegular;

			public static Manipulator <5>__ExpellVoidInfestorsAtLow;

			public static ArtifactStateChangeDelegate <6>__OnDevotionArtifactEnabled;

			public static ArtifactStateChangeDelegate <7>__OnDevotionArtifactDisabled;

			public static Manipulator <8>__NoFogLemurianDamage;
		}

		public static void Start()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//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_003d: Expected O, but got Unknown
			//IL_0053: 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_005e: Expected O, but got Unknown
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: 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)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: 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_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: 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_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Expected O, but got Unknown
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Expected O, but got Unknown
			//IL_026b: 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_0276: Expected O, but got Unknown
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b9: Expected O, but got Unknown
			object obj = <>O.<0>__AddLemurianInventory;
			if (obj == null)
			{
				hook_Rebuild val = AddLemurianInventory;
				<>O.<0>__AddLemurianInventory = val;
				obj = (object)val;
			}
			ScoreboardController.Rebuild += (hook_Rebuild)obj;
			object obj2 = <>O.<1>__VoidForLemurians;
			if (obj2 == null)
			{
				hook_SetOptionsFromInteractor val2 = VoidForLemurians;
				<>O.<1>__VoidForLemurians = val2;
				obj2 = (object)val2;
			}
			PickupPickerController.SetOptionsFromInteractor += (hook_SetOptionsFromInteractor)obj2;
			object obj3 = <>O.<2>__ScrapForVoids;
			if (obj3 == null)
			{
				hook_DropScrapOnDeath val3 = ScrapForVoids;
				<>O.<2>__ScrapForVoids = val3;
				obj3 = (object)val3;
			}
			DevotionInventoryController.DropScrapOnDeath += (hook_DropScrapOnDeath)obj3;
			object obj4 = <>O.<3>__TeleportMoreOften;
			if (obj4 == null)
			{
				hook_Start val4 = TeleportMoreOften;
				<>O.<3>__TeleportMoreOften = val4;
				obj4 = (object)val4;
			}
			DevotedLemurianController.Start += (hook_Start)obj4;
			GameObject val5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/Fireball.prefab").WaitForCompletion();
			GameObject val6 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LemurianBruiser/LemurianBigFireball.prefab").WaitForCompletion();
			val5.GetComponent<ProjectileDamage>().damageType.damageSource = (DamageSource)1;
			val6.GetComponent<ProjectileDamage>().damageType.damageSource = (DamageSource)1;
			GameObject val7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/CU8/DevotedLemurianBody.prefab").WaitForCompletion();
			GameObject val8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/CU8/DevotedLemurianBruiserBody.prefab").WaitForCompletion();
			CharacterBody component = val7.GetComponent<CharacterBody>();
			CharacterBody component2 = val8.GetComponent<CharacterBody>();
			val7.AddComponent<DevotionEquipmentHolder>();
			val8.AddComponent<DevotionEquipmentHolder>();
			if (WConfig.DevotionFlags.Value)
			{
				component.bodyFlags = (BodyFlags)(component.bodyFlags | 1);
				component2.bodyFlags = (BodyFlags)(component2.bodyFlags | 1);
				component.bodyFlags = (BodyFlags)(component.bodyFlags | 0x8000);
				component2.bodyFlags = (BodyFlags)(component2.bodyFlags | 0x8000);
				component.bodyFlags = (BodyFlags)(component.bodyFlags | 0x800);
				component2.bodyFlags = (BodyFlags)(component2.bodyFlags | 0x800);
			}
			component.lavaCooldown = 2f;
			component2.lavaCooldown = 2f;
			GameObject val9 = Addressables.LoadAssetAsync<GameObject>((object)"90b219aa7b48e824384c5abd65c30f70").WaitForCompletion();
			AISkillDriver[] components = val9.GetComponents<AISkillDriver>();
			components[0].minTargetHealthFraction = 0f;
			components[1].minTargetHealthFraction = 0f;
			components[2].minTargetHealthFraction = 0f;
			components[5].minTargetHealthFraction = 0f;
			components[7].minTargetHealthFraction = 0f;
			components[7].minDistance = 30f;
			components[7].minUserHealthFraction = 40f;
			object obj5 = <>O.<4>__RemoveVoidDiosLikeRegular;
			if (obj5 == null)
			{
				hook_OnDevotedBodyDead val10 = RemoveVoidDiosLikeRegular;
				<>O.<4>__RemoveVoidDiosLikeRegular = val10;
				obj5 = (object)val10;
			}
			DevotedLemurianController.OnDevotedBodyDead += (hook_OnDevotedBodyDead)obj5;
			if (WConfig.DevotionVoidInfestor.Value)
			{
				object obj6 = <>O.<5>__ExpellVoidInfestorsAtLow;
				if (obj6 == null)
				{
					Manipulator val11 = ExpellVoidInfestorsAtLow;
					<>O.<5>__ExpellVoidInfestorsAtLow = val11;
					obj6 = (object)val11;
				}
				HealthComponent.UpdateLastHitTime += (Manipulator)obj6;
			}
			object obj7 = <>O.<6>__OnDevotionArtifactEnabled;
			if (obj7 == null)
			{
				ArtifactStateChangeDelegate val12 = OnDevotionArtifactEnabled;
				<>O.<6>__OnDevotionArtifactEnabled = val12;
				obj7 = (object)val12;
			}
			RunArtifactManager.onArtifactEnabledGlobal += (ArtifactStateChangeDelegate)obj7;
			object obj8 = <>O.<7>__OnDevotionArtifactDisabled;
			if (obj8 == null)
			{
				ArtifactStateChangeDelegate val13 = OnDevotionArtifactDisabled;
				<>O.<7>__OnDevotionArtifactDisabled = val13;
				obj8 = (object)val13;
			}
			RunArtifactManager.onArtifactDisabledGlobal += (ArtifactStateChangeDelegate)obj8;
		}

		private static void OnDevotionArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
		{
			//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_003d: Expected O, but got Unknown
			if (!((Object)(object)artifactDef != (Object)(object)Artifacts.Devotion) && WConfig.DevotionFlags.Value)
			{
				object obj = <>O.<8>__NoFogLemurianDamage;
				if (obj == null)
				{
					Manipulator val = NoFogLemurianDamage;
					<>O.<8>__NoFogLemurianDamage = val;
					obj = (object)val;
				}
				FogDamageController.MyFixedUpdate += (Manipulator)obj;
			}
		}

		private static void OnDevotionArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
		{
			//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_003d: Expected O, but got Unknown
			if (!((Object)(object)artifactDef != (Object)(object)Artifacts.Devotion) && WConfig.DevotionFlags.Value)
			{
				object obj = <>O.<8>__NoFogLemurianDamage;
				if (obj == null)
				{
					Manipulator val = NoFogLemurianDamage;
					<>O.<8>__NoFogLemurianDamage = val;
					obj = (object)val;
				}
				FogDamageController.MyFixedUpdate -= (Manipulator)obj;
			}
		}

		private static void ExpellVoidInfestorsAtLow(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdflda(x, "RoR2.HealthComponent", "itemCounts"),
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.HealthComponent/ItemCounts", "fragileDamageBonus")
			}))
			{
				val.EmitDelegate<Func<HealthComponent, HealthComponent>>((Func<HealthComponent, HealthComponent>)delegate(HealthComponent self)
				{
					//IL_000c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0012: Invalid comparison between Unknown and I4
					//IL_0081: Unknown result type (might be due to invalid IL or missing references)
					//IL_0164: Unknown result type (might be due to invalid IL or missing references)
					//IL_0169: Unknown result type (might be due to invalid IL or missing references)
					//IL_017b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0180: Unknown result type (might be due to invalid IL or missing references)
					//IL_0187: Unknown result type (might be due to invalid IL or missing references)
					//IL_018c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0195: Unknown result type (might be due to invalid IL or missing references)
					//IL_0197: Unknown result type (might be due to invalid IL or missing references)
					DevotedLemurianController val2 = default(DevotedLemurianController);
					if ((int)self.body.teamComponent.teamIndex == 4 && self.combinedHealthFraction < 0.05f && Object.op_Implicit((Object)(object)self.body.master) && ((Component)self.body.master).TryGetComponent<DevotedLemurianController>(ref val2))
					{
						DevotionEquipmentHolder devotionEquipmentHolder = default(DevotionEquipmentHolder);
						if (((Component)self.body).TryGetComponent<DevotionEquipmentHolder>(ref devotionEquipmentHolder))
						{
							self.body.inventory.SetEquipmentIndex(devotionEquipmentHolder.equipmentIndex, true);
						}
						if (val2.DevotedEvolutionLevel == 1)
						{
							val2._devotionInventoryController.GenerateEliteBuff(self.body, val2, true);
						}
						else if (val2.DevotedEvolutionLevel >= 3)
						{
							val2._devotionInventoryController.GenerateEliteBuff(self.body, val2, true);
						}
						else
						{
							self.body.inventory.SetEquipmentIndex((EquipmentIndex)(-1), true);
						}
						BaseAI component = ((Component)self.body.master).GetComponent<BaseAI>();
						if (Object.op_Implicit((Object)(object)component))
						{
							component.currentEnemy.Reset();
						}
						self.Networkhealth = self.fullCombinedHealth * 0.05f;
						self.body.master.teamIndex = (TeamIndex)1;
						self.body.teamComponent.teamIndex = (TeamIndex)1;
						EffectManager.SimpleImpactEffect(Infest.successfulInfestEffectPrefab, ((Component)self).transform.position, Vector3.up, false);
						Vector3 corePosition = self.body.corePosition;
						GameObject val3 = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/EliteVoid/VoidInfestorMaster.prefab").WaitForCompletion(), corePosition, Quaternion.identity);
						CharacterMaster component2 = val3.GetComponent<CharacterMaster>();
						if (Object.op_Implicit((Object)(object)component2))
						{
							component2.teamIndex = (TeamIndex)4;
							NetworkServer.Spawn(val3);
							component2.SpawnBodyHere();
						}
					}
					return self;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : IL.RoR2.FogDamageController.FixedUpdate");
			}
		}

		private static void RemoveVoidDiosLikeRegular(orig_OnDevotedBodyDead orig, DevotedLemurianController self)
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			if (self._devotionInventoryController.HasItem(Items.ExtraLifeVoid))
			{
				self._devotionInventoryController.RemoveItem(Items.ExtraLifeVoid.itemIndex, 1);
			}
			else
			{
				orig.Invoke(self);
			}
		}

		private static void NoFogLemurianDamage(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.5f),
				(Instruction x) => ILPatternMatchingExt.MatchMul(x)
			}))
			{
				val.Next.Operand = 0f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : IL.RoR2.FogDamageController.FixedUpdate");
			}
		}

		private static void ScrapForVoids(orig_DropScrapOnDeath orig, DevotionInventoryController self, ItemIndex devotionItem, CharacterBody minionBody)
		{
			//IL_0003: 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_0011: 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_00b1: 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)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected I4, but got Unknown
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: 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_0066: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, devotionItem, minionBody);
			PickupIndex val = PickupIndex.none;
			ItemDef itemDef = ItemCatalog.GetItemDef(devotionItem);
			if ((Object)(object)itemDef != (Object)null)
			{
				ItemTier tier = itemDef.tier;
				ItemTier val2 = tier;
				switch (val2 - 3)
				{
				case 0:
					val = PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex);
					break;
				case 3:
					val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapWhite");
					break;
				case 4:
					val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapGreen");
					break;
				case 5:
					val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapRed");
					break;
				case 6:
					val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapYellow");
					break;
				case 7:
					val = PickupCatalog.FindPickupIndex("ItemIndex.ScrapWhite");
					break;
				}
			}
			if (val != PickupIndex.none)
			{
				PickupDropletController.CreatePickupDroplet(val, minionBody.corePosition, Vector3.down * 15f);
			}
		}

		private static void TeleportMoreOften(orig_Start orig, DevotedLemurianController self)
		{
			orig.Invoke(self);
			self._leashDistSq = 18000f;
		}

		private static void VoidForLemurians(orig_SetOptionsFromInteractor orig, PickupPickerController self, Interactor activator)
		{
			bool flag = Object.op_Implicit((Object)(object)((Component)self).GetComponent<LemurianEggController>());
			if (flag)
			{
				ItemTierCatalog.GetItemTierDef((ItemTier)10).canScrap = true;
				if (WConfig.DevotionAllowVoids.Value)
				{
					ItemTierCatalog.GetItemTierDef((ItemTier)6).canScrap = true;
					ItemTierCatalog.GetItemTierDef((ItemTier)7).canScrap = true;
					ItemTierCatalog.GetItemTierDef((ItemTier)8).canScrap = true;
				}
				if (WConfig.DevotionAllowLunars.Value)
				{
					ItemTierCatalog.GetItemTierDef((ItemTier)3).canScrap = true;
				}
			}
			orig.Invoke(self, activator);
			if (flag)
			{
				ItemTierCatalog.GetItemTierDef((ItemTier)10).canScrap = false;
				if (WConfig.DevotionAllowVoids.Value)
				{
					ItemTierCatalog.GetItemTierDef((ItemTier)6).canScrap = false;
					ItemTierCatalog.GetItemTierDef((ItemTier)7).canScrap = false;
					ItemTierCatalog.GetItemTierDef((ItemTier)8).canScrap = false;
				}
				if (WConfig.DevotionAllowLunars.Value)
				{
					ItemTierCatalog.GetItemTierDef((ItemTier)3).canScrap = false;
				}
			}
		}

		private static void AddLemurianInventory(orig_Rebuild orig, ScoreboardController self)
		{
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!WConfig.DevotionInventory.Value || DevotionInventoryController.InstanceList.Count <= 0)
			{
				return;
			}
			List<CharacterMaster> list = new List<CharacterMaster>();
			Inventory val3 = default(Inventory);
			foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
			{
				if (!instance.isConnected)
				{
					continue;
				}
				list.Add(instance.master);
				if (!WConfig.DevotionShowAllInventory.Value)
				{
					continue;
				}
				CharacterMaster master = instance.master;
				MinionGroup val = MinionGroup.FindGroup(((NetworkBehaviour)master).netId);
				if (val == null)
				{
					continue;
				}
				MinionOwnership[] members = val.members;
				foreach (MinionOwnership val2 in members)
				{
					if (Object.op_Implicit((Object)(object)val2) && ((Component)val2).TryGetComponent<Inventory>(ref val3) && val3.GetItemCount(Items.LemurianHarness) > 0)
					{
						list.Add(((Component)val2).GetComponent<CharacterMaster>());
						break;
					}
				}
			}
			if (!WConfig.DevotionShowAllInventory.Value)
			{
				CharacterMaster master2 = LocalUserManager.readOnlyLocalUsersList.First().cachedMasterController.master;
				MinionGroup val4 = MinionGroup.FindGroup(((NetworkBehaviour)master2).netId);
				if (val4 != null)
				{
					MinionOwnership[] members2 = val4.members;
					DevotedLemurianController val6 = default(DevotedLemurianController);
					foreach (MinionOwnership val5 in members2)
					{
						if (Object.op_Implicit((Object)(object)val5) && ((Component)((Component)val5).GetComponent<CharacterMaster>()).TryGetComponent<DevotedLemurianController>(ref val6))
						{
							list.Add(((Component)val5).GetComponent<CharacterMaster>());
							break;
						}
					}
				}
			}
			self.SetStripCount(list.Count);
			for (int k = 0; k < list.Count; k++)
			{
				self.stripAllocator.elements[k].SetMaster(list[k]);
			}
		}
	}
	public class Dissonance
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_HandleMixEnemyArtifact <0>__FindSkinForSkinnedEnemies;

			public static hook_RebuildCards <1>__DissoanceLunerEliteAll;

			public static hook_OnEnable <2>__PerfectedVoidForRelevantStage;

			public static hook_Start <3>__HalcyoniteShrineInteractable_Start;
		}

		public static DirectorCard DissoGolem = null;

		public static DirectorCard DissoTitan = null;

		public static DirectorCard DissoVermin = null;

		public static DirectorCard DissoVerminFlying = null;

		public static DirectorCard DissoBeetle = null;

		public static DirectorCard DissoBeetleGuard = null;

		public static DirectorCard DissoBeetleQueen = null;

		public static DirectorCardCategorySelection dccsShrineHalcyoniteDissonance = ScriptableObject.CreateInstance<DirectorCardCategorySelection>();

		public static List<SpawnCard> LunarifiedList;

		public static void Start()
		{
			//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_0022: Expected O, but got Unknown
			//IL_0038: 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_0043: Expected O, but got Unknown
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Expected O, but got Unknown
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			Mixenemymaker();
			object obj = <>O.<0>__FindSkinForSkinnedEnemies;
			if (obj == null)
			{
				hook_HandleMixEnemyArtifact val = FindSkinForSkinnedEnemies;
				<>O.<0>__FindSkinForSkinnedEnemies = val;
				obj = (object)val;
			}
			ClassicStageInfo.HandleMixEnemyArtifact += (hook_HandleMixEnemyArtifact)obj;
			object obj2 = <>O.<1>__DissoanceLunerEliteAll;
			if (obj2 == null)
			{
				hook_RebuildCards val2 = DissoanceLunerEliteAll;
				<>O.<1>__DissoanceLunerEliteAll = val2;
				obj2 = (object)val2;
			}
			ClassicStageInfo.RebuildCards += (hook_RebuildCards)obj2;
			object obj3 = <>O.<2>__PerfectedVoidForRelevantStage;
			if (obj3 == null)
			{
				hook_OnEnable val3 = PerfectedVoidForRelevantStage;
				<>O.<2>__PerfectedVoidForRelevantStage = val3;
				obj3 = (object)val3;
			}
			DirectorCore.OnEnable += (hook_OnEnable)obj3;
			object obj4 = <>O.<3>__HalcyoniteShrineInteractable_Start;
			if (obj4 == null)
			{
				hook_Start val4 = HalcyoniteShrineInteractable_Start;
				<>O.<3>__HalcyoniteShrineInteractable_Start = val4;
				obj4 = (object)val4;
			}
			HalcyoniteShrineInteractable.Start += (hook_Start)obj4;
			dccsShrineHalcyoniteDissonance.AddCategory("Golem", 10f);
			dccsShrineHalcyoniteDissonance.AddCard(0, new DirectorCard
			{
				preventOverhead = false,
				selectionWeight = 10
			});
			((Object)dccsShrineHalcyoniteDissonance).name = "dccsShrineHalcyoniteDissonance";
		}

		private static void PerfectedVoidForRelevantStage(orig_OnEnable orig, DirectorCore self)
		{
			orig.Invoke(self);
			if (!NetworkServer.active || !Object.op_Implicit((Object)(object)RunArtifactManager.instance) || !RunArtifactManager.instance.IsArtifactEnabled(Artifacts.MixEnemy))
			{
				return;
			}
			string baseSceneName = SceneInfo.instance.sceneDef.baseSceneName;
			if (baseSceneName == "moon2")
			{
				CombatDirector[] components = ((Component)self).GetComponents<CombatDirector>();
				CombatDirector[] array = components;
				foreach (CombatDirector val in array)
				{
					((UnityEvent<GameObject>)(object)val.onSpawnedServer).AddListener((UnityAction<GameObject>)PerfectedDissonanceOnMoon3);
				}
				CombatDirector component = GameObject.Find("SceneInfo/BrotherMissionController/BrotherEncounter, Phase 2/PhaseObjects/CombatDirector").GetComponent<CombatDirector>();
				CombatDirector component2 = GameObject.Find("SceneInfo/BrotherMissionController/BrotherEncounter, Phase 3/PhaseObjects/CombatDirector").GetComponent<CombatDirector>();
				((UnityEvent<GameObject>)(object)component.onSpawnedServer).AddListener((UnityAction<GameObject>)PerfectedDissonanceOnMoon);
				((UnityEvent<GameObject>)(object)component2.onSpawnedServer).AddListener((UnityAction<GameObject>)PerfectedDissonanceOnMoon);
			}
			else if (baseSceneName == "voidstage")
			{
				CombatDirector[] components2 = ((Component)self).GetComponents<CombatDirector>();
				CombatDirector[] array2 = components2;
				foreach (CombatDirector val2 in array2)
				{
					((UnityEvent<GameObject>)(object)val2.onSpawnedServer).AddListener((UnityAction<GameObject>)VoidElitesVoidStage);
				}
			}
		}

		private static void HalcyoniteShrineInteractable_Start(orig_Start orig, HalcyoniteShrineInteractable self)
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: 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_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.MixEnemy))
			{
				return;
			}
			int num = (int)(self.monsterCredit * 0.6f);
			WeightedSelection<DirectorCard> val = RoR2Content.mixEnemyMonsterCards.GenerateDirectorCardWeightedSelection();
			int num2 = val.Count;
			while (num2 > 0)
			{
				num2--;
				if (val.GetChoice(num2).value.cost > num)
				{
					val.RemoveChoice(num2);
				}
			}
			DirectorCard val2 = val.Evaluate(ClassicStageInfo.instance.rng.nextNormalizedFloat);
			Debug.Log((object)("Halcyonite Card: " + (object)val2.GetSpawnCard()));
			dccsShrineHalcyoniteDissonance.categories[0].cards[0].spawnCard = val2.GetSpawnCard();
			dccsShrineHalcyoniteDissonance.categories[0].cards[0].spawnDistance = val2.spawnDistance;
			self.activationDirector.eliteBias = 1.5f;
			self.activationDirector.monsterCards = dccsShrineHalcyoniteDissonance;
		}

		public static void VoidElitesVoidStage(GameObject masterObject)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Invalid comparison between Unknown and I4
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			if (Run.instance.spawnRng.RangeInt(0, 3) == 0)
			{
				CharacterMaster component = masterObject.GetComponent<CharacterMaster>();
				if (Object.op_Implicit((Object)(object)component) && component.hasBody && (int)component.inventory.currentEquipmentIndex == -1 && !((Enum)component.GetBody().bodyFlags).HasFlag((Enum)(object)(BodyFlags)1024))
				{
					component.inventory.SetEquipmentIndex(Equipment.EliteVoidEquipment.equipmentIndex);
				}
			}
		}

		public static void PerfectedDissonanceOnMoon3(GameObject masterObject)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			Inventory component = masterObject.GetComponent<Inventory>();
			if ((int)component.currentEquipmentIndex == -1 && Run.instance.spawnRng.nextBool)
			{
				component.SetEquipmentIndex(Equipment.AffixLunar.equipmentIndex);
			}
		}

		public static void PerfectedDissonanceOnMoon(GameObject masterObject)
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)masterObject).name.StartsWith("Lun"))
			{
				Inventory component = masterObject.GetComponent<Inventory>();
				component.GiveItem(Items.BoostHp, 10);
				component.SetEquipmentIndex(Equipment.AffixLunar.equipmentIndex);
			}
		}

		public static void Mixenemymaker()
		{
			//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_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_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: 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_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Expected O, but got Unknown
			//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: 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)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_023e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Expected O, but got Unknown
			DirectorCardCategorySelection val = Addressables.LoadAssetAsync<DirectorCardCategorySelection>((object)"RoR2/Base/MixEnemy/dccsMixEnemy.asset").WaitForCompletion();
			DirectorCard val2 = new DirectorCard
			{
				spawnCard = (SpawnCard)(object)LegacyResourcesAPI.Load<CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscScav"),
				preventOverhead = false,
				selectionWeight = 1,
				minimumStageCompletions = 0,
				spawnDistance = (MonsterSpawnDistance)0
			};
			val.categories[0].selectionWeight = 3f;
			val.categories[1].selectionWeight = 3f;
			val.categories[2].selectionWeight = 4f;
			val.categories[3].cards = val.categories[3].cards.Remove(val.categories[3].cards[0]);
			val.AddCard(0, val2);
			DissoVermin = val.categories[2].cards[11];
			DissoVerminFlying = val.categories[2].cards[2];
			DissoBeetle = val.categories[2].cards[1];
			DissoBeetleGuard = val.categories[1].cards[0];
			DissoBeetleQueen = val.categories[0].cards[0];
			DissoGolem = val.categories[1].cards[5];
			DissoTitan = val.categories[0].cards[9];
			val.AddCard(0, val.categories[1].cards[10]);
			val.AddCard(0, val.categories[1].cards[14]);
			ArrayUtils.ArrayRemoveAtAndResize<DirectorCard>(ref val.categories[1].cards, 10, 1);
			ArrayUtils.ArrayRemoveAtAndResize<DirectorCard>(ref val.categories[1].cards, 14, 1);
			val.categories[2].cards[9].spawnDistance = (MonsterSpawnDistance)1;
			val.categories[2].cards[12].spawnDistance = (MonsterSpawnDistance)1;
			val.AddCard(2, new DirectorCard
			{
				spawnCard = (SpawnCard)(object)LegacyResourcesAPI.Load<CharacterSpawnCard>("SpawnCards/CharacterSpawnCards/cscHermitCrab"),
				selectionWeight = 1,
				spawnDistance = (MonsterSpawnDistance)2
			});
		}

		public static void DissoanceLunerEliteAll(orig_RebuildCards orig, ClassicStageInfo self, DirectorCardCategorySelection forcedMonsterCategory, DirectorCardCategorySelection forcedInteractableCategory)
		{
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Invalid comparison between Unknown and I4
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, forcedMonsterCategory, forcedInteractableCategory);
			if (!((Object)(object)self != (Object)null))
			{
				return;
			}
			if (LunarifiedList != null)
			{
				for (int i = 0; i < LunarifiedList.Count; i++)
				{
					LunarifiedList[i].eliteRules = (EliteRules)0;
				}
				LunarifiedList = null;
			}
			if (!Object.op_Implicit((Object)(object)RunArtifactManager.instance) || !RunArtifactManager.instance.IsArtifactEnabled(Artifacts.mixEnemyArtifactDef))
			{
				return;
			}
			if (LunarifiedList == null)
			{
				LunarifiedList = new List<SpawnCard>();
			}
			string baseSceneName = SceneInfo.instance.sceneDef.baseSceneName;
			if (!(baseSceneName == "moon2") && !(baseSceneName == "itmoon"))
			{
				return;
			}
			Debug.Log((object)"Dissonance : Lunar Stage");
			WeightedSelection<DirectorCard> monsterSelection = ClassicStageInfo.instance.monsterSelection;
			for (int j = 0; j < monsterSelection.Count; j++)
			{
				SpawnCard spawnCard = monsterSelection.GetChoice(j).value.GetSpawnCard();
				if ((int)spawnCard.eliteRules == 0)
				{
					LunarifiedList.Add(spawnCard);
					spawnCard.eliteRules = (EliteRules)2;
				}
			}
		}

		public static void FindSkinForSkinnedEnemies(orig_HandleMixEnemyArtifact orig, DirectorCardCategorySelection monsterCategories, Xoroshiro128Plus rng)
		{
			//IL_004b: 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_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: 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_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: 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_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: 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_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: 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_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0370: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_038a: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(monsterCategories, rng);
			if (DissoTitan != null)
			{
				switch (rng.RangeInt(1, 5))
				{
				case 1:
					DissoTitan.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanBlackBeach.asset").WaitForCompletion();
					break;
				case 2:
					DissoTitan.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanDampCave.asset").WaitForCompletion();
					break;
				case 3:
					DissoTitan.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanGolemPlains.asset").WaitForCompletion();
					break;
				case 4:
					DissoTitan.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Titan/cscTitanGooLake.asset").WaitForCompletion();
					break;
				}
			}
			if (DissoGolem != null)
			{
				switch (rng.RangeInt(1, 5))
				{
				case 1:
					DissoGolem.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Golem/cscGolem.asset").WaitForCompletion();
					break;
				case 2:
					DissoGolem.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Golem/cscGolemNature.asset").WaitForCompletion();
					break;
				case 3:
					DissoGolem.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Golem/cscGolemSandy.asset").WaitForCompletion();
					break;
				case 4:
					DissoGolem.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Golem/cscGolemSnowy.asset").WaitForCompletion();
					break;
				}
			}
			if (DissoVermin != null)
			{
				switch (rng.RangeInt(1, 3))
				{
				case 1:
					DissoVermin.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/Vermin/cscVermin.asset").WaitForCompletion();
					break;
				case 2:
					DissoVermin.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/Vermin/cscVerminSnowy.asset").WaitForCompletion();
					break;
				}
			}
			if (DissoVerminFlying != null)
			{
				switch (rng.RangeInt(1, 3))
				{
				case 1:
					DissoVerminFlying.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/FlyingVermin/cscFlyingVermin.asset").WaitForCompletion();
					break;
				case 2:
					DissoVerminFlying.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/FlyingVermin/cscFlyingVerminSnowy.asset").WaitForCompletion();
					break;
				}
			}
			if (DissoBeetle != null)
			{
				switch (rng.RangeInt(1, 3))
				{
				case 1:
					DissoBeetle.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Beetle/cscBeetle.asset").WaitForCompletion();
					break;
				case 2:
					DissoBeetle.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Beetle/cscBeetleSulfur.asset").WaitForCompletion();
					break;
				}
			}
			if (DissoBeetleGuard != null)
			{
				switch (rng.RangeInt(1, 3))
				{
				case 1:
					DissoBeetleGuard.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"03978ad4a8751804a80940d5cfd4038b").WaitForCompletion();
					break;
				case 2:
					DissoBeetleGuard.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"00c29c914e813454384bddaf6271eff1").WaitForCompletion();
					break;
				}
			}
			if (DissoBeetleQueen != null)
			{
				switch (rng.RangeInt(1, 3))
				{
				case 1:
					DissoBeetleQueen.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"56a5ee1553328b34eb5996e7f77710c9").WaitForCompletion();
					break;
				case 2:
					DissoBeetleQueen.spawnCard = (SpawnCard)(object)Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"0414c8a55b86c1d4e81037e3a7e45788").WaitForCompletion();
					break;
				}
			}
		}
	}
	public class Enigma
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_CalculateEquipmentCooldownScale <0>__EnigmaCooldownReduction;

			public static Action<EquipmentSlot, EquipmentIndex> <1>__EquipmentSlot_onServerEquipmentActivated;

			public static Action <2>__SetTier;

			public static Action <3>__SetLang;

			public static hook_BuildPickupEntries <4>__LogBookController_BuildPickupEntries;

			public static hook_GetPickupStatus <5>__LogBookController_GetPickupStatus;
		}

		public static ItemTierDef artifactItemTier = null;

		public static ItemDef enigmaFragmentDef = null;

		public static ItemDef eliteEnigmaFragmentDef = null;

		public static float EnigmaFragmentCooldownReduction = 0.88f;

		public static Color CustomColor = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)24));

		public static void Start()
		{
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			if (!WConfig.EnigmaInterrupt.Value)
			{
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/BossHunter").enigmaCompatible = false;
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/BossHunterConsumed").enigmaCompatible = false;
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/Recycle").enigmaCompatible = false;
			}
			if (WConfig.EnigmaMovement.Value)
			{
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/Jetpack").enigmaCompatible = true;
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/FireBallDash").enigmaCompatible = true;
			}
			else
			{
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/Jetpack").enigmaCompatible = false;
				LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/FireBallDash").enigmaCompatible = false;
			}
			LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/Tonic").enigmaCompatible = false;
			LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/Meteor").enigmaCompatible = false;
			LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/BurnNearby").enigmaCompatible = false;
			LegacyResourcesAPI.Load<EquipmentDef>("equipmentdefs/CrippleWard").enigmaCompatible = true;
			Addressables.LoadAssetAsync<BuffDef>((object)"0cabe49fb119dcf4188d2a8c2e65edd2").WaitForCompletion().eliteDef = null;
		}

		public static void MakeEnigmaFragment()
		{
			//IL_0060: 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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Expected O, but got Unknown
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Expected O, but got Unknown
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Expected O, but got Unknown
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Expected O, but got Unknown
			artifactItemTier = ScriptableObject.CreateInstance<ItemTierDef>();
			((Object)artifactItemTier).name = "ArtifactItemsItemTierDef";
			artifactItemTier.isDroppable = false;
			if (WConfig.DisplayEnigmaInLog.Value)
			{
				artifactItemTier.isDroppable = true;
			}
			artifactItemTier.canScrap = false;
			artifactItemTier.canRestack = true;
			artifactItemTier.colorIndex = (ColorIndex)24;
			artifactItemTier.darkColorIndex = (ColorIndex)24;
			artifactItemTier.tier = (ItemTier)11;
			artifactItemTier.bgIconTexture = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/ArtifactsVanilla/artifactBg.png");
			ContentAddition.AddItemTierDef(artifactItemTier);
			GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/PickupModels/Artifacts/PickupEnigma"), "PickupEnigmaFragment", false);
			GameObject val2 = new GameObject("cameraPos");
			GameObject val3 = new GameObject("focusPoint");
			val2.transform.SetParent(val.transform, false);
			val3.transform.SetParent(val.transform, false);
			val2.transform.localPosition = new Vector3(-1.5f, 1f, 3f);
			ModelPanelParameters val4 = val.AddComponent<ModelPanelParameters>();
			val4.cameraPositionTransform = val2.transform;
			val4.focusPointTransform = val3.transform;
			GameObject val5 = PrefabAPI.InstantiateClone(val, "PickupEnigmaFragmentElite", false);
			enigmaFragmentDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)enigmaFragmentDef).name = "EnigmaFragment";
			enigmaFragmentDef.nameToken = "ITEM_ENIGMAFRAGMENT_NAME";
			enigmaFragmentDef.pickupToken = "ITEM_ENIGMAFRAGMENT_PICKUP";
			enigmaFragmentDef.descriptionToken = "ITEM_ENIGMAFRAGMENT_DESC";
			enigmaFragmentDef.pickupIconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/ArtifactsVanilla/enigmaFragment.png");
			enigmaFragmentDef.pickupModelPrefab = val;
			enigmaFragmentDef.loreToken = "";
			enigmaFragmentDef.hidden = false;
			enigmaFragmentDef.canRemove = false;
			enigmaFragmentDef.deprecatedTier = (ItemTier)5;
			ItemAPI.Add(new CustomItem(enigmaFragmentDef, Array.Empty<ItemDisplayRule>()));
			object obj = <>O.<0>__EnigmaCooldownReduction;
			if (obj == null)
			{
				hook_CalculateEquipmentCooldownScale val6 = EnigmaCooldownReduction;
				<>O.<0>__EnigmaCooldownReduction = val6;
				obj = (object)val6;
			}
			Inventory.CalculateEquipmentCooldownScale += (hook_CalculateEquipmentCooldownScale)obj;
			Material val7 = Object.Instantiate<Material>(Addressables.LoadAssetAsync<Material>((object)"926e293c755c1964bb9a6612e94e76df").WaitForCompletion());
			MeshRenderer component = ((Component)val5.transform.GetChild(0)).GetComponent<MeshRenderer>();
			val7.SetTexture("_NormalTex", ((Renderer)component).material.GetTexture("_NormalTex"));
			val7.SetFloat("_NormalStrength", 2f);
			((Renderer)component).material = val7;
			eliteEnigmaFragmentDef = ScriptableObject.CreateInstance<ItemDef>();
			((Object)eliteEnigmaFragmentDef).name = "EnigmaFragmentElite";
			eliteEnigmaFragmentDef.nameToken = "ITEM_ENIGMAFRAGMENTELITE_NAME";
			eliteEnigmaFragmentDef.pickupToken = "ITEM_ENIGMAFRAGMENTELITE_PICKUP";
			eliteEnigmaFragmentDef.descriptionToken = "ITEM_ENIGMAFRAGMENTELITE_DESC";
			eliteEnigmaFragmentDef.pickupIconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/ArtifactsVanilla/enigmaFragmentElite.png");
			eliteEnigmaFragmentDef.pickupModelPrefab = val5;
			eliteEnigmaFragmentDef.loreToken = "";
			eliteEnigmaFragmentDef.hidden = false;
			eliteEnigmaFragmentDef.canRemove = false;
			eliteEnigmaFragmentDef.deprecatedTier = (ItemTier)5;
			ItemAPI.Add(new CustomItem(eliteEnigmaFragmentDef, Array.Empty<ItemDisplayRule>()));
			EquipmentSlot.onServerEquipmentActivated += EquipmentSlot_onServerEquipmentActivated;
			((ResourceAvailability)(ref ItemTierCatalog.availability)).CallWhenAvailable((Action)SetTier);
			((ResourceAvailability)(ref ArtifactCatalog.availability)).CallWhenAvailable((Action)SetLang);
		}

		public static void SetLang()
		{
			Artifacts.Enigma.descriptionToken = "ARTIFACT_ENIGMA_NEW_DESCRIPTION";
		}

		public static void SetTier()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			enigmaFragmentDef._itemTierDef = artifactItemTier;
			eliteEnigmaFragmentDef._itemTierDef = artifactItemTier;
			artifactItemTier.dropletDisplayPrefab = LegacyResourcesAPI.LoadAsync<GameObject>("Prefabs/ItemPickups/EquipmentOrb").WaitForCompletion();
		}

		private static void EquipmentSlot_onServerEquipmentActivated(EquipmentSlot self, EquipmentIndex eq)
		{
			//IL_003b: 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_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Invalid comparison between Unknown and I4
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)self.characterBody) || !Object.op_Implicit((Object)(object)self.inventory))
			{
				return;
			}
			int itemCount = self.inventory.GetItemCount(eliteEnigmaFragmentDef);
			if (itemCount > 0)
			{
				EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(eq);
				BuffIndex val = BuffCatalog.eliteBuffIndices[self.rng.RangeInt(0, BuffCatalog.eliteBuffIndices.Length)];
				if ((int)val != -1)
				{
					self.characterBody.AddTimedBuff(val, equipmentDef.cooldown * 0.75f * (float)itemCount);
				}
			}
		}

		private static float EnigmaCooldownReduction(orig_CalculateEquipmentCooldownScale orig, Inventory self)
		{
			int itemCount = self.GetItemCount(enigmaFragmentDef);
			if (itemCount > 0)
			{
				float num = orig.Invoke(self);
				return num * Mathf.Pow(EnigmaFragmentCooldownReduction, (float)itemCount);
			}
			return orig.Invoke(self);
		}

		public static void CallLate()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: 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_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Expected O, but got Unknown
			int num = (int)((1f - EnigmaFragmentCooldownReduction) * 100f);
			LanguageAPI.Add("ITEM_ENIGMAFRAGMENT_DESC", string.Format(Language.GetString("ITEM_ENIGMAFRAGMENT_DESC"), num));
			EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(EquipmentCatalog.FindEquipmentIndex("EQUIPMENT_IMPULSEFROSTSHIELD"));
			if ((Object)(object)equipmentDef != (Object)null)
			{
				equipmentDef.enigmaCompatible = false;
				EquipmentCatalog.enigmaEquipmentList.Remove(equipmentDef.equipmentIndex);
			}
			equipmentDef = EquipmentCatalog.GetEquipmentDef(EquipmentCatalog.FindEquipmentIndex("EQUIPMENT_REUSER"));
			if ((Object)(object)equipmentDef != (Object)null)
			{
				equipmentDef.enigmaCompatible = false;
				EquipmentCatalog.enigmaEquipmentList.Remove(equipmentDef.equipmentIndex);
			}
			equipmentDef = EquipmentCatalog.GetEquipmentDef(EquipmentCatalog.FindEquipmentIndex("EQUIPMENT_Reducer"));
			if ((Object)(object)equipmentDef != (Object)null)
			{
				equipmentDef.enigmaCompatible = false;
				EquipmentCatalog.enigmaEquipmentList.Remove(equipmentDef.equipmentIndex);
			}
			if ((Object)(object)enigmaFragmentDef != (Object)null)
			{
				object obj = <>O.<4>__LogBookController_BuildPickupEntries;
				if (obj == null)
				{
					hook_BuildPickupEntries val = LogBookController_BuildPickupEntries;
					<>O.<4>__LogBookController_BuildPickupEntries = val;
					obj = (object)val;
				}
				LogBookController.BuildPickupEntries += (hook_BuildPickupEntries)obj;
				object obj2 = <>O.<5>__LogBookController_GetPickupStatus;
				if (obj2 == null)
				{
					hook_GetPickupStatus val2 = LogBookController_GetPickupStatus;
					<>O.<5>__LogBookController_GetPickupStatus = val2;
					obj2 = (object)val2;
				}
				LogBookController.GetPickupStatus += (hook_GetPickupStatus)obj2;
			}
		}

		private static EntryStatus LogBookController_GetPickupStatus(orig_GetPickupStatus orig, ref Entry entry, UserProfile viewerProfile)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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_0024: Invalid comparison between Unknown and I4
			//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_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			PickupIndex val = (PickupIndex)entry.extraData;
			PickupDef pickupDef = PickupCatalog.GetPickupDef(val);
			ItemIndex val2 = (ItemIndex)((pickupDef == null) ? (-1) : ((int)pickupDef.itemIndex));
			if ((int)val2 != -1)
			{
				ItemDef itemDef = ItemCatalog.GetItemDef(val2);
				if ((Object)(object)itemDef._itemTierDef == (Object)(object)artifactItemTier && viewerProfile.HasUnlockable(itemDef.unlockableDef))
				{
					return (EntryStatus)4;
				}
			}
			return orig.Invoke(ref entry, viewerProfile);
		}

		private static Entry[] LogBookController_BuildPickupEntries(orig_BuildPickupEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
		{
			//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_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_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)
			if (Object.op_Implicit((Object)(object)enigmaFragmentDef))
			{
				UnlockableDef unlockableDef = Addressables.LoadAssetAsync<UnlockableDef>((object)"5f4704377f63edd48930460f5aa7a964").WaitForCompletion();
				enigmaFragmentDef.unlockableDef = unlockableDef;
				eliteEnigmaFragmentDef.unlockableDef = unlockableDef;
				PickupCatalog.GetPickupDef(PickupCatalog.FindPickupIndex(enigmaFragmentDef.itemIndex)).unlockableDef = unlockableDef;
				PickupCatalog.GetPickupDef(PickupCatalog.FindPickupIndex(eliteEnigmaFragmentDef.itemIndex)).unlockableDef = unlockableDef;
			}
			Entry[] result = orig.Invoke(expansionAvailability);
			artifactItemTier.isDroppable = false;
			return result;
		}

		public static GenericPickupController EnigmaFragmentMaker(orig_CreatePickup orig, ref CreatePickupInfo createPickupInfo)
		{
			//IL_0002: 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_0017: Invalid comparison between Unknown and I4
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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)
			PickupDef pickupDef = PickupCatalog.GetPickupDef(((CreatePickupInfo)(ref createPickupInfo)).pickupIndex);
			if (pickupDef != null && (int)pickupDef.equipmentIndex != -1)
			{
				EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex);
				bool flag = Object.op_Implicit((Object)(object)equipmentDef.passiveBuffDef) && equipmentDef.passiveBuffDef.isElite;
				bool flag2 = false;
				if (flag)
				{
					flag2 = true;
					((CreatePickupInfo)(ref createPickupInfo)).pickupIndex = PickupCatalog.FindPickupIndex(eliteEnigmaFragmentDef.itemIndex);
				}
				else if (equipmentDef.enigmaCompatible)
				{
					flag2 = true;
					((CreatePickupInfo)(ref createPickupInfo)).pickupIndex = PickupCatalog.FindPickupIndex(enigmaFragmentDef.itemIndex);
				}
				GenericPickupController val = orig.Invoke(ref createPickupInfo);
				if (flag2 && Object.op_Implicit((Object)(object)((Component)val).gameObject) && Object.op_Implicit((Object)(object)val.pickupDisplay))
				{
					Util.PlaySound("Play_item_proc_crit_cooldown", ((Component)val).gameObject);
					if (flag)
					{
						val.pickupDisplay.tier3ParticleEffect.SetActive(true);
						val.pickupDisplay.bossParticleEffect.SetActive(true);
					}
					else
					{
						val.pickupDisplay.tier1ParticleEffect.SetActive(true);
					}
					val.pickupDisplay.equipmentParticleEffect.SetActive(true);
				}
				return val;
			}
			return orig.Invoke(ref createPickupInfo);
		}

		public static void EnigmaEquipmentGranter(orig_AttemptGrant orig, GenericPickupController self, CharacterBody body)
		{
			//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)
			//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_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Invalid comparison between Unknown and I4
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Invalid comparison between Unknown and I4
			//IL_003d: 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_0051: 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_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: 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_00ca: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Expected O, but got Unknown
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: 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_0154: Unknown result type (might be due to invalid IL or missing references)
			PickupIndex pickupIndex = self.pickupIndex;
			EquipmentIndex equipmentIndex = ((PickupIndex)(ref pickupIndex)).equipmentIndex;
			if ((int)equipmentIndex == -1)
			{
				orig.Invoke(self, body);
				return;
			}
			bool flag = (int)body.inventory.currentEquipmentIndex != -1;
			if (!flag && PickupCatalog.GetPickupDef(self.pickupIndex).itemIndex == enigmaFragmentDef.itemIndex)
			{
				self.pickupIndex = PickupCatalog.FindPickupIndex(EnigmaArtifactManager.GetRandomEquipment(EnigmaArtifactManager.serverInitialEquipmentRng, 0));
				Util.PlaySound("Play_UI_insufficient_funds", ((Component)self).gameObject);
				Util.PlaySound("Play_UI_insufficient_funds", ((Component)self).gameObject);
				if (((NetworkBehaviour)body.master).hasAuthority)
				{
					CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(body.master);
					TransformationInfo val = new TransformationInfo((TransformationType)0, (object)enigmaFragmentDef);
					pickupIndex = self.pickupIndex;
					NotificationInfo val2 = new NotificationInfo((object)EquipmentCatalog.GetEquipmentDef(((PickupIndex)(ref pickupIndex)).pickupDef.equipmentIndex), val, false, 0);
					notificationQueueForMaster.PushNotification(val2, 6f);
				}
			}
			orig.Invoke(self, body);
			if (flag)
			{
				EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(equipmentIndex);
				EquipmentIndex equipmentIndex2 = Equipment.Fruit.equipmentIndex;
				if (Object.op_Implicit((Object)(object)equipmentDef.passiveBuffDef) && equipmentDef.passiveBuffDef.isElite)
				{
					equipmentIndex2 = Equipment.AffixRed.equipmentIndex;
				}
				CreatePickupInfo val3 = default(CreatePickupInfo);
				val3.position = ((Component)self).transform.position;
				val3.rotation = ((Component)self).transform.rotation;
				((CreatePickupInfo)(ref val3)).pickupIndex = PickupCatalog.FindPickupIndex(equipmentIndex2);
				GenericPickupController.CreatePickup(ref val3);
				Object.Destroy((Object)(object)((Component)self).gameObject);
			}
		}
	}
	public class Evolution
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__Evolution_MoreItems;

			public static hook_OnServerCardSpawnedGlobal <1>__Evo_VoidTeamCorrupted;
		}

		public static BasicPickupDropTable dtMonsterTeamLunarItem = ScriptableObject.CreateInstance<BasicPickupDropTable>();

		public static ItemTag evoBlacklist = (ItemTag)94;

		public static void Start()
		{
			//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_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_002e: 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_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Expected I4, but got Unknown
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Expected O, but got Unknown
			//IL_00fb: 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_0106: Expected O, but got Unknown
			BasicPickupDropTable val = Addressables.LoadAssetAsync<BasicPickupDropTable>((object)"RoR2/Base/MonsterTeamGainsItems/dtMonsterTeamTier1Item.asset").WaitForCompletion();
			BasicPickupDropTable val2 = Addressables.LoadAssetAsync<BasicPickupDropTable>((object)"RoR2/Base/MonsterTeamGainsItems/dtMonsterTeamTier2Item.asset").WaitForCompletion();
			BasicPickupDropTable val3 = Addressables.LoadAssetAsync<BasicPickupDropTable>((object)"RoR2/Base/MonsterTeamGainsItems/dtMonsterTeamTier3Item.asset").WaitForCompletion();
			ItemTag[] array = new ItemTag[7];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			array[6] = (ItemTag)(int)evoBlacklist;
			ItemTag[] bannedItemTags = (val3.bannedItemTags = (val2.bannedItemTags = (val.bannedItemTags = (ItemTag[])(object)array)));
			dtMonsterTeamLunarItem.bannedItemTags = bannedItemTags;
			dtMonsterTeamLunarItem.tier1Weight = 0f;
			dtMonsterTeamLunarItem.tier2Weight = 0f;
			dtMonsterTeamLunarItem.tier3Weight = 0f;
			dtMonsterTeamLunarItem.lunarItemWeight = 1f;
			((PickupDropTable)dtMonsterTeamLunarItem).canDropBeReplaced = false;
			((Object)dtMonsterTeamLunarItem).name = "dtMonsterTeamLunarItem";
			if (!Chainloader.PluginInfos.ContainsKey("com.Moffein.EvolutionConfig"))
			{
				object obj = <>O.<0>__Evolution_MoreItems;
				if (obj == null)
				{
					Manipulator val4 = Evolution_MoreItems;
					<>O.<0>__Evolution_MoreItems = val4;
					obj = (object)val4;
				}
				MonsterTeamGainsItemsArtifactManager.GrantMonsterTeamItem += (Manipulator)obj;
			}
			object obj2 = <>O.<1>__Evo_VoidTeamCorrupted;
			if (obj2 == null)
			{
				hook_OnServerCardSpawnedGlobal val5 = Evo_VoidTeamCorrupted;
				<>O.<1>__Evo_VoidTeamCorrupted = val5;
				obj2 = (object)val5;
			}
			MonsterTeamGainsItemsArtifactManager.OnServerCardSpawnedGlobal += (hook_OnServerCardSpawnedGlobal)obj2;
		}

		private static void Evo_VoidTeamCorrupted(orig_OnServerCardSpawnedGlobal orig, SpawnResult spawnResult)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Invalid comparison between Unknown and I4
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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)
			orig.Invoke(spawnResult);
			CharacterMaster val = (Object.op_Implicit((Object)(object)spawnResult.spawnedInstance) ? spawnResult.spawnedInstance.GetComponent<CharacterMaster>() : null);
			if (!Object.op_Implicit((Object)(object)val) || (int)val.teamIndex != 4)
			{
				return;
			}
			val.inventory.AddItemsFrom(MonsterTeamGainsItemsArtifactManager.monsterTeamInventory);
			Enumerator<TransformationInfo> enumerator = ContagiousItemManager.transformationInfos.GetEnumerator();
			try
			{
				while (enumerator.MoveNext())
				{
					TransformationInfo current = enumerator.Current;
					ContagiousItemManager.TryForceReplacement(val.inventory, current.originalItem);
				}
			}
			finally
			{
				((IDisposable)enumerator).Dispose();
			}
		}

		private static void Evolution_MoreItems(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1),
				(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, "RoR2.Inventory", "GiveItemPermanent")
			}))
			{
				val.EmitDelegate<Func<ItemIndex, ItemIndex>>((Func<ItemIndex, ItemIndex>)delegate(ItemIndex item)
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					//IL_0009: Unknown result type (might be due to invalid IL or missing references)
					//IL_000f: Invalid comparison between Unknown and I4
					//IL_0057: 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_0020: 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_0026: Unknown result type (might be due to invalid IL or missing references)
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					//IL_005c: 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_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)
					ItemDef itemDef = ItemCatalog.GetItemDef(item);
					if ((int)itemDef.tier == 3)
					{
						PickupIndex val2 = ((PickupDropTable)dtMonsterTeamLunarItem).GenerateDrop(MonsterTeamGainsItemsArtifactManager.treasureRng);
						if (val2 != PickupIndex.none)
						{
							PickupDef pickupDef = PickupCatalog.GetPickupDef(val2);
							if (pickupDef != null)
							{
								return pickupDef.itemIndex;
							}
						}
					}
					return item;
				});
				val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1)
				});
				val.EmitDelegate<Func<int, int>>((Func<int, int>)delegate(int amount)
				{
					if (WConfig.EvoMoreItems.Value)
					{
						bool flag = false;
						if (WConfig.EvoMoreAfterLoop.Value && MonsterTeamGainsItemsArtifactManager.currentItemIterator > 5)
						{
							flag = true;
						}
						else if (!WConfig.EvoMoreAfterLoop.Value)
						{
							flag = true;
						}
						if (flag)
						{
							switch ((MonsterTeamGainsItemsArtifactManager.currentItemIterator - 1) % MonsterTeamGainsItemsArtifactManager.dropPattern.Length)
							{
							case 0:
							case 1:
								return 3;
							case 2:
							case 3:
								return 2;
							case 4:
								return 1;
							}
						}
					}
					return amount;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Evolution_MoreItems");
			}
		}
	}
	public class Honor
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_BeginEncounter <0>__Honor_ForceSpecialEliteType;

			public static hook_Initialize <1>__Honor_SimuForceSpecialEliteType;

			public static hook_UpdateItemAvailability <2>__RemoveFireTrailFromWorm;

			public static hook_OnOutOfDangerChanged <3>__PreventPerfectedMithrixFromRegenningShield;

			public static hook_NotEliteOnlyArtifactActive <4>__AllowNormalTiersHonor;
		}

		public static List<EliteDef> minionEliteDefs;

		public static void Start()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//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_003d: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: 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_005e: Expected O, but got Unknown
			object obj = <>O.<0>__Honor_ForceSpecialEliteType;
			if (obj == null)
			{
				hook_BeginEncounter val = Honor_ForceSpecialEliteType;
				<>O.<0>__Honor_ForceSpecialEliteType = val;
				obj = (object)val;
			}
			ScriptedCombatEncounter.BeginEncounter += (hook_BeginEncounter)obj;
			object obj2 = <>O.<1>__Honor_SimuForceSpecialEliteType;
			if (obj2 == null)
			{
				hook_Initialize val2 = Honor_SimuForceSpecialEliteType;
				<>O.<1>__Honor_SimuForceSpecialEliteType = val2;
				obj2 = (object)val2;
			}
			InfiniteTowerExplicitSpawnWaveController.Initialize += (hook_Initialize)obj2;
			object obj3 = <>O.<2>__RemoveFireTrailFromWorm;
			if (obj3 == null)
			{
				hook_UpdateItemAvailability val3 = RemoveFireTrailFromWorm;
				<>O.<2>__RemoveFireTrailFromWorm = val3;
				obj3 = (object)val3;
			}
			CharacterBody.UpdateItemAvailability += (hook_UpdateItemAvailability)obj3;
			Addressables.LoadAssetAsync<EliteDef>((object)"RoR2/DLC1/EliteEarth/edEarthHonor.asset").WaitForCompletion().healthBoostCoefficient = 2f;
		}

		public static void OnArtifactEnable()
		{
			//IL_0039: 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_0044: Expected O, but got Unknown
			if (!NetworkServer.active)
			{
				return;
			}
			WConfig.cfgEliteWorms_Changed(null, null);
			Honor_EliteTiers(activate: true);
			if (WConfig.Honor_PerfectMithrix.Value)
			{
				object obj = <>O.<3>__PreventPerfectedMithrixFromRegenningShield;
				if (obj == null)
				{
					hook_OnOutOfDangerChanged val = PreventPerfectedMithrixFromRegenningShield;
					<>O.<3>__PreventPerfectedMithrixFromRegenningShield = val;
					obj = (object)val;
				}
				CharacterBody.OnOutOfDangerChanged += (hook_OnOutOfDangerChanged)obj;
			}
		}

		public static void OnArtifactDisable()
		{
			//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_003a: Expected O, but got Unknown
			WConfig.cfgEliteWorms_Changed(null, null);
			Honor_EliteTiers(activate: false);
			if (WConfig.Honor_PerfectMithrix.Value)
			{
				object obj = <>O.<3>__PreventPerfectedMithrixFromRegenningShield;
				if (obj == null)
				{
					hook_OnOutOfDangerChanged val = PreventPerfectedMithrixFromRegenningShield;
					<>O.<3>__PreventPerfectedMithrixFromRegenningShield = val;
					obj = (object)val;
				}
				CharacterBody.OnOutOfDangerChanged -= (hook_OnOutOfDangerChanged)obj;
			}
		}

		public static void Honor_EliteTiers(bool activate)
		{
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Expected O, but got Unknown
			if (activate)
			{
				minionEliteDefs = new List<EliteDef>();
				EliteDef[] eliteDefs = EliteCatalog.eliteDefs;
				foreach (EliteDef val in eliteDefs)
				{
					if (((Object)val).name.EndsWith("Honor") && val.IsAvailable())
					{
						minionEliteDefs.Add(val);
					}
				}
			}
			else
			{
				minionEliteDefs = null;
			}
			if (!WConfig.Honor_RedoneElites.Value)
			{
				return;
			}
			float num = 2f;
			if (activate)
			{
				object obj = <>O.<4>__AllowNormalTiersHonor;
				if (obj == null)
				{
					hook_NotEliteOnlyArtifactActive val2 = AllowNormalTiersHonor;
					<>O.<4>__AllowNormalTiersHonor = val2;
					obj = (object)val2;
				}
				CombatDirector.NotEliteOnlyArtifactActive += (hook_NotEliteOnlyArtifactActive)obj;
				CombatDirector.eliteTiers[0].isAvailable = (EliteRules rules) => false;
				num = 0.5f;
			}
			else
			{
				object obj2 = <>O.<4>__AllowNormalTiersHonor;
				if (obj2 == null)
				{
					hook_NotEliteOnlyArtifactActive val3 = AllowNormalTiersHonor;
					<>O.<4>__AllowNormalTiersHonor = val3;
					obj2 = (object)val3;
				}
				CombatDirector.NotEliteOnlyArtifactActive -= (hook_NotEliteOnlyArtifactActive)obj2;
				CombatDirector.eliteTiers[0].isAvailable = (EliteRules rules) => CombatDirector.NotEliteOnlyArtifactActive();
			}
			EliteDef[] eliteDefs2 = EliteCatalog.eliteDefs;
			foreach (EliteDef val4 in eliteDefs2)
			{
				if (!((Object)val4).name.EndsWith("Honor"))
				{
					val4.healthBoostCoefficient = Mathf.LerpUnclamped(1f, val4.healthBoostCoefficient, num);
					val4.damageBoostCoefficient = Mathf.LerpUnclamped(1f, val4.damageBoostCoefficient, num);
				}
			}
		}

		private static bool AllowNormalTiersHonor(orig_NotEliteOnlyArtifactActive orig)
		{
			return true;
		}

		public static bool DisableHonorEliteTier(orig_IsEliteOnlyArtifactActive orig)
		{
			return false;
		}

		private static void Honor_SimuForceSpecialEliteType(orig_Initialize orig, InfiniteTowerExplicitSpawnWaveController self, int waveIndex, Inventory enemyInventory, GameObject spawnTargetObject)
		{
			if (RunArtifactManager.instance.IsArtifactEnabled(Artifacts.EliteOnly) && WConfig.Honor_PerfectMithrix.Value)
			{
				string name = ((Object)self.spawnList[0].spawnCard).name;
				if (name.StartsWith("cscBrother"))
				{
					self.spawnList[0].eliteDef = Elites.Lunar;
				}
				else if (name.StartsWith("cscScavLunar"))
				{
					self.spawnList[0].eliteDef = Elites.Lunar;
				}
				else if (name.StartsWith("cscMiniVoidR"))
				{
					self.spawnList[0].eliteDef = Elites.Void;
				}
				else if (name.StartsWith("cscITVoidMe"))
				{
					self.spawnList[0].eliteDef = Elites.Void;
				}
				else if (name.StartsWith("cscVoidInfestor"))
				{
					self.spawnList[0].eliteDef = Elites.Void;
				}
				else if (name.StartsWith("cscFalseSon"))
				{
					self.spawnList[0].eliteDef = Elites.Aurelionite;
				}
				else if (name.StartsWith("cscTitanGold") && Run.instance.IsExpansionEnabled(Elites.Aurelionite.eliteEquipmentDef.requiredExpansion))
				{
					self.spawnList[0].eliteDef = Elites.Aurelionite;
				}
			}
			orig.Invoke(self, waveIndex, enemyInventory, spawnTargetObject);
		}

		private static void Honor_ForceSpecialEliteType(orig_BeginEncounter orig, ScriptedCombatEncounter self)
		{
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!RunArtifactManager.instance.IsArtifactEnabled(Artifacts.EliteOnly) || self.rng.nextNormalizedFloat < 0.7f || !WConfig.Honor_PerfectMithrix.Value)
			{
				return;
			}
			string name = ((Object)self.spawns[0].spawnCard).name;
			bool flag = false;
			EquipmentDef val = null;
			if (name.StartsWith("cscBrother") || name.StartsWith("cscScavLunar"))
			{
				flag = true;
				val = Equipment.AffixLunar;
			}
			else if (name.StartsWith("cscMiniVoidR") || name.StartsWith("cscVoidInfe"))
			{
				flag = true;
				val = Equipment.EliteVoidEquipment;
			}
			else if (name.StartsWith("cscFalseSon") || name.StartsWith("cscTitanGold"))
			{
				val = Equipment.EliteAurelioniteEquipment;
				if (Run.instance.IsExpansionEnabled(val.requiredExpansion))
				{
					flag = true;
				}
			}
			if (flag)
			{
				for (int i = 0; i < self.combatSquad.memberCount; i++)
				{
					self.combatSquad.membersList[i].inventory.SetEquipmentIndex(val.equipmentIndex);
				}
			}
		}

		private static void RemoveFireTrailFromWorm(orig_UpdateItemAvailability orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)((Component)self).GetComponent<WormBodyPositions2>()))
			{
				self.itemAvailability.hasFireTrail = false;
			}
		}

		public static void PreventPerfectedMithrixFromRegenningShield(orig_OnOutOfDangerChanged orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (((Object)self).name.StartsWith("Bro"))
			{
				self.outOfDangerStopwatch = -1000f;
			}
		}

		public static void MinionsInheritHonor(orig_AddMinion orig, NetworkInstanceId ownerId, MinionOwnership minion)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Invalid comparison between Unknown and I4
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(ownerId, minion);
			if (NetworkServer.active)
			{
				Inventory component = ((Component)minion).gameObject.GetComponent<Inventory>();
				if (Object.op_Implicit((Object)(object)component) && (int)component.currentEquipmentIndex == -1 && minionEliteDefs.Count > 0)
				{
					int index = VanillaArtifactsMain.Random.Next(minionEliteDefs.Count);
					component.SetEquipmentIndex(minionEliteDefs[index].eliteEquipmentDef.equipmentIndex);
				}
			}
		}
	}
	public class Kin
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__IL_ClassicStageInfo_HandleSingleMonsterTypeArtifact1;

			public static hook_HandleSingleMonsterTypeArtifact <1>__ClassicStageInfo_HandleSingleMonsterTypeArtifact;
		}

		public static DirectorCardCategorySelection KinBackup = ScriptableObject.CreateInstance<DirectorCardCategorySelection>();

		public static SpawnCard KinNoRepeat;

		public static void Start()
		{
			//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_002c: Expected O, but got Unknown
			//IL_0042: 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_004d: Expected O, but got Unknown
			((Object)KinBackup).name = "dcccBackupKinHelper";
			object obj = <>O.<0>__IL_ClassicStageInfo_HandleSingleMonsterTypeArtifact1;
			if (obj == null)
			{
				Manipulator val = IL_ClassicStageInfo_HandleSingleMonsterTypeArtifact1;
				<>O.<0>__IL_ClassicStageInfo_HandleSingleMonsterTypeArtifact1 = val;
				obj = (object)val;
			}
			ClassicStageInfo.HandleSingleMonsterTypeArtifact += (Manipulator)obj;
			object obj2 = <>O.<1>__ClassicStageInfo_HandleSingleMonsterTypeArtifact;
			if (obj2 == null)
			{
				hook_HandleSingleMonsterTypeArtifact val2 = ClassicStageInfo_HandleSingleMonsterTypeArtifact;
				<>O.<1>__ClassicStageInfo_HandleSingleMonsterTypeArtifact = val2;
				obj2 = (object)val2;
			}
			ClassicStageInfo.HandleSingleMonsterTypeArtifact += (hook_HandleSingleMonsterTypeArtifact)obj2;
		}

		private static void IL_ClassicStageInfo_HandleSingleMonsterTypeArtifact1(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 40f)
			}))
			{
				val.Next.Operand = 50f;
				int index = val.Index;
				val.Index = index + 1;
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 50f)
				});
				val.Next.Operand = 60f;
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: IL.IL_ClassicStageInfo_HandleMixEnemyArtifact");
			}
		}

		private static void IL_ClassicStageInfo_HandleMixEnemyArtifact(ILContext il)
		{
		}

		private static void ClassicStageInfo_HandleSingleMonsterTypeArtifact(orig_HandleSingleMonsterTypeArtifact orig, DirectorCardCategorySelection monsterCategories, Xoroshiro128Plus rng)
		{
			KinBackup.CopyFrom(monsterCategories);
			orig.Invoke(monsterCategories, rng);
			int num = 0;
			SpawnCard spawnCard = monsterCategories.categories[0].cards[0].spawnCard;
			if ((Object)(object)spawnCard == (Object)(object)KinNoRepeat)
			{
				do
				{
					num++;
					monsterCategories.CopyFrom(KinBackup);
					orig.Invoke(monsterCategories, rng);
					spawnCard = monsterCategories.categories[0].cards[0].spawnCard;
				}
				while (num < 15 && (Object)(object)spawnCard == (Object)(object)KinNoRepeat);
			}
			if ((Object)(object)spawnCard != (Object)(object)KinNoRepeat)
			{
				Debug.Log((object)(num + " Cycles until non repeat"));
				KinNoRepeat = spawnCard;
			}
			else if (num == 10)
			{
				Debug.Log((object)(num + " Cycles, stop looking for non repeat"));
			}
			KinBackup.Clear();
		}
	}
	public class KinBossDropsForEnemies
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Action <0>__ChangeLate;

			public static hook_DropRewards <1>__BossGroup_DropRewards;
		}

		public static CharacterMaster tempClayMan;

		public static void Start()
		{
			//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_0042: Expected O, but got Unknown
			((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)ChangeLate);
			object obj = <>O.<1>__BossGroup_DropRewards;
			if (obj == null)
			{
				hook_DropRewards val = BossGroup_DropRewards;
				<>O.<1>__BossGroup_DropRewards = val;
				obj = (object)val;
			}
			BossGroup.DropRewards += (hook_DropRewards)obj;
		}

		private static void BossGroup_DropRewards(orig_DropRewards orig, BossGroup self)
		{
			//IL_0020: 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_0032: Unknown result type (might be due to invalid IL or missing references)
			if (self.bossDrops.Count > 0)
			{
				Run instance = Run.instance;
				UniquePickup val = self.bossDrops[0];
				if (instance.IsItemExpansionLocked(((PickupIndex)(ref val.pickupIndex)).pickupDef.itemIndex))
				{
					self.bossDrops.Clear();
				}
			}
			orig.Invoke(self);
		}

		public static void ChangeLate()
		{
			//IL_000d: 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_0031: 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_0055: 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_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: 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_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0271: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_0284: 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_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: 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_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0301: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Unknown result type (might be due to invalid IL or missing references)
			//IL_0314: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: 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_0338: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_035b: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_037f: 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_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_040f: Un