Decompiled source of Joke Artifacts v1.0.2

DarknessExpansion/DarknessExpansion.dll

Decompiled 5 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
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.Logging;
using EntityStates.TitanMonster;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Items;
using R2API;
using RoR2;
using RoR2.Items;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.UI;
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("DarknessExpansion")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+0bdda48187651f8e76952178dcb8e13e32ad70d6")]
[assembly: AssemblyProduct("DarknessExpansion")]
[assembly: AssemblyTitle("DarknessExpansion")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace DarknessExpansion
{
	public class BigArtifact
	{
		public static ArtifactDef bigArtifact;

		public static Sprite iconDisabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EliteOnly/texArtifactEliteOnlyDisabled.png").WaitForCompletion();

		public static Sprite iconEnabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EliteOnly/texArtifactEliteOnlyEnabled.png").WaitForCompletion();

		public BigArtifact()
		{
			bigArtifact = ScriptableObject.CreateInstance<ArtifactDef>();
			bigArtifact.nameToken = "Artifact of Size";
			bigArtifact.descriptionToken = "Everything is Bigger";
			bigArtifact.smallIconDeselectedSprite = iconDisabled;
			bigArtifact.smallIconSelectedSprite = iconEnabled;
			ContentAddition.AddArtifactDef(bigArtifact);
			SpawnCard.onSpawnedServerGlobal += SpawnCardOnonSpawnedServerGlobal;
		}

		private void SpawnCardOnonSpawnedServerGlobal(SpawnResult obj)
		{
			//IL_0001: 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_0034: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)obj.spawnedInstance) && RunArtifactManager.instance.IsArtifactEnabled(bigArtifact))
			{
				Transform transform = obj.spawnedInstance.transform;
				transform.localScale *= 3f;
				CharacterMaster component = obj.spawnedInstance.GetComponent<CharacterMaster>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.GetBody()))
				{
					Transform transform2 = component.GetBody().transform;
					transform2.localScale *= 3f;
				}
			}
		}
	}
	[BepInPlugin("com.cybug.Joke_Artifacts", "Joke_Artifacts", "1.0.2")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class DarknessExpansion : BaseUnityPlugin
	{
		private void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			new BigArtifact();
			new RandomArtifact();
		}
	}
	public class Darkness
	{
		public static EliteDef DarknessElite;

		public static EquipmentDef DarknessEquipment;

		public static BuffDef DarknessBuff;

		public static int DarknessLevel = 0;

		private static Sprite eliteIcon = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EliteFire/texBuffAffixRed.tif").WaitForCompletion();

		public static event Action<int> onDarknessLevelChange;

		public Darkness()
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: 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_00c2: 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_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Expected O, but got Unknown
			DarknessElite = ScriptableObject.CreateInstance<EliteDef>();
			DarknessElite.color = Color32.op_Implicit(new Color(0f, 0f, 0f, 255f));
			EliteRamp.AddRamp(DarknessElite, CreateDarknessTexture());
			((Object)DarknessElite).name = "EliteDarkness";
			DarknessElite.modifierToken = "Dark {0}";
			DarknessBuff = ScriptableObject.CreateInstance<BuffDef>();
			((Object)DarknessBuff).name = "DarknessBuff";
			DarknessBuff.canStack = false;
			DarknessBuff.isCooldown = false;
			DarknessBuff.isDebuff = false;
			DarknessBuff.buffColor = new Color(0f, 0f, 0f, 255f);
			DarknessBuff.iconSprite = eliteIcon;
			DarknessEquipment = ScriptableObject.CreateInstance<EquipmentDef>();
			DarknessEquipment.appearsInMultiPlayer = true;
			DarknessEquipment.appearsInSinglePlayer = true;
			DarknessEquipment.canBeRandomlyTriggered = false;
			DarknessEquipment.canDrop = false;
			DarknessEquipment.colorIndex = (ColorIndex)5;
			DarknessEquipment.cooldown = 0f;
			DarknessEquipment.isLunar = false;
			DarknessEquipment.isBoss = false;
			DarknessEquipment.passiveBuffDef = DarknessBuff;
			DarknessEquipment.dropOnDeathChance = 0f;
			DarknessEquipment.enigmaCompatible = false;
			DarknessElite.eliteEquipmentDef = DarknessEquipment;
			DarknessBuff.eliteDef = DarknessElite;
			ContentAddition.AddEliteDef(DarknessElite);
			ContentAddition.AddBuffDef(DarknessBuff);
			ContentAddition.AddEquipmentDef(DarknessEquipment);
			UpdateDarkness();
			CombatDirector.Spawn += new hook_Spawn(CombatDirectorOnSpawn);
			SpawnCard.onSpawnedServerGlobal += SpawnCardOnonSpawnedServerGlobal;
			Run.onRunStartGlobal += delegate
			{
				DarknessLevel = 0;
			};
		}

		private void SpawnCardOnonSpawnedServerGlobal(SpawnResult obj)
		{
			//IL_0001: 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_0024: Unknown result type (might be due to invalid IL or missing references)
			Inventory component = obj.spawnedInstance.GetComponent<Inventory>();
			if ((Object)(object)component != (Object)null && component.GetEquipmentIndex() == DarknessEquipment.equipmentIndex)
			{
				float num = (float)DarknessLevel / 10f;
				if (Random.value < num)
				{
					List<ItemDef> darkItems = DarknessItems.darkItems;
					component.GiveItem(darkItems[(int)((float)darkItems.Count * Random.value)], 1);
					Log.Debug("Giving Item");
				}
			}
		}

		public static Texture2D CreateDarknessTexture()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Expected O, but got Unknown
			//IL_003c: 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_00c7: 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_0163: Unknown result type (might be due to invalid IL or missing references)
			Texture2D val = new Texture2D(256, 8);
			((Texture)val).wrapMode = (TextureWrapMode)1;
			for (int i = 0; i < 8; i++)
			{
				for (int j = 0; j < 50; j++)
				{
					val.SetPixel(j, i, new Color(0f, 0f, (float)j / 255f, 255f));
				}
				for (int k = 0; k < 50; k++)
				{
					val.SetPixel(k + 50, i, new Color(0f, 0f, 10f / 51f - (float)k / 255f, 255f));
				}
				for (int l = 0; l < 50; l++)
				{
					val.SetPixel(l + 100, i, new Color((float)l / 255f, 0f, (float)l / 255f, 255f));
				}
				for (int m = 0; m < 50; m++)
				{
					val.SetPixel(m + 150, i, new Color(10f / 51f - (float)m / 255f, 0f, 10f / 51f - (float)m / 255f, 255f));
				}
				for (int n = 0; n < 56; n++)
				{
					val.SetPixel(n + 200, i, new Color(0f, (float)n / 255f, 0f, 255f));
				}
			}
			val.Apply();
			return val;
		}

		private bool CombatDirectorOnSpawn(orig_Spawn orig, CombatDirector self, SpawnCard spawncard, EliteDef elitedef, Transform spawntarget, MonsterSpawnDistance spawndistance, bool preventoverhead, float valuemultiplier, PlacementMode placementmode)
		{
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			float num = (float)(DarknessLevel * DarknessLevel) / 100f;
			if (Random.value < num)
			{
				elitedef = DarknessElite;
				Log.Debug("Changing Elite Type");
			}
			return orig.Invoke(self, spawncard, elitedef, spawntarget, spawndistance, preventoverhead, valuemultiplier, placementmode);
		}

		public static void UpdateDarkness()
		{
			DarknessElite.healthBoostCoefficient = 1f + Mathf.Sqrt((float)DarknessLevel);
			DarknessElite.damageBoostCoefficient = 1f + (DarknessElite.healthBoostCoefficient - 1f) / 2f;
			if (Darkness.onDarknessLevelChange != null)
			{
				Darkness.onDarknessLevelChange(DarknessLevel);
			}
		}
	}
	public class DarknessArtifact
	{
		public static ArtifactDef darknessArtifact;

		public static Sprite iconDisabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EliteOnly/texArtifactEliteOnlyDisabled.png").WaitForCompletion();

		public static Sprite iconEnabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EliteOnly/texArtifactEliteOnlyEnabled.png").WaitForCompletion();

		public DarknessArtifact()
		{
			darknessArtifact = ScriptableObject.CreateInstance<ArtifactDef>();
			darknessArtifact.nameToken = "Artifact of Darkness";
			darknessArtifact.descriptionToken = "Start with the world partially consumed with darkness.";
			darknessArtifact.smallIconDeselectedSprite = iconDisabled;
			darknessArtifact.smallIconSelectedSprite = iconEnabled;
			ContentAddition.AddArtifactDef(darknessArtifact);
			Run.onRunStartGlobal += RunOnonRunStartGlobal;
		}

		private void RunOnonRunStartGlobal(Run obj)
		{
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Invalid comparison between Unknown and I4
			if (!RunArtifactManager.instance.IsArtifactEnabled(darknessArtifact))
			{
				return;
			}
			Darkness.DarknessLevel += 3;
			Darkness.UpdateDarkness();
			foreach (CharacterMaster instances in CharacterMaster.instancesList)
			{
				List<ItemDef> darkItems = DarknessItems.darkItems;
				if ((int)instances._teamIndex == 1)
				{
					instances.inventory.GiveItem(darkItems[(int)((float)darkItems.Count * Random.value)], 1);
				}
			}
		}
	}
	public class DarknessItems
	{
		public class DarkStacksItem
		{
			private Sprite darkGolemSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Knurl/texKnurlIcon.png").WaitForCompletion();

			private GameObject darkGolemPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Knurl/PickupKnurl.prefab").WaitForCompletion();

			public DarkStacksItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				stackingDarkItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)stackingDarkItem).name = "DARK_STACK_NAME";
				stackingDarkItem.descriptionToken = "DARK_STACK_DESCRIPTION";
				stackingDarkItem.nameToken = "DARK_STACK_NAME";
				stackingDarkItem.loreToken = "DARK_STACK_LORE";
				stackingDarkItem.pickupToken = "DARK_STACK_PICKUP";
				stackingDarkItem.pickupIconSprite = darkGolemSprite;
				stackingDarkItem.pickupModelPrefab = darkGolemPickup;
				stackingDarkItem.canRemove = false;
				stackingDarkItem.hidden = true;
				stackingDarkItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				stackingDarkItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(stackingDarkItem, val));
			}
		}

		public class DarkGolemItem
		{
			public static ItemDef darkGolemItem;

			private Sprite darkGolemSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Knurl/texKnurlIcon.png").WaitForCompletion();

			private GameObject darkGolemPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Knurl/PickupKnurl.prefab").WaitForCompletion();

			private GameObject fistProjectilePrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Titan/TitanPreFistProjectile.prefab").WaitForCompletion(), "Dark Fist");

			public DarkGolemItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0036: Unknown result type (might be due to invalid IL or missing references)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fc: Expected O, but got Unknown
				//IL_010e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0118: Expected O, but got Unknown
				//IL_0120: Unknown result type (might be due to invalid IL or missing references)
				//IL_012a: Expected O, but got Unknown
				darkGolemItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkGolemItem).name = "DARK_GOLEM_NAME";
				darkGolemItem.descriptionToken = "DARK_GOLEM_DESCRIPTION";
				darkGolemItem.nameToken = "DARK_GOLEM_NAME";
				darkGolemItem.loreToken = "DARK_GOLEM_LORE";
				darkGolemItem.pickupToken = "DARK_GOLEM_PICKUP";
				darkGolemItem.pickupIconSprite = darkGolemSprite;
				darkGolemItem.pickupModelPrefab = darkGolemPickup;
				darkGolemItem.canRemove = true;
				darkGolemItem.hidden = false;
				darkGolemItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkGolemItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkGolemItem, val));
				HealthComponent.TakeDamageProcess += new hook_TakeDamageProcess(HealthComponentOnTakeDamageProcess);
				LanguageAPI.Add("DARK_GOLEM_NAME", "Titanic Boulder");
				LanguageAPI.Add("DARK_GOLEM_DESCRIPTION", "Gives 100 (+100 per stack) health and 10 (+10 per stack) regen. Upon taking damage, 20% chance to summon a fist for 200% (+200% per stack) damage + 100% damage (+100% per stack) per 500 health. Gives 5 (+5 per stack) health and 1 (+1 per stack) regen upon killing a dark enemy.");
				LanguageAPI.Add("DARK_GOLEM_PICKUP", "Increases health and regen. Upon taking damage, chance to summon a fist. Fist damage scales with health. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkGolemItem);
			}

			private void HealthComponentOnTakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageinfo)
			{
				//IL_0098: Unknown result type (might be due to invalid IL or missing references)
				//IL_009e: Invalid comparison between Unknown and I4
				//IL_00d5: 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)
				//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Unknown result type (might be due to invalid IL or missing references)
				//IL_0106: Unknown result type (might be due to invalid IL or missing references)
				//IL_0158: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)self.body.inventory))
				{
					int itemCount = self.body.inventory.GetItemCount(darkGolemItem);
					if (itemCount > 0 && Util.CheckRoll(20f, self.body._master))
					{
						bool crit = self.body.RollCrit();
						float damage = self.body.damage * (self.body.maxHealth + 1000f) * (float)itemCount / 500f;
						if ((int)self.body.teamComponent.teamIndex != 1)
						{
							damage = self.body.damage * (self.body.maxHealth + 10000f) * (float)itemCount / 5000f;
						}
						FireProjectileInfo val = default(FireProjectileInfo);
						val.projectilePrefab = fistProjectilePrefab;
						val.position = damageinfo.attacker.transform.position;
						val.rotation = Quaternion.identity;
						val.owner = ((Component)self.body).gameObject;
						val.damage = damage;
						val.force = FireFist.fistForce;
						val.crit = crit;
						val._fuseOverride = FireFist.entryDuration - FireFist.trackingDuration + 2f;
						ProjectileManager.instance.FireProjectile(val);
					}
				}
				orig.Invoke(self, damageinfo);
			}
		}

		public class DarkPearlItem
		{
			public static ItemDef darkPearlItem;

			private Sprite darkPearlSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Pearl/texPearlIcon.png").WaitForCompletion();

			private GameObject darkPearlPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Pearl/PickupPearl.prefab").WaitForCompletion();

			public DarkPearlItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkPearlItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkPearlItem).name = "DARK_PEARL_NAME";
				darkPearlItem.descriptionToken = "DARK_PEARL_DESCRIPTION";
				darkPearlItem.nameToken = "DARK_PEARL_NAME";
				darkPearlItem.loreToken = "DARK_PEARL_LORE";
				darkPearlItem.pickupToken = "DARK_PEARL_PICKUP";
				darkPearlItem.pickupIconSprite = darkPearlSprite;
				darkPearlItem.pickupModelPrefab = darkPearlPickup;
				darkPearlItem.canRemove = true;
				darkPearlItem.hidden = false;
				darkPearlItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkPearlItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkPearlItem, val));
				LanguageAPI.Add("DARK_PEARL_NAME", "Dark Pearl");
				LanguageAPI.Add("DARK_PEARL_DESCRIPTION", "Increases maximum health by 50% (+50% per stack). Upon killing a dark enemy, increases health by 2% (+2% per stack).");
				LanguageAPI.Add("DARK_PEARL_PICKUP", "Increases health. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkPearlItem);
			}
		}

		public class DarkPearlItem2
		{
			public static ItemDef darkPearlItem;

			private Sprite darkPearlSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/ShinyPearl/texShinyPearlIcon.png").WaitForCompletion();

			private GameObject darkPearlPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShinyPearl/PickupShinyPearl.prefab").WaitForCompletion();

			public DarkPearlItem2()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkPearlItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkPearlItem).name = "DARK_PEARL_NAME2";
				darkPearlItem.descriptionToken = "DARK_PEARL_DESCRIPTION2";
				darkPearlItem.nameToken = "DARK_PEARL_NAME2";
				darkPearlItem.loreToken = "DARK_PEARL_LORE2";
				darkPearlItem.pickupToken = "DARK_PEARL_PICKUP2";
				darkPearlItem.pickupIconSprite = darkPearlSprite;
				darkPearlItem.pickupModelPrefab = darkPearlPickup;
				darkPearlItem.canRemove = true;
				darkPearlItem.hidden = false;
				darkPearlItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkPearlItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkPearlItem, val));
				LanguageAPI.Add("DARK_PEARL_NAME2", "Dark Irradient Pearl");
				LanguageAPI.Add("DARK_PEARL_DESCRIPTION2", "Increases all stats by 50% (+50% per stack). Upon killing a dark enemy, increases all stats by 1% (+1% per stack).");
				LanguageAPI.Add("DARK_PEARL_PICKUP2", "Increases all stats. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkPearlItem);
			}
		}

		public class DarkBleedItem
		{
			public static ItemDef darkBleedItem;

			private Sprite darkBleedSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/BleedOnHitAndExplode/texBleedOnHitAndExplodeIcon.png").WaitForCompletion();

			private GameObject darkBleedPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/BleedOnHitAndExplode/DisplayBleedOnHitAndExplode.prefab").WaitForCompletion();

			public DarkBleedItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				//IL_012e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0138: Expected O, but got Unknown
				darkBleedItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkBleedItem).name = "DARK_BLEED_NAME";
				darkBleedItem.descriptionToken = "DARK_BLEED_DESCRIPTION";
				darkBleedItem.nameToken = "DARK_BLEED_NAME";
				darkBleedItem.loreToken = "DARK_BLEED_LORE";
				darkBleedItem.pickupToken = "DARK_BLEED_PICKUP";
				darkBleedItem.pickupIconSprite = darkBleedSprite;
				darkBleedItem.pickupModelPrefab = darkBleedPickup;
				darkBleedItem.canRemove = true;
				darkBleedItem.hidden = false;
				darkBleedItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkBleedItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkBleedItem, val));
				LanguageAPI.Add("DARK_BLEED_NAME", "Dark Shatterspleen");
				LanguageAPI.Add("DARK_BLEED_DESCRIPTION", "Gain 20% critical chance. All strikes apply 1 stack of bleed. Crits apply bonus bleed based on crit damage. Bleeding enemies explode on death for 100% damage (+100% per stack) damage per bleed stack + 15% (+15% per stack) of their max health. Upon killing a dark enemy, gain 3% (+3% per stack) crit damage.");
				LanguageAPI.Add("DARK_BLEED_PICKUP", "All hits apply bleed, and crits apply extra. Bleeding enemies explode, dealing damage to nearby enemies. Grows stronger as it absorbs darkness.");
				GlobalEventManager.ProcessHitEnemy += new hook_ProcessHitEnemy(GlobalEventManagerOnProcessHitEnemy);
				GlobalEventManager.onCharacterDeathGlobal += GlobalEventManagerOnonCharacterDeathGlobal;
				darkItems.Add(darkBleedItem);
			}

			private void GlobalEventManagerOnonCharacterDeathGlobal(DamageReport obj)
			{
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ae: 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_0102: Unknown result type (might be due to invalid IL or missing references)
				//IL_0119: 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_0182: 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_0197: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)obj.attacker) && Object.op_Implicit((Object)(object)obj.attackerBody) && Object.op_Implicit((Object)(object)obj.attackerBody.inventory))
				{
					int itemCount = obj.attackerBody.inventory.GetItemCount(darkBleedItem);
					if ((itemCount > 0 && obj.victimBody.HasBuff(Buffs.Bleeding)) || obj.victimBody.HasBuff(Buffs.SuperBleed))
					{
						Util.PlaySound("Play_bleedOnCritAndExplode_explode", ((Component)obj.victimBody).gameObject);
						Vector3 position = obj.victimBody.transform.position;
						float num = 1f * (float)itemCount * (float)(obj.victimBody.GetBuffCount(Buffs.Bleeding) + 3);
						float num2 = 0.15f * (float)itemCount;
						float baseDamage = Util.OnKillProcDamage(obj.attackerBody.damage, num) + obj.victimBody.maxHealth * num2;
						GameObject val = Object.Instantiate<GameObject>(CommonAssets.bleedOnHitAndExplodeBlastEffect, position, Quaternion.identity);
						DelayBlast component = val.GetComponent<DelayBlast>();
						component.position = position;
						component.baseDamage = baseDamage;
						component.baseForce = 0f;
						component.radius = 16f;
						component.attacker = obj.attacker;
						component.inflictor = null;
						component.crit = Util.CheckRoll(obj.attackerBody.crit, obj.attackerMaster);
						component.maxTimer = 0f;
						component.damageColorIndex = (DamageColorIndex)3;
						component.falloffModel = (FalloffModel)2;
						val.GetComponent<TeamFilter>().teamIndex = obj.attackerTeamIndex;
						NetworkServer.Spawn(val);
					}
				}
			}

			private void GlobalEventManagerOnProcessHitEnemy(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageinfo, GameObject victim)
			{
				//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)
				orig.Invoke(self, damageinfo, victim);
				if (!Object.op_Implicit((Object)(object)damageinfo.attacker) || !(damageinfo.procCoefficient > 0f))
				{
					return;
				}
				CharacterBody component = damageinfo.attacker.GetComponent<CharacterBody>();
				if (!Object.op_Implicit((Object)(object)component))
				{
					return;
				}
				CharacterMaster master = component.master;
				if (!Object.op_Implicit((Object)(object)master) || ((ProcChainMask)(ref damageinfo.procChainMask)).HasProc((ProcType)5))
				{
					return;
				}
				Inventory inventory = master.inventory;
				int itemCount = inventory.GetItemCount(darkBleedItem);
				if (itemCount > 0)
				{
					ProcChainMask procChainMask = damageinfo.procChainMask;
					((ProcChainMask)(ref procChainMask)).AddProc((ProcType)5);
					int num = 1;
					if (damageinfo.crit)
					{
						num *= (int)component.critMultiplier;
					}
					for (int i = 0; i < num; i++)
					{
						DotController.InflictDot(victim, damageinfo.attacker, (DotIndex)0, 3f * damageinfo.procCoefficient, 1f, (uint?)null);
					}
				}
			}
		}

		public class DarkBeetleItem
		{
			public class DarkBeetleBodyBehavior : BaseItemBodyBehavior
			{
				private CharacterMaster cm;

				private float guardResummonCooldown;

				[ItemDefAssociation(useOnServer = true, useOnClient = false)]
				private static ItemDef GetItemDef()
				{
					return darkBeetleItem;
				}

				private void Start()
				{
					cm = ((BaseItemBodyBehavior)this).body.master;
					guardResummonCooldown = 0f;
				}

				private void FixedUpdate()
				{
					//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_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_006a: 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_008b: Expected O, but got Unknown
					//IL_0086: Unknown result type (might be due to invalid IL or missing references)
					//IL_008c: Expected O, but got Unknown
					int deployableCount = cm.GetDeployableCount((DeployableSlot)2);
					if (deployableCount >= base.stack)
					{
						return;
					}
					guardResummonCooldown -= Time.fixedDeltaTime;
					if (guardResummonCooldown <= 0f)
					{
						DirectorSpawnRequest val = new DirectorSpawnRequest(LegacyResourcesAPI.Load<SpawnCard>("SpawnCards/CharacterSpawnCards/cscBeetleGuardAlly"), new DirectorPlacementRule
						{
							placementMode = (PlacementMode)1,
							minDistance = 3f,
							maxDistance = 40f,
							spawnOnTarget = ((Component)this).transform
						}, RoR2Application.rng);
						val.summonerBodyObject = ((Component)this).gameObject;
						val.onSpawnedServer = OnSpawned;
						DirectorCore.instance.TrySpawnObject(val);
						if (deployableCount < base.stack)
						{
							guardResummonCooldown = 1f;
						}
						else
						{
							guardResummonCooldown = 30f;
						}
					}
				}

				private void OnSpawned(SpawnResult obj)
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					//IL_001b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0040: 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)
					Deployable component = obj.spawnedInstance.GetComponent<Deployable>();
					cm.AddDeployable(component, (DeployableSlot)2);
					CharacterBody body = obj.spawnedInstance.GetComponent<CharacterMaster>().GetBody();
					body.baseDamage *= (float)(base.stack * 3);
					CharacterBody body2 = obj.spawnedInstance.GetComponent<CharacterMaster>().GetBody();
					body2.baseMaxHealth *= (float)(base.stack * 3);
					for (int i = 0; i < base.stack; i++)
					{
						obj.spawnedInstance.GetComponent<CharacterMaster>().GetBody().AddBuff(debuffApplier);
					}
				}
			}

			public static ItemDef darkBeetleItem;

			private Sprite darkBeetleSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/BeetleGland/texBeetleGlandIcon.png").WaitForCompletion();

			private GameObject darkBeetlePickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/BeetleGland/PickupBeetleGland.prefab").WaitForCompletion();

			private static BuffDef debuffApplier;

			public DarkBeetleItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				//IL_017e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0188: Expected O, but got Unknown
				//IL_0190: Unknown result type (might be due to invalid IL or missing references)
				//IL_019a: Expected O, but got Unknown
				darkBeetleItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkBeetleItem).name = "DARK_BEETLE_NAME";
				darkBeetleItem.descriptionToken = "DARK_BEETLE_DESCRIPTION";
				darkBeetleItem.nameToken = "DARK_BEETLE_NAME";
				darkBeetleItem.loreToken = "DARK_BEETLE_LORE";
				darkBeetleItem.pickupToken = "DARK_BEETLE_PICKUP";
				darkBeetleItem.pickupIconSprite = darkBeetleSprite;
				darkBeetleItem.pickupModelPrefab = darkBeetlePickup;
				darkBeetleItem.canRemove = true;
				darkBeetleItem.hidden = false;
				darkBeetleItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkBeetleItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkBeetleItem, val));
				LanguageAPI.Add("DARK_BEETLE_NAME", "King's Gland");
				LanguageAPI.Add("DARK_BEETLE_DESCRIPTION", "Every 30 seconds, summon a Beetle Guard with 300% (+300% per stack) damage and 300% (+300% per stack) health. Beetle Guards apply 1 (+1 per stack) debuff on hit. Can have up to 1 (+1 per stack) beetle guard at a time. Give your beetles your attack speed. Upon killing a dark enemy, gain 3% (+3% per stack) attack speed.");
				LanguageAPI.Add("DARK_BEETLE_PICKUP", "Summon a beetle guard which applies random debuffs on hit. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkBeetleItem);
				debuffApplier = ScriptableObject.CreateInstance<BuffDef>();
				debuffApplier.isHidden = true;
				debuffApplier.canStack = true;
				debuffApplier.isCooldown = false;
				ContentAddition.AddBuffDef(debuffApplier);
				testItem = darkBeetleItem;
				GlobalEventManager.ProcessHitEnemy += new hook_ProcessHitEnemy(GlobalEventManagerOnProcessHitEnemy);
				CharacterMaster.GetDeployableSameSlotLimit += new hook_GetDeployableSameSlotLimit(CharacterMasterOnGetDeployableSameSlotLimit);
				MasterSummon.onServerMasterSummonGlobal += MasterSummonOnonServerMasterSummonGlobal;
			}

			private void MasterSummonOnonServerMasterSummonGlobal(MasterSummonReport obj)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				if (obj.leaderMasterInstance.inventory.GetItemCount(darkBeetleItem) > 0)
				{
					float attackSpeed = obj.leaderMasterInstance.GetBody().attackSpeed;
					int num = (int)((attackSpeed - 1f) / 0.15f);
					obj.summonMasterInstance.inventory.GiveItemString("Syringe", num);
				}
			}

			private int CharacterMasterOnGetDeployableSameSlotLimit(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot)
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0003: Invalid comparison between Unknown and I4
				//IL_004b: Unknown result type (might be due to invalid IL or missing references)
				if ((int)slot == 2)
				{
					int num = 1;
					if (RunArtifactManager.instance.IsArtifactEnabled(Artifacts.swarmsArtifactDef))
					{
						num = 2;
					}
					return num * (self.inventory.GetItemCount(Items.BeetleGland) + self.inventory.GetItemCount(darkBeetleItem));
				}
				return orig.Invoke(self, slot);
			}

			private void GlobalEventManagerOnProcessHitEnemy(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageinfo, GameObject victim)
			{
				CharacterBody component = damageinfo.attacker.GetComponent<CharacterBody>();
				if (component.HasBuff(debuffApplier))
				{
					int buffCount = component.GetBuffCount(debuffApplier);
					for (int i = 0; i < buffCount; i++)
					{
						CharacterBody component2 = victim.GetComponent<CharacterBody>();
						BuffDef val = BuffCatalog.buffDefs[(int)((float)BuffCatalog.buffDefs.Length * Random.value)];
						while (!val.isDebuff)
						{
							val = BuffCatalog.buffDefs[(int)((float)BuffCatalog.buffDefs.Length * Random.value)];
						}
						component2.AddBuff(val);
					}
				}
				orig.Invoke(self, damageinfo, victim);
			}
		}

		public class DarkJellyfishItem
		{
			public static ItemDef darkJellyfishItem;

			private Sprite darkJellyfishSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/NovaOnLowHealth/texJellyGutsIcon.png").WaitForCompletion();

			private GameObject darkJellyfishPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/NovaOnLowHealth/PickupJellyGuts.prefab").WaitForCompletion();

			public DarkJellyfishItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkJellyfishItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkJellyfishItem).name = "DARK_JELLYFISH_NAME";
				darkJellyfishItem.descriptionToken = "DARK_JELLYFISH_DESCRIPTION";
				darkJellyfishItem.nameToken = "DARK_JELLYFISH_NAME";
				darkJellyfishItem.loreToken = "DARK_JELLYFISH_LORE";
				darkJellyfishItem.pickupToken = "DARK_JELLYFISH_PICKUP";
				darkJellyfishItem.pickupIconSprite = darkJellyfishSprite;
				darkJellyfishItem.pickupModelPrefab = darkJellyfishPickup;
				darkJellyfishItem.canRemove = true;
				darkJellyfishItem.hidden = false;
				darkJellyfishItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkJellyfishItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkJellyfishItem, val));
				LanguageAPI.Add("DARK_JELLYFISH_NAME", "Omega Loop");
				LanguageAPI.Add("DARK_JELLYFISH_DESCRIPTION", "When below 50% health, every 30 / 2 (+1 per stack) seconds, charge an explosion, dealing 6000% damage (+6000% per stack). Additionally, gain 3 (+3 per stack) charges. Upon using your secondary, release a ball of lightning that deaals 500% base damage (+500% per stack). Upon killing a dark enemy, gain 1% (+1% per stack) cooldown reduction, which affects this item.");
				LanguageAPI.Add("DARK_JELLYFISH_PICKUP", "Upon reaching low health, explode in an area. Upon using your secondary, release a ball of lightning. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkJellyfishItem);
			}
		}

		public class DarkWispItem
		{
			public static ItemDef darkWispItem;

			private Sprite darkWispSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/SprintWisp/texBrokenMaskIcon.png").WaitForCompletion();

			private GameObject darkWispPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/SprintWisp/PickupBrokenMask.prefab").WaitForCompletion();

			public DarkWispItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkWispItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkWispItem).name = "DARK_WISP_NAME";
				darkWispItem.descriptionToken = "DARK_WISP_DESCRIPTION";
				darkWispItem.nameToken = "DARK_WISP_NAME";
				darkWispItem.loreToken = "DARK_WISP_LORE";
				darkWispItem.pickupToken = "DARK_WISP_PICKUP";
				darkWispItem.pickupIconSprite = darkWispSprite;
				darkWispItem.pickupModelPrefab = darkWispPickup;
				darkWispItem.canRemove = true;
				darkWispItem.hidden = false;
				darkWispItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkWispItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkWispItem, val));
				LanguageAPI.Add("DARK_WISP_NAME", "Large Disciple");
				LanguageAPI.Add("DARK_WISP_DESCRIPTION", "Fire 3 (+3 per stack) tracking wisps for 300% (+300% per stack) base damage. Wisps have 3.0 (+3 per stack) proc coefficient. Fires every 1.6 seconds while sprinting. Fire rate increases with movement speed. Upon killing a dark enemy, gain 3% (+3% per stack) movement speed.");
				LanguageAPI.Add("DARK_WISP_PICKUP", "Fire 3 tracking wisps while sprinting. Fire rate scales with move speed. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkWispItem);
			}
		}

		public class DarkClayItem
		{
			public static ItemDef darkClayItem;

			private Sprite darkClaySprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/SiphonOnLowHealth/texSiphonOnLowHealthIcon.png").WaitForCompletion();

			private GameObject darkClayPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/SiphonOnLowHealth/PickupSiphonOnLowHealth.prefab").WaitForCompletion();

			public DarkClayItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkClayItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkClayItem).name = "DARK_CLAY_NAME";
				darkClayItem.descriptionToken = "DARK_CLAY_DESCRIPTION";
				darkClayItem.nameToken = "DARK_CLAY_NAME";
				darkClayItem.loreToken = "DARK_CLAY_LORE";
				darkClayItem.pickupToken = "DARK_CLAY_PICKUP";
				darkClayItem.pickupIconSprite = darkClaySprite;
				darkClayItem.pickupModelPrefab = darkClayPickup;
				darkClayItem.canRemove = true;
				darkClayItem.hidden = false;
				darkClayItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkClayItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkClayItem, val));
				LanguageAPI.Add("DARK_CLAY_NAME", "Polished Urn");
				LanguageAPI.Add("DARK_CLAY_DESCRIPTION", "The nearest 1 (+1 per stack) enemies to you within 13m (+8m per stack) will be 'tethered' to you, applying tar. Deal 15% (+15% per stack) additional damage to enemies with tar applied, and heal for 5% (+5% per stack) of the damage dealt. Upon killing a dark enemy, gain 3% (+3% per stack) healing multiplier.");
				LanguageAPI.Add("DARK_CLAY_PICKUP", "Tether yourself to nearby enemies, dealing bonus damage and healing for a portion of the damage dealt. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkClayItem);
			}
		}

		public class DarkConstructItem
		{
			public static ItemDef darkConstructItem;

			private Sprite darkConstructSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MinorConstructOnKill/texMinorConstructOnKillIcon.png").WaitForCompletion();

			private GameObject darkConstructPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MinorConstructOnKill/PickupDefenseNucleus.prefab").WaitForCompletion();

			public DarkConstructItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkConstructItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkConstructItem).name = "DARK_CONSTRUCT_NAME";
				darkConstructItem.descriptionToken = "DARK_CONSTRUCT_DESCRIPTION";
				darkConstructItem.nameToken = "DARK_CONSTRUCT_NAME";
				darkConstructItem.loreToken = "DARK_CONSTRUCT_LORE";
				darkConstructItem.pickupToken = "DARK_CONSTRUCT_PICKUP";
				darkConstructItem.pickupIconSprite = darkConstructSprite;
				darkConstructItem.pickupModelPrefab = darkConstructPickup;
				darkConstructItem.canRemove = true;
				darkConstructItem.hidden = false;
				darkConstructItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkConstructItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkConstructItem, val));
				LanguageAPI.Add("DARK_CONSTRUCT_NAME", "Defense Cell");
				LanguageAPI.Add("DARK_CONSTRUCT_DESCRIPTION", "Killing an elite enemy spawns an Alpha Construct that attaches to you with 1000% (+1000% per stack) health. On hit, all Constructs attached to you have a 5% chance to fire at the enemy hit for 300% (+300% per stack) damage. Limit of 4 (+4 per stack) constructs. Upon killing a dark enemy, gain .03 luck.");
				LanguageAPI.Add("DARK_CONSTRUCT_PICKUP", "Upon killing an elite, gain an alpha construct that attaches to you and fires at enemies you fire at. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkConstructItem);
			}
		}

		public class DarkCoreItem
		{
			public static ItemDef darkCoreItem;

			private Sprite darkCoreSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/RoboBallBuddy/texEmpathyChip.png").WaitForCompletion();

			private GameObject darkCorePickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/RoboBallBuddy/PickupEmpathyChip.prefab").WaitForCompletion();

			public DarkCoreItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkCoreItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkCoreItem).name = "DARK_CORE_NAME";
				darkCoreItem.descriptionToken = "DARK_CORE_DESCRIPTION";
				darkCoreItem.nameToken = "DARK_CORE_NAME";
				darkCoreItem.loreToken = "DARK_CORE_LORE";
				darkCoreItem.pickupToken = "DARK_CORE_PICKUP";
				darkCoreItem.pickupIconSprite = darkCoreSprite;
				darkCoreItem.pickupModelPrefab = darkCorePickup;
				darkCoreItem.canRemove = true;
				darkCoreItem.hidden = false;
				darkCoreItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkCoreItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkCoreItem, val));
				LanguageAPI.Add("DARK_CORE_NAME", "Sympathy Cores");
				LanguageAPI.Add("DARK_CORE_DESCRIPTION", "Every 10 seconds, summon two Solus Probes. All allies gain +100% (+100% per stack) health and damage per ally on your team. Upon killing a dark enemy, increase all of your allies stats by 2% (+2% per stack).");
				LanguageAPI.Add("DARK_CORE_PICKUP", "Summon probes. All allies gain stats per ally on your team. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkCoreItem);
			}
		}

		public class DarkParentItem
		{
			public static ItemDef darkParentItem;

			private Sprite darkParentSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/ParentEgg/texParentEggIcon.png").WaitForCompletion();

			private GameObject darkParentPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ParentEgg/PickupParentEgg.prefab").WaitForCompletion();

			public DarkParentItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkParentItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkParentItem).name = "DARK_PARENT_NAME";
				darkParentItem.descriptionToken = "DARK_PARENT_DESCRIPTION";
				darkParentItem.nameToken = "DARK_PARENT_NAME";
				darkParentItem.loreToken = "DARK_PARENT_LORE";
				darkParentItem.pickupToken = "DARK_PARENT_PICKUP";
				darkParentItem.pickupIconSprite = darkParentSprite;
				darkParentItem.pickupModelPrefab = darkParentPickup;
				darkParentItem.canRemove = true;
				darkParentItem.hidden = false;
				darkParentItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkParentItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkParentItem, val));
				LanguageAPI.Add("DARK_PARENT_NAME", "Dark Planula");
				LanguageAPI.Add("DARK_PARENT_DESCRIPTION", "Heal from incoming damage equal to 100% (+100% per stack) armor. On taking damage, ignite enemies within a 13m (+8m per stack) radius. Upon killing a dark enemy, gain 1.5 (+1.5 per stack) armor.");
				LanguageAPI.Add("DARK_PARENT_PICKUP", "Heal from incoming damage and ignite nearby enemies. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkParentItem);
			}
		}

		public class DarkLightningItem
		{
			public static ItemDef darkLightningItem;

			private Sprite darkLightningSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/LightningStrikeOnHit/texLightningStrikeOnHit.png").WaitForCompletion();

			private GameObject darkLightningPickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LightningStrikeOnHit/PickupChargedPerforator.prefab").WaitForCompletion();

			public DarkLightningItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkLightningItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkLightningItem).name = "DARK_LIGHTNING_NAME";
				darkLightningItem.descriptionToken = "DARK_LIGHTNING_DESCRIPTION";
				darkLightningItem.nameToken = "DARK_LIGHTNING_NAME";
				darkLightningItem.loreToken = "DARK_LIGHTNING_LORE";
				darkLightningItem.pickupToken = "DARK_LIGHTNING_PICKUP";
				darkLightningItem.pickupIconSprite = darkLightningSprite;
				darkLightningItem.pickupModelPrefab = darkLightningPickup;
				darkLightningItem.canRemove = true;
				darkLightningItem.hidden = false;
				darkLightningItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkLightningItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkLightningItem, val));
				LanguageAPI.Add("DARK_LIGHTNING_NAME", "Charged Claw");
				LanguageAPI.Add("DARK_LIGHTNING_DESCRIPTION", "10% chance on hit to down a lightning strike on the enemy and 2 (+2 per stack) enemies within 15m (+8m per stack), dealing 1000% (+1000% per stack) damage. Killing a dark enemy grants 4% (+4% per stack) damage.");
				LanguageAPI.Add("DARK_LIGHTNING_PICKUP", "Chance on hit to summon a lightning storm. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkLightningItem);
			}
		}

		public class DarkFireItem
		{
			public static ItemDef darkFireItem;

			private Sprite darkFireSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/FireballsOnHit/texFireballsOnHitIcon.png").WaitForCompletion();

			private GameObject darkFirePickup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/FireballsOnHit/PickupFireballsOnHit.prefab").WaitForCompletion();

			public DarkFireItem()
			{
				//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_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00da: Expected O, but got Unknown
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Expected O, but got Unknown
				darkFireItem = ScriptableObject.CreateInstance<ItemDef>();
				((Object)darkFireItem).name = "DARK_FIRE_NAME";
				darkFireItem.descriptionToken = "DARK_FIRE_DESCRIPTION";
				darkFireItem.nameToken = "DARK_FIRE_NAME";
				darkFireItem.loreToken = "DARK_FIRE_LORE";
				darkFireItem.pickupToken = "DARK_FIRE_PICKUP";
				darkFireItem.pickupIconSprite = darkFireSprite;
				darkFireItem.pickupModelPrefab = darkFirePickup;
				darkFireItem.canRemove = true;
				darkFireItem.hidden = false;
				darkFireItem._itemTierDef = darkTier;
				ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null);
				darkFireItem.itemIndex = (ItemIndex)0;
				ItemAPI.Add(new CustomItem(darkFireItem, val));
				LanguageAPI.Add("DARK_FIRE_NAME", "Molten Claw");
				LanguageAPI.Add("DARK_FIRE_DESCRIPTION", "10% chance on hit to call forth 3 magma balls from an enemy, dealing (3000% (+3000% per stack) damage)% base damage. Killing a dark enemy grants 0.5 (+0.5 per stack) base damage.");
				LanguageAPI.Add("DARK_FIRE_PICKUP", "Chance on hit to summon fireballs. Grows stronger as it absorbs darkness.");
				darkItems.Add(darkFireItem);
			}
		}

		public static ItemTierDef darkTier;

		public static ItemDef testItem;

		public static List<ItemDef> darkItems = new List<ItemDef>();

		public static Action<CharacterBody> onKillDarknessEnemy;

		public static ItemDef stackingDarkItem;

		public DarknessItems()
		{
			//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_0012: 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_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//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_016e: Expected O, but got Unknown
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Expected O, but got Unknown
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Expected O, but got Unknown
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Expected O, but got Unknown
			ColorIndex val = ColorsAPI.RegisterColor(Color.black);
			darkTier = ScriptableObject.CreateInstance<ItemTierDef>();
			darkTier.tier = (ItemTier)10;
			darkTier.darkColorIndex = val;
			darkTier.colorIndex = val;
			darkTier.highlightPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/UI/HighlightMisc.prefab").WaitForCompletion(), "Dark Item Highlight");
			CreateDropletPrefab();
			darkTier.highlightPrefab.GetComponent<HighlightRect>().highlightColor = Color.black;
			darkTier.isDroppable = true;
			darkTier.canScrap = false;
			darkTier.canRestack = false;
			ContentAddition.AddItemTierDef(darkTier);
			GlobalEventManager.onCharacterDeathGlobal += GlobalEventManagerOnonCharacterDeathGlobal;
			new DarkGolemItem();
			new DarkBeetleItem();
			new DarkPearlItem();
			new DarkPearlItem2();
			new DarkJellyfishItem();
			new DarkWispItem();
			new DarkBleedItem();
			new DarkClayItem();
			new DarkConstructItem();
			new DarkCoreItem();
			new DarkParentItem();
			new DarkLightningItem();
			new DarkFireItem();
			new DarkStacksItem();
			Inventory.onServerItemGiven += InventoryOnonServerItemGiven;
			onKillDarknessEnemy = (Action<CharacterBody>)Delegate.Combine(onKillDarknessEnemy, (Action<CharacterBody>)delegate(CharacterBody body)
			{
				body.inventory.GiveItem(stackingDarkItem, 1);
			});
			CharacterMaster.OnInventoryChanged += new hook_OnInventoryChanged(CharacterMasterOnOnInventoryChanged);
			HealthComponent.Heal += new hook_Heal(HealthComponentOnHeal);
			RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPIOnGetStatCoefficients);
			BaseItemBodyBehavior.Init += new hook_Init(BaseItemBodyBehaviorOnInit);
		}

		private void BaseItemBodyBehaviorOnInit(orig_Init orig)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			orig.Invoke();
			List<ItemTypePair> list = BaseItemBodyBehavior.server.itemTypePairs.ToList();
			list.Add(new ItemTypePair
			{
				behaviorType = typeof(DarkBeetleItem.DarkBeetleBodyBehavior),
				itemIndex = DarkBeetleItem.darkBeetleItem.itemIndex
			});
			((NetworkContextSet)(ref BaseItemBodyBehavior.server)).SetItemTypePairs(list);
			list = BaseItemBodyBehavior.shared.itemTypePairs.ToList();
			list.Add(new ItemTypePair
			{
				behaviorType = typeof(DarkBeetleItem.DarkBeetleBodyBehavior),
				itemIndex = DarkBeetleItem.darkBeetleItem.itemIndex
			});
			((NetworkContextSet)(ref BaseItemBodyBehavior.shared)).SetItemTypePairs(list);
			list = BaseItemBodyBehavior.client.itemTypePairs.ToList();
			((NetworkContextSet)(ref BaseItemBodyBehavior.client)).SetItemTypePairs(list);
		}

		private void CreateDropletPrefab()
		{
			//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_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: 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_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/LunarOrb.prefab").WaitForCompletion(), "Darkness Orb", true);
			Gradient val2 = new Gradient();
			val2.SetKeys((GradientColorKey[])(object)new GradientColorKey[2]
			{
				new GradientColorKey(Color.black, 0f),
				new GradientColorKey(Color.black, 1f)
			}, (GradientAlphaKey[])(object)new GradientAlphaKey[2]
			{
				new GradientAlphaKey(1f, 0f),
				new GradientAlphaKey(0f, 1f)
			});
			Color black = Color.black;
			((Component)val.transform.GetChild(0)).gameObject.GetComponent<TrailRenderer>().startColor = Color.black;
			((Component)val.transform.GetChild(0)).gameObject.GetComponent<TrailRenderer>().startColor_Injected = ref black;
			((Component)val.transform.GetChild(0)).gameObject.GetComponent<TrailRenderer>().SetColorGradient(val2);
			Light[] componentsInChildren = val.GetComponentsInChildren<Light>();
			Light[] array = componentsInChildren;
			foreach (Light val3 in array)
			{
				val3.color = black;
			}
			ParticleSystem[] componentsInChildren2 = val.GetComponentsInChildren<ParticleSystem>();
			ParticleSystem[] array2 = componentsInChildren2;
			foreach (ParticleSystem val4 in array2)
			{
				MainModule main = val4.main;
				ColorOverLifetimeModule colorOverLifetime = val4.colorOverLifetime;
				((MainModule)(ref main)).startColor = new MinMaxGradient(black);
				((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(black);
			}
			darkTier.dropletDisplayPrefab = val;
		}

		private void CharacterMasterOnOnInventoryChanged(orig_OnInventoryChanged orig, CharacterMaster self)
		{
			int itemCount = self.inventory.GetItemCount(stackingDarkItem);
			int itemCount2 = self.inventory.GetItemCount(DarkConstructItem.darkConstructItem);
			orig.Invoke(self);
			self.luck += (float)(itemCount * itemCount2) * 0.03f;
		}

		private float HealthComponentOnHeal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procchainmask, bool nonregen)
		{
			//IL_0068: 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)
			if (Object.op_Implicit((Object)(object)self.body.inventory))
			{
				int itemCount = self.body.inventory.GetItemCount(DarkClayItem.darkClayItem);
				int itemCount2 = self.body.inventory.GetItemCount(stackingDarkItem);
				float num = 1f + (float)(itemCount2 * itemCount) * 0.03f;
				return orig.Invoke(self, amount * num, procchainmask, nonregen);
			}
			return orig.Invoke(self, amount, procchainmask, nonregen);
		}

		private void GlobalEventManagerOnonCharacterDeathGlobal(DamageReport obj)
		{
			//IL_0046: 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)
			if (Object.op_Implicit((Object)(object)obj.attacker) && Object.op_Implicit((Object)(object)obj.attackerBody) && Object.op_Implicit((Object)(object)obj.attackerBody.inventory) && obj.victimBody.inventory.GetEquipmentIndex() == Darkness.DarknessEquipment.equipmentIndex)
			{
				onKillDarknessEnemy(obj.attackerBody);
			}
		}

		private void InventoryOnonServerItemGiven(Inventory arg1, ItemIndex arg2, int arg3)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (arg1.currentEquipmentIndex != Darkness.DarknessEquipment.equipmentIndex && darkItems.Contains(ItemCatalog.GetItemDef(arg2)))
			{
				Darkness.DarknessLevel += arg3;
				Darkness.UpdateDarkness();
			}
		}

		private void RecalculateStatsAPIOnGetStatCoefficients(CharacterBody self, StatHookEventArgs args)
		{
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory))
			{
				int itemCount = self.inventory.GetItemCount(stackingDarkItem);
				int itemCount2 = self.inventory.GetItemCount(DarkGolemItem.darkGolemItem);
				int itemCount3 = self.inventory.GetItemCount(DarkBeetleItem.darkBeetleItem);
				int itemCount4 = self.inventory.GetItemCount(DarkPearlItem.darkPearlItem);
				int itemCount5 = self.inventory.GetItemCount(DarkPearlItem2.darkPearlItem);
				int itemCount6 = self.inventory.GetItemCount(DarkJellyfishItem.darkJellyfishItem);
				int itemCount7 = self.inventory.GetItemCount(DarkWispItem.darkWispItem);
				int itemCount8 = self.inventory.GetItemCount(DarkBleedItem.darkBleedItem);
				int itemCount9 = self.inventory.GetItemCount(DarkCoreItem.darkCoreItem);
				int itemCount10 = self.inventory.GetItemCount(DarkParentItem.darkParentItem);
				int itemCount11 = self.inventory.GetItemCount(DarkLightningItem.darkLightningItem);
				int itemCount12 = self.inventory.GetItemCount(DarkFireItem.darkFireItem);
				if (itemCount8 > 0)
				{
					args.critAdd += 20f;
				}
				args.baseDamageAdd += (float)(itemCount12 * itemCount) * 0.5f;
				args.baseHealthAdd += (float)(itemCount2 * 100 + itemCount2 * 5 * itemCount);
				args.baseRegenAdd += (float)(itemCount2 * 10 + itemCount2 * itemCount);
				args.critDamageMultAdd += (float)(itemCount8 * itemCount) * 0.03f;
				args.armorAdd += (float)(itemCount10 * itemCount) * 1.5f;
				args.attackSpeedMultAdd += (float)(itemCount3 * itemCount) * 0.03f;
				args.moveSpeedMultAdd += (float)(itemCount7 * itemCount) * 0.03f;
				args.healthMultAdd += (1f + (float)itemCount4 * 0.5f) * (1f + (float)(itemCount4 * itemCount) * 0.02f) - 1f;
				args.damageMultAdd += (float)itemCount * 0.04f * (float)itemCount11;
				float num = 1f + (float)itemCount5 * 0.5f;
				num *= 1f + (float)(itemCount5 * itemCount) * 0.01f;
				num -= 1f;
				args.healthMultAdd += num;
				args.regenMultAdd += num;
				args.moveSpeedMultAdd += num;
				args.damageMultAdd += num;
				args.critAdd += num * (self.crit + args.critAdd);
				args.attackSpeedMultAdd += num;
				args.armorAdd += num * (self.armor + args.armorAdd);
				float num2 = Mathf.Pow(1f - 0.01f * (float)itemCount6, (float)itemCount);
				args.cooldownMultAdd = num2 - 1f;
			}
		}
	}
	public class DarknessShrine
	{
		public class DarknessShrineManager : NetworkBehaviour
		{
			public PurchaseInteraction purchaseInteraction;

			private GameObject shrineUseEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/ShrineUseEffect.prefab").WaitForCompletion();

			private GameObject[] terminalGameObjects;

			public List<ItemIndex> sacrificedItems = new List<ItemIndex>();

			private ItemIndex bonusItemToGive;

			public CombatSquad bossSquad;

			public bool changedEnemies = false;

			public void Start()
			{
				purchaseInteraction.SetAvailable(false);
				((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)OnPurchase);
			}

			public void createPotentials(GameObject shrine2, SpawnCard spawnCard)
			{
				//IL_001f: 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)
				//IL_0026: 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_0041: Expected O, but got Unknown
				//IL_0041: Expected O, but got Unknown
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0046: Expected O, but got Unknown
				terminalGameObjects = (GameObject[])(object)new GameObject[3];
				for (int i = 0; i < 3; i++)
				{
					terminalGameObjects[i] = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, new DirectorPlacementRule
					{
						placementMode = (PlacementMode)4
					}, new Xoroshiro128Plus((ulong)(Random.value * 1.8446744E+19f))));
					terminalGameObjects[i].GetComponent<DarknessPotentialManager>().parent = this;
				}
			}

			public void OnPurchase(Interactor interactor)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0024: 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_002e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_004f: Expected O, but got Unknown
				//IL_0050: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: Expected O, but got Unknown
				//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fb: 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_0479: Unknown result type (might be due to invalid IL or missing references)
				//IL_047e: Unknown result type (might be due to invalid IL or missing references)
				//IL_048b: Unknown result type (might be due to invalid IL or missing references)
				//IL_049c: Expected O, but got Unknown
				//IL_0115: Unknown result type (might be due to invalid IL or missing references)
				//IL_0121: Unknown result type (might be due to invalid IL or missing references)
				//IL_04ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_04b5: Expected O, but got Unknown
				//IL_04ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_0432: Unknown result type (might be due to invalid IL or missing references)
				//IL_0437: Unknown result type (might be due to invalid IL or missing references)
				//IL_0445: Unknown result type (might be due to invalid IL or missing references)
				//IL_0456: Expected O, but got Unknown
				//IL_013c: Unknown result type (might be due to invalid IL or missing references)
				//IL_014b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0173: Unknown result type (might be due to invalid IL or missing references)
				//IL_0182: Unknown result type (might be due to invalid IL or missing references)
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_0166: Unknown result type (might be due to invalid IL or missing references)
				//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
				//IL_0198: Unknown result type (might be due to invalid IL or missing references)
				//IL_019d: 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_01f0: 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_01d4: 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_0227: 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_020b: Unknown result type (might be due to invalid IL or missing references)
				//IL_024f: Unknown result type (might be due to invalid IL or missing references)
				//IL_025e: Unknown result type (might be due to invalid IL or missing references)
				//IL_023d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0242: Unknown result type (might be due to invalid IL or missing references)
				//IL_0286: 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_0274: Unknown result type (might be due to invalid IL or missing references)
				//IL_0279: Unknown result type (might be due to invalid IL or missing references)
				//IL_02bd: 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_02ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0303: Unknown result type (might be due to invalid IL or missing references)
				//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_032b: Unknown result type (might be due to invalid IL or missing references)
				//IL_033a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0319: Unknown result type (might be due to invalid IL or missing references)
				//IL_031e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0363: Unknown result type (might be due to invalid IL or missing references)
				//IL_0372: Unknown result type (might be due to invalid IL or missing references)
				//IL_0351: Unknown result type (might be due to invalid IL or missing references)
				//IL_0356: Unknown result type (might be due to invalid IL or missing references)
				//IL_039b: Unknown result type (might be due to invalid IL or missing references)
				//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
				//IL_0389: Unknown result type (might be due to invalid IL or missing references)
				//IL_038e: Unknown result type (might be due to invalid IL or missing references)
				//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
				//IL_03df: Unknown result type (might be due to invalid IL or missing references)
				//IL_03be: Unknown result type (might be due to invalid IL or missing references)
				//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
				//IL_03f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_03fb: Unknown result type (might be due to invalid IL or missing references)
				EffectManager.SpawnEffect(shrineUseEffect, new EffectData
				{
					origin = ((Component)this).gameObject.transform.position,
					rotation = Quaternion.identity,
					scale = 1f,
					color = Color32.op_Implicit(Color.black)
				}, true);
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "<style=cEvent><color=#000000>The Darkness Increases!</color></style>"
				});
				purchaseInteraction.SetAvailable(false);
				Darkness.DarknessLevel++;
				Darkness.UpdateDarkness();
				for (int i = 0; i < 3; i++)
				{
					if (Object.op_Implicit((Object)(object)terminalGameObjects[i]))
					{
						DarknessPotentialManager component = terminalGameObjects[i].GetComponent<DarknessPotentialManager>();
						component.shrinking = 0;
						component.purchaseInteraction.SetAvailable(false);
					}
				}
				bonusItemToGive = (ItemIndex)(-1);
				int num = -1;
				if (sacrificedItems.Count == 3 && sacrificedItems[0] == sacrificedItems[1] && sacrificedItems[0] == sacrificedItems[2])
				{
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["BeetleGland"])
					{
						num = 0;
						bonusItemToGive = DarknessItems.DarkBeetleItem.darkBeetleItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["Knurl"])
					{
						num = 1;
						bonusItemToGive = DarknessItems.DarkGolemItem.darkGolemItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["NovaOnLowHealth"])
					{
						num = 2;
						bonusItemToGive = DarknessItems.DarkJellyfishItem.darkJellyfishItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["SprintWisp"])
					{
						num = 3;
						bonusItemToGive = DarknessItems.DarkWispItem.darkWispItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["BleedOnHitAndExplode"])
					{
						num = 4;
						bonusItemToGive = DarknessItems.DarkBleedItem.darkBleedItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["SiphonOnLowHealth"])
					{
						num = 5;
						bonusItemToGive = DarknessItems.DarkClayItem.darkClayItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["MinorConstructOnKill"])
					{
						num = 6;
						bonusItemToGive = DarknessItems.DarkConstructItem.darkConstructItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["RoboBallBuddy"])
					{
						num = 7;
						bonusItemToGive = DarknessItems.DarkCoreItem.darkCoreItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["ParentEgg"])
					{
						num = 8;
						bonusItemToGive = DarknessItems.DarkParentItem.darkParentItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["LightningStrikeOnHit"])
					{
						num = 9;
						bonusItemToGive = DarknessItems.DarkLightningItem.darkLightningItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["FireballsOnHit"])
					{
						num = 10;
						bonusItemToGive = DarknessItems.DarkFireItem.darkFireItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["Pearl"])
					{
						bonusItemToGive = DarknessItems.DarkPearlItem.darkPearlItem.itemIndex;
					}
					if (sacrificedItems[0] == ItemCatalog.itemNameToIndex["ShinyPearl"])
					{
						num = 11;
						bonusItemToGive = DarknessItems.DarkPearlItem2.darkPearlItem.itemIndex;
					}
				}
				CombatDirector component2 = ((Component)this).gameObject.GetComponent<CombatDirector>();
				component2.monsterCardsSelection = new WeightedSelection<DirectorCard>(8);
				if (num == -1)
				{
					for (int j = 0; j < bosses.Length; j++)
					{
						component2.monsterCardsSelection.AddChoice(new DirectorCard
						{
							spawnCard = bosses[j],
							selectionWeight = 1
						}, 1f);
					}
				}
				else
				{
					component2.monsterCardsSelection.AddChoice(new DirectorCard
					{
						spawnCard = bosses[num],
						selectionWeight = 1
					}, 1f);
				}
				component2.rng = new Xoroshiro128Plus((ulong)(Random.value * 1.8446744E+19f));
				CombatSquad val = (component2.combatSquad = ((Component)this).gameObject.AddComponent<CombatSquad>());
				component2.teamIndex = (TeamIndex)2;
				component2.currentSpawnTarget = ((Component)this).gameObject;
				component2.ignoreTeamSizeLimit = true;
				component2.shouldSpawnOneWave = true;
				((Behaviour)component2).enabled = true;
				component2.monsterCredit += (float)(int)(600f * Mathf.Pow(Run.instance.compensatedDifficultyCoefficient, 0.5f));
				component2.SetNextSpawnAsBoss();
				bossSquad = val;
			}

			private void FixedUpdate()
			{
				//IL_0175: Unknown result type (might be due to invalid IL or missing references)
				//IL_017b: Invalid comparison between Unknown and I4
				//IL_018a: 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_0072: 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_01ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ba: 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_0112: Invalid comparison between Unknown and I4
				//IL_01f3: 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_01e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_0309: Unknown result type (might be due to invalid IL or missing references)
				//IL_030e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0318: Unknown result type (might be due to invalid IL or missing references)
				//IL_031d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0322: Unknown result type (might be due to invalid IL or missing references)
				//IL_0329: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_0121: Unknown result type (might be due to invalid IL or missing references)
				//IL_022a: Unknown result type (might be due to invalid IL or missing references)
				//IL_021b: 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_00e5: Unknown result type (might be due to invalid IL or missing references)
				//IL_0274: Unknown result type (might be due to invalid IL or missing references)
				//IL_0279: Unknown result type (might be due to invalid IL or missing references)
				//IL_024f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0254: 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)
				if (!Object.op_Implicit((Object)(object)bossSquad))
				{
					return;
				}
				if (!changedEnemies && bossSquad.membersList.Count > 0)
				{
					List<CharacterMaster> membersList = bossSquad.membersList;
					for (int i = 0; i < membersList.Count; i++)
					{
						membersList[i].isBoss = true;
						Transform transform = ((Component)membersList[i]).transform;
						transform.localScale *= 1.5f;
						Inventory inventory = membersList[i].inventory;
						inventory.SetEquipmentIndex(Darkness.DarknessEquipment.equipmentIndex);
						for (int j = 0; j < sacrificedItems.Count; j++)
						{
							ItemIndex val = sacrificedItems[j];
							int num = 1;
							if (ItemCatalog.tier1ItemList.Contains(val))
							{
								num = 5;
							}
							if (ItemCatalog.tier2ItemList.Contains(val))
							{
								num = 3;
							}
							inventory.GiveItem(val, num);
						}
						if ((int)bonusItemToGive != -1)
						{
							inventory.GiveItem(bonusItemToGive, 1);
						}
						inventory.GiveItemString("ShinyPearl", Darkness.DarknessLevel);
					}
				}
				if (!bossSquad.defeatedServer)
				{
					return;
				}
				List<ItemIndex> list = new List<ItemIndex>();
				if ((int)bonusItemToGive != -1)
				{
					list.Add(bonusItemToGive);
				}
				else
				{
					for (int k = 0; k < sacrificedItems.Count; k++)
					{
						ItemIndex item = sacrificedItems[k];
						int num2 = 1;
						ItemIndex item2;
						if (ItemCatalog.tier1ItemList.Contains(item))
						{
							item2 = ItemCatalog.tier2ItemList[(int)((float)ItemCatalog.tier2ItemList.Count * Random.value)];
						}
						else if (ItemCatalog.tier2ItemList.Contains(item))
						{
							item2 = ItemCatalog.itemNameToIndex[yellowItemNames[(int)((float)yellowItemNames.Length * Random.value)]];
						}
						else if (ItemCatalog.tier3ItemList.Contains(item))
						{
							item2 = ItemCatalog.tier1ItemList[(int)((float)ItemCatalog.tier1ItemList.Count * Random.value)];
							num2 = 5;
						}
						else
						{
							item2 = ItemCatalog.tier3ItemList[(int)((float)ItemCatalog.tier3ItemList.Count * Random.value)];
						}
						for (int l = 0; l < num2; l++)
						{
							list.Add(item2);
						}
					}
				}
				Vector3 val2 = default(Vector3);
				for (int m = 0; m < list.Count; m++)
				{
					float num3 = (float)(m * 2) * MathF.PI / (float)list.Count;
					((Vector3)(ref val2))..ctor(Mathf.Sin(num3), 1f, Mathf.Cos(num3));
					PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(list[m]), ((Component)this).transform.position + Vector3.up * 5f, val2 * 20f);
				}
				bossSquad = null;
			}
		}

		public class DarknessPotentialManager : NetworkBehaviour
		{
			public PurchaseInteraction purchaseInteraction;

			public DarknessShrineManager parent;

			public NetworkUIPromptController networkUIPromptController;

			public PickupPickerController ppc;

			private Interactor interactor;

			private GameObject UIObject;

			public int shrinking = -1;

			public void Start()
			{
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Expected O, but got Unknown
				purchaseInteraction.SetAvailableTrue();
				((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)OnPurchase);
				networkUIPromptController = ((Component)this).gameObject.AddComponent<NetworkUIPromptController>();
				ppc = ((Component)this).gameObject.AddComponent<PickupPickerController>();
				networkUIPromptController.onDisplayBegin += ppc.OnDisplayBegin;
				networkUIPromptController.onDisplayEnd += ppc.OnDisplayEnd;
				ppc.panelPrefab = itemSelectionScreen;
				ppc.onPickupSelected = new PickupIndexUnityEvent();
				((UnityEvent<int>)(object)ppc.onPickupSelected).AddListener((UnityAction<int>)OnPickupSelected);
			}

			private void OnPickupSelected(int arg0)
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_002d: 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)
				Object.FindObjectOfType<PickupPickerPanel>().DestroyIt();
				ItemIndex itemIndex = PickupCatalog.GetPickupDef(new PickupIndex(arg0)).itemIndex;
				((Component)parent).GetComponent<DarknessShrineManager>().sacrificedItems.Add(itemIndex);
				purchaseInteraction.SetAvailable(false);
				Inventory inventory = ((Component)interactor).GetComponent<CharacterBody>().inventory;
				inventory.RemoveItem(itemIndex, 1);
				shrinking = 0;
				parent.purchaseInteraction.SetAvailableTrue();
			}

			public void OnPurchase(Interactor interactor)
			{
				this.interactor = interactor;
				ppc.SetOptionsFromInteractor(interactor);
				networkUIPromptController.SetParticipantMasterFromInteractor(interactor);
			}

			private void FixedUpdate()
			{
				//IL_0029: 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)
				if (shrinking > -1)
				{
					shrinking++;
					Transform transform = ((Component)this).gameObject.transform;
					transform.localScale *= 0.95f;
					if (shrinking > 30)
					{
						Object.Destroy((Object)(object)((Component)this).gameObject);
					}
				}
			}
		}

		private GameObject shrine1 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineBoss/mdlShrineBoss.fbx").WaitForCompletion(), "Darkness Shrine");

		private Material darkMaterial = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/ShrineBlood/matShrineBlood.mat").WaitForCompletion();

		private GameObject shrine2 = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ShrineBlood/mdlShrineBlood.fbx").WaitForCompletion(), "Darkness Item");

		private static GameObject itemSelectionScreen = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Scrapper/ScrapperPickerPanel.prefab").WaitForCompletion(), "Darkness Item Selector");

		private InteractableSpawnCard spawnCard;

		public static string[] bossLocations = new string[12]
		{
			"RoR2/Base/Beetle/cscBeetleQueen.asset", "RoR2/Base/Titan/cscTitanGolemPlains.asset", "RoR2/Base/Vagrant/cscVagrant.asset", "RoR2/Base/Gravekeeper/cscGravekeeper.asset", "RoR2/Base/ImpBoss/cscImpBoss.asset", "RoR2/Base/ClayBoss/cscClayBoss.asset", "RoR2/DLC1/MajorAndMinorConstruct/cscMegaConstruct.asset", "RoR2/Base/RoboBallBoss/cscRoboBallBoss.asset", "RoR2/Base/Grandparent/cscGrandparent.asset", "RoR2/Base/ElectricWorm/cscElectricWorm.asset",
			"RoR2/Base/MagmaWorm/cscMagmaWorm.asset", "RoR2/Base/Scav/cscScavBoss.asset"
		};

		public static string[] yellowItemNames = new string[13]
		{
			"BeetleGland", "Knurl", "NovaOnLowHealth", "SprintWisp", "BleedOnHitAndExplode", "SiphonOnLowHealth", "MinorConstructOnKill", "RoboBallBuddy", "ParentEgg", "LightningStrikeOnHit",
			"FireballsOnHit", "Pearl", "ShinyPearl"
		};

		public static SpawnCard[] bosses;

		public DarknessShrine()
		{
			//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_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_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: 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_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: Expected O, but got Unknown
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: 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_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ec: Expected O, but got Unknown
			//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Expected O, but got Unknown
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_037a: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Expected O, but got Unknown
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dc: Unknown result type (might be due to invalid IL or missing references)
			((Object)shrine1).name = "Shrine of Darkness";
			Transform transform = shrine1.transform;
			transform.localScale *= 1.5f;
			shrine1.AddComponent<NetworkIdentity>();
			((Renderer)shrine1.GetComponent<MeshRenderer>()).sharedMaterial = darkMaterial;
			shrine1.AddComponent<MeshCollider>();
			((Behaviour)shrine1.AddComponent<CombatDirector>()).enabled = false;
			DarknessShrineManager darknessShrineManager = shrine1.AddComponent<DarknessShrineManager>();
			PurchaseInteraction val = shrine1.AddComponent<PurchaseInteraction>();
			val.contextToken = "Reckon with the powers of Darkness (E)";
			val.NetworkdisplayNameToken = "Shrine of Darkness";
			darknessShrineManager.purchaseInteraction = val;
			shrine1.GetComponent<Highlight>().targetRenderer = (Renderer)(object)shrine1.GetComponent<MeshRenderer>();
			GameObject val2 = Object.Instantiate<GameObject>(new GameObject(), shrine1.transform);
			((Collider)val2.AddComponent<BoxCollider>()).isTrigger = true;
			val2.AddComponent<EntityLocator>().entity = shrine1;
			InteractableSpawnCard val3 = ScriptableObject.CreateInstance<InteractableSpawnCard>();
			((Object)val3).name = "iscDarknessShrine";
			((SpawnCard)val3).prefab = shrine1;
			((SpawnCard)val3).sendOverNetwork = true;
			((SpawnCard)val3).hullSize = (HullClassification)1;
			((SpawnCard)val3).nodeGraphType = (GraphType)0;
			((SpawnCard)val3).requiredFlags = (NodeFlags)0;
			((SpawnCard)val3).forbiddenFlags = (NodeFlags)16;
			((SpawnCard)val3).directorCreditCost = 20;
			((SpawnCard)val3).occupyPosition = true;
			val3.orientToFloor = false;
			val3.skipSpawnWhenSacrificeArtifactEnabled = false;
			val3.maxSpawnsPerStage = 1;
			DirectorCard card = new DirectorCard
			{
				selectionWeight = 500,
				spawnCard = (SpawnCard)(object)val3
			};
			DirectorCardHolder val4 = new DirectorCardHolder
			{
				Card = card,
				InteractableCategory = (InteractableCategory)4
			};
			Helpers.AddNewInteractable(val4);
			SpawnCard.onSpawnedServerGlobal += SpawnCardOnonSpawnedServerGlobal;
			((Object)shrine2).name = "Darkness Potential";
			Transform transform2 = shrine2.transform;
			transform2.localScale *= 0.005f;
			shrine2.AddComponent<NetworkIdentity>();
			shrine2.GetComponent<Renderer>().sharedMaterial = darkMaterial;
			shrine2.AddComponent<MeshCollider>();
			spawnCard = ScriptableObject.CreateInstance<InteractableSpawnCard>();
			((Object)spawnCard).name = "iscDarknessPotential";
			((SpawnCard)spawnCard).prefab = shrine2;
			((SpawnCard)spawnCard).sendOverNetwork = true;
			((SpawnCard)spawnCard).hullSize = (HullClassification)0;
			((SpawnCard)spawnCard).nodeGraphType = (GraphType)0;
			((SpawnCard)spawnCard).requiredFlags = (NodeFlags)0;
			((SpawnCard)spawnCard).forbiddenFlags = (NodeFlags)16;
			((SpawnCard)spawnCard).directorCreditCost = 0;
			((SpawnCard)spawnCard).occupyPosition = true;
			spawnCard.orientToFloor = false;
			spawnCard.skipSpawnWhenSacrificeArtifactEnabled = false;
			spawnCard.maxSpawnsPerStage = 3;
			DarknessPotentialManager darknessPotentialManager = shrine2.AddComponent<DarknessPotentialManager>();
			PurchaseInteraction val5 = shrine2.AddComponent<PurchaseInteraction>();
			val5.contextToken = "Offer a Sacrifice to the Darkness (E)";
			val5.NetworkdisplayNameToken = "Darkness Potential";
			darknessPotentialManager.purchaseInteraction = val5;
			shrine2.GetComponent<Highlight>().targetRenderer = shrine2.GetComponent<Renderer>();
			GameObject val6 = Object.Instantiate<GameObject>(new GameObject(), shrine2.transform);
			((Collider)val6.AddComponent<BoxCollider>()).isTrigger = true;
			val6.AddComponent<EntityLocator>().entity = shrine2;
			bosses = (SpawnCard[])(object)new SpawnCard[bossLocations.Length];
			for (int i = 0; i < bosses.Length; i++)
			{
				bosses[i] = Addressables.LoadAssetAsync<SpawnCard>((object)bossLocations[i]).WaitForCompletion();
			}
		}

		private void SpawnCardOnonSpawnedServerGlobal(SpawnResult obj)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			DarknessShrineManager component = obj.spawnedInstance.GetComponent<DarknessShrineManager>();
			if ((Object)(object)component != (Object)null)
			{
				Log.Debug("Darkness Shrine Found");
				((Component)component).transform.Rotate(-90f, -90f, -90f);
				component.purchaseInteraction.SetAvailable(true);
				component.createPotentials(shrine2, (SpawnCard)(object)spawnCard);
			}
			DarknessPotentialManager component2 = obj.spawnedInstance.GetComponent<DarknessPotentialManager>();
			if ((Object)(object)component2 != (Object)null)
			{
				Log.Debug("Darkness Potential Found");
				((Component)component2).transform.Rotate(-90f, -90f, -90f);
				component2.purchaseInteraction.SetAvailable(true);
			}
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		internal static void Debug(object data)
		{
			_logSource.LogDebug(data);
		}

		internal static void Error(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	public class RandomArtifact
	{
		public static ArtifactDef randomArtifact;

		public static Sprite iconDisabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/TeamDeath/texArtifactDeathDisabled.png").WaitForCompletion();

		public static Sprite iconEnabled = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/TeamDeath/texArtifactDeathEnabled.