Decompiled source of UltitemsCyan v0.14.2

plugins/UltitemsCyan.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Scrapper;
using EntityStates.VoidCamp;
using HG;
using IL.RoR2;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates;
using On.RoR2;
using On.RoR2.Items;
using R2API;
using RoR2;
using RoR2.Audio;
using RoR2.ContentManagement;
using RoR2.ExpansionManagement;
using RoR2.Orbs;
using RoR2.Projectile;
using UltitemsCyan.Buffs;
using UltitemsCyan.Equipment;
using UltitemsCyan.Items;
using UltitemsCyan.Items.Food;
using UltitemsCyan.Items.Lunar;
using UltitemsCyan.Items.Tier1;
using UltitemsCyan.Items.Tier2;
using UltitemsCyan.Items.Tier3;
using UltitemsCyan.Items.Untiered;
using UltitemsCyan.Items.Void;
using UnityEngine;
using UnityEngine.AddressableAssets;
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("UltitemsCyan")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+cf8bdaf40557034dbf08fd02d41bcc9919021999")]
[assembly: AssemblyProduct("UltitemsCyan")]
[assembly: AssemblyTitle("UltitemsCyan")]
[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 UltitemsCyan
{
	public class GenericGameEvents
	{
		public delegate void DamageAttackerVictimEventHandler(DamageInfo damageInfo, GenericCharacterInfo attackerInfo, GenericCharacterInfo victimInfo);

		public class GenericDamageEvent : MonoBehaviour, IOnIncomingDamageServerReceiver
		{
			public HealthComponent healthComponent;

			public CharacterBody victimBody;

			public void Start()
			{
				healthComponent = ((Component)this).GetComponent<HealthComponent>();
				if (!Object.op_Implicit((Object)(object)healthComponent))
				{
					Object.Destroy((Object)(object)this);
				}
				else
				{
					victimBody = healthComponent.body;
				}
			}

			public void OnIncomingDamageServer(DamageInfo damageInfo)
			{
				GenericCharacterInfo attackerInfo = default(GenericCharacterInfo);
				if (Object.op_Implicit((Object)(object)damageInfo.attacker))
				{
					attackerInfo = new GenericCharacterInfo(damageInfo.attacker.GetComponent<CharacterBody>());
				}
				GenericCharacterInfo victimInfo = new GenericCharacterInfo(victimBody);
				GenericGameEvents.BeforeTakeDamage?.Invoke(damageInfo, attackerInfo, victimInfo);
			}
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_Awake <>9__4_0;

			internal void <Init>b__4_0(orig_Awake orig, HealthComponent self)
			{
				((Component)self).gameObject.AddComponent<GenericDamageEvent>();
				orig.Invoke(self);
			}
		}

		public static event DamageAttackerVictimEventHandler BeforeTakeDamage;

		internal static void Init()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			object obj = <>c.<>9__4_0;
			if (obj == null)
			{
				hook_Awake val = delegate(orig_Awake orig, HealthComponent self)
				{
					((Component)self).gameObject.AddComponent<GenericDamageEvent>();
					orig.Invoke(self);
				};
				<>c.<>9__4_0 = val;
				obj = (object)val;
			}
			HealthComponent.Awake += (hook_Awake)obj;
		}
	}
	public struct GenericCharacterInfo
	{
		public GameObject gameObject;

		public CharacterBody body;

		public CharacterMaster master;

		public TeamComponent teamComponent;

		public HealthComponent healthComponent;

		public Inventory inventory;

		public TeamIndex teamIndex;

		public Vector3 aimOrigin;

		public unsafe GenericCharacterInfo(CharacterBody body)
		{
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1->IL00a1: Incompatible stack types: Ref vs I4
			//IL_0096->IL00a1: Incompatible stack types: I4 vs Ref
			//IL_0096->IL00a1: Incompatible stack types: Ref vs I4
			this.body = body;
			gameObject = (Object.op_Implicit((Object)(object)body) ? ((Component)body).gameObject : null);
			master = (Object.op_Implicit((Object)(object)body) ? body.master : null);
			teamComponent = (Object.op_Implicit((Object)(object)body) ? body.teamComponent : null);
			healthComponent = (Object.op_Implicit((Object)(object)body) ? body.healthComponent : null);
			inventory = (Object.op_Implicit((Object)(object)master) ? master.inventory : null);
			ref GenericCharacterInfo reference = ref this;
			int num;
			if (Object.op_Implicit((Object)(object)teamComponent))
			{
				reference = ref *(GenericCharacterInfo*)teamComponent.teamIndex;
				num = (int)(ref reference);
			}
			else
			{
				num = 0;
				reference = ref *(GenericCharacterInfo*)num;
				num = (int)(ref reference);
			}
			Unsafe.Write(&((GenericCharacterInfo*)num)->teamIndex, (TeamIndex)(ref reference));
			Vector3 normalized;
			if (!Object.op_Implicit((Object)(object)body))
			{
				Vector3 insideUnitSphere = Random.insideUnitSphere;
				normalized = ((Vector3)(ref insideUnitSphere)).normalized;
			}
			else
			{
				normalized = body.aimOrigin;
			}
			aimOrigin = normalized;
		}
	}
	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 static class UltAssets
	{
		public static AssetBundle mainBundle;

		public static Sprite CremeBruleeSprite;

		public static Sprite FleaBagSprite;

		public static Sprite FrisbeeSprite;

		public static Sprite KoalaStickerSprite;

		public static Sprite ToyRobotSprite;

		public static GameObject CremeBruleePrefab;

		public static GameObject FleaBagPrefab;

		public static GameObject FrisbeePrefab;

		public static GameObject KoalaStickerPrefab;

		public static GameObject ToyRobotPrefab;

		public static Sprite BirthdayCandleSprite;

		public static Sprite DegreeScissorsSprite;

		public static Sprite HMTSprite;

		public static Sprite OverclockedGPUSprite;

		public static Sprite TinyIglooSprite;

		public static Sprite XenonAmpouleSprite;

		public static GameObject BirthdayCandlePrefab;

		public static GameObject DegreeScissorsPrefab;

		public static GameObject HMTPrefab;

		public static GameObject OverclockedGPUPrefab;

		public static GameObject TinyIglooPrefab;

		public static GameObject XenonAmpoulePrefab;

		public static Sprite CorrodingVaultSprite;

		public static Sprite GrapevineSprite;

		public static Sprite PigsSporkSprite;

		public static Sprite RockyTaffySprite;

		public static Sprite SuesMandiblesSprite;

		public static Sprite ViralSmogSprite;

		public static GameObject CorrodingVaultPrefab;

		public static GameObject GrapevinePrefab;

		public static GameObject PigsSporkPrefab;

		public static GameObject RockyTaffyPrefab;

		public static GameObject SuesMandiblesPrefab;

		public static GameObject ViralSmogPrefab;

		public static Sprite CrysotopeSprite;

		public static Sprite DownloadedRAMSprite;

		public static Sprite DriedHamSprite;

		public static Sprite InhabitedCoffinSprite;

		public static Sprite JubilantFoeSprite;

		public static Sprite ResinWhirlpoolSprite;

		public static Sprite RottenBonesSprite;

		public static Sprite WormHolesSprite;

		public static Sprite ZorsePillSprite;

		public static GameObject DownloadedRAMPrefab;

		public static GameObject CrysotopePrefab;

		public static GameObject DriedHamPrefab;

		public static GameObject InhabitedCoffinPrefab;

		public static GameObject JubilantFoePrefab;

		public static GameObject ResinWhirlpoolPrefab;

		public static GameObject RottenBonesPrefab;

		public static GameObject WormHolesPrefab;

		public static GameObject ZorsePillPrefab;

		public static Sprite DreamFuelSprite;

		public static Sprite UltravioletBulbSprite;

		public static Sprite SandPailSprite;

		public static Sprite SilverThreadSprite;

		public static GameObject UltravioletBulbPrefab;

		public static GameObject DreamFuelPrefab;

		public static GameObject SandPailPrefab;

		public static GameObject SilverThreadPrefab;

		public static Sprite CorrodingVaultConsumedSprite;

		public static Sprite InhabitedCoffinConsumedSprite;

		public static Sprite SuesMandiblesConsumedSprite;

		public static Sprite SilverThreadConsumedSprite;

		public static Sprite UniversalSolventSprite;

		public static GameObject CorrodingVaultConsumedPrefab;

		public static GameObject InhabitedCoffinConsumedPrefab;

		public static GameObject SuesMandiblesConsumedPrefab;

		public static GameObject SilverThreadConsumedPrefab;

		public static GameObject UniversalSolventPrefab;

		public static Sprite IceCubesSprite;

		public static Sprite OrbitalQuarkSprite;

		public static Sprite YieldSignSprite;

		public static Sprite YieldSignStopSprite;

		public static GameObject IceCubesPrefab;

		public static GameObject OrbitalQuarkPrefab;

		public static GameObject YieldSignPrefab;

		public static GameObject YieldSignStopPrefab;

		public static Sprite MacroseismographSprite;

		public static Sprite MacroseismographConsumedSprite;

		public static Sprite PotOfRegolithSprite;

		public static Sprite ObsoluteSprite;

		public static GameObject MacroseismographPrefab;

		public static GameObject MacroseismographConsumedPrefab;

		public static GameObject PotOfRegolithPrefab;

		public static GameObject ObsolutePrefab;

		public static Sprite BirthdaySprite;

		public static Sprite CrysotopeFlySprite;

		public static Sprite DownloadedSprite;

		public static Sprite DreamSpeedSprite;

		public static Sprite EyeAwakeSprite;

		public static Sprite EyeDrowsySprite;

		public static Sprite EyeSleepySprite;

		public static Sprite FrisbeeGlideSprite;

		public static Sprite GrapeSprite;

		public static Sprite OverclockedSprite;

		public static Sprite QuarkGravitySprite;

		public static Sprite ResinBounceSprite;

		public static Sprite RottingSprite;

		public static Sprite SporkBleedSprite;

		public static Sprite SuesTeethSprite;

		public static Sprite TaffyChewSprite;

		public static Sprite TickCritSprite;

		public static Sprite ZorseStarveSprite;

		public static GameObject PetRockPrefab;

		public static Sprite PetRockSprite;

		public static void Init()
		{
			string text = Path.Combine(Path.GetDirectoryName(Ultitems.PInfo.Location), "ultitembundle");
			Log.Debug("Path of bundle: " + text);
			mainBundle = AssetBundle.LoadFromFile(text);
			if ((Object)(object)mainBundle == (Object)null)
			{
				Log.Warning("Null Bundle... getting for Debug");
				text = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(Ultitems.PInfo.Location)), "assetbundle", "ultitembundle");
				mainBundle = AssetBundle.LoadFromFile(text);
			}
			CremeBruleeSprite = mainBundle.LoadAsset<Sprite>("CremeBrulee.png");
			FleaBagSprite = mainBundle.LoadAsset<Sprite>("FleaBag.png");
			FrisbeeSprite = mainBundle.LoadAsset<Sprite>("Frisbee.png");
			KoalaStickerSprite = mainBundle.LoadAsset<Sprite>("KoalaSticker.png");
			ToyRobotSprite = mainBundle.LoadAsset<Sprite>("ToyRobot.png");
			CremeBruleePrefab = mainBundle.LoadAsset<GameObject>("CremeBrulee.prefab");
			FleaBagPrefab = mainBundle.LoadAsset<GameObject>("FleaBag.prefab");
			FrisbeePrefab = mainBundle.LoadAsset<GameObject>("Frisbee.prefab");
			KoalaStickerPrefab = mainBundle.LoadAsset<GameObject>("KoalaSticker.prefab");
			ToyRobotPrefab = mainBundle.LoadAsset<GameObject>("ToyRobot.prefab");
			BirthdayCandleSprite = mainBundle.LoadAsset<Sprite>("BirthdayCandles.png");
			DegreeScissorsSprite = mainBundle.LoadAsset<Sprite>("DegreeScissors.png");
			HMTSprite = mainBundle.LoadAsset<Sprite>("HMT.png");
			OverclockedGPUSprite = mainBundle.LoadAsset<Sprite>("OverclockedGPU.png");
			TinyIglooSprite = mainBundle.LoadAsset<Sprite>("TinyIgloo.png");
			XenonAmpouleSprite = mainBundle.LoadAsset<Sprite>("XenonAmpoule.png");
			BirthdayCandlePrefab = mainBundle.LoadAsset<GameObject>("BirthdayCandle.prefab");
			DegreeScissorsPrefab = mainBundle.LoadAsset<GameObject>("DegreeScissors.prefab");
			HMTPrefab = mainBundle.LoadAsset<GameObject>("HMT.prefab");
			OverclockedGPUPrefab = mainBundle.LoadAsset<GameObject>("OverclockedGPU.prefab");
			TinyIglooPrefab = mainBundle.LoadAsset<GameObject>("TinyIgloo.prefab");
			XenonAmpoulePrefab = mainBundle.LoadAsset<GameObject>("XenonAmpoule.prefab");
			CorrodingVaultSprite = mainBundle.LoadAsset<Sprite>("CorrodingVault.png");
			GrapevineSprite = mainBundle.LoadAsset<Sprite>("Grapevine.png");
			PigsSporkSprite = mainBundle.LoadAsset<Sprite>("PigsSpork.png");
			RockyTaffySprite = mainBundle.LoadAsset<Sprite>("RockyTaffy.png");
			SuesMandiblesSprite = mainBundle.LoadAsset<Sprite>("SuesMandibles.png");
			ViralSmogSprite = mainBundle.LoadAsset<Sprite>("ViralSmog.png");
			CorrodingVaultPrefab = mainBundle.LoadAsset<GameObject>("CorrodingVault.prefab");
			GrapevinePrefab = mainBundle.LoadAsset<GameObject>("Grapevine.prefab");
			PigsSporkPrefab = mainBundle.LoadAsset<GameObject>("PigsSpork.prefab");
			RockyTaffyPrefab = mainBundle.LoadAsset<GameObject>("RockyTaffy.prefab");
			SuesMandiblesPrefab = mainBundle.LoadAsset<GameObject>("SuesMandibles.prefab");
			ViralSmogPrefab = mainBundle.LoadAsset<GameObject>("ViralSmog.prefab");
			CrysotopeSprite = mainBundle.LoadAsset<Sprite>("Chrysotope.png");
			DownloadedRAMSprite = mainBundle.LoadAsset<Sprite>("DownloadedRAM.png");
			DriedHamSprite = mainBundle.LoadAsset<Sprite>("DriedHam.png");
			InhabitedCoffinSprite = mainBundle.LoadAsset<Sprite>("InhabitedCoffin.png");
			JubilantFoeSprite = mainBundle.LoadAsset<Sprite>("JubilantFoe.png");
			ResinWhirlpoolSprite = mainBundle.LoadAsset<Sprite>("ResinWhirlpool.png");
			RottenBonesSprite = mainBundle.LoadAsset<Sprite>("RottenBones.png");
			WormHolesSprite = mainBundle.LoadAsset<Sprite>("WormHoles.png");
			ZorsePillSprite = mainBundle.LoadAsset<Sprite>("ZorsePill.png");
			CrysotopePrefab = mainBundle.LoadAsset<GameObject>("Chrysotope.prefab");
			DownloadedRAMPrefab = mainBundle.LoadAsset<GameObject>("DownloadedRAM.prefab");
			DriedHamPrefab = mainBundle.LoadAsset<GameObject>("DriedHam.prefab");
			InhabitedCoffinPrefab = mainBundle.LoadAsset<GameObject>("InhabitedCoffin.prefab");
			JubilantFoePrefab = mainBundle.LoadAsset<GameObject>("JubilantFoe.prefab");
			ResinWhirlpoolPrefab = mainBundle.LoadAsset<GameObject>("ResinWhirlpool.prefab");
			RottenBonesPrefab = mainBundle.LoadAsset<GameObject>("RottenBones.prefab");
			WormHolesPrefab = mainBundle.LoadAsset<GameObject>("WormHoles.prefab");
			ZorsePillPrefab = mainBundle.LoadAsset<GameObject>("ZorsePill.prefab");
			DreamFuelSprite = mainBundle.LoadAsset<Sprite>("DreamFuel.png");
			UltravioletBulbSprite = mainBundle.LoadAsset<Sprite>("UltravioletBulb.png");
			SandPailSprite = mainBundle.LoadAsset<Sprite>("SandPail.png");
			SilverThreadSprite = mainBundle.LoadAsset<Sprite>("SilverThread.png");
			DreamFuelPrefab = mainBundle.LoadAsset<GameObject>("DreamFuel.prefab");
			UltravioletBulbPrefab = mainBundle.LoadAsset<GameObject>("UltravioletBulb.prefab");
			SandPailPrefab = mainBundle.LoadAsset<GameObject>("SandPail.prefab");
			SilverThreadPrefab = mainBundle.LoadAsset<GameObject>("SilverThread.prefab");
			CorrodingVaultConsumedSprite = mainBundle.LoadAsset<Sprite>("CorrodingVaultConsumed.png");
			InhabitedCoffinConsumedSprite = mainBundle.LoadAsset<Sprite>("InhabitedCoffinConsumed.png");
			SilverThreadConsumedSprite = mainBundle.LoadAsset<Sprite>("SilverThreadConsumed.png");
			SuesMandiblesConsumedSprite = mainBundle.LoadAsset<Sprite>("SuesMandiblesConsumed.png");
			UniversalSolventSprite = mainBundle.LoadAsset<Sprite>("UniversalSolvent.png");
			CorrodingVaultConsumedPrefab = mainBundle.LoadAsset<GameObject>("CorrodingVaultConsumed.prefab");
			InhabitedCoffinConsumedPrefab = mainBundle.LoadAsset<GameObject>("InhabitedCoffinConsumed.prefab");
			SilverThreadConsumedPrefab = mainBundle.LoadAsset<GameObject>("SilverThreadConsumed.prefab");
			SuesMandiblesConsumedPrefab = mainBundle.LoadAsset<GameObject>("SuesMandiblesConsumed.prefab");
			UniversalSolventPrefab = mainBundle.LoadAsset<GameObject>("UniversalSolvent.prefab");
			IceCubesSprite = mainBundle.LoadAsset<Sprite>("IceCubes.png");
			OrbitalQuarkSprite = mainBundle.LoadAsset<Sprite>("OrbitalQuark.png");
			YieldSignSprite = mainBundle.LoadAsset<Sprite>("YieldSign.png");
			YieldSignStopSprite = mainBundle.LoadAsset<Sprite>("YieldSignStop.png");
			IceCubesPrefab = mainBundle.LoadAsset<GameObject>("IceCubes.prefab");
			OrbitalQuarkPrefab = mainBundle.LoadAsset<GameObject>("OrbitalQuark.prefab");
			YieldSignPrefab = mainBundle.LoadAsset<GameObject>("YieldSign.prefab");
			YieldSignStopPrefab = mainBundle.LoadAsset<GameObject>("YieldSignStop.prefab");
			MacroseismographSprite = mainBundle.LoadAsset<Sprite>("Macroseismograph.png");
			MacroseismographConsumedSprite = mainBundle.LoadAsset<Sprite>("MacroseismographConsumed.png");
			PotOfRegolithSprite = mainBundle.LoadAsset<Sprite>("PotOfRegolith.png");
			ObsoluteSprite = mainBundle.LoadAsset<Sprite>("UniversalSolute.png");
			MacroseismographPrefab = mainBundle.LoadAsset<GameObject>("Macroseismograph.prefab");
			MacroseismographConsumedPrefab = mainBundle.LoadAsset<GameObject>("MacroseismographConsumed.prefab");
			PotOfRegolithPrefab = mainBundle.LoadAsset<GameObject>("PotOfRegolith.prefab");
			ObsolutePrefab = mainBundle.LoadAsset<GameObject>("UniversalSolute.prefab");
			BirthdaySprite = mainBundle.LoadAsset<Sprite>("Birthday");
			CrysotopeFlySprite = mainBundle.LoadAsset<Sprite>("CrysotopeFly");
			DownloadedSprite = mainBundle.LoadAsset<Sprite>("Downloaded");
			DreamSpeedSprite = mainBundle.LoadAsset<Sprite>("DreamSpeed");
			EyeDrowsySprite = mainBundle.LoadAsset<Sprite>("EyeDrowsy");
			EyeAwakeSprite = mainBundle.LoadAsset<Sprite>("EyeAwake");
			EyeSleepySprite = mainBundle.LoadAsset<Sprite>("EyeSleepy");
			FrisbeeGlideSprite = mainBundle.LoadAsset<Sprite>("FrisbeeGlide");
			GrapeSprite = mainBundle.LoadAsset<Sprite>("Grape");
			OverclockedSprite = mainBundle.LoadAsset<Sprite>("Overclocked");
			QuarkGravitySprite = mainBundle.LoadAsset<Sprite>("QuarkGravity");
			ResinBounceSprite = mainBundle.LoadAsset<Sprite>("ResinBounce");
			RottingSprite = mainBundle.LoadAsset<Sprite>("Rotting");
			SporkBleedSprite = mainBundle.LoadAsset<Sprite>("SporkBleed");
			SuesTeethSprite = mainBundle.LoadAsset<Sprite>("SuesTeeth");
			TaffyChewSprite = mainBundle.LoadAsset<Sprite>("TaffyChew");
			TickCritSprite = mainBundle.LoadAsset<Sprite>("TickCrit");
			ZorseStarveSprite = mainBundle.LoadAsset<Sprite>("ZorseStarve");
			PetRockPrefab = mainBundle.LoadAsset<GameObject>("PetRock");
			PetRockSprite = mainBundle.LoadAsset<Sprite>("PetRock");
		}
	}
	[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.*/)]
	[BepInPlugin("SporkySpig.UltitemsCyan", "UltitemsCyan", "0.14.2")]
	public class Ultitems : BaseUnityPlugin
	{
		public struct Ingredient
		{
			public int index;

			public bool isEquipment;

			public Ingredient(ItemIndex item)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected I4, but got Unknown
				index = (int)item;
				isEquipment = false;
			}

			public Ingredient(EquipmentIndex equip)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected I4, but got Unknown
				index = (int)equip;
				isEquipment = true;
			}

			public static implicit operator Ingredient(ItemIndex item)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return new Ingredient(item);
			}

			public static implicit operator Ingredient(EquipmentIndex equip)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				return new Ingredient(equip);
			}

			public readonly int GetInt()
			{
				return index;
			}

			public readonly Object GetObject()
			{
				if (isEquipment)
				{
					return (Object)(object)(EquipmentCatalog.GetEquipmentDef((EquipmentIndex)index) ?? null);
				}
				return (Object)(object)(ItemCatalog.GetItemDef((ItemIndex)index) ?? null);
			}
		}

		public class MyUltRecipes : IContentPackProvider
		{
			[CompilerGenerated]
			private sealed class <FinalizeAsync>d__8 : IEnumerator<object>, IEnumerator, IDisposable
			{
				private int <>1__state;

				private object <>2__current;

				public FinalizeAsyncArgs args;

				public MyUltRecipes <>4__this;

				object IEnumerator<object>.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				object IEnumerator.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				[DebuggerHidden]
				public <FinalizeAsync>d__8(int <>1__state)
				{
					this.<>1__state = <>1__state;
				}

				[DebuggerHidden]
				void IDisposable.Dispose()
				{
					<>1__state = -2;
				}

				private bool MoveNext()
				{
					if (<>1__state != 0)
					{
						return false;
					}
					<>1__state = -1;
					Log.Warning("-JY Finalize");
					args.ReportProgress(1f);
					return false;
				}

				bool IEnumerator.MoveNext()
				{
					//ILSpy generated this explicit interface implementation from .override directive in MoveNext
					return this.MoveNext();
				}

				[DebuggerHidden]
				void IEnumerator.Reset()
				{
					throw new NotSupportedException();
				}
			}

			[CompilerGenerated]
			private sealed class <GenerateContentPackAsync>d__7 : IEnumerator<object>, IEnumerator, IDisposable
			{
				private int <>1__state;

				private object <>2__current;

				public GetContentPackAsyncArgs args;

				public MyUltRecipes <>4__this;

				object IEnumerator<object>.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				object IEnumerator.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				[DebuggerHidden]
				public <GenerateContentPackAsync>d__7(int <>1__state)
				{
					this.<>1__state = <>1__state;
				}

				[DebuggerHidden]
				void IDisposable.Dispose()
				{
					<>1__state = -2;
				}

				private bool MoveNext()
				{
					if (<>1__state != 0)
					{
						return false;
					}
					<>1__state = -1;
					Log.Warning("-JY Generate");
					ContentPack.Copy(<>4__this.contentPack, args.output);
					args.ReportProgress(1f);
					return false;
				}

				bool IEnumerator.MoveNext()
				{
					//ILSpy generated this explicit interface implementation from .override directive in MoveNext
					return this.MoveNext();
				}

				[DebuggerHidden]
				void IEnumerator.Reset()
				{
					throw new NotSupportedException();
				}
			}

			[CompilerGenerated]
			private sealed class <LoadStaticContentAsync>d__6 : IEnumerator<object>, IEnumerator, IDisposable
			{
				private int <>1__state;

				private object <>2__current;

				public LoadStaticContentAsyncArgs args;

				public MyUltRecipes <>4__this;

				object IEnumerator<object>.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				object IEnumerator.Current
				{
					[DebuggerHidden]
					get
					{
						return <>2__current;
					}
				}

				[DebuggerHidden]
				public <LoadStaticContentAsync>d__6(int <>1__state)
				{
					this.<>1__state = <>1__state;
				}

				[DebuggerHidden]
				void IDisposable.Dispose()
				{
					<>1__state = -2;
				}

				private bool MoveNext()
				{
					if (<>1__state != 0)
					{
						return false;
					}
					<>1__state = -1;
					Log.Warning("-JY Load Static");
					<>4__this.contentPack.identifier = <>4__this.identifier;
					<>4__this.contentPack.craftableDefs.Add(Recipies.ToArray());
					args.ReportProgress(1f);
					return false;
				}

				bool IEnumerator.MoveNext()
				{
					//ILSpy generated this explicit interface implementation from .override directive in MoveNext
					return this.MoveNext();
				}

				[DebuggerHidden]
				void IEnumerator.Reset()
				{
					throw new NotSupportedException();
				}
			}

			internal ContentPack contentPack = new ContentPack();

			public static List<CraftableDef> Recipies = new List<CraftableDef>();

			public string identifier => "Bluefishracer.UltitemsCyanRecipes";

			public void Initialise()
			{
				//IL_0008: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(AddSelf);
			}

			private void AddSelf(AddContentPackProviderDelegate add)
			{
				add.Invoke((IContentPackProvider)(object)this);
			}

			[IteratorStateMachine(typeof(<LoadStaticContentAsync>d__6))]
			public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
			{
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <LoadStaticContentAsync>d__6(0)
				{
					<>4__this = this,
					args = args
				};
			}

			[IteratorStateMachine(typeof(<GenerateContentPackAsync>d__7))]
			public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
			{
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <GenerateContentPackAsync>d__7(0)
				{
					<>4__this = this,
					args = args
				};
			}

			[IteratorStateMachine(typeof(<FinalizeAsync>d__8))]
			public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
			{
				//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
				return new <FinalizeAsync>d__8(0)
				{
					<>4__this = this,
					args = args
				};
			}
		}

		public static float stageStartTime;

		public const string PluginGUID = "SporkySpig.UltitemsCyan";

		public const string PluginAuthor = "SporkySpig";

		public const string PluginName = "UltitemsCyan";

		public const string PluginVersion = "0.14.2";

		public const string PluginSuffix = "Deluged Printers?!?!";

		public static List<Pair> CorruptionPairs = new List<Pair>();

		public int ultRecipesIndex = 0;

		public const int numRecipies = 20;

		public static Sprite mysterySprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/MiscIcons/texMysteryIcon.png").WaitForCompletion();

		public static GameObject mysteryPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Mystery/PickupMystery.prefab").WaitForCompletion();

		private static ConfigFile UltitemsConfig { get; set; }

		public static PluginInfo PInfo { get; private set; }

		public void Awake()
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03af: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f6: Expected O, but got Unknown
			Log.Init(((BaseUnityPlugin)this).Logger);
			PInfo = ((BaseUnityPlugin)this).Info;
			UltitemsConfig = new ConfigFile(Paths.ConfigPath + "\\Ultitems_ConfigFile.cfg", true);
			UltAssets.Init();
			GenericGameEvents.Init();
			List<BuffBase> list = new List<BuffBase>();
			list.Add(new BirthdayBuff());
			list.Add(new CrysotopeFlyingBuff());
			list.Add(new EyeAwakeBuff());
			list.Add(new EyeDrowsyBuff());
			list.Add(new EyeSleepyBuff());
			list.Add(new DreamSpeedBuff());
			list.Add(new DownloadedBuff());
			list.Add(new FrisbeeGlidingBuff());
			list.Add(new OverclockedBuff());
			list.Add(new RottingBuff());
			list.Add(new SlipperyGrapeBuff());
			list.Add(new QuarkGravityBuff());
			list.Add(new SuesTeethBuff());
			list.Add(new SporkBleedBuff());
			list.Add(new TaffyChewBuff());
			list.Add(new TickCritBuff());
			list.Add(new ZorseStarvingBuff());
			foreach (BuffBase item in list)
			{
				item.Init();
			}
			List<ItemBase> list2 = new List<ItemBase>();
			list2.Add(new CorrodingVaultConsumed());
			list2.Add(new InhabitedCoffinConsumed());
			list2.Add(new SuesMandiblesConsumed());
			list2.Add(new SilverThreadConsumed());
			list2.Add(new GreySolvent());
			list2.Add(new CremeBrulee());
			list2.Add(new KoalaSticker());
			list2.Add(new ToyRobot());
			list2.Add(new FleaBag());
			list2.Add(new Frisbee());
			list2.Add(new BirthdayCandles());
			list2.Add(new HMT());
			list2.Add(new OverclockedGPU());
			list2.Add(new TinyIgloo());
			list2.Add(new XenonAmpoule());
			list2.Add(new CorrodingVault());
			list2.Add(new Grapevine());
			list2.Add(new PigsSpork());
			list2.Add(new RockyTaffy());
			list2.Add(new SuesMandibles());
			list2.Add(new ViralEssence());
			list2.Add(new DreamFuel());
			list2.Add(new UltravioletBulb());
			list2.Add(new SilverThread());
			list2.Add(new DelugedPail());
			list2.Add(new IceCubes());
			list2.Add(new OrbitalQuark());
			list2.Add(new YieldSign());
			list2.Add(new YieldSignStop());
			list2.Add(new Macroseismograph());
			list2.Add(new MacroseismographConsumed());
			list2.Add(new PotOfRegolith());
			list2.Add(new Obsolute());
			list2.Add(new Crysotope());
			list2.Add(new DriedHam());
			list2.Add(new JealousFoe());
			list2.Add(new RottenBones());
			list2.Add(new DownloadedRAM());
			list2.Add(new ZorsePill());
			list2.Add(new InhabitedCoffin());
			list2.Add(new WormHoles());
			list2.Add(new Permaglaze());
			list2.Add(new DegreeScissors());
			foreach (ItemBase item2 in list2)
			{
				item2.Init(UltitemsConfig);
				if (Object.op_Implicit((Object)(object)item2.GetTransformItem))
				{
					CorruptionPairs.Add(new Pair
					{
						itemDef1 = item2.GetTransformItem,
						itemDef2 = item2.GetItemDef
					});
				}
			}
			Stage.onStageStartGlobal += Stage_onStageStartGlobal;
			ContagiousItemManager.Init += new hook_Init(ContagiousItemManager_Init);
			for (int i = 0; i < 20; i++)
			{
				CraftableDef val = ScriptableObject.CreateInstance<CraftableDef>();
				((Object)val).name = "Ultitems Cyan Recipe #" + (i + 1);
				MyUltRecipes.Recipies.Add(val);
			}
			new MyUltRecipes().Initialise();
			((ResourceAvailability)(ref PickupCatalog.availability)).CallWhenAvailable((Action)DefineRecipes);
			Log.Warning("Ultitems Cyan Done: 0.14.2 <- Deluged Printers?!?!");
		}

		private void DefineRecipes()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: 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_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cc: 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_01fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0270: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: 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_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_039b: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0403: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Unknown result type (might be due to invalid IL or missing references)
			//IL_043f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Unknown result type (might be due to invalid IL or missing references)
			//IL_0471: Unknown result type (might be due to invalid IL or missing references)
			//IL_0491: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0515: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_054b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0567: Unknown result type (might be due to invalid IL or missing references)
			//IL_0587: Unknown result type (might be due to invalid IL or missing references)
			//IL_059d: Unknown result type (might be due to invalid IL or missing references)
			//IL_05bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_060e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0624: Unknown result type (might be due to invalid IL or missing references)
			//IL_0643: Unknown result type (might be due to invalid IL or missing references)
			//IL_0659: Unknown result type (might be due to invalid IL or missing references)
			//IL_0675: Unknown result type (might be due to invalid IL or missing references)
			//IL_0695: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_071c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0732: Unknown result type (might be due to invalid IL or missing references)
			//IL_0751: Unknown result type (might be due to invalid IL or missing references)
			//IL_0767: Unknown result type (might be due to invalid IL or missing references)
			Log.Warning(":: ~~ Define Recipes ~~ ::");
			FillRecipes(Items.WardOnLevel.itemIndex, 2, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapWhite.itemIndex,
				TinyIgloo.item.itemIndex
			} });
			FillRecipes(Items.SecondarySkillMagazine.itemIndex, 4, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapWhite.itemIndex,
				UltravioletBulb.item.itemIndex
			} });
			FillRecipes(Frisbee.item.itemIndex, 2, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapWhite.itemIndex,
				Items.JumpBoost.itemIndex
			} });
			FillRecipes(ToyRobot.item.itemIndex, 2, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapWhite.itemIndex,
				Items.SpeedOnPickup.itemIndex
			} });
			FillRecipes(ToyRobot.item.itemIndex, 4, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapWhite.itemIndex,
				Items.DroneWeapons.itemIndex
			} });
			FillRecipes(Items.Feather.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				Frisbee.item.itemIndex,
				Items.JumpDamageStrike.itemIndex
			} });
			FillRecipes(Items.EquipmentMagazine.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				XenonAmpoule.item.itemIndex,
				Items.SecondarySkillMagazine.itemIndex
			} });
			FillRecipes(Items.SpeedOnPickup.itemIndex, 1, new Ingredient[2][]
			{
				new Ingredient[2]
				{
					FleaBag.item.itemIndex,
					Items.BonusGoldPackOnKill.itemIndex
				},
				new Ingredient[2]
				{
					FleaBag.item.itemIndex,
					Items.Bandolier.itemIndex
				}
			});
			FillRecipes(TinyIgloo.item.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				Items.AttackSpeedPerNearbyAllyOrEnemy.itemIndex,
				Items.IceRing.itemIndex
			} });
			FillRecipes(DegreeScissors.item.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				Items.TreasureCache.itemIndex,
				BirthdayCandles.item.itemIndex
			} });
			FillRecipes(HMT.item.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				Items.IgniteOnKill.itemIndex,
				Items.BonusGoldPackOnKill.itemIndex
			} });
			FillRecipes(HMT.item.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				Items.ScrapGreen.itemIndex,
				Items.LaserTurbine.itemIndex
			} });
			FillRecipes(Items.NovaOnHeal.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				TinyIgloo.item.itemIndex,
				Items.Squid.itemIndex
			} });
			FillRecipes(Items.Talisman.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				OverclockedGPU.item.itemIndex,
				Items.DeathMark.itemIndex
			} });
			FillRecipes(Items.ImmuneToDebuff.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				IceCubes.equipment.equipmentIndex,
				Items.Phasing.itemIndex
			} });
			FillRecipes(Items.Duplicator.itemIndex, 1, new Ingredient[1][] { new Ingredient[2]
			{
				DegreeScissors.item.itemIndex,
				DegreeScissors.item.itemIndex
			} });
			FillRecipes(SuesMandibles.item.itemIndex, 1, new Ingredient[2][]
			{
				new Ingredient[2]
				{
					SuesMandiblesConsumed.item.itemIndex,
					Items.ShinyPearl.itemIndex
				},
				new Ingredient[2]
				{
					SuesMandiblesConsumed.item.itemIndex,
					Equipment.FireBallDash.equipmentIndex
				}
			});
			FillRecipes(PigsSpork.item.itemIndex, 1, new Ingredient[2][]
			{
				new Ingredient[2]
				{
					Items.TeleportOnLowHealth.itemIndex,
					Items.TriggerEnemyDebuffs.itemIndex
				},
				new Ingredient[2]
				{
					Items.TeleportOnLowHealth.itemIndex,
					Items.ExplodeOnDeath.itemIndex
				}
			});
			FillRecipes(YieldSign.equipment.equipmentIndex, 1, new Ingredient[2][]
			{
				new Ingredient[2]
				{
					Items.Crowbar.itemIndex,
					Items.MoveSpeedOnKill.itemIndex
				},
				new Ingredient[2]
				{
					Items.Crowbar.itemIndex,
					Items.SprintOutOfCombat.itemIndex
				}
			});
			FillRecipes(Permaglaze.item.itemIndex, 1, new Ingredient[2][]
			{
				new Ingredient[2]
				{
					IceCubes.equipment.equipmentIndex,
					RockyTaffy.item.itemIndex
				},
				new Ingredient[2]
				{
					IceCubes.equipment.equipmentIndex,
					Items.Icicle.itemIndex
				}
			});
		}

		private void FillRecipes(Ingredient product, int quantity, Ingredient[][] ingrediantList)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected O, but got Unknown
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Expected O, but got Unknown
			CraftableDef val = MyUltRecipes.Recipies[ultRecipesIndex];
			ultRecipesIndex++;
			int num = ingrediantList.Length;
			Recipe[] array = (Recipe[])(object)new Recipe[num];
			for (int i = 0; i < num; i++)
			{
				Recipe val2 = new Recipe();
				val2.amountToDrop = quantity;
				val2.ingredients = (RecipeIngredient[])(object)new RecipeIngredient[2]
				{
					new RecipeIngredient
					{
						pickup = (ingrediantList[i][0].GetObject() ?? null)
					},
					new RecipeIngredient
					{
						pickup = (ingrediantList[i][1].GetObject() ?? null)
					}
				};
				Recipe val3 = val2;
				array[i] = val3;
			}
			val.pickup = product.GetObject() ?? null;
			val.recipes = array;
		}

		private void Stage_onStageStartGlobal(Stage obj)
		{
			stageStartTime = Run.instance.time;
		}

		public void ContagiousItemManager_Init(orig_Init orig)
		{
			List<Pair> first = ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem].ToList();
			PrintPairList(CorruptionPairs);
			ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = first.Union(CorruptionPairs).ToArray();
			Log.Debug("End of Ultitems init");
			orig.Invoke();
		}

		private void PrintPairList(List<Pair> list)
		{
			//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_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			foreach (Pair item in list)
			{
				Log.Debug(". " + ((Object)item.itemDef1).name + " -> " + ((Object)item.itemDef2).name);
			}
		}
	}
}
namespace UltitemsCyan.Text
{
	internal class ArchivedCode
	{
	}
}
namespace UltitemsCyan.Items
{
	public abstract class ItemBase
	{
		private readonly ExpansionDef Sovt = ((IEnumerable<ExpansionDef>)(object)ExpansionCatalog.expansionDefs).FirstOrDefault((Func<ExpansionDef, bool>)((ExpansionDef expansion) => expansion.nameToken == "DLC1_NAME"));

		public ItemDef GetItemDef { get; set; }

		public EquipmentDef GetEquipmentDef { get; set; }

		public ItemDef GetTransformItem { get; set; }

		public abstract void Init(ConfigFile configs);

		public ItemDef CreateItemDef(string tokenPrefix, string name, string pick, string desc, string lore, ItemTier tier, Sprite sprite, GameObject prefab, ItemTag[] tags, ItemDef transformItem = null, bool isConsumed = false)
		{
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Invalid comparison between Unknown and I4
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Expected O, but got Unknown
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Expected O, but got Unknown
			ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
			LanguageAPI.Add(tokenPrefix + "_NAME", name);
			LanguageAPI.Add(tokenPrefix + "_PICK", pick);
			LanguageAPI.Add(tokenPrefix + "_DESC", desc);
			LanguageAPI.Add(tokenPrefix + "_LORE", lore);
			((Object)val).name = tokenPrefix + "_NAME";
			val.nameToken = tokenPrefix + "_NAME";
			val.pickupToken = tokenPrefix + "_PICK";
			val.descriptionToken = tokenPrefix + "_DESC";
			val.loreToken = tokenPrefix + "_LORE";
			val.isConsumed = isConsumed;
			ItemTierDef val2 = ScriptableObject.CreateInstance<ItemTierDef>();
			val2.tier = tier;
			val._itemTierDef = val2;
			val.canRemove = (int)tier != 5;
			val.hidden = false;
			val.pickupIconSprite = sprite;
			val.pickupModelPrefab = prefab;
			val.tags = tags;
			ItemDisplayRuleDict val3 = new ItemDisplayRuleDict((ItemDisplayRule[])null);
			ItemAPI.Add(new CustomItem(val, val3));
			Hooks();
			GetItemDef = val;
			if (Object.op_Implicit((Object)(object)transformItem))
			{
				GetTransformItem = transformItem;
				val.requiredExpansion = Sovt;
			}
			return val;
		}

		public bool CheckItemEnabledConfig(string name, string tier, ConfigFile configs)
		{
			return configs.Bind<bool>("Enable " + tier + " Items", "Enable " + name + "?", true, (ConfigDescription)null).Value;
		}

		protected abstract void Hooks();
	}
	public class PowerChips : ItemBase
	{
		public static ItemDef item;

		private const float dontResetFraction = 0.5f;

		public override void Init(ConfigFile configs)
		{
			string name = "Power Chips";
			if (CheckItemEnabledConfig(name, "Lunar", configs))
			{
				item = CreateItemDef("POWERCHIPS", name, "a", "b", "c", (ItemTier)3, Ultitems.mysterySprite, Ultitems.mysteryPrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 });
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			ChestBehavior.ItemDrop += new hook_ItemDrop(ChestBehavior_ItemDrop);
		}

		private void ChestBehavior_ItemDrop(orig_ItemDrop orig, ChestBehavior self)
		{
		}
	}
}
namespace UltitemsCyan.Items.Void
{
	public class Crysotope : ItemBase
	{
		public class CrysotopeBehavior : ItemBehavior
		{
			private CharacterMotor characterMotor;

			private const float baseDuration = 0.6f;

			private const float durationPerStack = 0.4f;

			public float flyingStopwatch = 0f;

			private bool _canHaveBuff = false;

			public bool CanHaveBuff
			{
				get
				{
					return _canHaveBuff;
				}
				set
				{
					//IL_0032: Unknown result type (might be due to invalid IL or missing references)
					if (_canHaveBuff != value)
					{
						_canHaveBuff = value;
						if (!_canHaveBuff)
						{
							base.body.SetBuffCount(CrysotopeFlyingBuff.buff.buffIndex, 0);
						}
					}
				}
			}

			public void UpdateStopwatch(float newTime)
			{
				flyingStopwatch = newTime;
			}

			public void FixedUpdate()
			{
				if (Object.op_Implicit((Object)(object)characterMotor))
				{
					CanHaveBuff = !characterMotor.isGrounded && base.body.inputBank.jump.down && Run.instance.time <= flyingStopwatch + 0.6f + 0.4f * (float)(base.stack - 1);
					if (base.body.HasBuff(CrysotopeFlyingBuff.buff) && base.body.characterMotor.velocity.y < 18f)
					{
						base.body.characterMotor.velocity.y = (base.body.characterMotor.velocity.y - 18f) * 0.9f + 18f;
					}
				}
			}

			public void Start()
			{
				characterMotor = base.body.characterMotor;
				((Behaviour)this).enabled = false;
			}

			private void OnDisable()
			{
				flyingStopwatch = 0f;
				CanHaveBuff = false;
			}

			public void OnDestroy()
			{
				flyingStopwatch = 0f;
				CanHaveBuff = false;
			}
		}

		public static ItemDef item;

		public static ItemDef transformItem;

		public const float dampeningForce = 0.9f;

		public const float riseSpeed = 18f;

		public const float baseDuration = 0.6f;

		public const float durationPerStack = 0.4f;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Crysotope", "Void", configs))
			{
				item = CreateItemDef("CRYSOTOPE", "Crysotope", "Rise after jumping. Hold jump to continue flying. <style=cIsVoid>Corrupts all Frisbees</style>.", "Rise after jumping for <style=cIsUtility>0.6</style> <style=cStack>(+0.4 per stack)</style> seconds. Hold jump to keep flying. <style=cIsVoid>Corrupts all Frisbees</style>.", "An eyeless crystal snake capbable of flying 100 meters", (ItemTier)6, UltAssets.CrysotopeSprite, UltAssets.CrysotopePrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }, Frisbee.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
			GenericCharacterMain.ProcessJump += new hook_ProcessJump(GenericCharacterMain_ProcessJump);
		}

		private void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory))
			{
				self.AddItemBehavior<CrysotopeBehavior>(self.inventory.GetItemCountEffective(item));
			}
		}

		private void GenericCharacterMain_ProcessJump(orig_ProcessJump orig, GenericCharacterMain self)
		{
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.inventory))
			{
				CharacterBody characterBody = ((EntityState)self).characterBody;
				int itemCountEffective = characterBody.inventory.GetItemCountEffective(item);
				if (itemCountEffective > 0 && ((BaseCharacterMain)self).hasCharacterMotor && self.jumpInputReceived && ((EntityState)self).characterMotor.jumpCount < ((EntityState)self).characterBody.maxJumpCount)
				{
					CrysotopeBehavior component = ((Component)((EntityState)self).characterBody).GetComponent<CrysotopeBehavior>();
					((Behaviour)component).enabled = true;
					component.UpdateStopwatch(Run.instance.time);
					characterBody.SetBuffCount(CrysotopeFlyingBuff.buff.buffIndex, 1);
				}
			}
			orig.Invoke(self);
		}
	}
	public class DownloadedRAM : ItemBase
	{
		public class DownloadedVoidBehavior : ItemBehavior
		{
			public float attackingStopwatch = 0f;

			private bool _attacking = false;

			public bool DealingDamage
			{
				get
				{
					return _attacking;
				}
				set
				{
					//IL_0032: Unknown result type (might be due to invalid IL or missing references)
					if (_attacking != value)
					{
						_attacking = value;
						if (!_attacking)
						{
							base.body.SetBuffCount(DownloadedBuff.buff.buffIndex, 0);
							((Behaviour)this).enabled = false;
						}
					}
				}
			}

			public void UpdateStopwatch(float newTime)
			{
				attackingStopwatch = newTime;
			}

			private void OnAwake()
			{
				((Behaviour)this).enabled = false;
			}

			private void OnDisable()
			{
				attackingStopwatch = 0f;
				DealingDamage = false;
			}

			private void FixedUpdate()
			{
				DealingDamage = Run.instance.time <= attackingStopwatch + 4f;
			}
		}

		public readonly GameObject ImpEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/EliteVoid/VoidInfestorLeapEffect.prefab").WaitForCompletion();

		public static ItemDef item;

		public static ItemDef transformItem;

		public const float downloadedBuffMultiplier = 20f;

		public const int downloadsPerItem = 4;

		public const float plugeSpeed = 8f;

		public const float plugeSpeedDivisor = 2f;

		private const float downloadChance = 12f;

		public const float notAttackingDelay = 4f;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Downloaded RAM", "Void", configs))
			{
				item = CreateItemDef("DOWNLOADEDRAM", "Downloaded RAM", "Chance on hit to temporarily increase damage. Dealing damage refreshes the timer. <style=cIsVoid>Corrupts all Overclocked GPUs</style>.", "<style=cIsDamage>12%</style> chance on hit to increase your damage by <style=cIsDamage>8%</style>, up to <style=cIsDamage>4</style> <style=cStack>(+4 per stack)</style>, for 4s. Dealing damage refreshes the timer. <style=cIsVoid>Corrupts all Overclocked GPUs</style>.", "Wow I can't belive it worked! I thought for sure it was a scam!", (ItemTier)7, UltAssets.DownloadedRAMSprite, UltAssets.DownloadedRAMPrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }, OverclockedGPU.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
			GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy);
		}

		private void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory))
			{
				self.AddItemBehavior<DownloadedVoidBehavior>(self.inventory.GetItemCountEffective(item));
			}
		}

		private void GlobalEventManager_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Invalid comparison between Unknown and I4
			//IL_010f: 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_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Expected O, but got Unknown
			orig.Invoke(self, damageInfo, victim);
			try
			{
				if (!NetworkServer.active || !Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)victim) || !Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) || !Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>().inventory) || damageInfo.rejected || (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) == 67108864)
				{
					return;
				}
				CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
				int itemCountEffective = component.inventory.GetItemCountEffective(item);
				if (itemCountEffective <= 0)
				{
					return;
				}
				DownloadedVoidBehavior component2 = ((Component)component).GetComponent<DownloadedVoidBehavior>();
				((Behaviour)component2).enabled = true;
				component2.UpdateStopwatch(Run.instance.time);
				if (Util.CheckRoll(12f, component.master.luck, (CharacterMaster)null))
				{
					CharacterBody component3 = victim.GetComponent<CharacterBody>();
					if (!((Object)(object)component3 != (Object)null) || Object.op_Implicit((Object)(object)component3.characterMotor))
					{
					}
					EffectManager.SpawnEffect(ImpEffect, new EffectData
					{
						origin = component3.corePosition
					}, true);
					if (component.GetBuffCount(DownloadedBuff.buff) < itemCountEffective * 4)
					{
						component.AddBuff(DownloadedBuff.buff);
					}
				}
			}
			catch (NullReferenceException)
			{
			}
		}
	}
	public class DriedHam : ItemBase
	{
		public static ItemDef item;

		public static ItemDef transformItem;

		private const float threshold = 35f;

		private const float flatHealing = 4f;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Dried Ham", "Void", configs))
			{
				item = CreateItemDef("DRIEDHAM", "Dried Ham", "Heal when hitting enemies below 35% health. <style=cIsVoid>Corrupts all Crème Brûlées</style>.", "<style=cIsHealing>Heal</style> for <style=cIsHealing>4</style> <style=cStack>(+5 per stack)</style> when dealing damage to enemies below <style=cIsDamage>35% health</style>. <style=cIsVoid>Corrupts all Crème Brûlées</style>.", "The bitter aftertaste is just the spoilage", (ItemTier)6, UltAssets.DriedHamSprite, UltAssets.DriedHamPrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 }, CremeBrulee.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage);
		}

		private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Invalid comparison between Unknown and I4
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>().inventory) && !damageInfo.rejected && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) != 67108864)
				{
					CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
					int itemCountEffective = component.inventory.GetItemCountEffective(item);
					if (itemCountEffective > 0 && self.combinedHealthFraction <= 0.35f)
					{
						component.healthComponent.Heal(4f * (float)itemCountEffective, damageInfo.procChainMask, true);
						Util.PlaySound("Play_item_proc_thorns", ((Component)component).gameObject);
					}
				}
			}
			catch (NullReferenceException)
			{
			}
			orig.Invoke(self, damageInfo);
		}
	}
	public class InhabitedCoffin : ItemBase
	{
		public static ItemDef item;

		public static ItemDef transformItem;

		private const float freeCoffinChance = 20f;

		private const int minimumInCoffin = 5;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Inhabited Coffin", "Void", configs))
			{
				Sprite inhabitedCoffinSprite = UltAssets.InhabitedCoffinSprite;
				GameObject inhabitedCoffinPrefab = UltAssets.InhabitedCoffinPrefab;
				ItemTag[] array = new ItemTag[3];
				RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
				item = CreateItemDef("INHABITEDCOFFIN", "Inhabited Coffin", "Breaks at the start of the next stage. Contains void items. <style=cIsVoid>Corrupts all Corroding Vaults</style>.", "At the start of each stage, this item will <style=cIsUtility>break</style> and gives <style=cIsUtility>5</style> random void items. <style=cIsUtility>Bad luck</style> grants more Coffins. <style=cIsVoid>Corrupts all Corroding Vaults</style>.", "Something lives inside this coffin. That coffin is deeper than you think.", (ItemTier)8, inhabitedCoffinSprite, inhabitedCoffinPrefab, (ItemTag[])(object)array, CorrodingVault.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			Stage.BeginServer += new hook_BeginServer(Stage_BeginServer);
		}

		private void Stage_BeginServer(orig_BeginServer orig, Stage self)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Expected O, but got Unknown
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!NetworkServer.active)
			{
				return;
			}
			TryTransformResult val2 = default(TryTransformResult);
			foreach (CharacterMaster readOnlyInstances in CharacterMaster.readOnlyInstancesList)
			{
				if (!Object.op_Implicit((Object)(object)readOnlyInstances.inventory))
				{
					continue;
				}
				int itemCountEffective = readOnlyInstances.inventory.GetItemCountEffective(item.itemIndex);
				if (itemCountEffective <= 0)
				{
					continue;
				}
				ItemTransformation val = default(ItemTransformation);
				((ItemTransformation)(ref val)).originalItemIndex = item.itemIndex;
				((ItemTransformation)(ref val)).newItemIndex = InhabitedCoffinConsumed.item.itemIndex;
				((ItemTransformation)(ref val)).maxToTransform = 1;
				val.transformationType = (ItemTransformationTypeIndex)0;
				if (((ItemTransformation)(ref val)).TryTransform(readOnlyInstances.inventory, ref val2))
				{
					List<PickupIndex>[] array = new List<PickupIndex>[4]
					{
						Run.instance.availableVoidTier1DropList,
						Run.instance.availableVoidTier2DropList,
						Run.instance.availableVoidTier3DropList,
						Run.instance.availableVoidBossDropList
					};
					int num = array[0].Count + array[1].Count + array[2].Count + array[3].Count;
					int num2;
					if (Util.CheckRoll(80f, readOnlyInstances.luck, (CharacterMaster)null))
					{
						num2 = 5;
					}
					else
					{
						readOnlyInstances.inventory.GiveItemPermanent(item, 1);
						GenericPickupController.SendPickupMessage(readOnlyInstances, new UniquePickup(PickupCatalog.itemIndexToPickupIndex[item.itemIndex]));
						num2 = 4;
					}
					Xoroshiro128Plus val3 = new Xoroshiro128Plus(Run.instance.stageRng.nextUlong);
					for (int i = 0; i < num2; i++)
					{
						int index = val3.RangeInt(0, num);
						PickupIndex voidItem = GetVoidItem(array, index);
						readOnlyInstances.inventory.GiveItemPermanent(PickupCatalog.GetPickupDef(voidItem).itemIndex, 1);
						GenericPickupController.SendPickupMessage(readOnlyInstances, new UniquePickup(voidItem));
					}
				}
			}
		}

		private PickupIndex GetVoidItem(List<PickupIndex>[] items, int index)
		{
			//IL_0044: 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_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < items.Length; i++)
			{
				if (index >= items[i].Count)
				{
					index -= items[i].Count;
					continue;
				}
				return items[i][index];
			}
			return PickupIndex.none;
		}
	}
	public class JealousFoe : ItemBase
	{
		public enum EyePhase
		{
			collecting,
			consuming,
			cooldown
		}

		public class JealousFoeBehaviour : ItemBehavior
		{
			private EyePhase _currentPhase = EyePhase.collecting;

			public float eyePhaseStopwatch = float.PositiveInfinity;

			public float currentTimer = 6f;

			private GameObject FakeFoe;

			public void SetCollectingPhase()
			{
				if (_currentPhase == EyePhase.cooldown)
				{
					Log.Debug(" ! ! ! ! ! ! Phase Set ! ! Coll Lecting");
					_currentPhase = EyePhase.collecting;
				}
			}

			public void SetConsumingPhase()
			{
				//IL_003d: 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)
				if (_currentPhase == EyePhase.collecting)
				{
					Log.Debug(" ! ! ! ! ! ! Phase Set ! ! conSUME");
					_currentPhase = EyePhase.consuming;
					int buffCount = base.body.GetBuffCount(EyeDrowsyBuff.buff);
					base.body.SetBuffCount(EyeDrowsyBuff.buff.buffIndex, 0);
					base.body.SetBuffCount(EyeAwakeBuff.buff.buffIndex, buffCount);
					Util.PlaySound("Play_affix_void_bug_infect", ((Component)base.body).gameObject);
				}
			}

			public void SetCooldownPhase()
			{
				if (_currentPhase == EyePhase.consuming)
				{
					Log.Debug(" ! ! ! ! ! ! Phase Set ! ! c o o l down");
					_currentPhase = EyePhase.cooldown;
					eyePhaseStopwatch = float.PositiveInfinity;
					base.body.AddTimedBuff(EyeSleepyBuff.buff, 6f);
				}
			}

			public void GotPickup()
			{
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_007b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_008d: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_0099: Expected O, but got Unknown
				if (_currentPhase == EyePhase.collecting)
				{
					if (eyePhaseStopwatch == float.PositiveInfinity)
					{
						eyePhaseStopwatch = Run.instance.time;
						currentTimer = 6f;
					}
					if ((float)base.body.GetBuffCount(EyeDrowsyBuff.buff) < (float)base.stack * 3f)
					{
						base.body.AddBuff(EyeDrowsyBuff.buff);
						EffectData val = new EffectData
						{
							origin = base.body.corePosition,
							rotation = Quaternion.identity
						};
						EffectManager.SpawnEffect(fmpEffectPrefab, val, false);
						Util.PlaySound("Play_UI_arenaMode_voidCollapse_select", ((Component)base.body).gameObject);
					}
				}
			}

			public void FixedUpdate()
			{
				if (Run.instance.time > eyePhaseStopwatch + currentTimer)
				{
					CheckTimer();
				}
			}

			private void CheckTimer()
			{
				if (_currentPhase == EyePhase.collecting)
				{
					eyePhaseStopwatch = Run.instance.time;
					currentTimer = 8f / (float)(base.stack + 1);
					SetConsumingPhase();
					base.body.RemoveBuff(EyeAwakeBuff.buff);
					ActivateDeath();
				}
				else if (_currentPhase == EyePhase.consuming)
				{
					eyePhaseStopwatch = Run.instance.time;
					base.body.RemoveBuff(EyeAwakeBuff.buff);
					ActivateDeath();
				}
				else
				{
					Log.Warning("##########  Uh oh, Jealous Foe is not supposed to be here...");
				}
			}

			private void ActivateDeath()
			{
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
				//IL_0103: 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_0125: Unknown result type (might be due to invalid IL or missing references)
				//IL_0136: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0142: 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_0152: Unknown result type (might be due to invalid IL or missing references)
				//IL_0154: Unknown result type (might be due to invalid IL or missing references)
				//IL_0159: Unknown result type (might be due to invalid IL or missing references)
				//IL_015e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0160: Unknown result type (might be due to invalid IL or missing references)
				//IL_0166: Expected O, but got Unknown
				//IL_0174: Unknown result type (might be due to invalid IL or missing references)
				//IL_017a: Expected O, but got Unknown
				//IL_0186: Unknown result type (might be due to invalid IL or missing references)
				//IL_018b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0192: 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_019e: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a9: Expected O, but got Unknown
				//IL_0025: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)FakeFoe))
				{
					FakeFoe = Object.Instantiate<GameObject>(fmpPrefab, base.body.footPosition, Quaternion.identity);
					FakeFoe.transform.localScale = new Vector3(0f, 0f, 0f);
					Object.Destroy((Object)(object)FakeFoe.GetComponent<DestroyOnTimer>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<DeathProjectile>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<ApplyTorqueOnStart>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<ProjectileDeployToOwner>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<Deployable>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<ProjectileStickOnImpact>());
					Object.Destroy((Object)(object)FakeFoe.GetComponent<ProjectileController>());
				}
				FakeFoe.transform.position = base.body.footPosition;
				HealthComponent component = FakeFoe.GetComponent<HealthComponent>();
				DamageInfo val = new DamageInfo
				{
					attacker = ((Component)base.body).gameObject,
					crit = base.body.RollCrit(),
					damage = base.body.baseDamage,
					position = base.body.footPosition,
					procCoefficient = 0f,
					damageType = DamageTypeCombo.op_Implicit((DamageType)0),
					damageColorIndex = (DamageColorIndex)3
				};
				DamageReport val2 = new DamageReport(val, component, val.damage, component.combinedHealth);
				GlobalEventManager.instance.OnCharacterDeath(val2);
				EffectData val3 = new EffectData
				{
					origin = base.body.corePosition,
					rotation = Quaternion.identity
				};
				EffectManager.SpawnEffect(fmpEffectPrefab, val3, false);
				Util.PlaySound("Play_voidman_idle_twitch", ((Component)base.body).gameObject);
			}

			public void OnAwake()
			{
			}

			public void OnDisable()
			{
				//IL_001c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_004a: Unknown result type (might be due to invalid IL or missing references)
				if (Object.op_Implicit((Object)(object)base.body))
				{
					base.body.SetBuffCount(EyeDrowsyBuff.buff.buffIndex, 0);
					base.body.SetBuffCount(EyeAwakeBuff.buff.buffIndex, 0);
					base.body.ClearTimedBuffs(EyeSleepyBuff.buff.buffIndex);
				}
			}

			public void OnDestroy()
			{
				Object.Destroy((Object)(object)FakeFoe);
			}
		}

		public static ItemDef item;

		public static ItemDef transformItem;

		public const float collectTime = 6f;

		public const float consumeBaseTime = 4f;

		public const float cooldownTime = 6f;

		public const float maxBuffsPerStack = 3f;

		public static readonly GameObject fmpEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/DeathProjectile/DeathProjectileTickEffect.prefab").WaitForCompletion();

		public static readonly GameObject fmpPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/DeathProjectile/DeathProjectile.prefab").WaitForCompletion();

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Jealous Foe", "Void", configs))
			{
				item = CreateItemDef("JEALOUSFOE", "Jealous Foe", "Trigger On-Kill effects after grabbing pickups. <style=cIsVoid>Corrupts all Toy Robots</style>.", "Gain stacks upon grabbing pickups</style>. Maximum cap of 3</style> <style=cStack>(+3 per stack)</style>. Trigger an <style=cIsDamage>On-Kill</style> effect per stack every <style=cIsUtility>4s</style> <style=cStack>(-30% per stack)</style>. Recharges every <style=cIsUtility>6</style> seconds. <style=cIsVoid>Corrupts all Toy Robots</style>.", "Look at it Jubilat. It just jubilant like some jealous jello jelly.", (ItemTier)6, UltAssets.JubilantFoeSprite, UltAssets.JubilantFoePrefab, (ItemTag[])(object)new ItemTag[2]
				{
					(ItemTag)3,
					(ItemTag)6
				}, ToyRobot.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			HealthPickup.OnTriggerStay += new hook_OnTriggerStay(HealthPickup_OnTriggerStay);
			ElusiveAntlersPickup.OnTriggerStay += new hook_OnTriggerStay(ElusiveAntlersPickup_OnTriggerStay);
			AmmoPickup.OnTriggerStay += new hook_OnTriggerStay(AmmoPickup_OnTriggerStay);
			BuffPickup.OnTriggerStay += new hook_OnTriggerStay(BuffPickup_OnTriggerStay);
			MoneyPickup.OnTriggerStay += new hook_OnTriggerStay(MoneyPickup_OnTriggerStay);
			CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
		}

		private void HealthPickup_OnTriggerStay(orig_OnTriggerStay orig, HealthPickup self, Collider other)
		{
			orig.Invoke(self, other);
			GotPickup(other);
		}

		private void ElusiveAntlersPickup_OnTriggerStay(orig_OnTriggerStay orig, ElusiveAntlersPickup self, Collider other)
		{
			orig.Invoke(self, other);
			GotPickup(other);
		}

		private void AmmoPickup_OnTriggerStay(orig_OnTriggerStay orig, AmmoPickup self, Collider other)
		{
			orig.Invoke(self, other);
			GotPickup(other);
		}

		private void BuffPickup_OnTriggerStay(orig_OnTriggerStay orig, BuffPickup self, Collider other)
		{
			orig.Invoke(self, other);
			GotPickup(other);
		}

		private void MoneyPickup_OnTriggerStay(orig_OnTriggerStay orig, MoneyPickup self, Collider other)
		{
			orig.Invoke(self, other);
			GotPickup(other);
		}

		private void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self)
		{
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory))
			{
				self.AddItemBehavior<JealousFoeBehaviour>(self.inventory.GetItemCountEffective(item));
			}
		}

		private void GotPickup(Collider other)
		{
			CharacterBody component = ((Component)other).GetComponent<CharacterBody>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory))
			{
				int itemCountEffective = component.inventory.GetItemCountEffective(item);
				if (itemCountEffective > 0 && NetworkServer.active)
				{
					((Component)component).GetComponent<JealousFoeBehaviour>().GotPickup();
				}
			}
		}
	}
	public class ResinWhirlpool : ItemBase
	{
		public static ItemDef item;

		public static ItemDef transformItem;

		public const float bounceJumpPowMult = 15f;

		public const int maxBouncePerItem = 8;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Resin Whirlpool", "Void", configs))
			{
				item = CreateItemDef("RESINWHIRLPOOL", "Resin Whirlpool", "Gain extra jumps and jump power on kill. <style=cIsVoid>Corrupts all Viral Smogs</style>.", "Gain <style=cIsUtility>1</style> <style=cStack>(+1 per stack)</style> jumps and +20% jump power on kill until you land. Store up to <style=cIsUtility>10</style> <style=cStack>(+10 per stack)</style> extra jumps. <style=cIsVoid>Corrupts all Viral Smogs</style>.", "This Tape is so bouncy! And it just seems endless...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nWait did you name it Quantum Peel because you wanted a banana item but you added too many food items?\nShhh! They'll never know as long as they never read the description...\n\nand also I changed the item so now it's more aboue bounces instead of speed...\n\nso yeah...", (ItemTier)8, UltAssets.ResinBounceSprite, UltAssets.ResinWhirlpoolPrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }, ViralEssence.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(GlobalEventManager_OnCharacterDeath);
		}

		private void GlobalEventManager_OnCharacterDeath(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport)
		{
			if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)damageReport.attacker) && Object.op_Implicit((Object)(object)damageReport.attackerBody) && Object.op_Implicit((Object)(object)damageReport.attackerBody.inventory))
			{
				CharacterBody attackerBody = damageReport.attackerBody;
				int itemCountEffective = attackerBody.inventory.GetItemCountEffective(item);
				int buffCount = attackerBody.GetBuffCount(ResinBounceBuff.buff);
				if (itemCountEffective > 0 && buffCount < 8 * itemCountEffective)
				{
					Util.PlaySound("Play_item_proc_crowbar", ((Component)attackerBody).gameObject);
					attackerBody.AddBuff(ResinBounceBuff.buff);
				}
			}
			orig.Invoke(self, damageReport);
		}
	}
	public class RottenBones : ItemBase
	{
		public class RottenBonesVoidBehavior : ItemBehavior
		{
			private int _intervalsPassed = 0;

			public int IntervalsPassed
			{
				get
				{
					return _intervalsPassed;
				}
				set
				{
					_intervalsPassed = value;
					if (_intervalsPassed > 0)
					{
						ApplyRot(base.body, _intervalsPassed);
						if (_intervalsPassed >= 3)
						{
							((Behaviour)this).enabled = false;
						}
					}
				}
			}

			private void FixedUpdate()
			{
				float time = Run.instance.time;
				while (time > Ultitems.stageStartTime + 150f * (float)(_intervalsPassed + 1) && _intervalsPassed < 3)
				{
					IntervalsPassed++;
				}
			}
		}

		public static ItemDef item;

		public static ItemDef transformItem;

		public const int rotsPerItem = 3;

		public const float rottingBuffMultiplier = 15f;

		public const float rotTimeInterval = 150f;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("Rotten Bones", "Void", configs))
			{
				item = CreateItemDef("ROTTENBONES", "Rotten Bones", "Deal more damage over time. <style=cIsVoid>Corrupts all Birthday Candles</style>.", "Increase damage by <style=cIsDamage>15%</style> <style=cStack>(+15% per stack)</style> damage for every 2.5 minutes</style> passed in a stage, up to a max of <style=cIsDamage>3</style> stacks. <style=cIsVoid>Corrupts all Birthday Candles</style>.", "The bitter aftertaste is just the spoilage", (ItemTier)7, UltAssets.RottenBonesSprite, UltAssets.RottenBonesPrefab, (ItemTag[])(object)new ItemTag[2]
				{
					(ItemTag)3,
					(ItemTag)20
				}, BirthdayCandles.item);
			}
		}

		protected override void Hooks()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal;
			CharacterBody.OnInventoryChanged += new hook_OnInventoryChanged(CharacterBody_OnInventoryChanged);
		}

		private void CharacterBody_onBodyStartGlobal(CharacterBody self)
		{
			if (NetworkServer.active && Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory))
			{
				self.AddItemBehavior<RottenBonesVoidBehavior>(self.inventory.GetItemCountEffective(item));
			}
		}

		private void CharacterBody_OnInventoryChanged(orig_OnInventoryChanged orig, CharacterBody self)
		{
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.inventory))
			{
				return;
			}
			if (self.inventory.GetItemCountEffective(item) > 0)
			{
				Log.Warning("Give Rotting Bones");
				if (Run.instance.time < Ultitems.stageStartTime + 450f)
				{
					RottenBonesVoidBehavior rottenBonesVoidBehavior = self.AddItemBehavior<RottenBonesVoidBehavior>(self.inventory.GetItemCountEffective(item));
					ApplyRot(self, rottenBonesVoidBehavior.IntervalsPassed);
				}
				else
				{
					ApplyRot(self, 3);
				}
			}
			else
			{
				self.SetBuffCount(RottingBuff.buff.buffIndex, 0);
			}
		}

		private static void ApplyRot(CharacterBody player, int intervals)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			int itemCountEffective = player.inventory.GetItemCountEffective(item);
			int num = itemCountEffective * intervals;
			if (player.GetBuffCount(RottingBuff.buff) < num)
			{
				player.SetBuffCount(RottingBuff.buff.buffIndex, num);
			}
		}
	}
	public class WormHoles : ItemBase
	{
		public class WormHoleToken : MonoBehaviour
		{
			private readonly float summonWormCooldown = 0.12f;

			private float summonWormStopwatch = 0f;

			public Queue<GameObject> ownedVoidHoles = new Queue<GameObject>();

			public void EnqueueWorm(GameObject worm)
			{
				summonWormStopwatch = Run.instance.time;
				ownedVoidHoles.Enqueue(worm);
			}

			public int GetCleanCount()
			{
				while (ownedVoidHoles.Count > 0 && ownedVoidHoles.Peek().GetComponent<EntityStateMachine>().state is Idle)
				{
					GameObject val = ownedVoidHoles.Dequeue();
					Object.Destroy((Object)(object)val);
					NetworkServer.Destroy(val);
				}
				return ownedVoidHoles.Count;
			}

			public bool GetCooldownReady()
			{
				return Run.instance.time > summonWormStopwatch + summonWormCooldown;
			}

			public void Destory()
			{
				while (ownedVoidHoles.Count > 0)
				{
					GameObject val = ownedVoidHoles.Dequeue();
					Object.Destroy((Object)(object)val);
					NetworkServer.Destroy(val);
				}
			}
		}

		public class IdleWorm : Idle
		{
			private float wormStopwatch = float.PositiveInfinity;

			public override void OnEnter()
			{
				//IL_0025: Unknown result type (might be due to invalid IL or missing references)
				//IL_002a: Unknown result type (might be due to invalid IL or missing references)
				LoopSoundDef val = ScriptableObject.CreateInstance<LoopSoundDef>();
				val.startSoundName = "Play_voidBarnacle_idle_loop";
				val.stopSoundName = "Stop_voidBarnacle_idle_loop";
				base.loopPtr = LoopSoundManager.PlaySoundLoopLocal(((EntityState)this).gameObject, val);
				base.indicatedNetIds = new HashSet<NetworkInstanceId>();
				wormStopwatch = Run.instance.time;
			}

			public override void FixedUpdate()
			{
				if (Run.instance.time > wormStopwatch + 8f)
				{
					DeactivateWorm();
				}
			}

			public override void OnExit()
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				LoopSoundManager.StopSoundLoopLocal(base.loopPtr);
			}

			public void DeactivateWorm()
			{
				//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: Expected O, but got Unknown
				((EntityState)this).outer.SetNextState((EntityState)new Deactivate
				{
					completeObjectiveChatMessageToken = null
				});
			}
		}

		public class WormHoleSync : NetworkBehaviour
		{
			[SyncVar]
			public float syncedRadius;

			[Server]
			public void OnRadiusChanged(float newRadius)
			{
				syncedRadius = newRadius;
				Transform val = ((Component)this).transform.Find("Camp 1 - Void Monsters & Interactables");
				if (Object.op_Implicit((Object)(object)val))
				{
					SphereZone component = ((Component)val).GetComponent<SphereZone>();
					if (Object.op_Implicit((Object)(object)component))
					{
						component.radius = newRadius;
						component.Networkradius = newRadius;
						((Component)val).gameObject.GetComponent<FogDamageController>().safeZones = new List<IZone>(1) { (IZone)(object)component };
					}
				}
			}
		}

		public static ItemDef item;

		public static ItemDef transformItem;

		private readonly GameObject voidCamp = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidCamp/VoidCamp.prefab").WaitForCompletion();

		private GameObject wormZone;

		public const int wormInitialRadius = 15;

		public const int wormBaseRadius = 12;

		public const int wormRadiusPerItem = 3;

		public const int wormDuration = 8;

		public const float emitterOrbVerticalOffset = -2.15f;

		public const float wormFogTickPeriod = 0.3f;

		public const float wormFogDamage = 0.056f;

		public const float wormFogDamageRamp = -0.51f;

		public const float wormFogRampCooldown = 1f;

		public const float wormCooldown = 0.12f;

		public const int wormsHolesPerStack = 1;

		public override void Init(ConfigFile configs)
		{
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			if (CheckItemEnabledConfig("Worm Holes", "Void", configs))
			{
				item = CreateItemDef("WORMHOLES", "Worm Holes", "High damage hits also create a void bubble. <style=cIsVoid>Corrupts all Grapevine</style>.", "Hits that deal <style=cIsDamage>more than 400% damage</style> also create a <style=cIsVoid>void bubble</style> of <style=cIsUtility>15m</style> <style=cStack>(+3m per stack)</style> that last for <style=cIsUtility>8</style> seconds. Can have <style=cIsUtility>1</style> <style=cStack>(+1 per stack)</style> bubble at a time. <style=cIsVoid>Corrupts all Grapevine</style>.", "Get it? It's a worm with holes!", (ItemTier)8, UltAssets.WormHolesSprite, UltAssets.WormHolesPrefab, (ItemTag[])(object)new ItemTag[2]
				{
					(ItemTag)1,
					(ItemTag)3
				}, Grapevine.item);
				CreateWormZoneGameObject();
				bool flag = default(bool);
				ContentAddition.AddEntityState<IdleWorm>(ref flag);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			Chat.SendBroadcastChat_ChatMessageBase += new hook_SendBroadcastChat_ChatMessageBase(Chat_SendBroadcastChat_ChatMessageBase);
			GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy);
		}

		private void Chat_SendBroadcastChat_ChatMessageBase(orig_SendBroadcastChat_ChatMessageBase orig, ChatMessageBase message)
		{
			if (message != null)
			{
				SimpleChatMessage val = (SimpleChatMessage)(object)((message is SimpleChatMessage) ? message : null);
				if (val != null && val.baseToken == null)
				{
					return;
				}
			}
			orig.Invoke(message);
		}

		private void GlobalEventManager_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
		{
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Invalid comparison between Unknown and I4
			orig.Invoke(self, damageInfo, victim);
			try
			{
				if (NetworkServer.active && Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)victim) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>().inventory) && !damageInfo.rejected && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) != 67108864)
				{
					CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
					int itemCountEffective = component.inventory.GetItemCountEffective(item);
					if (itemCountEffective > 0 && damageInfo.damage / component.damage >= 4f)
					{
						TrySpawnHole(component, itemCountEffective, damageInfo.position);
					}
				}
			}
			catch (NullReferenceException)
			{
			}
		}

		private void TrySpawnHole(CharacterBody attacker, int grabCount, Vector3 position)
		{
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			WormHoleToken wormHoleToken = ((Component)attacker).gameObject.GetComponent<WormHoleToken>();
			if (!Object.op_Implicit((Object)(object)wormHoleToken))
			{
				wormHoleToken = ((Component)attacker).gameObject.AddComponent<WormHoleToken>();
			}
			if (wormHoleToken.GetCleanCount() + 1 > grabCount)
			{
				Log.Debug(" worm worm --- Too many worms DO NOT Spawn");
				return;
			}
			if (!wormHoleToken.GetCooldownReady())
			{
				Log.Debug(" worm worm --- Too fast! There's a worm cooldown");
				return;
			}
			GameObject val = Object.Instantiate<GameObject>(wormZone, position, Quaternion.identity);
			val.SetActive(true);
			Log.Warning(" | | | server set radius  | | |");
			WormHoleSync component = val.GetComponent<WormHoleSync>();
			SphereZone component2 = ((Component)val.transform.Find("Camp 1 - Void Monsters & Interactables")).GetComponent<SphereZone>();
			Log.Warning(" | | | sync: " + component.syncedRadius + " old radius: " + component2.radius + " | | |");
			component.syncedRadius = 12 + 3 * grabCount;
			component.OnRadiusChanged(component.syncedRadius);
			Log.Warning(" | | | sync: " + component.syncedRadius + " NEW radius: " + component2.radius + " | | |");
			wormHoleToken.EnqueueWorm(val);
			NetworkServer.Spawn(val);
		}

		private void CreateWormZoneGameObject()
		{
			//IL_003f: 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_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: 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_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			wormZone = PrefabAPI.InstantiateClone(voidCamp, "UltitemsWormHoleZone", false);
			wormZone.SetActive(false);
			wormZone.transform.localScale = new Vector3(1f, 1f, 1f);
			wormZone.transform.rotation = Quaternion.identity;
			wormZone.transform.position = new Vector3(0f, 0f, 0f);
			Object.Destroy((Object)(object)wormZone.GetComponent<OutsideInteractableLocker>());
			EntityStateMachine component = wormZone.GetComponent<EntityStateMachine>();
			component.initialStateType = new SerializableEntityStateType(typeof(IdleWorm));
			component.mainStateType = new SerializableEntityStateType(typeof(IdleWorm));
			Transform val = wormZone.transform.Find("mdlVoidFogEmitter");
			if (Object.op_Implicit((Object)(object)val))
			{
				Animator component2 = ((Component)val).GetComponent<Animator>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					component2.bodyPosition = new Vector3(0f, -2.15f, 0f);
				}
				Transform val2 = ((Component)val).transform.Find("mdlVoidFogEmitterBase");
				if (Object.op_Implicit((Object)(object)val2))
				{
					((Component)val2).gameObject.SetActive(false);
				}
			}
			Transform val3 = wormZone.transform.Find("Decal");
			if (Object.op_Implicit((Object)(object)val3))
			{
				((Component)val3).gameObject.SetActive(false);
			}
			Transform val4 = wormZone.transform.Find("Camp 1 - Void Monsters & Interactables");
			if (Object.op_Implicit((Object)(object)val4))
			{
				Log.Debug(" worm worm --- Found and deactivate Camp One Director");
				Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponent<CampDirector>());
				Object.Destroy((Object)(object)((Component)val4).gameObject.GetComponent<CombatDirector>());
				Log.Debug(" worm worm --- SphereZone");
				SphereZone component3 = ((Component)val4).gameObject.GetComponent<SphereZone>();
				component3.radius = 15f;
				component3.Networkradius = 15f;
				TeamFilter component4 = ((Component)val4).gameObject.GetComponent<TeamFilter>();
				component4.teamIndexInternal = -1;
				component4.defaultTeam = (TeamIndex)(-1);
				FogDamageController component5 = ((Component)val4).gameObject.GetComponent<FogDamageController>();
				component5.teamFilter = component4;
				component5.invertTeamFilter = true;
				component5.tickPeriodSeconds = 0.3f;
				component5.dangerBuffDuration = 0.4f;
				component5.healthFractionPerSecond = 0.056f;
				component5.healthFractionRampCoefficientPerSecond = -0.51f;
				component5.healthFractionRampIncreaseCooldown = 1f;
				component5.initialSafeZones = (BaseZoneBehavior[])(object)new BaseZoneBehavior[1] { (BaseZoneBehavior)component3 };
			}
			wormZone.AddComponent<WormHoleSync>();
			Transform val5 = wormZone.transform.Find("Camp 2 - Flavor Props & Void Elites");
			if (Object.op_Implicit((Object)(object)val5))
			{
				Log.Debug(" worm worm --- Found and deactivate Camp Two Director");
				((Component)val5).gameObject.SetActive(false);
			}
			PrefabAPI.RegisterNetworkPrefab(wormZone);
		}
	}
	public class ZorsePill : ItemBase
	{
		public static ItemDef item;

		public static ItemDef transformItem;

		private const float percentPerStack = 25f;

		public const float duration = 3f;

		public override void Init(ConfigFile configs)
		{
			if (CheckItemEnabledConfig("ZorsePill", "Void", configs))
			{
				item = CreateItemDef("ZORSEPILL", "ZorsePill", "Starve enemies on hit to deal delayed damage. <style=cIsVoid>Corrupts all HMTs</style>.", "Starve an enemy for <style=cIsDamage>25%</style> <style=cStack>(+25% per stack)</style> of TOTAL damage. Status duration <style=cIsDamage>resets</style> when reapplied. <style=cIsVoid>Corrupts all HMTs</style>.", "Get this diet pill now! Eat one and it cut's your weight down. Disclaimer: the microbes inside are definitly not eating you from the inside out.", (ItemTier)7, UltAssets.ZorsePillSprite, UltAssets.ZorsePillPrefab, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 }, HMT.item);
			}
		}

		protected override void Hooks()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			HealthComponent.SendDamageDealt += new hook_SendDamageDealt(HealthComponent_SendDamageDealt);
		}

		private void HealthComponent_SendDamageDealt(orig_SendDamageDealt orig, DamageReport damageReport)
		{
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Invalid comparison between Unknown and I4
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(damageReport);
			try
			{
				GameObject gameObject = ((Component)damageReport.victimBody).gameObject;
				if (Object.op_Implicit((Object)(object)gameObject) && Object.op_Implicit((Object)(object)damageReport.attackerBody) && Object.op_Implicit((Object)(object)damageReport.attackerBody.inventory) && !damageReport.damageInfo.rejected && (int)DamageTypeCombo.op_Implicit(damageReport.damageInfo.damageType) != 67108864 && damageReport.damageDealt > 0f)
				{
					CharacterBody attackerBody = damageReport.attackerBody;
					int itemCountEffective = attackerBody.inventory.GetItemCountEffective(item);
					if (itemCountEffective > 0)
					{
						Log.Debug("  ...Starving enemy with reports...");
						InflictDotInfo val = default(InflictDotInfo);
						val.victimObject = gameObject;
						val.attackerObject = ((Component)attackerBody).gameObject;
						val.dotIndex = ZorseStarvingBuff.index;
						val.duration = 3f;
						val.damageMultiplier = damageReport.damageInfo.damage / attackerBody.damage * (float)((!damageReport.damageInfo.crit) ? 1 : 2) * (float)itemCountEffective * 25f / 100f;
						val.hitHurtBox = null;
						val.maxStacksFromAttacker = null;
						InflictDotInfo val2 = val;
						DotController.InflictDot(ref val2);
					}
				}
			}
			catch (NullReferenceException)
			{
				Log.Debug(" oh...  Zorse Pill had an expected null error");
			}
		}
	}
}
namespace UltitemsCyan.Items.Untiered
{
	public class CorrodingVaultConsumed : ItemBase
	{
		public static ItemDef item;

		public override void Init(ConfigFile configs)
		{
			Sprite corrodingVaultConsumedSprite = UltAssets.CorrodingVaultConsumedSprite;
			GameObject corrodingVaultConsumedPrefab = UltAssets.CorrodingVaultConsumedPrefab;
			ItemTag[] array = new ItemTag[3];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			item = CreateItemDef("CORRODINGVAULTCONSUMED", "Corroding Vault (Corroded)", "It can't protect anything anymore...", "DESCRIPTION It can't protect anything anymore...", "Rusted Rusted Rusted", (ItemTier)5, corrodingVaultConsumedSprite, corrodingVaultConsumedPrefab, (ItemTag[])(object)array, null, isConsumed: true);
		}

		protected override void Hooks()
		{
		}
	}
	public class GreySolvent : ItemBase
	{
		public static ItemDef item;

		public override void Init(ConfigFile configs)
		{
			Sprite universalSolventSprite = UltAssets.UniversalSolventSprite;
			GameObject universalSolventPrefab = UltAssets.UniversalSolventPrefab;
			ItemTag[] array = new ItemTag[3];
			RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/);
			item = CreateItemDef("GREYSOLVENT", "Grey Solvent", "Everything returns...", "DESCRIPTION Everything returns...", "So a Universal Solute just turns other things into Universal Solvents?\nI guess that makes sense... becasue if there is a universal solute, then everything else desolves it.\nSo then everything else is a universal solvent for the universal solute", (ItemTier)5, universalSolventSprite, universalSolventPrefab, (ItemTag[])(object)array, null, isConsumed: true);
		}

		protected override void Hooks()
		{
		}
	}
	public class InhabitedCoffinConsumed : ItemBase
	{
		public static ItemDef item;