Decompiled source of HallowedMod v1.1.0

HallowedPlugin.dll

Decompiled 3 months ago
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
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 HallowedPlugin.Assets;
using HallowedPlugin.Buffs;
using HallowedPlugin.CustomBehavior;
using HallowedPlugin.ItemBehaviors;
using HallowedPlugin.ItemTiers;
using HallowedPlugin.Items;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Items;
using R2API;
using RoR2;
using RoR2.Orbs;
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("HallowedPlugin")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("HallowedPlugin")]
[assembly: AssemblyTitle("HallowedPlugin")]
[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 HallowedPlugin
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("imulki.HallowedPlugin", "HallowedPlugin", "0.1")]
	public class HallowedPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "imulki.HallowedPlugin";

		public const string PluginAuthor = "imulki";

		public const string PluginName = "HallowedPlugin";

		public const string PluginVersion = "0.1";

		public static ConfigEntry<float> VoidStuffSpawnRateConfig { get; set; }

		public void Awake()
		{
			Log.Init(((BaseUnityPlugin)this).Logger);
			InitiateConfig();
			AssetFactory.InitiateAssets();
			BuffFactory.InitiateBuffFactory();
			ItemTierFactory.InitiateItemTierFactory();
			ItemFactory.InitiateItemFactory();
			CustomBehaviorInitiator.Initiate();
			StuffChecking();
		}

		private void InitiateConfig()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			VoidStuffSpawnRateConfig = ((BaseUnityPlugin)this).Config.Bind<float>("TheSection", "VoidSpawnRateKey", 1f, "A Multiplier. How common will the void thing spawn, the default value is 1. Personally, I recommend to set it 1.5 to 2, as this mod almost double the void item pool.");
			ClassicStageInfo.Start += new hook_Start(ClassicStageInfo_Start);
		}

		private void StuffChecking()
		{
		}

		private void ClassicStageInfo_Start(orig_Start orig, ClassicStageInfo self)
		{
			orig.Invoke(self);
			if ((Object)(object)self.interactableCategories == (Object)null || self.interactableCategories.categories == null || VoidStuffSpawnRateConfig.Value == 1f)
			{
				return;
			}
			for (int i = 0; i < self.interactableCategories.categories.Length; i++)
			{
				if (self.interactableCategories.categories[i].name == "Void Stuff")
				{
					self.interactableCategories.categories[i].selectionWeight *= VoidStuffSpawnRateConfig.Value;
				}
			}
		}
	}
	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);
		}
	}
}
namespace HallowedPlugin.ItemTiers
{
	public class ItemTierFactory
	{
		public enum AdditionItemTier
		{
			hallowedTier1 = 1024,
			hallowedTier2,
			hallowedTier3,
			hallowedTierBoss
		}

		public static ItemTierDef hallowedTier1;

		public static ItemTierDef hallowedTier2;

		public static ItemTierDef hallowedTier3;

		public static ItemTierDef hallowedTierBoss;

		public static void InitiateItemTierFactory()
		{
			CreateHallowedTiers();
		}

		public static ItemTierDef CreateItemTierDef(string tierName, Texture bgIconTexture, ColorIndex colorIndex, ColorIndex darkColorIndex, bool isDroppable, bool canScrap, bool canRestack, PickupRules pickupRules, GameObject highlightPrefab, GameObject dropletDisplayPrefab, Enum tierIndex)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			ItemTierDef val = ScriptableObject.CreateInstance<ItemTierDef>();
			((Object)val).name = tierName;
			val.bgIconTexture = bgIconTexture;
			val.colorIndex = colorIndex;
			val.darkColorIndex = darkColorIndex;
			val.isDroppable = isDroppable;
			val.canRestack = canRestack;
			val.canScrap = canScrap;
			val.pickupRules = pickupRules;
			val.highlightPrefab = highlightPrefab;
			val.dropletDisplayPrefab = dropletDisplayPrefab;
			val.tier = (ItemTier)(object)tierIndex;
			ContentAddition.AddItemTierDef(val);
			return val;
		}

		private static void CreateHallowedTiers()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: 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: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			Texture bgIconTexture = Addressables.LoadAssetAsync<Texture>((object)"RoR2/Base/Common/texBossBGIcon.png").WaitForCompletion();
			ColorIndex colorIndex = (ColorIndex)13;
			ColorIndex darkColorIndex = (ColorIndex)22;
			GameObject dropletDisplayPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/PickupDroplet.prefab").WaitForCompletion();
			hallowedTier1 = CreateItemTierDef("hallowedTier1", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, dropletDisplayPrefab, AdditionItemTier.hallowedTier1);
			hallowedTier2 = CreateItemTierDef("hallowedTier2", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTier2);
			hallowedTier3 = CreateItemTierDef("hallowedTier3", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTier3);
			hallowedTierBoss = CreateItemTierDef("hallowedTierBoss", bgIconTexture, colorIndex, darkColorIndex, isDroppable: true, canScrap: false, canRestack: true, (PickupRules)1, null, null, AdditionItemTier.hallowedTierBoss);
		}
	}
}
namespace HallowedPlugin.ItemBehaviors
{
	public class FlyingFungusBehavior : ItemBehavior
	{
		private const float healPercentagePerStack = 0.01f;

		private const float healPeriodSeconds = 0.5f;

		private bool wasFlying;

		private HealthComponent healthComponent;

		private float healTimer;

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

		private void OnEnable()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)base.body))
			{
				wasFlying = base.body.GetBuffCount(BuffFactory.FlyingFungusBuff.buffIndex) > 0;
				healthComponent = ((Component)base.body).GetComponent<HealthComponent>();
			}
			healTimer = 0f;
		}

		private void OnDisable()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)base.body) && wasFlying)
			{
				base.body.RemoveBuff(BuffFactory.FlyingFungusBuff.buffIndex);
			}
			healthComponent = null;
		}

		private void FixedUpdate()
		{
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)base.body))
			{
				if (!base.body.characterMotor.isGrounded)
				{
					healTimer += Time.fixedDeltaTime;
					if (!wasFlying)
					{
						wasFlying = true;
						base.body.AddBuff(BuffFactory.FlyingFungusBuff.buffIndex);
					}
				}
				else if (wasFlying)
				{
					base.body.RemoveBuff(BuffFactory.FlyingFungusBuff.buffIndex);
					wasFlying = false;
				}
			}
			while (healTimer > 0.5f)
			{
				healthComponent.HealFraction(0.01f * (float)base.stack, default(ProcChainMask));
				healTimer -= 0.5f;
			}
		}
	}
	internal class LivingRobotBehavior : ItemBehavior
	{
		public static DeployableSlot dsLivingRobot = (DeployableSlot)52;

		private const float baseSecondsPerSpawn = 30f;

		private const int baseMaxAllies = 3;

		private const int maxAlliesPerStack = 2;

		private const float minSpawnDist = 3f;

		private const float maxSpawnDist = 40f;

		private float spawnTimer;

		private Xoroshiro128Plus rng;

		private WeightedSelection<CharacterSpawnCard> spawnSelection;

		private DirectorPlacementRule placementRule;

		public static int GetMaxProjectiles(Inventory inventory)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			return 3 + 2 * (inventory.GetItemCount(ItemFactory.LivingRobot.itemIndex) - 1);
		}

		private void Awake()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Expected O, but got Unknown
			((Behaviour)this).enabled = false;
			ulong num = Run.instance.seed ^ (ulong)Run.instance.stageClearCount;
			rng = new Xoroshiro128Plus(num);
			spawnSelection = new WeightedSelection<CharacterSpawnCard>(8);
			spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscDrone1.asset").WaitForCompletion(), 15f);
			spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscDrone2.asset").WaitForCompletion(), 15f);
			spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/Base/Drones/cscBackupDrone.asset").WaitForCompletion(), 5f);
			spawnSelection.AddChoice(Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC1/DroneCommander/cscDroneCommander.asset").WaitForCompletion(), 1f);
			placementRule = new DirectorPlacementRule
			{
				placementMode = (PlacementMode)1,
				minDistance = 3f,
				maxDistance = 40f,
				spawnOnTarget = ((Component)this).transform
			};
		}

		private void FixedUpdate()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			spawnTimer += Time.fixedDeltaTime;
			if (!base.body.master.IsDeployableLimited(dsLivingRobot) && spawnTimer > 60f / (float)base.stack)
			{
				spawnTimer = 0f;
				DirectorSpawnRequest val = new DirectorSpawnRequest((SpawnCard)(object)spawnSelection.Evaluate(rng.nextNormalizedFloat), placementRule, rng);
				val.summonerBodyObject = ((Component)this).gameObject;
				val.onSpawnedServer = OnMasterSpawned;
				val.summonerBodyObject = ((Component)this).gameObject;
				DirectorCore.instance.TrySpawnObject(val);
			}
		}

		private void OnMasterSpawned(SpawnResult spawnResult)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			GameObject spawnedInstance = spawnResult.spawnedInstance;
			if (!Object.op_Implicit((Object)(object)spawnedInstance))
			{
				return;
			}
			CharacterMaster component = spawnedInstance.GetComponent<CharacterMaster>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Deployable component2 = ((Component)component).GetComponent<Deployable>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					base.body.master.AddDeployable(component2, dsLivingRobot);
				}
			}
		}
	}
}
namespace HallowedPlugin.Items
{
	public class ItemFactory : MonoBehaviour
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Func<int> <0>__BenaluEffect;

			public static hook_RespawnLocalPlayers <1>__Stage_RespawnLocalPlayers;

			public static Func<int> <2>__CatastrophicEraEffect;

			public static Action<DamageReport> <3>__CatastrophicEra_GlobalEventManager_onServerDamageDealt;

			public static hook_UpdateAllTemporaryVisualEffects <4>__CatastrophicEra_UpdateAllTemporaryVisualEffects;

			public static hook_TakeDamageProcess <5>__CatastrophicEra_TakeDamageProcess;

			public static hook_RemoveBuff_BuffIndex <6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex;

			public static Func<int> <7>__DelayedDoomEffect;

			public static Action<DamageReport> <8>__DelayedDoom_OnServerDamageDealt;

			public static hook_RemoveBuff_BuffIndex <9>__DelayedDoom_OnRemoveBuff;

			public static Func<int> <10>__FaultyEgoEffect;

			public static hook_UpdateLastHitTime <11>__FaultyEgo_UpdateLastHitTime;

			public static Action<DamageReport> <12>__FaultyEgo_onServerDamageDealt;

			public static hook_RemoveBuff_BuffIndex <13>__FaultyEgo_RemoveBuff_BuffIndex;

			public static hook_Heal <14>__FaultyEgo_HealthComponent_Heal;

			public static Func<int> <15>__FaultyEgoConsumedEffect;

			public static Func<int> <16>__FlyingFungusEffect;

			public static Action<CharacterBody> <17>__FlyingFungus_onBodyInventoryChangedGlobal;

			public static Func<int> <18>__GuitarEffect;

			public static Action<DamageReport> <19>__Guitar_onServerDamageDealt;

			public static Func<int> <20>__HypnoBaubleEffect;

			public static Action<DamageReport> <21>__HypnoBauble_onServerDamageDealt;

			public static hook_UpdateAllTemporaryVisualEffects <22>__HypnoBauble_UpdateAllTemporaryVisualEffects;

			public static hook_RemoveBuff_BuffIndex <23>__HypnoBauble_RemoveBuff_BuffIndex;

			public static Func<int> <24>__IlluminationEffect;

			public static Action<DamageReport> <25>__Illumination_onServerDamageDealt;

			public static hook_Init <26>__ContagiousItemManager_Init;

			public static hook_BuildDropTable <27>__ItemFactory_BuildDropTable;

			public static Func<int> <28>__LivingRobotEffect;

			public static Action<CharacterBody> <29>__LivingRobot_onBodyInventoryChangedGlobal;

			public static hook_GetDeployableSameSlotLimit <30>__LivingRobot_GetDeployableSameSlotLimit;

			public static Func<int> <31>__MagnifierEffect;

			public static Action<DamageReport> <32>__Magnifier_OnServerDamageDealt;

			public static Func<int> <33>__MulticastEffect;

			public static Action<EquipmentSlot, EquipmentIndex> <34>__Multicast_onServerEquipmentActivated;

			public static hook_RemoveBuff_BuffIndex <35>__Multicast_RemoveBuff_BuffIndex;

			public static Func<int> <36>__SacredMissileEffect;

			public static Action<DamageReport> <37>__SacredMissile_onServerDamageDealt;
		}

		public static ItemDef Benalu;

		public static ItemDef CatastrophicEra;

		public static ItemDef DelayedDoom;

		public static ItemDef FaultyEgo;

		public static ItemDef FaultyEgoConsumed;

		public static ItemDef FlyingFungus;

		public static ItemDef Guitar;

		public static ItemDef HypnoBauble;

		public static ItemDef Illumination;

		public static string modNameCode = "HALLOWED";

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

		public static ItemDef LivingRobot;

		public static ItemDef Magnifier;

		public static ItemDef Multicast;

		public static ItemDef SacredMissile;

		public static ItemDef InitiateBenalu()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			Sprite pickupIconSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/CloverVoid/texCloverVoidIcon.png").WaitForCompletion();
			Benalu = CreateItem("BENALU", ItemTierFactory.hallowedTier3, pickupIconSprite, Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/CloverVoid/PickupCloverVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, BenaluEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 });
			return Benalu;
		}

		private static int BenaluEffect()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			object obj = <>O.<1>__Stage_RespawnLocalPlayers;
			if (obj == null)
			{
				hook_RespawnLocalPlayers val = Stage_RespawnLocalPlayers;
				<>O.<1>__Stage_RespawnLocalPlayers = val;
				obj = (object)val;
			}
			Stage.RespawnLocalPlayers += (hook_RespawnLocalPlayers)obj;
			return 0;
		}

		private static void Stage_RespawnLocalPlayers(orig_RespawnLocalPlayers orig, Stage self)
		{
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			ReadOnlyCollection<NetworkUser> readOnlyInstancesList = NetworkUser.readOnlyInstancesList;
			for (int i = 0; i < readOnlyInstancesList.Count; i++)
			{
				NetworkUser val = readOnlyInstancesList[i];
				CharacterMaster val2 = null;
				if (((NetworkBehaviour)val).isLocalPlayer && Object.op_Implicit((Object)(object)val.masterObject))
				{
					val2 = val.masterObject.GetComponent<CharacterMaster>();
				}
				if (Object.op_Implicit((Object)(object)val2))
				{
					Xoroshiro128Plus val3 = val2.cloverVoidRng;
					if (val3 == null)
					{
						val3 = new Xoroshiro128Plus(Run.instance.seed);
					}
					Inventory component = ((Component)val2).GetComponent<Inventory>();
					int itemCount = component.GetItemCount(Benalu.itemIndex);
					List<ItemIndex> list = new List<ItemIndex>(component.itemAcquisitionOrder);
					Util.ShuffleList<ItemIndex>(list, val3);
					int num = itemCount * 3;
					for (int j = 0; j < num; j++)
					{
						ItemDef itemDef = ItemCatalog.GetItemDef(list[j]);
						component.GiveItem(itemDef.itemIndex, 1);
					}
				}
			}
		}

		public static ItemDef InitiateCatastrophicEra()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			CatastrophicEra = CreateItem("CATASTROPHICERA", ItemTierFactory.hallowedTier1, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBearVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/BearVoid/PickupBearVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, CatastrophicEraEffect, (ItemTag[])(object)new ItemTag[2]
			{
				(ItemTag)3,
				(ItemTag)11
			});
			return CatastrophicEra;
		}

		private static int CatastrophicEraEffect()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			GlobalEventManager.onServerDamageDealt += CatastrophicEra_GlobalEventManager_onServerDamageDealt;
			object obj = <>O.<4>__CatastrophicEra_UpdateAllTemporaryVisualEffects;
			if (obj == null)
			{
				hook_UpdateAllTemporaryVisualEffects val = CatastrophicEra_UpdateAllTemporaryVisualEffects;
				<>O.<4>__CatastrophicEra_UpdateAllTemporaryVisualEffects = val;
				obj = (object)val;
			}
			CharacterBody.UpdateAllTemporaryVisualEffects += (hook_UpdateAllTemporaryVisualEffects)obj;
			object obj2 = <>O.<5>__CatastrophicEra_TakeDamageProcess;
			if (obj2 == null)
			{
				hook_TakeDamageProcess val2 = CatastrophicEra_TakeDamageProcess;
				<>O.<5>__CatastrophicEra_TakeDamageProcess = val2;
				obj2 = (object)val2;
			}
			HealthComponent.TakeDamageProcess += (hook_TakeDamageProcess)obj2;
			object obj3 = <>O.<6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex;
			if (obj3 == null)
			{
				hook_RemoveBuff_BuffIndex val3 = CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex;
				<>O.<6>__CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex = val3;
				obj3 = (object)val3;
			}
			CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj3;
			return 0;
		}

		private static void CatastrophicEra_UpdateAllTemporaryVisualEffects(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self)
		{
			//IL_0021: 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)
			orig.Invoke(self);
			self.UpdateSingleTemporaryVisualEffect(ref self.bearVoidTempEffectInstance, AssetReferences.bearVoidTempEffectPrefab, self.radius, self.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) || self.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex) || self.HasBuff(Buffs.BearVoidReady), "");
		}

		private static void CatastrophicEra_CharacterBody_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, buffType);
			if (buffType == BuffFactory.CatastrophicEraBuff.buffIndex)
			{
				self.AddTimedBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex, 0.75f);
			}
			else if (buffType == BuffFactory.CatastrophicEraLongerBuff.buffIndex && !((Object)(object)self.inventory == (Object)null))
			{
				int itemCount = self.inventory.GetItemCount(CatastrophicEra.itemIndex);
				self.AddTimedBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex, 10f - 8f * Util.ConvertAmplificationPercentageIntoReductionNormalized(20f * (float)itemCount));
			}
		}

		private static void CatastrophicEra_GlobalEventManager_onServerDamageDealt(DamageReport report)
		{
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: 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_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			if (report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || report.damageInfo == null)
			{
				return;
			}
			CharacterBody attackerBody = report.attackerBody;
			Inventory inventory = report.attackerMaster.inventory;
			int itemCount = inventory.GetItemCount(CatastrophicEra.itemIndex);
			if (itemCount <= 0)
			{
				return;
			}
			float damage = report.damageInfo.damage;
			if (!attackerBody.HasBuff(BuffFactory.CatastrophicEraCooldownBuff.buffIndex) && !attackerBody.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) && !attackerBody.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex))
			{
				if (damage / attackerBody.damage >= 4f)
				{
					attackerBody.AddTimedBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex, 3f);
				}
				else if (Util.CheckRoll(Util.ConvertAmplificationPercentageIntoReductionPercentage(15f * (float)itemCount) * report.damageInfo.procCoefficient, 0f, (CharacterMaster)null))
				{
					attackerBody.AddTimedBuff(BuffFactory.CatastrophicEraBuff.buffIndex, 0.75f);
				}
			}
		}

		private static void CatastrophicEra_TakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: 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_0059: 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_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Expected O, but got Unknown
			if ((Object)(object)self != (Object)null && (Object)(object)self.body != (Object)null)
			{
				CharacterBody body = self.body;
				if (body.HasBuff(BuffFactory.CatastrophicEraBuff.buffIndex) || body.HasBuff(BuffFactory.CatastrophicEraLongerBuff.buffIndex))
				{
					EffectData val = new EffectData
					{
						origin = damageInfo.position,
						rotation = Util.QuaternionSafeLookRotation((damageInfo.force != Vector3.zero) ? damageInfo.force : Random.onUnitSphere)
					};
					EffectManager.SpawnEffect(AssetReferences.bearEffectPrefab, val, true);
					damageInfo.rejected = true;
				}
			}
			orig.Invoke(self, damageInfo);
		}

		public static ItemDef InitiateDelayedDoom()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			DelayedDoom = CreateItem("DELAYEDDOOM", ItemTierFactory.hallowedTier1, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BleedOnHitVoid/texTriTipVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/BleedOnHitVoid/PickupTriTipVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, DelayedDoomEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 });
			return DelayedDoom;
		}

		public static int DelayedDoomEffect()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			GlobalEventManager.onServerDamageDealt += DelayedDoom_OnServerDamageDealt;
			object obj = <>O.<9>__DelayedDoom_OnRemoveBuff;
			if (obj == null)
			{
				hook_RemoveBuff_BuffIndex val = DelayedDoom_OnRemoveBuff;
				<>O.<9>__DelayedDoom_OnRemoveBuff = val;
				obj = (object)val;
			}
			CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj;
			return 0;
		}

		private static void DelayedDoom_OnRemoveBuff(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Expected O, but got Unknown
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: 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)
			orig.Invoke(self, buffType);
			if (buffType == BuffFactory.DelayedDoomBuff.buffIndex)
			{
				DamageInfo val = new DamageInfo();
				val.damage = self.baseDamage * 100f;
				val.crit = false;
				val.attacker = self.masterObject;
				val.inflictor = self.masterObject;
				val.position = self.corePosition;
				val.rejected = false;
				val.procChainMask = default(ProcChainMask);
				val.procCoefficient = 0.01f;
				val.damageType = DamageTypeCombo.Generic;
				val.damageColorIndex = (DamageColorIndex)12;
				self.healthComponent.TakeDamage(val);
			}
		}

		private static void DelayedDoom_OnServerDamageDealt(DamageReport report)
		{
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			HealthComponent victim = report.victim;
			CharacterMaster attackerMaster = report.attackerMaster;
			if ((Object)(object)attackerMaster == (Object)null)
			{
				return;
			}
			Inventory inventory = attackerMaster.inventory;
			if ((Object)(object)victim == (Object)null || (Object)(object)inventory == (Object)null)
			{
				return;
			}
			int itemCount = inventory.GetItemCount(DelayedDoom.itemIndex);
			float num = 80f * report.damageInfo.procCoefficient;
			if (itemCount <= 0 || !Util.CheckRoll(num, attackerMaster))
			{
				return;
			}
			CharacterBody body = victim.body;
			BuffDef ddBuff = BuffFactory.DelayedDoomBuff;
			if (body.HasBuff(ddBuff))
			{
				TimedBuff val = body.timedBuffs.Find((TimedBuff tb) => tb.buffIndex == ddBuff.buffIndex);
				float timer = val.timer - 1f * (float)itemCount;
				val.timer = timer;
			}
			else
			{
				body.AddTimedBuff(ddBuff.buffIndex, 15f);
			}
		}

		public static ItemDef InitiateFaultyEgo()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			FaultyEgo = CreateItem("FAULTYEGO", ItemTierFactory.hallowedTier3, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ExtraLifeVoid/texHippoVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ExtraLifeVoid/PickupHippoVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, FaultyEgoEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 });
			return FaultyEgo;
		}

		public static int FaultyEgoEffect()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			object obj = <>O.<11>__FaultyEgo_UpdateLastHitTime;
			if (obj == null)
			{
				hook_UpdateLastHitTime val = FaultyEgo_UpdateLastHitTime;
				<>O.<11>__FaultyEgo_UpdateLastHitTime = val;
				obj = (object)val;
			}
			HealthComponent.UpdateLastHitTime += (hook_UpdateLastHitTime)obj;
			GlobalEventManager.onServerDamageDealt += FaultyEgo_onServerDamageDealt;
			object obj2 = <>O.<13>__FaultyEgo_RemoveBuff_BuffIndex;
			if (obj2 == null)
			{
				hook_RemoveBuff_BuffIndex val2 = FaultyEgo_RemoveBuff_BuffIndex;
				<>O.<13>__FaultyEgo_RemoveBuff_BuffIndex = val2;
				obj2 = (object)val2;
			}
			CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj2;
			object obj3 = <>O.<14>__FaultyEgo_HealthComponent_Heal;
			if (obj3 == null)
			{
				hook_Heal val3 = FaultyEgo_HealthComponent_Heal;
				<>O.<14>__FaultyEgo_HealthComponent_Heal = val3;
				obj3 = (object)val3;
			}
			HealthComponent.Heal += (hook_Heal)obj3;
			return 0;
		}

		private static float FaultyEgo_HealthComponent_Heal(orig_Heal orig, HealthComponent self, float amount, ProcChainMask procChainMask, bool nonRegen)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			float num = orig.Invoke(self, amount, procChainMask, nonRegen);
			float num2 = amount - num;
			CharacterBody body = self.body;
			int buffCount = body.GetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex);
			if (body.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0)
			{
				int num3 = Mathf.FloorToInt(num2);
				body.SetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex, buffCount + num3);
			}
			return num;
		}

		private static void FaultyEgo_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody cb, BuffIndex buffType)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: 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_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(cb, buffType);
			if (buffType == BuffFactory.FaultyEgoBuff.buffIndex)
			{
				HealthComponent healthComponent = cb.healthComponent;
				int buffCount = cb.GetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex);
				if ((float)buffCount < healthComponent.fullHealth)
				{
					cb.master.TrueKill();
				}
				else
				{
					cb.inventory.GiveItem(Items.ShinyPearl, 1);
					CharacterMasterNotificationQueue.SendTransformNotification(cb.master, FaultyEgoConsumed.itemIndex, Items.ShinyPearl.itemIndex, (TransformationType)0);
				}
				cb.SetBuffCount(BuffFactory.BurntFaultyEgoBuff.buffIndex, 1);
				cb.RemoveBuff(BuffFactory.BurntFaultyEgoBuff.buffIndex);
			}
		}

		private static void FaultyEgo_onServerDamageDealt(DamageReport damageReport)
		{
			//IL_001c: 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)
			CharacterBody attackerBody = damageReport.attackerBody;
			if (!((Object)(object)attackerBody == (Object)null) && attackerBody.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0)
			{
				float num = Util.OnHitProcDamage(damageReport.damageInfo.damage, attackerBody.damage, 0.4f);
				attackerBody.healthComponent.Heal(num, damageReport.damageInfo.procChainMask, true);
			}
		}

		private static void FaultyEgo_UpdateLastHitTime(orig_UpdateLastHitTime orig, HealthComponent self, float damageValue, Vector3 damagePosition, bool damageIsSilent, GameObject attacker)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, damageValue, damagePosition, damageIsSilent, attacker);
			CharacterBody body = self.body;
			if (NetworkServer.active && Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory) && Object.op_Implicit((Object)(object)body.master) && damageValue > 0f && self.health < 0f)
			{
				if (body.GetBuffCount(BuffFactory.FaultyEgoBuff.buffIndex) > 0)
				{
					self.health = 1f;
				}
				else if (body.inventory.GetItemCount(FaultyEgo.itemIndex) > 0)
				{
					self.health = 1f;
					body.AddTimedBuff(BuffFactory.FaultyEgoBuff.buffIndex, 10f);
					body.inventory.RemoveItem(FaultyEgo.itemIndex, 1);
					body.inventory.GiveItem(FaultyEgoConsumed.itemIndex, 1);
					CharacterMasterNotificationQueue.SendTransformNotification(body.master, FaultyEgo.itemIndex, FaultyEgoConsumed.itemIndex, (TransformationType)0);
				}
			}
		}

		public static ItemDef InitiateFaultyEgoConsumed()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			FaultyEgoConsumed = CreateItem("FAULTYEGOCONSUMED", ItemTierFactory.hallowedTierBoss, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ExtraLifeVoid/texHippoVoidIconConsumed.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ExtraLifeVoid/PickupHippoVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, FaultyEgoConsumedEffect, (ItemTag[])(object)new ItemTag[0]);
			return FaultyEgoConsumed;
		}

		public static int FaultyEgoConsumedEffect()
		{
			return 0;
		}

		public static ItemDef InitiateFlyingFungus()
		{
			FlyingFungus = CreateItem("FFUNGUS", ItemTierFactory.hallowedTier1, AssetFactory.FFungusAssets.icon, AssetFactory.FFungusAssets.pickup, canRemove: true, hidden: false, null, FlyingFungusEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)2 });
			return FlyingFungus;
		}

		public static int FlyingFungusEffect()
		{
			CharacterBody.onBodyInventoryChangedGlobal += FlyingFungus_onBodyInventoryChangedGlobal;
			return 0;
		}

		private static void FlyingFungus_onBodyInventoryChangedGlobal(CharacterBody cb)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			Inventory inventory = cb.inventory;
			if ((Object)(object)inventory != (Object)null)
			{
				cb.AddItemBehavior<FlyingFungusBehavior>(inventory.GetItemCount(FlyingFungus.itemIndex));
			}
		}

		public static ItemDef InitiateGuitar()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			Guitar = CreateItem("GUITAR", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ChainLightningVoid/texUkuleleVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/ChainLightningVoid/PickupUkuleleVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, GuitarEffect, (ItemTag[])(object)new ItemTag[2]
			{
				(ItemTag)3,
				(ItemTag)11
			});
			return Guitar;
		}

		private static int GuitarEffect()
		{
			GlobalEventManager.onServerDamageDealt += Guitar_onServerDamageDealt;
			return 0;
		}

		private static void Guitar_onServerDamageDealt(DamageReport report)
		{
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: 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_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_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active || report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || (Object)(object)report.attackerBody.teamComponent == (Object)null || report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)report.victimBody == (Object)null)
			{
				return;
			}
			Inventory inventory = report.attackerMaster.inventory;
			CharacterBody attackerBody = report.attackerBody;
			int itemCount = inventory.GetItemCount(Guitar.itemIndex);
			TeamComponent component = ((Component)report.attackerBody).GetComponent<TeamComponent>();
			TeamIndex teamIndex = (TeamIndex)(Object.op_Implicit((Object)(object)component) ? ((int)component.teamIndex) : 0);
			if (itemCount <= 0)
			{
				return;
			}
			DamageInfo damageInfo = report.damageInfo;
			if (Util.CheckRoll(50f * damageInfo.procCoefficient, report.attackerMaster) && !((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)3))
			{
				attackerBody.AddBuff(BuffFactory.GuitarBuff.buffIndex);
				switch (attackerBody.GetBuffCount(BuffFactory.GuitarBuff.buffIndex))
				{
				case 4:
					CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.8f, 2 * itemCount, 2f * (float)itemCount);
					break;
				case 7:
					CreatePolyluteAttack(damageInfo, attackerBody, report.victimBody, teamIndex, 0.6f, 3 * itemCount);
					break;
				case 10:
					CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.8f, 2 * itemCount, 2f * (float)itemCount);
					CreatePolyluteAttack(damageInfo, attackerBody, report.victimBody, teamIndex, 0.6f, 3 * itemCount);
					attackerBody.SetBuffCount(BuffFactory.GuitarBuff.buffIndex, 1);
					attackerBody.RemoveBuff(BuffFactory.GuitarBuff.buffIndex);
					break;
				default:
					CreateUkuleleAttack(damageInfo, attackerBody, report.victim, teamIndex, 0.4f, 0, 0f);
					break;
				}
			}
		}

		private static void CreateUkuleleAttack(DamageInfo damageInfo, CharacterBody attackerBody, HealthComponent victimHealthComp, TeamIndex teamIndex, float damageCoefficiant, int bounceCount, float rangeIncrease)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			float damageValue = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficiant);
			LightningOrb val = new LightningOrb();
			((Orb)val).origin = damageInfo.position;
			val.damageValue = damageValue;
			val.isCrit = damageInfo.crit;
			val.bouncesRemaining = bounceCount;
			val.teamIndex = teamIndex;
			val.attacker = damageInfo.attacker;
			val.bouncedObjects = new List<HealthComponent> { victimHealthComp };
			val.procChainMask = damageInfo.procChainMask;
			((ProcChainMask)(ref val.procChainMask)).AddProc((ProcType)3);
			val.procCoefficient = 0.2f;
			val.lightningType = (LightningType)0;
			val.damageColorIndex = (DamageColorIndex)3;
			val.range += 2f * rangeIncrease;
			HurtBox val2 = val.PickNextTarget(damageInfo.position);
			if (Object.op_Implicit((Object)(object)val2))
			{
				((Orb)val).target = val2;
				OrbManager.instance.AddOrb((Orb)(object)val);
			}
		}

		private static void CreatePolyluteAttack(DamageInfo damageInfo, CharacterBody attackerBody, CharacterBody victimBody, TeamIndex teamIndex, float damageCoefficiant, int strikeCount)
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_007c: Unknown result type (might be due to invalid IL or missing references)
			float damageValue = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, damageCoefficiant);
			VoidLightningOrb val = new VoidLightningOrb();
			((Orb)val).origin = damageInfo.position;
			val.damageValue = damageValue;
			val.isCrit = damageInfo.crit;
			val.totalStrikes = strikeCount;
			val.teamIndex = teamIndex;
			val.attacker = damageInfo.attacker;
			val.procChainMask = damageInfo.procChainMask;
			((ProcChainMask)(ref val.procChainMask)).AddProc((ProcType)3);
			val.procCoefficient = 0.2f;
			val.damageColorIndex = (DamageColorIndex)9;
			val.secondsPerStrike = 0.1f;
			HurtBox mainHurtBox = victimBody.mainHurtBox;
			if (Object.op_Implicit((Object)(object)mainHurtBox))
			{
				((Orb)val).target = mainHurtBox;
				OrbManager.instance.AddOrb((Orb)(object)val);
			}
		}

		public static ItemDef InitiateHypnoBauble()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			HypnoBauble = CreateItem("HYPNOBAUBLE", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/SlowOnHitVoid/texBaubleVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/SlowOnHitVoid/PickupBaubleVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, HypnoBaubleEffect, (ItemTag[])(object)new ItemTag[2]
			{
				(ItemTag)3,
				(ItemTag)11
			});
			return HypnoBauble;
		}

		private static int HypnoBaubleEffect()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			GlobalEventManager.onServerDamageDealt += HypnoBauble_onServerDamageDealt;
			object obj = <>O.<22>__HypnoBauble_UpdateAllTemporaryVisualEffects;
			if (obj == null)
			{
				hook_UpdateAllTemporaryVisualEffects val = HypnoBauble_UpdateAllTemporaryVisualEffects;
				<>O.<22>__HypnoBauble_UpdateAllTemporaryVisualEffects = val;
				obj = (object)val;
			}
			CharacterBody.UpdateAllTemporaryVisualEffects += (hook_UpdateAllTemporaryVisualEffects)obj;
			object obj2 = <>O.<23>__HypnoBauble_RemoveBuff_BuffIndex;
			if (obj2 == null)
			{
				hook_RemoveBuff_BuffIndex val2 = HypnoBauble_RemoveBuff_BuffIndex;
				<>O.<23>__HypnoBauble_RemoveBuff_BuffIndex = val2;
				obj2 = (object)val2;
			}
			CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj2;
			return 0;
		}

		private static void HypnoBauble_UpdateAllTemporaryVisualEffects(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			self.UpdateSingleTemporaryVisualEffect(ref self.voidJailerSlowEffectInstance, AssetReferences.voidJailerSlowEffectPrefab, self.radius, self.HasBuff(Buffs.JailerSlow) || self.HasBuff(BuffFactory.HypnoBaubleBuff.buffIndex), "");
		}

		private static void HypnoBauble_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, buffType);
			if (buffType == BuffFactory.HypnoBaubleBuff.buffIndex)
			{
				self.baseMoveSpeed *= -1f;
			}
		}

		private static void HypnoBauble_onServerDamageDealt(DamageReport report)
		{
			//IL_0060: 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)
			if (report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || report.damageInfo == null || (Object)(object)report.victimBody == (Object)null)
			{
				return;
			}
			CharacterBody victimBody = report.victimBody;
			Inventory inventory = report.attackerMaster.inventory;
			int itemCount = inventory.GetItemCount(HypnoBauble.itemIndex);
			if (itemCount > 0)
			{
				float damage = report.damageInfo.damage;
				if (Util.CheckRoll(5f * (float)itemCount * report.damageInfo.procCoefficient, report.attackerMaster))
				{
					victimBody.baseMoveSpeed *= -1f;
					victimBody.AddTimedBuff(BuffFactory.HypnoBaubleBuff.buffIndex, 1f + 0.5f * (float)itemCount);
				}
			}
		}

		public static ItemDef InitiateIllumination()
		{
			Illumination = CreateItem("ILLUMINATION", ItemTierFactory.hallowedTier2, AssetFactory.IlluminationAssets.icon, AssetFactory.IlluminationAssets.pickup, canRemove: true, hidden: false, null, IlluminationEffect, (ItemTag[])(object)new ItemTag[2]
			{
				(ItemTag)3,
				(ItemTag)11
			});
			return Illumination;
		}

		private static int IlluminationEffect()
		{
			GlobalEventManager.onServerDamageDealt += Illumination_onServerDamageDealt;
			GlobalEventManager.onCharacterDeathGlobal += Illumination_onServerDamageDealt;
			return 0;
		}

		private static void Illumination_onServerDamageDealt(DamageReport report)
		{
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: 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_018c: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: 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)
			//IL_025e: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			if (!NetworkServer.active || report == null || (Object)(object)report.attackerMaster == (Object)null || (Object)(object)report.attackerMaster.inventory == (Object)null || (Object)(object)report.attackerBody == (Object)null || report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)report.victimBody == (Object)null)
			{
				return;
			}
			Inventory inventory = report.attackerMaster.inventory;
			int itemCount = inventory.GetItemCount(Illumination.itemIndex);
			int buffCount = report.victimBody.GetBuffCount(BuffFactory.IlluminationBuff.buffIndex);
			if (itemCount <= 0 || buffCount > 0)
			{
				return;
			}
			HealthComponent victim = report.victim;
			DamageInfo damageInfo = report.damageInfo;
			float num = victim.health / victim.fullHealth;
			if (Util.CheckRoll(50f * (1f - num) * damageInfo.procCoefficient, report.attackerMaster) || num <= 0f)
			{
				CharacterBody attackerBody = report.attackerBody;
				Vector3 corePosition = report.victimBody.corePosition;
				float num2 = (1.5f + 4f * num) * (1f + 0.7f * (float)itemCount);
				float baseDamage = Util.OnKillProcDamage(attackerBody.damage, num2);
				GameObject val = Object.Instantiate<GameObject>(CommonAssets.explodeOnDeathPrefab, corePosition, Quaternion.identity);
				DelayBlast component = val.GetComponent<DelayBlast>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.position = corePosition;
					component.baseDamage = baseDamage;
					component.baseForce = 2000f;
					component.bonusForce = Vector3.up * 1000f;
					component.radius = 12f + 2.4f * ((float)itemCount - 1f);
					component.attacker = damageInfo.attacker;
					component.inflictor = null;
					component.crit = Util.CheckRoll(attackerBody.crit, report.attackerMaster);
					component.maxTimer = 0.5f;
					component.damageColorIndex = (DamageColorIndex)3;
					component.falloffModel = (FalloffModel)2;
				}
				TeamFilter component2 = val.GetComponent<TeamFilter>();
				if (Object.op_Implicit((Object)(object)component2))
				{
					component2.teamIndex = report.attackerTeamIndex;
				}
				NetworkServer.Spawn(val);
				report.victimBody.AddBuff(BuffFactory.IlluminationBuff.buffIndex);
			}
		}

		public static void InitiateItemFactory()
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Expected O, but got Unknown
			InitiateBenalu();
			InitiateMagnifier();
			InitiateMulticast();
			InitiateDelayedDoom();
			InitiateFlyingFungus();
			InitiateLivingRobot();
			InitiateSacredMissile();
			InitiateFaultyEgo();
			InitiateFaultyEgoConsumed();
			InitiateCatastrophicEra();
			InitiateHypnoBauble();
			InitiateIllumination();
			InitiateGuitar();
			object obj = <>O.<26>__ContagiousItemManager_Init;
			if (obj == null)
			{
				hook_Init val = ContagiousItemManager_Init;
				<>O.<26>__ContagiousItemManager_Init = val;
				obj = (object)val;
			}
			ContagiousItemManager.Init += (hook_Init)obj;
			object obj2 = <>O.<27>__ItemFactory_BuildDropTable;
			if (obj2 == null)
			{
				hook_BuildDropTable val2 = ItemFactory_BuildDropTable;
				<>O.<27>__ItemFactory_BuildDropTable = val2;
				obj2 = (object)val2;
			}
			Run.BuildDropTable += (hook_BuildDropTable)obj2;
		}

		private static void ItemFactory_BuildDropTable(orig_BuildDropTable orig, Run self)
		{
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: 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_00d9: Expected I4, but got Unknown
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			List<ItemDef> list = new List<ItemDef>
			{
				Benalu, Magnifier, Multicast, DelayedDoom, FlyingFungus, LivingRobot, SacredMissile, FaultyEgo, CatastrophicEra, HypnoBauble,
				Illumination, Guitar
			};
			foreach (ItemDef item in list)
			{
				List<PickupIndex> list2 = null;
				ItemTier tier = item.tier;
				ItemTier val = tier;
				switch (val - 1024)
				{
				case 0:
					list2 = self.availableVoidTier1DropList;
					break;
				case 1:
					list2 = self.availableVoidTier2DropList;
					break;
				case 2:
					list2 = self.availableVoidTier3DropList;
					break;
				}
				if (list2 != null && item.DoesNotContainTag((ItemTag)9))
				{
					list2.Add(PickupCatalog.FindPickupIndex(item.itemIndex));
				}
			}
		}

		private static void ContagiousItemManager_Init(orig_Init orig)
		{
			InitiateContaminationPairs();
			List<Pair> list = new List<Pair>();
			list.AddRange(itemPairs);
			list.AddRange(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem]);
			ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = list.ToArray();
			orig.Invoke();
		}

		public static ItemDef CreateItem(string itemToken, ItemTierDef tier, Sprite pickupIconSprite, GameObject pickupModelPrefab, bool canRemove, bool hidden, ItemDisplayRuleDict displayRule, Func<int> effect, ItemTag[] tags)
		{
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Expected O, but got Unknown
			ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
			((Object)val).name = modNameCode + "_" + itemToken + "_NAME";
			val.nameToken = modNameCode + "_" + itemToken + "_NAME_TOKEN";
			val.pickupToken = modNameCode + "_" + itemToken + "_PICKUP";
			val.descriptionToken = modNameCode + "_" + itemToken + "_DESC";
			val.loreToken = modNameCode + "_" + itemToken + "_LORE";
			val._itemTierDef = tier;
			val.pickupIconSprite = pickupIconSprite;
			val.pickupModelPrefab = pickupModelPrefab;
			val.canRemove = canRemove;
			val.hidden = hidden;
			val.tags = tags;
			ItemAPI.Add(new CustomItem(val, displayRule));
			effect();
			return val;
		}

		public static ItemDef CreateItem(string itemToken, ItemTier tier, Sprite pickupIconSprite, GameObject pickupModelPrefab, bool canRemove, bool hidden, ItemDisplayRuleDict displayRule, Func<int> effect, ItemTag[] tags)
		{
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Expected O, but got Unknown
			ItemDef val = ScriptableObject.CreateInstance<ItemDef>();
			((Object)val).name = modNameCode + "_" + itemToken + "_NAME";
			val.nameToken = modNameCode + "_" + itemToken + "_NAME_TOKEN";
			val.pickupToken = modNameCode + "_" + itemToken + "_PICKUP";
			val.descriptionToken = modNameCode + "_" + itemToken + "_DESC";
			val.loreToken = modNameCode + "_" + itemToken + "_LORE";
			val.tier = tier;
			val.pickupIconSprite = pickupIconSprite;
			val.pickupModelPrefab = pickupModelPrefab;
			val.canRemove = canRemove;
			val.hidden = hidden;
			val.tags = tags;
			ItemAPI.Add(new CustomItem(val, displayRule));
			effect();
			return val;
		}

		private static void AddContaminationPair(ItemDef contaminated, ItemDef contaminator)
		{
			//IL_0003: 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_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			Pair val = default(Pair);
			val.itemDef1 = contaminated;
			val.itemDef2 = contaminator;
			Pair item = val;
			itemPairs.Add(item);
		}

		private static void InitiateContaminationPairs()
		{
			AddContaminationPair(Items.Clover, Benalu);
			AddContaminationPair(Items.BleedOnHit, DelayedDoom);
			AddContaminationPair(Items.CritGlasses, Magnifier);
			AddContaminationPair(Items.EquipmentMagazine, Multicast);
			AddContaminationPair(Items.Mushroom, FlyingFungus);
			AddContaminationPair(Items.Missile, SacredMissile);
			AddContaminationPair(Items.ScrapRed, LivingRobot);
			AddContaminationPair(Items.ScrapYellow, LivingRobot);
			AddContaminationPair(Items.ExtraLife, FaultyEgo);
			AddContaminationPair(Items.Bear, CatastrophicEra);
			AddContaminationPair(Items.SlowOnHit, HypnoBauble);
			AddContaminationPair(Items.ExplodeOnDeath, Illumination);
			AddContaminationPair(Items.ChainLightning, Guitar);
		}

		public static ItemDef InitiateLivingRobot()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			LivingRobot = CreateItem("LIVINGROBOT", ItemTierFactory.hallowedTier3, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/texMegaCrabItem.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/PickupMegaCrabItem.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, LivingRobotEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 });
			return LivingRobot;
		}

		private static int LivingRobotEffect()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			CharacterBody.onBodyInventoryChangedGlobal += LivingRobot_onBodyInventoryChangedGlobal;
			object obj = <>O.<30>__LivingRobot_GetDeployableSameSlotLimit;
			if (obj == null)
			{
				hook_GetDeployableSameSlotLimit val = LivingRobot_GetDeployableSameSlotLimit;
				<>O.<30>__LivingRobot_GetDeployableSameSlotLimit = val;
				obj = (object)val;
			}
			CharacterMaster.GetDeployableSameSlotLimit += (hook_GetDeployableSameSlotLimit)obj;
			return 0;
		}

		private static void LivingRobot_onBodyInventoryChangedGlobal(CharacterBody cb)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			Inventory inventory = cb.inventory;
			if ((Object)(object)inventory != (Object)null)
			{
				cb.AddItemBehavior<LivingRobotBehavior>(inventory.GetItemCount(LivingRobot.itemIndex));
			}
		}

		private static int LivingRobot_GetDeployableSameSlotLimit(orig_GetDeployableSameSlotLimit orig, CharacterMaster self, DeployableSlot slot)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (slot == LivingRobotBehavior.dsLivingRobot)
			{
				return LivingRobotBehavior.GetMaxProjectiles(self.inventory);
			}
			return orig.Invoke(self, slot);
		}

		public static ItemDef InitiateMagnifier()
		{
			Magnifier = CreateItem("TWOTAP", ItemTierFactory.hallowedTier1, AssetFactory.MagnifierAssets.icon, AssetFactory.MagnifierAssets.pickup, canRemove: true, hidden: false, null, MagnifierEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 });
			return Magnifier;
		}

		public static int MagnifierEffect()
		{
			GlobalEventManager.onServerDamageDealt += Magnifier_OnServerDamageDealt;
			return 0;
		}

		private static void Magnifier_OnServerDamageDealt(DamageReport report)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Expected O, but got Unknown
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			HealthComponent victim = report.victim;
			CharacterMaster attackerMaster = report.attackerMaster;
			if ((Object)(object)attackerMaster == (Object)null)
			{
				return;
			}
			Inventory component = ((Component)attackerMaster).GetComponent<Inventory>();
			if ((Object)(object)victim != (Object)null && (Object)(object)component != (Object)null)
			{
				DamageInfo damageInfo = report.damageInfo;
				int itemCount = component.GetItemCount(Magnifier.itemIndex);
				float num = Math.Min((float)(5 + 5 * itemCount) * damageInfo.procCoefficient, 90f);
				if (itemCount > 0 && Util.CheckRoll(num, attackerMaster))
				{
					DamageInfo val = new DamageInfo();
					val.procCoefficient = damageInfo.procCoefficient / 2f;
					val.damage = damageInfo.damage / 4f;
					val.crit = true;
					val.position = damageInfo.position;
					val.force = damageInfo.force;
					val.attacker = damageInfo.attacker;
					val.canRejectForce = damageInfo.canRejectForce;
					val.damageColorIndex = damageInfo.damageColorIndex;
					val.damageType = damageInfo.damageType;
					val.delayedDamageSecondHalf = damageInfo.delayedDamageSecondHalf;
					val.dotIndex = damageInfo.dotIndex;
					val.rejected = damageInfo.rejected;
					val.inflictor = damageInfo.inflictor;
					victim.TakeDamage(val);
				}
			}
		}

		public static ItemDef InitiateMulticast()
		{
			Multicast = CreateItem("MULTICAST", ItemTierFactory.hallowedTier2, AssetFactory.OgreCellAssets.icon, AssetFactory.OgreCellAssets.pickup, canRemove: true, hidden: false, null, MulticastEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 });
			return Multicast;
		}

		public static int MulticastEffect()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			EquipmentSlot.onServerEquipmentActivated += Multicast_onServerEquipmentActivated;
			object obj = <>O.<35>__Multicast_RemoveBuff_BuffIndex;
			if (obj == null)
			{
				hook_RemoveBuff_BuffIndex val = Multicast_RemoveBuff_BuffIndex;
				<>O.<35>__Multicast_RemoveBuff_BuffIndex = val;
				obj = (object)val;
			}
			CharacterBody.RemoveBuff_BuffIndex += (hook_RemoveBuff_BuffIndex)obj;
			return 0;
		}

		private static void Multicast_RemoveBuff_BuffIndex(orig_RemoveBuff_BuffIndex orig, CharacterBody self, BuffIndex buffType)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: 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)
			if (buffType == BuffFactory.DoublecastBuff.buffIndex || buffType == BuffFactory.TriplecastBuff.buffIndex)
			{
				EquipmentSlot equipmentSlot = self.equipmentSlot;
				if ((Object)(object)equipmentSlot != (Object)null)
				{
					equipmentSlot.Execute();
				}
			}
			if (buffType == BuffFactory.TriplecastBuff.buffIndex)
			{
				self.AddTimedBuff(BuffFactory.DoublecastBuff.buffIndex, 0.5f);
			}
			orig.Invoke(self, buffType);
		}

		private static void Multicast_onServerEquipmentActivated(EquipmentSlot slot, EquipmentIndex index)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: 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_009d: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody characterBody = slot.characterBody;
			Inventory inventory = characterBody.inventory;
			CharacterMaster master = characterBody.master;
			int itemCount = inventory.GetItemCount(Multicast.itemIndex);
			if (characterBody.HasBuff(BuffFactory.DoublecastBuff.buffIndex) || characterBody.HasBuff(BuffFactory.TriplecastBuff.buffIndex) || itemCount <= 0)
			{
				return;
			}
			float num = 40f + 10f * (float)itemCount;
			if (Util.CheckRoll(num, master))
			{
				float num2 = 20f + 5f * (float)itemCount;
				if (Util.CheckRoll(num2, master))
				{
					characterBody.AddTimedBuff(BuffFactory.TriplecastBuff.buffIndex, 0.5f);
				}
				else
				{
					characterBody.AddTimedBuff(BuffFactory.DoublecastBuff.buffIndex, 0.5f);
				}
			}
		}

		public static ItemDef InitiateSacredMissile()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			SacredMissile = CreateItem("SACREDMISSILE", ItemTierFactory.hallowedTier2, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MissileVoid/texMissileLauncherVoidIcon.png").WaitForCompletion(), Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MissileVoid/PickupMissileLauncherVoid.prefab").WaitForCompletion(), canRemove: true, hidden: false, null, SacredMissileEffect, (ItemTag[])(object)new ItemTag[1] { (ItemTag)1 });
			return SacredMissile;
		}

		public static int SacredMissileEffect()
		{
			GlobalEventManager.onServerDamageDealt += SacredMissile_onServerDamageDealt;
			return 0;
		}

		private static void SacredMissile_onServerDamageDealt(DamageReport report)
		{
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Expected O, but got Unknown
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: 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_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			if (report.damageInfo == null || (Object)(object)report.victim == (Object)null || (Object)(object)((Component)report.victim).gameObject == (Object)null)
			{
				return;
			}
			DamageInfo damageInfo = report.damageInfo;
			GameObject gameObject = ((Component)report.victim).gameObject;
			GameObject attacker = damageInfo.attacker;
			if ((Object)(object)attacker == (Object)null)
			{
				return;
			}
			CharacterBody component = attacker.GetComponent<CharacterBody>();
			if (!Object.op_Implicit((Object)(object)component))
			{
				return;
			}
			CharacterMaster master = component.master;
			if (!Object.op_Implicit((Object)(object)master))
			{
				return;
			}
			Inventory inventory = master.inventory;
			if (((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)1))
			{
				return;
			}
			int itemCount = inventory.GetItemCount(SacredMissile.itemIndex);
			if (itemCount > 0)
			{
				float num = component.healthComponent.health / component.maxHealth;
				if (num > 0.91f && Util.CheckRoll(100f * damageInfo.procCoefficient, master))
				{
					float num2 = 0.7f * (float)itemCount;
					float num3 = Util.OnHitProcDamage(damageInfo.damage, component.damage, num2);
					GameObject missilePrefab = CommonAssets.missilePrefab;
					MissileUtils.FireMissile(component.corePosition, component, damageInfo.procChainMask, gameObject, num3, damageInfo.crit, missilePrefab, (DamageColorIndex)3, true);
					DamageInfo val = new DamageInfo();
					val.damage = component.maxHealth / 40f;
					val.crit = false;
					val.position = component.corePosition;
					val.rejected = false;
					val.procChainMask = default(ProcChainMask);
					val.procCoefficient = 0f;
					val.damageType = DamageTypeCombo.Generic;
					val.damageColorIndex = (DamageColorIndex)0;
					component.healthComponent.TakeDamage(val);
				}
			}
		}
	}
}
namespace HallowedPlugin.CustomBehavior
{
	public class CustomBehaviorInitiator
	{
		public static void Initiate()
		{
			EqualContamination.InitiateEqualContamination();
		}
	}
	internal class EqualContamination
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_GiveItem_ItemIndex_int <0>__Inventory_GiveItem_ItemIndex_int;

			public static hook_Init <1>__ContagiousItemManager_Init;
		}

		private static Dictionary<ItemIndex, List<ItemIndex>> transformedToOriginal = new Dictionary<ItemIndex, List<ItemIndex>>();

		private static List<ItemIndex> toBeCheckedIndex = new List<ItemIndex>();

		public static void InitiateEqualContamination()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			object obj = <>O.<0>__Inventory_GiveItem_ItemIndex_int;
			if (obj == null)
			{
				hook_GiveItem_ItemIndex_int val = Inventory_GiveItem_ItemIndex_int;
				<>O.<0>__Inventory_GiveItem_ItemIndex_int = val;
				obj = (object)val;
			}
			Inventory.GiveItem_ItemIndex_int += (hook_GiveItem_ItemIndex_int)obj;
			object obj2 = <>O.<1>__ContagiousItemManager_Init;
			if (obj2 == null)
			{
				hook_Init val2 = ContagiousItemManager_Init;
				<>O.<1>__ContagiousItemManager_Init = val2;
				obj2 = (object)val2;
			}
			ContagiousItemManager.Init += (hook_Init)obj2;
		}

		private static void Inventory_GiveItem_ItemIndex_int(orig_GiveItem_ItemIndex_int orig, Inventory self, ItemIndex contaminator, int contaminatorCount)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			if (toBeCheckedIndex.Contains(contaminator))
			{
				transformedToOriginal.TryGetValue(contaminator, out var value);
				foreach (ItemIndex item in value)
				{
					int itemCount = self.GetItemCount(item);
					if (itemCount > 0)
					{
						self.RemoveItem(item, itemCount);
						contaminatorCount += itemCount;
						CharacterMaster component = ((Component)self).GetComponent<CharacterMaster>();
						if (Object.op_Implicit((Object)(object)component))
						{
							CharacterMasterNotificationQueue.SendTransformNotification(component, item, contaminator, (TransformationType)1);
						}
					}
				}
			}
			orig.Invoke(self, contaminator, contaminatorCount);
		}

		private static void ContagiousItemManager_Init(orig_Init orig)
		{
			InitiateContaminationPairs();
			orig.Invoke();
		}

		private static void InitiateContaminationPairs()
		{
			AddContaminationPair(Items.CloverVoid, ItemFactory.Benalu);
			AddContaminationPair(Items.BleedOnHitVoid, ItemFactory.DelayedDoom);
			AddContaminationPair(Items.CritGlassesVoid, ItemFactory.Magnifier);
			AddContaminationPair(Items.EquipmentMagazineVoid, ItemFactory.Multicast);
			AddContaminationPair(Items.MushroomVoid, ItemFactory.FlyingFungus);
			AddContaminationPair(Items.VoidMegaCrabItem, ItemFactory.LivingRobot);
			AddContaminationPair(Items.MissileVoid, ItemFactory.SacredMissile);
			AddContaminationPair(Items.ExtraLifeVoid, ItemFactory.FaultyEgo);
			AddContaminationPair(Items.ElementalRingVoid, Items.FireRing);
			AddContaminationPair(Items.ElementalRingVoid, Items.IceRing);
			AddContaminationPair(Items.BearVoid, ItemFactory.CatastrophicEra);
			AddContaminationPair(Items.SlowOnHitVoid, ItemFactory.HypnoBauble);
			AddContaminationPair(Items.ExplodeOnDeathVoid, ItemFactory.Illumination);
			AddContaminationPair(Items.ChainLightningVoid, ItemFactory.Guitar);
		}

		private static void AddContaminationPair(ItemDef itemDef1, ItemDef itemDef2)
		{
			//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_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			ItemIndex val = ItemCatalog.FindItemIndex(((Object)itemDef1).name);
			ItemIndex val2 = ItemCatalog.FindItemIndex(((Object)itemDef2).name);
			List<ItemIndex> value = null;
			if (transformedToOriginal.TryGetValue(val, out value))
			{
				value.Add(val2);
				transformedToOriginal[val] = value;
			}
			else
			{
				transformedToOriginal.Add(val, new List<ItemIndex> { val2 });
			}
			List<ItemIndex> value2 = null;
			if (transformedToOriginal.TryGetValue(val2, out value2))
			{
				value.Add(val);
				transformedToOriginal[val2] = value2;
			}
			else
			{
				transformedToOriginal.Add(val2, new List<ItemIndex> { val });
			}
			toBeCheckedIndex.Add(val);
			toBeCheckedIndex.Add(val2);
		}
	}
}
namespace HallowedPlugin.Buffs
{
	public class BuffFactory
	{
		public static BuffDef affixHallowedBuff;

		public static BuffDef CatastrophicEraBuff;

		public static BuffDef CatastrophicEraLongerBuff;

		public static BuffDef CatastrophicEraCooldownBuff;

		public static BuffDef DelayedDoomBuff;

		public static BuffDef FaultyEgoBuff;

		public static BuffDef BurntFaultyEgoBuff;

		public static BuffDef FlyingFungusBuff;

		public static BuffDef GuitarBuff;

		public static BuffDef HypnoBaubleBuff;

		public static BuffDef IlluminationBuff;

		public static BuffDef DoublecastBuff;

		public static BuffDef TriplecastBuff;

		public static BuffDef CreateAffixHallowedBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			affixHallowedBuff = CreateBuff("AffixHallowed", isDebuff: false, Color.yellow, canStack: false, null, isHidden: true);
			GlobalEventManager.onCharacterDeathGlobal += AffixHallowedBuff_onCharacterDeathGlobal;
			EliteDef val = ScriptableObject.CreateInstance<EliteDef>();
			return affixHallowedBuff;
		}

		private static void AffixHallowedBuff_onCharacterDeathGlobal(DamageReport obj)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			CharacterBody victimBody = obj.victimBody;
			if (victimBody.HasBuff(affixHallowedBuff.buffIndex))
			{
				Transform component = ((Component)victimBody).GetComponent<Transform>();
				if ((Object)(object)component != (Object)null)
				{
					Vector3 val = Vector3.up * 1.5f + component.position;
					Vector3 val2 = Vector3.up * 1.5f + Vector3.forward * 1.5f;
					PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(ItemFactory.Magnifier.itemIndex), val, val2);
				}
			}
		}

		public static void InitiateBuffFactory()
		{
			CreateDoublecastBuff();
			CreateTriplecastBuff();
			CreateDelayedDoomBuff();
			CreateFlyingFungusBuff();
			CreateFaultyEgoBuff();
			CreateCatastrophicEraBuff();
			CreateHypnoBaubleBuff();
			CreateIlluminationBuff();
			CreateGuitarBuff();
		}

		public static BuffDef CreateBuff(string name, bool isDebuff, Color buffColor, bool canStack, Sprite iconSprite, bool isHidden)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			BuffDef val = ScriptableObject.CreateInstance<BuffDef>();
			((Object)val).name = name;
			val.isDebuff = isDebuff;
			val.buffColor = buffColor;
			val.canStack = canStack;
			val.iconSprite = iconSprite;
			val.isHidden = isHidden;
			ContentAddition.AddBuffDef(val);
			return val;
		}

		public static BuffDef CreateCatastrophicEraBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			CatastrophicEraBuff = CreateBuff("Hallowed: Catastrophic Era Buff", isDebuff: false, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false);
			CatastrophicEraLongerBuff = CreateBuff("Hallowed: Catastrophic Era Buff, but longer", isDebuff: false, Color.white, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false);
			CatastrophicEraCooldownBuff = CreateBuff("Hallowed: Catastrophic Era Cooldown Buff", isDebuff: false, Color.gray, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/BearVoid/texBuffBearVoidReady.tif").WaitForCompletion(), isHidden: false);
			return CatastrophicEraBuff;
		}

		public static BuffDef CreateDelayedDoomBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			DelayedDoomBuff = CreateBuff("Hallowed: Delayed Doom countdown", isDebuff: true, Color.black, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Bandit2/texBuffBanditSkullIcon.tif").WaitForCompletion(), isHidden: false);
			return DelayedDoomBuff;
		}

		public static BuffDef CreateFaultyEgoBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			FaultyEgoBuff = CreateBuff("Hallowed: E.G.O!", isDebuff: false, Color.blue, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion(), isHidden: false);
			BurntFaultyEgoBuff = CreateBuff("Hallowed: Burnt E.G.O", isDebuff: false, Color.black, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBuffOnFireIcon.tif").WaitForCompletion(), isHidden: false);
			return FaultyEgoBuff;
		}

		public static BuffDef CreateFlyingFungusBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			FlyingFungusBuff = CreateBuff("Hallowed: Healing flight", isDebuff: false, Color.yellow, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: false);
			return FlyingFungusBuff;
		}

		public static BuffDef CreateGuitarBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			GuitarBuff = CreateBuff("Hallowed: Guitar Buff", isDebuff: false, Color.yellow, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/ShockNearby/texBuffTeslaIcon.tif").WaitForCompletion(), isHidden: true);
			return GuitarBuff;
		}

		public static BuffDef CreateHypnoBaubleBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			HypnoBaubleBuff = CreateBuff("Hallowed: Fypno Bauble Buff", isDebuff: true, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: true);
			return HypnoBaubleBuff;
		}

		public static BuffDef CreateIlluminationBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			IlluminationBuff = CreateBuff("Hallowed: Illumination Buff", isDebuff: false, Color.yellow, canStack: false, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/MushroomVoid/texBuffMushroomVoidIcon.tif").WaitForCompletion(), isHidden: true);
			return IlluminationBuff;
		}

		public static BuffDef CreateDoublecastBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			DoublecastBuff = CreateBuff("Hallowed: Doublecast countdown", isDebuff: false, Color.gray, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EnergizedOnEquipmentUse/texBuffWarHornIcon.tif").WaitForCompletion(), isHidden: false);
			return DoublecastBuff;
		}

		public static BuffDef CreateTriplecastBuff()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			TriplecastBuff = CreateBuff("Hallowed: Triplecast countdown", isDebuff: false, Color.white, canStack: true, Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/EnergizedOnEquipmentUse/texBuffWarHornIcon.tif").WaitForCompletion(), isHidden: false);
			return TriplecastBuff;
		}
	}
	public class BuffDefWithAttacker : BuffDef
	{
		public GameObject attacker;

		public BuffDefWithAttacker()
		{
			attacker = null;
		}

		public BuffDefWithAttacker(GameObject attacker)
		{
			this.attacker = attacker;
		}
	}
}
namespace HallowedPlugin.Assets
{
	internal static class AssetFactory
	{
		internal struct ItemAssets
		{
			public GameObject pickup;

			public Sprite icon;
		}

		internal static ItemAssets OgreCellAssets;

		internal static ItemAssets MagnifierAssets;

		internal static ItemAssets FFungusAssets;

		internal static ItemAssets IlluminationAssets;

		internal static void InitiateAssets()
		{
			using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HallowedPlugin.hallowedmod");
			AssetBundle val = AssetBundle.LoadFromStream(stream);
			OgreCellAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/OgreCell/OgreCellPickup.prefab");
			OgreCellAssets.icon = val.LoadAsset<Sprite>("Assets/Import/OgreCell/OgreCellIcon.png");
			MagnifierAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/Magnifier/MagnifierPickup.prefab");
			MagnifierAssets.icon = val.LoadAsset<Sprite>("Assets/Import/Magnifier/MagnifierIcon.png");
			FFungusAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/FFungus/FFungusPickup.prefab");
			FFungusAssets.icon = val.LoadAsset<Sprite>("Assets/Import/FFungus/FFungusIcon.png");
			IlluminationAssets.pickup = val.LoadAsset<GameObject>("Assets/Import/InnerFlame/InnerFlamePickup.prefab");
			IlluminationAssets.icon = val.LoadAsset<Sprite>("Assets/Import/InnerFlame/InnerFlameIcon.png");
		}
	}
}