Decompiled source of RiskOfTheAncients2 v2.0.2

ROTA2.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HG;
using KinematicCharacterController;
using LookingGlass.ItemStatsNameSpace;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.Items;
using On.RoR2.UI;
using R2API;
using ROTA2.Buffs;
using ROTA2.Equipment;
using ROTA2.Items;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2.Skills;
using RoR2.UI;
using RoR2BepInExPack.GameAssetPaths;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ROTA2")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+e568045bb0a6ac5d9c04ea45798c72b0f7144753")]
[assembly: AssemblyProduct("ROTA2")]
[assembly: AssemblyTitle("ROTA2")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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;
		}
	}
}
internal class Utils
{
	public static float CalculateChanceWithLuck(float baseChance, float luckIn)
	{
		float num = Mathf.Floor(baseChance);
		float num2 = baseChance % 1f;
		int num3 = Mathf.CeilToInt(luckIn);
		if (num3 > 0)
		{
			return num + (1f - Mathf.Pow(1f - num2, (float)(num3 + 1)));
		}
		if (num3 < 0)
		{
			return num + Mathf.Pow(num2, (float)(Mathf.Abs(num3) + 1));
		}
		return baseChance;
	}

	public static float GetExponentialRechargeTime(float baseCooldown, float extraPercent, int count)
	{
		return baseCooldown * Mathf.Pow(1f - extraPercent, (float)(count - 1));
	}

	public static float GetExponentialStacking(float basePercent, float extraPercent, int count)
	{
		return 1f - (1f - basePercent) * Mathf.Pow(1f - extraPercent, (float)(count - 1));
	}

	public static float GetHyperbolicStacking(float basePercent, float extraPercent, int count)
	{
		return 1f - 1f / (1f + basePercent + extraPercent * (float)(count - 1));
	}
}
namespace ROTA2
{
	public static class Compatibility
	{
		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void LookingGlassCompatibility()
		{
			//IL_001b: 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_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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: 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_007c: Expected O, but got Unknown
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: 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_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ee: Expected O, but got Unknown
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Expected O, but got Unknown
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_024b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			//IL_0263: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Expected O, but got Unknown
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Unknown result type (might be due to invalid IL or missing references)
			//IL_0307: Unknown result type (might be due to invalid IL or missing references)
			//IL_0309: Unknown result type (might be due to invalid IL or missing references)
			//IL_030e: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0297: Expected O, but got Unknown
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0358: Unknown result type (might be due to invalid IL or missing references)
			//IL_0368: Unknown result type (might be due to invalid IL or missing references)
			//IL_0374: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_0338: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Expected O, but got Unknown
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_0411: Unknown result type (might be due to invalid IL or missing references)
			//IL_041d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Expected O, but got Unknown
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			//IL_0467: Unknown result type (might be due to invalid IL or missing references)
			//IL_0477: Unknown result type (might be due to invalid IL or missing references)
			//IL_0483: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0447: Unknown result type (might be due to invalid IL or missing references)
			//IL_0451: Expected O, but got Unknown
			//IL_04d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0501: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c3: Expected O, but got Unknown
			//IL_0549: Unknown result type (might be due to invalid IL or missing references)
			//IL_054e: Unknown result type (might be due to invalid IL or missing references)
			//IL_055e: Unknown result type (might be due to invalid IL or missing references)
			//IL_056a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0576: Unknown result type (might be due to invalid IL or missing references)
			//IL_0586: Unknown result type (might be due to invalid IL or missing references)
			//IL_0592: Unknown result type (might be due to invalid IL or missing references)
			//IL_059e: Unknown result type (might be due to invalid IL or missing references)
			//IL_052b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Expected O, but got Unknown
			//IL_05e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0607: Unknown result type (might be due to invalid IL or missing references)
			//IL_0613: Unknown result type (might be due to invalid IL or missing references)
			//IL_0623: Unknown result type (might be due to invalid IL or missing references)
			//IL_062f: Unknown result type (might be due to invalid IL or missing references)
			//IL_063b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0642: Unknown result type (might be due to invalid IL or missing references)
			//IL_0644: Unknown result type (might be due to invalid IL or missing references)
			//IL_0649: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Expected O, but got Unknown
			//IL_068e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0693: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_06af: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0673: Unknown result type (might be due to invalid IL or missing references)
			//IL_067d: Expected O, but got Unknown
			//IL_0700: Unknown result type (might be due to invalid IL or missing references)
			//IL_0705: Unknown result type (might be due to invalid IL or missing references)
			//IL_0715: Unknown result type (might be due to invalid IL or missing references)
			//IL_0721: Unknown result type (might be due to invalid IL or missing references)
			//IL_072d: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Expected O, but got Unknown
			//IL_0772: Unknown result type (might be due to invalid IL or missing references)
			//IL_0777: Unknown result type (might be due to invalid IL or missing references)
			//IL_0787: Unknown result type (might be due to invalid IL or missing references)
			//IL_0793: Unknown result type (might be due to invalid IL or missing references)
			//IL_079f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0757: Unknown result type (might be due to invalid IL or missing references)
			//IL_0761: Expected O, but got Unknown
			//IL_07e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0808: Unknown result type (might be due to invalid IL or missing references)
			//IL_0814: Unknown result type (might be due to invalid IL or missing references)
			//IL_0824: Unknown result type (might be due to invalid IL or missing references)
			//IL_0830: Unknown result type (might be due to invalid IL or missing references)
			//IL_083c: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d3: Expected O, but got Unknown
			//IL_0884: Unknown result type (might be due to invalid IL or missing references)
			//IL_0889: Unknown result type (might be due to invalid IL or missing references)
			//IL_0899: Unknown result type (might be due to invalid IL or missing references)
			//IL_08a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0866: Unknown result type (might be due to invalid IL or missing references)
			//IL_0870: Expected O, but got Unknown
			//IL_0921: Unknown result type (might be due to invalid IL or missing references)
			//IL_0926: Unknown result type (might be due to invalid IL or missing references)
			//IL_0936: Unknown result type (might be due to invalid IL or missing references)
			//IL_0942: Unknown result type (might be due to invalid IL or missing references)
			//IL_094e: Unknown result type (might be due to invalid IL or missing references)
			//IL_095e: Unknown result type (might be due to invalid IL or missing references)
			//IL_096a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0976: Unknown result type (might be due to invalid IL or missing references)
			//IL_0903: Unknown result type (might be due to invalid IL or missing references)
			//IL_090d: Expected O, but got Unknown
			//IL_09be: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09df: Unknown result type (might be due to invalid IL or missing references)
			//IL_09eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a07: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a13: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a21: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09aa: Expected O, but got Unknown
			//IL_0a69: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a8a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0abe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a55: Expected O, but got Unknown
			//IL_0b06: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b0b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b1b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b27: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b33: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af2: Expected O, but got Unknown
			//IL_0ba0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ba5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bcd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b8f: Expected O, but got Unknown
			//IL_0c12: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c27: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c33: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c01: Expected O, but got Unknown
			//IL_0c84: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c89: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c99: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c69: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c73: Expected O, but got Unknown
			//IL_0cf9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cfe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d0e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d26: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d36: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d42: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d4e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cdb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce5: Expected O, but got Unknown
			//IL_0d96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d9b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ddf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0deb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d78: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d82: Expected O, but got Unknown
			//IL_0e33: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e38: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e48: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e54: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e60: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e70: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e88: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e15: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e1f: Expected O, but got Unknown
			//IL_0ecd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ed2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0efa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eb2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ebc: Expected O, but got Unknown
			//IL_0f3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f54: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f60: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f6c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f24: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f2e: Expected O, but got Unknown
			//IL_0fb1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fb6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fc6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fdf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f96: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa0: Expected O, but got Unknown
			//IL_1024: Unknown result type (might be due to invalid IL or missing references)
			//IL_1029: Unknown result type (might be due to invalid IL or missing references)
			//IL_1039: Unknown result type (might be due to invalid IL or missing references)
			//IL_1045: Unknown result type (might be due to invalid IL or missing references)
			//IL_1051: Unknown result type (might be due to invalid IL or missing references)
			//IL_1058: Unknown result type (might be due to invalid IL or missing references)
			//IL_105a: Unknown result type (might be due to invalid IL or missing references)
			//IL_105f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1009: Unknown result type (might be due to invalid IL or missing references)
			//IL_1013: Expected O, but got Unknown
			//IL_10a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_10a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_10b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_10c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_10d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1089: Unknown result type (might be due to invalid IL or missing references)
			//IL_1093: Expected O, but got Unknown
			//IL_1116: Unknown result type (might be due to invalid IL or missing references)
			//IL_111b: Unknown result type (might be due to invalid IL or missing references)
			//IL_112b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1137: Unknown result type (might be due to invalid IL or missing references)
			//IL_1143: Unknown result type (might be due to invalid IL or missing references)
			//IL_10fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1105: Expected O, but got Unknown
			//IL_118b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1190: Unknown result type (might be due to invalid IL or missing references)
			//IL_11a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_11ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_11b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_11e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_11f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_11fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_1208: Unknown result type (might be due to invalid IL or missing references)
			//IL_1218: Unknown result type (might be due to invalid IL or missing references)
			//IL_1224: Unknown result type (might be due to invalid IL or missing references)
			//IL_1230: Unknown result type (might be due to invalid IL or missing references)
			//IL_116d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1177: Expected O, but got Unknown
			//IL_1278: Unknown result type (might be due to invalid IL or missing references)
			//IL_127d: Unknown result type (might be due to invalid IL or missing references)
			//IL_128d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1299: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_12b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_12cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_12dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_12e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_12f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_125a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1264: Expected O, but got Unknown
			//IL_133d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1342: Unknown result type (might be due to invalid IL or missing references)
			//IL_1352: Unknown result type (might be due to invalid IL or missing references)
			//IL_135e: Unknown result type (might be due to invalid IL or missing references)
			//IL_136a: Unknown result type (might be due to invalid IL or missing references)
			//IL_137a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1386: Unknown result type (might be due to invalid IL or missing references)
			//IL_1392: Unknown result type (might be due to invalid IL or missing references)
			//IL_131f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1329: Expected O, but got Unknown
			//IL_13da: Unknown result type (might be due to invalid IL or missing references)
			//IL_13df: Unknown result type (might be due to invalid IL or missing references)
			//IL_13ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_13fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_1407: Unknown result type (might be due to invalid IL or missing references)
			//IL_1417: Unknown result type (might be due to invalid IL or missing references)
			//IL_1423: Unknown result type (might be due to invalid IL or missing references)
			//IL_142f: Unknown result type (might be due to invalid IL or missing references)
			//IL_13bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c6: Expected O, but got Unknown
			//IL_1477: Unknown result type (might be due to invalid IL or missing references)
			//IL_147c: Unknown result type (might be due to invalid IL or missing references)
			//IL_148c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1498: Unknown result type (might be due to invalid IL or missing references)
			//IL_14a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_14b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_14c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_14cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_14dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_14e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_14f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_1504: Unknown result type (might be due to invalid IL or missing references)
			//IL_1510: Unknown result type (might be due to invalid IL or missing references)
			//IL_151c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1459: Unknown result type (might be due to invalid IL or missing references)
			//IL_1463: Expected O, but got Unknown
			//IL_1564: Unknown result type (might be due to invalid IL or missing references)
			//IL_1569: Unknown result type (might be due to invalid IL or missing references)
			//IL_1575: Unknown result type (might be due to invalid IL or missing references)
			//IL_1585: Unknown result type (might be due to invalid IL or missing references)
			//IL_1591: Unknown result type (might be due to invalid IL or missing references)
			//IL_159d: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_15b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_15d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_15e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_15fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_1609: Unknown result type (might be due to invalid IL or missing references)
			//IL_1615: Unknown result type (might be due to invalid IL or missing references)
			//IL_1546: Unknown result type (might be due to invalid IL or missing references)
			//IL_1550: Expected O, but got Unknown
			//IL_165d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1662: Unknown result type (might be due to invalid IL or missing references)
			//IL_1672: Unknown result type (might be due to invalid IL or missing references)
			//IL_167e: Unknown result type (might be due to invalid IL or missing references)
			//IL_168a: Unknown result type (might be due to invalid IL or missing references)
			//IL_169a: Unknown result type (might be due to invalid IL or missing references)
			//IL_16a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_16b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_16c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_16ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_16da: Unknown result type (might be due to invalid IL or missing references)
			//IL_16ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_16f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_1702: Unknown result type (might be due to invalid IL or missing references)
			//IL_163f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1649: Expected O, but got Unknown
			//IL_174a: Unknown result type (might be due to invalid IL or missing references)
			//IL_174f: Unknown result type (might be due to invalid IL or missing references)
			//IL_175f: Unknown result type (might be due to invalid IL or missing references)
			//IL_176b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1777: Unknown result type (might be due to invalid IL or missing references)
			//IL_1787: Unknown result type (might be due to invalid IL or missing references)
			//IL_1793: Unknown result type (might be due to invalid IL or missing references)
			//IL_179f: Unknown result type (might be due to invalid IL or missing references)
			//IL_17af: Unknown result type (might be due to invalid IL or missing references)
			//IL_17bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_17c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_17d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_17ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_17ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_180b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1817: Unknown result type (might be due to invalid IL or missing references)
			//IL_1827: Unknown result type (might be due to invalid IL or missing references)
			//IL_1833: Unknown result type (might be due to invalid IL or missing references)
			//IL_183f: Unknown result type (might be due to invalid IL or missing references)
			//IL_172c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1736: Expected O, but got Unknown
			//IL_1884: Unknown result type (might be due to invalid IL or missing references)
			//IL_1889: Unknown result type (might be due to invalid IL or missing references)
			//IL_1899: Unknown result type (might be due to invalid IL or missing references)
			//IL_18a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_18b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_1869: Unknown result type (might be due to invalid IL or missing references)
			//IL_1873: Expected O, but got Unknown
			//IL_18db: Unknown result type (might be due to invalid IL or missing references)
			//IL_18e5: Expected O, but got Unknown
			Log.Debug("Adding LookingGlass item definitions.");
			if (Plugin.ItemsEnabled[ItemBase<BootsOfSpeed>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Base Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<BootsOfSpeed>.Instance.MovementSpeedBase.Value + ItemBase<BootsOfSpeed>.Instance.MovementSpeedPerStack.Value * (float)(count - 1) }
				}, ItemBase<BootsOfSpeed>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<EnchantedMango>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Mangos: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { count }
				}, ItemBase<EnchantedMango>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<ConsumedMango>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<ConsumedMango>.Instance.DamageBase.Value / 100f + ItemBase<ConsumedMango>.Instance.DamagePerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<ConsumedMango>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<FairysTrinket>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Cooldown Reduction: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(3)
					{
						Utils.GetExponentialStacking(ItemBase<FairysTrinket>.Instance.SkillCooldownReductionBase.Value / 100f, ItemBase<FairysTrinket>.Instance.SkillCooldownReductionPerStack.Value / 100f, count),
						ItemBase<FairysTrinket>.Instance.DamageBase.Value / 100f + ItemBase<FairysTrinket>.Instance.DamagePerStack.Value / 100f * (float)(count - 1),
						ItemBase<FairysTrinket>.Instance.MaximumHealthBase.Value + ItemBase<FairysTrinket>.Instance.MaximumHealthPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<FairysTrinket>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<HealingSalve>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Total Heal: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)6 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { (ItemBase<HealingSalve>.Instance.MaximumHealthRegenerationBase.Value / 100f + ItemBase<HealingSalve>.Instance.MaximumHealthRegenerationPerStack.Value / 100f * (float)(count - 1)) * ItemBase<HealingSalve>.Instance.BuffDuration.Value }
				}, ItemBase<HealingSalve>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Javelin>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Bonus Hit Chance: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					hasChance = true,
					chanceScaling = (ChanceScaling)2,
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						Utils.CalculateChanceWithLuck(ItemBase<Javelin>.Instance.ProcChance.Value / 100f, luck),
						ItemBase<Javelin>.Instance.DamageBase.Value / 100f + ItemBase<Javelin>.Instance.DamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Javelin>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<OrbOfBlight>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Max Armor Reduction: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<OrbOfBlight>.Instance.ArmorReduction.Value * (float)(ItemBase<OrbOfBlight>.Instance.MaxStacksBase.Value + ItemBase<OrbOfBlight>.Instance.MaxStacksPerStack.Value * (count - 1)) }
				}, ItemBase<OrbOfBlight>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<OrbOfFrost>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Movement Speed Slow: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Attack Speed Slow: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<OrbOfFrost>.Instance.MovementSpeedSlowBase.Value / 100f + ItemBase<OrbOfFrost>.Instance.MovementSpeedSlowPerStack.Value / 100f * (float)(count - 1),
						ItemBase<OrbOfFrost>.Instance.AttackSpeedSlowBase.Value / 100f + ItemBase<OrbOfFrost>.Instance.AttackSpeedSlowPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<OrbOfFrost>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<OrbOfVenom>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Total Poison Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { (ItemBase<OrbOfVenom>.Instance.PoisonDamageBase.Value / 100f + ItemBase<OrbOfVenom>.Instance.PoisonDamagePerStack.Value / 100f * (float)(count - 1)) * ItemBase<OrbOfVenom>.Instance.PoisonDuration.Value }
				}, ItemBase<OrbOfVenom>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<QuellingBlade>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Non-Boss Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<QuellingBlade>.Instance.DamageBase.Value + ItemBase<QuellingBlade>.Instance.DamagePerStack.Value * (float)(count - 1) }
				}, ItemBase<QuellingBlade>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<SparkOfCourage>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Armor: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<SparkOfCourage>.Instance.DamageBase.Value / 100f + ItemBase<SparkOfCourage>.Instance.DamagePerStack.Value / 100f * (float)(count - 1),
						ItemBase<SparkOfCourage>.Instance.ArmorBase.Value + ItemBase<SparkOfCourage>.Instance.ArmorPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<SparkOfCourage>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<DragonScale>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Burn Chance: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Total Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					hasChance = true,
					chanceScaling = (ChanceScaling)2,
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						Utils.CalculateChanceWithLuck(ItemBase<DragonScale>.Instance.ProcChance.Value / 100f, luck),
						ItemBase<DragonScale>.Instance.DamageBase.Value / 100f + ItemBase<DragonScale>.Instance.DamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<DragonScale>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<LanceOfPursuit>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Rear Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<LanceOfPursuit>.Instance.DamageBase.Value / 100f + ItemBase<LanceOfPursuit>.Instance.DamagePerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<LanceOfPursuit>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<IronBranch>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Stats Increase: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<IronBranch>.Instance.StatIncreaseBase.Value / 100f + ItemBase<IronBranch>.Instance.StatIncreasePerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<IronBranch>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<BladesOfAttack>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<BladesOfAttack>.Instance.DamageBase.Value / 100f + ItemBase<BladesOfAttack>.Instance.DamagePerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<BladesOfAttack>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Kaya>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Cooldown Reduction: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						Utils.GetExponentialStacking(ItemBase<Kaya>.Instance.SkillCooldownReductionBase.Value / 100f, ItemBase<Kaya>.Instance.SkillCooldownReductionPerStack.Value / 100f, count),
						ItemBase<Kaya>.Instance.DamageBase.Value / 100f + ItemBase<Kaya>.Instance.DamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Kaya>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Sange>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					descriptions = { "Healing: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)3 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<Sange>.Instance.MaximumHealthBase.Value + ItemBase<Sange>.Instance.MaximumHealthPerStack.Value * (float)(count - 1),
						ItemBase<Sange>.Instance.BaseHealthRegenerationBase.Value + ItemBase<Sange>.Instance.BaseHealthRegenerationPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<Sange>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Yasha>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<Yasha>.Instance.AttackSpeedBase.Value / 100f + ItemBase<Yasha>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<Yasha>.Instance.MovementSpeedBase.Value / 100f + ItemBase<Yasha>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Yasha>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<SkullBasher>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Bash Chance: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					hasChance = true,
					chanceScaling = (ChanceScaling)2,
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						Utils.CalculateChanceWithLuck(ItemBase<SkullBasher>.Instance.ProcChance.Value / 100f, luck),
						ItemBase<SkullBasher>.Instance.DamageBase.Value / 100f + ItemBase<SkullBasher>.Instance.DamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<SkullBasher>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Daedalus>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Crit Chance: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Crit Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						Utils.CalculateChanceWithLuck(ItemBase<Daedalus>.Instance.CriticalChance.Value / 100f, luck),
						ItemBase<Daedalus>.Instance.CriticalDamageBase.Value / 100f + ItemBase<Daedalus>.Instance.CriticalDamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Daedalus>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<QuicksilverAmulet>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Max Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Max Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValues = delegate(CharacterMaster master, int count)
					{
						int num = 0;
						CharacterBody body2 = master.GetBody();
						GenericSkill[] array = ((body2 == null) ? null : body2.skillLocator?.allSkills);
						if (array != null)
						{
							GenericSkill[] array2 = array;
							foreach (GenericSkill val in array2)
							{
								if (Object.op_Implicit((Object)(object)val) && val.baseRechargeInterval > 0f)
								{
									num++;
								}
							}
						}
						return new List<float>(2)
						{
							(ItemBase<QuicksilverAmulet>.Instance.AttackSpeedBase.Value / 100f + ItemBase<QuicksilverAmulet>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1)) * (float)num,
							(ItemBase<QuicksilverAmulet>.Instance.MovementSpeedBase.Value / 100f + ItemBase<QuicksilverAmulet>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1)) * (float)num
						};
					}
				}, ItemBase<QuicksilverAmulet>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<ShadowAmulet>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<ShadowAmulet>.Instance.AttackSpeedBase.Value / 100f + ItemBase<ShadowAmulet>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<ShadowAmulet>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<IronTalon>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { Util.ConvertAmplificationPercentageIntoReductionNormalized(ItemBase<IronTalon>.Instance.HealthDamageBase.Value / 100f + ItemBase<IronTalon>.Instance.HealthDamagePerStack.Value / 100f * (float)(count - 1)) }
				}, ItemBase<IronTalon>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<HeartOfTarrasque>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<HeartOfTarrasque>.Instance.MaximumHealthBase.Value + ItemBase<HeartOfTarrasque>.Instance.MaximumHealthPerStack.Value * (float)(count - 1) }
				}, ItemBase<HeartOfTarrasque>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Radiance>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Ignite Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Burn Total Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<Radiance>.Instance.IgniteBase.Value / 100f + ItemBase<Radiance>.Instance.IgnitePerStack.Value / 100f * (float)(count - 1),
						ItemBase<Radiance>.Instance.BurnBase.Value / 100f + ItemBase<Radiance>.Instance.BurnPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Radiance>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<AeonDisk>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Invulnerability Duration: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)5 },
					descriptions = { "Movement Speed Duration: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)5 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<AeonDisk>.Instance.InvulnerabilityDurationBase.Value + ItemBase<AeonDisk>.Instance.InvulnerabilityDurationPerStack.Value * (float)(count - 1),
						ItemBase<AeonDisk>.Instance.MovementSpeedDurationBase.Value + ItemBase<AeonDisk>.Instance.MovementSpeedDurationPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<AeonDisk>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<AssaultCuirass>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Armor: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<AssaultCuirass>.Instance.AttackSpeedBase.Value / 100f + ItemBase<AssaultCuirass>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<AssaultCuirass>.Instance.ArmorBase.Value + ItemBase<AssaultCuirass>.Instance.ArmorPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<AssaultCuirass>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<BootsOfTravel>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValues = delegate(CharacterMaster master, int count)
					{
						CharacterBody body = master.GetBody();
						return new List<float>(1) { 1f - 1f / (body.moveSpeed / (body.baseMoveSpeed * (1f + ItemBase<BootsOfTravel>.Instance.MovementSpeedBonus.Value / 100f))) * (ItemBase<BootsOfTravel>.Instance.DamageBonusBase.Value / 100f + ItemBase<BootsOfTravel>.Instance.DamageBonusPerStack.Value / 100f * (float)(count - 1)) };
					}
				}, ItemBase<BootsOfTravel>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<ExMachina>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Chance: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = delegate(float luck, int count, float proc)
					{
						float baseChance = 1f - 1f / (1f + 1.5f * (ItemBase<ExMachina>.Instance.RestoreChanceBase.Value / 100f + ItemBase<ExMachina>.Instance.RestoreChancePerStack.Value / 100f * (float)(count - 1)));
						return new List<float>(1) { Utils.CalculateChanceWithLuck(baseChance, luck) };
					}
				}, ItemBase<ExMachina>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<InfusedRaindrops>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage Reduction: " },
					valueTypes = { (ValueType)17 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<InfusedRaindrops>.Instance.DamageBlockBase.Value + ItemBase<InfusedRaindrops>.Instance.DamageBlockPerStack.Value * (float)(count - 1) }
				}, ItemBase<InfusedRaindrops>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<PirateHat>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Scrap Chance: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					hasChance = true,
					chanceScaling = (ChanceScaling)0,
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { Utils.CalculateChanceWithLuck(ItemBase<PirateHat>.Instance.DropChanceBase.Value / 100f + ItemBase<PirateHat>.Instance.DropChancePerStack.Value / 100f * (float)(count - 1), luck) }
				}, ItemBase<PirateHat>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<RefresherOrb>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Restore Cooldown: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)5 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<RefresherOrb>.Instance.RestoreCooldown.Value * MathF.Pow(ItemBase<RefresherOrb>.Instance.RestoreCooldownReductionPerStack.Value / 100f, count - 1) }
				}, ItemBase<RefresherOrb>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<NemesisCurse>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Curse Damage Multiplier: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { (1f + ItemBase<NemesisCurse>.Instance.DamageBase.Value / 100f) * Mathf.Pow(1f + ItemBase<NemesisCurse>.Instance.DamagePerStack.Value / 100f, (float)(count - 1)) }
				}, ItemBase<NemesisCurse>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<OrbOfCorrosion>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Max Armor Reduction: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)4 },
					descriptions = { "Movement Speed Slow: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Attack Speed Slow: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Total Poison Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(4)
					{
						ItemBase<OrbOfCorrosion>.Instance.ArmorReduction.Value * (float)(ItemBase<OrbOfCorrosion>.Instance.MaxStacksBase.Value + ItemBase<OrbOfCorrosion>.Instance.MaxStacksPerStack.Value * (count - 1)),
						ItemBase<OrbOfCorrosion>.Instance.MovementSpeedSlowBase.Value / 100f + ItemBase<OrbOfCorrosion>.Instance.MovementSpeedSlowPerStack.Value / 100f * (float)(count - 1),
						ItemBase<OrbOfCorrosion>.Instance.AttackSpeedSlowBase.Value / 100f + ItemBase<OrbOfCorrosion>.Instance.AttackSpeedSlowPerStack.Value / 100f * (float)(count - 1),
						(ItemBase<OrbOfCorrosion>.Instance.PoisonDamageBase.Value / 100f + ItemBase<OrbOfCorrosion>.Instance.PoisonDamagePerStack.Value / 100f * (float)(count - 1)) * ItemBase<OrbOfCorrosion>.Instance.PoisonDuration.Value
					}
				}, ItemBase<OrbOfCorrosion>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<TranquilBoots>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Base Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)4 },
					descriptions = { "Safe Healing: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)3 },
					descriptions = { "Safe Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(3)
					{
						ItemBase<TranquilBoots>.Instance.MovementSpeedBase.Value + ItemBase<TranquilBoots>.Instance.MovementSpeedPerStack.Value * (float)(count - 1),
						ItemBase<TranquilBoots>.Instance.OODHealthRegenerationBase.Value + ItemBase<TranquilBoots>.Instance.OODHealthRegenerationPerStack.Value * (float)(count - 1),
						ItemBase<TranquilBoots>.Instance.OODMovementSpeedBase.Value + ItemBase<TranquilBoots>.Instance.OODMovementSpeedPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<TranquilBoots>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<PhaseBoots>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Sprint Bonus: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<PhaseBoots>.Instance.DamageBase.Value / 100f + ItemBase<PhaseBoots>.Instance.DamagePerStack.Value / 100f * (float)(count - 1),
						ItemBase<PhaseBoots>.Instance.SprintSpeedBase.Value / 100f + ItemBase<PhaseBoots>.Instance.SprintSpeedPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<PhaseBoots>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<PowerTreads>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(2)
					{
						ItemBase<PowerTreads>.Instance.MovementSpeedBase.Value / 100f + ItemBase<PowerTreads>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<PowerTreads>.Instance.AttackSpeedBase.Value / 100f + ItemBase<PowerTreads>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<PowerTreads>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<KayaAndSange>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Cooldown Reduction: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					descriptions = { "Healing: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)3 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(4)
					{
						Utils.GetExponentialStacking(ItemBase<KayaAndSange>.Instance.SkillCooldownReductionBase.Value / 100f, ItemBase<KayaAndSange>.Instance.SkillCooldownReductionPerStack.Value / 100f, count),
						ItemBase<KayaAndSange>.Instance.DamageBase.Value / 100f + ItemBase<KayaAndSange>.Instance.DamagePerStack.Value / 100f * (float)(count - 1),
						ItemBase<KayaAndSange>.Instance.MaximumHealthBase.Value + ItemBase<KayaAndSange>.Instance.MaximumHealthPerStack.Value * (float)(count - 1),
						ItemBase<KayaAndSange>.Instance.BaseHealthRegenerationBase.Value + ItemBase<KayaAndSange>.Instance.BaseHealthRegenerationPerStack.Value * (float)(count - 1)
					}
				}, ItemBase<KayaAndSange>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<SangeAndYasha>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					descriptions = { "Healing: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)3 },
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(4)
					{
						ItemBase<SangeAndYasha>.Instance.MaximumHealthBase.Value + ItemBase<SangeAndYasha>.Instance.MaximumHealthPerStack.Value * (float)(count - 1),
						ItemBase<SangeAndYasha>.Instance.BaseHealthRegenerationBase.Value + ItemBase<SangeAndYasha>.Instance.BaseHealthRegenerationPerStack.Value * (float)(count - 1),
						ItemBase<SangeAndYasha>.Instance.AttackSpeedBase.Value / 100f + ItemBase<SangeAndYasha>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<SangeAndYasha>.Instance.MovementSpeedBase.Value / 100f + ItemBase<SangeAndYasha>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<SangeAndYasha>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<YashaAndKaya>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Cooldown Reduction: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(4)
					{
						Utils.GetExponentialStacking(ItemBase<YashaAndKaya>.Instance.SkillCooldownReductionBase.Value / 100f, ItemBase<YashaAndKaya>.Instance.SkillCooldownReductionPerStack.Value / 100f, count),
						ItemBase<YashaAndKaya>.Instance.AttackSpeedBase.Value / 100f + ItemBase<YashaAndKaya>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<YashaAndKaya>.Instance.MovementSpeedBase.Value / 100f + ItemBase<YashaAndKaya>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<YashaAndKaya>.Instance.DamageBase.Value / 100f + ItemBase<YashaAndKaya>.Instance.DamagePerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<YashaAndKaya>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Cooldown Reduction: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Damage: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Bonus Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)2 },
					descriptions = { "Healing: " },
					valueTypes = { (ValueType)0 },
					measurementUnits = { (MeasurementUnits)3 },
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Movement Speed: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(6)
					{
						Utils.GetExponentialStacking(ItemBase<Trident>.Instance.SkillCooldownReductionBase.Value / 100f, ItemBase<Trident>.Instance.SkillCooldownReductionPerStack.Value / 100f, count),
						ItemBase<Trident>.Instance.DamageBase.Value / 100f + ItemBase<Trident>.Instance.DamagePerStack.Value / 100f * (float)(count - 1),
						ItemBase<Trident>.Instance.MaximumHealthBase.Value + ItemBase<Trident>.Instance.MaximumHealthPerStack.Value * (float)(count - 1),
						ItemBase<Trident>.Instance.BaseHealthRegenerationBase.Value + ItemBase<Trident>.Instance.BaseHealthRegenerationPerStack.Value * (float)(count - 1),
						ItemBase<Trident>.Instance.AttackSpeedBase.Value / 100f + ItemBase<Trident>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1),
						ItemBase<Trident>.Instance.MovementSpeedBase.Value / 100f + ItemBase<Trident>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1)
					}
				}, ItemBase<Trident>.GetItemDef().itemIndex);
			}
			if (Plugin.ItemsEnabled[ItemBase<ConsumedMoonShard>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Attack Speed: " },
					valueTypes = { (ValueType)1 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { ItemBase<ConsumedMoonShard>.Instance.AttackSpeedBase.Value / 100f + ItemBase<ConsumedMoonShard>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1) }
				}, ItemBase<ConsumedMoonShard>.GetItemDef().itemIndex);
			}
		}
	}
	internal static class Log
	{
		private static ManualLogSource _logSource;

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

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

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

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

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

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

		internal static void Warning(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	public class RecipeManager
	{
		public class ItemRecipe
		{
			public Dictionary<ItemDef, int> inputs { get; set; }

			public KeyValuePair<ItemDef, int> output { get; set; }
		}

		public class EquipmentRecipe
		{
			public EquipmentDef input_1 { get; set; }

			public EquipmentDef input_2 { get; set; }

			public EquipmentDef output { get; set; }
		}

		public class MixedRecipe
		{
			public Dictionary<ItemDef, int> items { get; set; }

			public EquipmentDef equipment { get; set; }

			public EquipmentDef output { get; set; }
		}

		private class RecipeBehavior : MonoBehaviour
		{
			private CharacterBody body;

			private void Awake()
			{
				body = ((Component)this).GetComponent<CharacterBody>();
			}

			private void FixedUpdate()
			{
				//IL_014e: 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_025f: Unknown result type (might be due to invalid IL or missing references)
				//IL_026b: Unknown result type (might be due to invalid IL or missing references)
				//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
				//IL_0303: Unknown result type (might be due to invalid IL or missing references)
				//IL_0320: Unknown result type (might be due to invalid IL or missing references)
				if (!NetworkServer.active || !Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.inventory))
				{
					return;
				}
				foreach (ItemRecipe item_recipe in item_recipes)
				{
					bool flag = false;
					int num = int.MaxValue;
					foreach (ItemDef key in item_recipe.inputs.Keys)
					{
						int itemCount = body.inventory.GetItemCount(key);
						if (itemCount < item_recipe.inputs[key])
						{
							flag = true;
							break;
						}
						num = Math.Min(num, itemCount / item_recipe.inputs[key]);
					}
					if (flag)
					{
						continue;
					}
					Log.Debug($"Creating {num * item_recipe.output.Value} {item_recipe.output.Key.nameToken}.");
					foreach (KeyValuePair<ItemDef, int> input in item_recipe.inputs)
					{
						body.inventory.RemoveItem(input.Key, num * input.Value);
						CharacterMasterNotificationQueue.PushItemTransformNotification(body.master, input.Key.itemIndex, item_recipe.output.Key.itemIndex, (TransformationType)0);
					}
					body.inventory.GiveItem(item_recipe.output.Key, num * item_recipe.output.Value);
				}
				foreach (MixedRecipe mixed_recipe in mixed_recipes)
				{
					bool flag2 = false;
					foreach (ItemDef key2 in mixed_recipe.items.Keys)
					{
						if (body.inventory.GetItemCount(key2) < mixed_recipe.items[key2])
						{
							flag2 = true;
							break;
						}
					}
					if (flag2 || body.inventory.currentEquipmentIndex != mixed_recipe.equipment.equipmentIndex)
					{
						continue;
					}
					Log.Debug("Creating " + mixed_recipe.output.nameToken + ".");
					foreach (KeyValuePair<ItemDef, int> item in mixed_recipe.items)
					{
						body.inventory.RemoveItem(item.Key, item.Value);
					}
					CharacterMasterNotificationQueue.PushEquipmentTransformNotification(body.master, mixed_recipe.equipment.equipmentIndex, mixed_recipe.output.equipmentIndex, (TransformationType)0);
					body.inventory.SetEquipmentIndexForSlot(mixed_recipe.output.equipmentIndex, (uint)body.inventory.activeEquipmentSlot);
				}
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static Action<CharacterBody> <0>__OnInventoryChanged;

			public static hook_AttemptGrant <1>__OnAttemptGrant;
		}

		public static List<ItemRecipe> item_recipes = new List<ItemRecipe>();

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

		public static List<EquipmentRecipe> equipment_recipes = new List<EquipmentRecipe>();

		public static List<MixedRecipe> mixed_recipes = new List<MixedRecipe>();

		public static void Add(MixedRecipe recipe)
		{
			mixed_recipes.Add(recipe);
		}

		public static void Add(ItemDef[] items, EquipmentDef equipment, EquipmentDef output)
		{
			mixed_recipes.Add(new MixedRecipe
			{
				items = items.Distinct().ToDictionary((ItemDef x) => x, (ItemDef y) => 1),
				equipment = equipment,
				output = output
			});
		}

		public static void Add(EquipmentRecipe recipe)
		{
			equipment_recipes.Add(recipe);
		}

		public static void Add(EquipmentDef input_1, EquipmentDef input_2, EquipmentDef output)
		{
			equipment_recipes.Add(new EquipmentRecipe
			{
				input_1 = input_1,
				input_2 = input_2,
				output = output
			});
		}

		public static void Add(ItemRecipe recipe)
		{
			item_recipes.Add(recipe);
		}

		public static void Add(ItemDef[] inputs, ItemDef output)
		{
			item_recipes.Add(new ItemRecipe
			{
				inputs = inputs.Distinct().ToDictionary((ItemDef x) => x, (ItemDef y) => 1),
				output = KeyValuePair.Create<ItemDef, int>(output, 1)
			});
		}

		public static void Init()
		{
			//IL_0504: Unknown result type (might be due to invalid IL or missing references)
			//IL_0509: Unknown result type (might be due to invalid IL or missing references)
			//IL_050f: Expected O, but got Unknown
			if (Plugin.ItemsEnabled[ItemBase<OrbOfVenom>.Instance] && Plugin.ItemsEnabled[ItemBase<OrbOfFrost>.Instance] && Plugin.ItemsEnabled[ItemBase<OrbOfBlight>.Instance] && Plugin.ItemsEnabled[ItemBase<OrbOfCorrosion>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[3]
				{
					ItemBase<OrbOfVenom>.GetItemDef(),
					ItemBase<OrbOfBlight>.GetItemDef(),
					ItemBase<OrbOfFrost>.GetItemDef()
				}, ItemBase<OrbOfCorrosion>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[3]
				{
					ItemBase<OrbOfFrost>.GetItemDef(),
					ItemBase<OrbOfBlight>.GetItemDef(),
					ItemBase<OrbOfVenom>.GetItemDef()
				}));
			}
			if (Plugin.ItemsEnabled[ItemBase<KayaAndSange>.Instance] && Plugin.ItemsEnabled[ItemBase<Yasha>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<KayaAndSange>.GetItemDef(),
					ItemBase<Yasha>.GetItemDef()
				}, ItemBase<Trident>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<SangeAndYasha>.Instance] && Plugin.ItemsEnabled[ItemBase<Kaya>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<SangeAndYasha>.GetItemDef(),
					ItemBase<Kaya>.GetItemDef()
				}, ItemBase<Trident>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<YashaAndKaya>.Instance] && Plugin.ItemsEnabled[ItemBase<Sange>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<YashaAndKaya>.GetItemDef(),
					ItemBase<Sange>.GetItemDef()
				}, ItemBase<Trident>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<Kaya>.Instance] && Plugin.ItemsEnabled[ItemBase<Sange>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<Kaya>.GetItemDef(),
					ItemBase<Sange>.GetItemDef()
				}, ItemBase<KayaAndSange>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<Sange>.Instance] && Plugin.ItemsEnabled[ItemBase<Yasha>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<Sange>.GetItemDef(),
					ItemBase<Yasha>.GetItemDef()
				}, ItemBase<SangeAndYasha>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<Yasha>.Instance] && Plugin.ItemsEnabled[ItemBase<Kaya>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<Yasha>.GetItemDef(),
					ItemBase<Kaya>.GetItemDef()
				}, ItemBase<YashaAndKaya>.GetItemDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<Yasha>.Instance] && Plugin.ItemsEnabled[ItemBase<Kaya>.Instance] && Plugin.ItemsEnabled[ItemBase<Sange>.Instance] && Plugin.ItemsEnabled[ItemBase<Trident>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[3]
				{
					ItemBase<Yasha>.GetItemDef(),
					ItemBase<Kaya>.GetItemDef(),
					ItemBase<Sange>.GetItemDef()
				}, ItemBase<Trident>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[3]
				{
					ItemBase<Yasha>.GetItemDef(),
					ItemBase<Kaya>.GetItemDef(),
					ItemBase<Sange>.GetItemDef()
				}));
			}
			if (Plugin.ItemsEnabled[ItemBase<BootsOfSpeed>.Instance] && Plugin.ItemsEnabled[ItemBase<TranquilBoots>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<BootsOfSpeed>.GetItemDef(),
					Items.HealWhileSafe
				}, ItemBase<TranquilBoots>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<BootsOfSpeed>.GetItemDef(),
					Items.HealWhileSafe
				}));
			}
			if (Plugin.ItemsEnabled[ItemBase<BladesOfAttack>.Instance] && Plugin.ItemsEnabled[ItemBase<PhaseBoots>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<BladesOfAttack>.GetItemDef(),
					Items.SprintBonus
				}, ItemBase<PhaseBoots>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[2]
				{
					ItemBase<BladesOfAttack>.GetItemDef(),
					Items.SprintBonus
				}));
			}
			if (Plugin.ItemsEnabled[ItemBase<PowerTreads>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[2]
				{
					Items.SprintBonus,
					Items.BoostAttackSpeed
				}, ItemBase<PowerTreads>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[2]
				{
					Items.SprintBonus,
					Items.BoostAttackSpeed
				}));
			}
			if (Plugin.EquipmentEnabled[EquipmentBase<ArcaneBoots>.Instance] && Plugin.EquipmentEnabled[EquipmentBase<Mekansm>.Instance] && Plugin.EquipmentEnabled[EquipmentBase<GuardianGreaves>.Instance])
			{
				Add(EquipmentBase<ArcaneBoots>.GetEquipmentDef(), EquipmentBase<Mekansm>.GetEquipmentDef(), EquipmentBase<GuardianGreaves>.GetEquipmentDef());
			}
			if (Plugin.ItemsEnabled[ItemBase<TranquilBoots>.Instance] && Plugin.EquipmentEnabled[EquipmentBase<BootsOfBearing>.Instance])
			{
				Add((ItemDef[])(object)new ItemDef[1] { ItemBase<TranquilBoots>.GetItemDef() }, Equipment.TeamWarCry, EquipmentBase<BootsOfBearing>.GetEquipmentDef());
			}
			CharacterBody.onBodyInventoryChangedGlobal += OnInventoryChanged;
			object obj = <>O.<1>__OnAttemptGrant;
			if (obj == null)
			{
				hook_AttemptGrant val = OnAttemptGrant;
				<>O.<1>__OnAttemptGrant = val;
				obj = (object)val;
			}
			EquipmentDef.AttemptGrant += (hook_AttemptGrant)obj;
			Log.Debug($"RecipeManager initialized, added {item_recipes.Count} item recipes and {itemsToWatchFor.Count} items to watch for, and {equipment_recipes.Count} equipment recipes.");
		}

		private static void OnInventoryChanged(CharacterBody body)
		{
			if (Object.op_Implicit((Object)(object)((Component)body).GetComponent<RecipeBehavior>()))
			{
				return;
			}
			foreach (ItemDef item in itemsToWatchFor)
			{
				if (body.inventory.GetItemCount(item) > 0)
				{
					Log.Debug("Found at least 1 " + item.nameToken + ", adding RecipeBehavior to " + body.GetDisplayName() + ".");
					((Component)body).gameObject.AddComponent<RecipeBehavior>();
					break;
				}
			}
		}

		private static void OnAttemptGrant(orig_AttemptGrant orig, ref GrantContext context)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: 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_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: 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_00ee: Unknown result type (might be due to invalid IL or missing references)
			bool flag = true;
			EquipmentIndex currentEquipmentIndex = context.body.inventory.currentEquipmentIndex;
			PickupDef pickupDef = PickupCatalog.GetPickupDef(context.controller.pickupIndex);
			EquipmentIndex val = (EquipmentIndex)((pickupDef == null) ? (-1) : ((int)pickupDef.equipmentIndex));
			foreach (EquipmentRecipe equipment_recipe in equipment_recipes)
			{
				if ((currentEquipmentIndex == equipment_recipe.input_1.equipmentIndex && val == equipment_recipe.input_2.equipmentIndex) || (currentEquipmentIndex == equipment_recipe.input_2.equipmentIndex && val == equipment_recipe.input_1.equipmentIndex))
				{
					context.body.inventory.SetEquipmentIndex(equipment_recipe.output.equipmentIndex);
					context.controller.StartWaitTime();
					context.shouldDestroy = true;
					context.shouldNotify = false;
					CharacterMasterNotificationQueue.PushEquipmentTransformNotification(context.body.master, currentEquipmentIndex, equipment_recipe.output.equipmentIndex, (TransformationType)0);
					CharacterMasterNotificationQueue.PushEquipmentTransformNotification(context.body.master, val, equipment_recipe.output.equipmentIndex, (TransformationType)0);
					flag = false;
					break;
				}
			}
			if (flag)
			{
				orig.Invoke(ref context);
			}
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Dnarok.RiskOfTheAncients2", "RiskOfTheAncients2", "2.0.2")]
	public class Plugin : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Action<AsyncOperationHandle<Sprite>> <>9__18_0;

			public static Action<AsyncOperationHandle<ExpansionDef>> <>9__18_1;

			public static Func<Type, bool> <>9__18_2;

			public static Func<Type, bool> <>9__18_3;

			public static Func<Type, bool> <>9__18_4;

			public static Action <>9__18_5;

			public static hook_Init <>9__18_6;

			public static Action<AsyncOperationHandle<SkillDef>> <>9__18_7;

			internal void <Awake>b__18_0(AsyncOperationHandle<Sprite> x)
			{
				ModSettingsManager.SetModIcon(x.Result);
			}

			internal void <Awake>b__18_1(AsyncOperationHandle<ExpansionDef> x)
			{
				expansion = x.Result;
				ContentAddition.AddExpansionDef(expansion);
			}

			internal bool <Awake>b__18_2(Type type)
			{
				if (!type.IsAbstract)
				{
					return type.IsSubclassOf(typeof(ItemBase));
				}
				return false;
			}

			internal bool <Awake>b__18_3(Type type)
			{
				if (!type.IsAbstract)
				{
					return type.IsSubclassOf(typeof(EquipmentBase));
				}
				return false;
			}

			internal bool <Awake>b__18_4(Type type)
			{
				if (!type.IsAbstract)
				{
					return type.IsSubclassOf(typeof(BuffBase));
				}
				return false;
			}

			internal void <Awake>b__18_5()
			{
				Log.Debug("Initializing RecipeManager.");
				RecipeManager.Init();
			}

			internal void <Awake>b__18_6(orig_Init orig)
			{
				//IL_007d: 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)
				List<Pair> list = new List<Pair>();
				Log.Debug("Adding void items.");
				foreach (ItemBase item in Items)
				{
					if ((Object)(object)item.VoidFor != (Object)null)
					{
						Log.Debug("Pairing " + item.ItemDef.nameToken + " to " + item.VoidFor.nameToken + ".");
						list.Add(new Pair
						{
							itemDef1 = item.VoidFor,
							itemDef2 = item.ItemDef
						});
					}
				}
				Pair[] first = ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem];
				ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = first.Union(list).ToArray();
				orig.Invoke();
			}

			internal void <Awake>b__18_7(AsyncOperationHandle<SkillDef> x)
			{
				//IL_0068: 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_0078: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				SkillDef result = x.Result;
				disabledSkill = ScriptableObject.CreateInstance<SkillDef>();
				disabledSkill.skillName = result.skillName;
				disabledSkill.skillNameToken = result.skillNameToken;
				disabledSkill.skillDescriptionToken = result.skillDescriptionToken;
				disabledSkill.icon = result.icon;
				disabledSkill.activationStateMachineName = result.activationStateMachineName;
				disabledSkill.activationState = result.activationState;
				disabledSkill.interruptPriority = result.interruptPriority;
				disabledSkill.baseRechargeInterval = result.baseRechargeInterval;
				disabledSkill.baseMaxStock = result.baseMaxStock;
				disabledSkill.rechargeStock = result.rechargeStock;
				disabledSkill.requiredStock = result.requiredStock;
				disabledSkill.stockToConsume = result.stockToConsume;
				disabledSkill.beginSkillCooldownOnSkillEnd = result.beginSkillCooldownOnSkillEnd;
				disabledSkill.fullRestockOnAssign = result.fullRestockOnAssign;
				disabledSkill.dontAllowPastMaxStocks = result.dontAllowPastMaxStocks;
				disabledSkill.canceledFromSprinting = result.canceledFromSprinting;
				disabledSkill.isCombatSkill = result.isCombatSkill;
				disabledSkill.resetCooldownTimerOnUse = result.resetCooldownTimerOnUse;
				disabledSkill.cancelSprintingOnActivation = result.cancelSprintingOnActivation;
				disabledSkill.canceledFromSprinting = result.canceledFromSprinting;
				disabledSkill.forceSprintDuringState = result.forceSprintDuringState;
				disabledSkill.mustKeyPress = result.mustKeyPress;
				disabledSkill.keywordTokens = result.keywordTokens;
				Log.Debug("Disabled skill added.");
				ContentAddition.AddSkillDef(disabledSkill);
			}
		}

		public const string PluginGUID = "Dnarok.RiskOfTheAncients2";

		public const string PluginAuthor = "Dnarok";

		public const string PluginName = "RiskOfTheAncients2";

		public const string PluginVersion = "2.0.2";

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

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

		public static List<EquipmentBase> Equipment = new List<EquipmentBase>();

		public static Dictionary<EquipmentBase, bool> EquipmentEnabled = new Dictionary<EquipmentBase, bool>();

		public static List<BuffBase> Buffs = new List<BuffBase>();

		public static ExpansionDef expansion = null;

		public static Dictionary<string, Sprite> SpritesLoaded = new Dictionary<string, Sprite>();

		public static SkillDef disabledSkill;

		public static string AddressablesDirectory { get; private set; }

		public static bool isLookingGlassInstalled => Chainloader.PluginInfos.ContainsKey("droppod.lookingglass");

		public void Awake()
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: 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_013c: Expected O, but got Unknown
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Expected O, but got Unknown
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Expected O, but got Unknown
			//IL_0437: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Unknown result type (might be due to invalid IL or missing references)
			Log.Init(((BaseUnityPlugin)this).Logger);
			Log.Info("Loading Addressables catalog.");
			AddressablesDirectory = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location);
			Addressables.LoadContentCatalogAsync(Path.Combine(AddressablesDirectory, "catalog.json"), (string)null).WaitForCompletion();
			Log.Info("Addressables catalog loaded.");
			ModSettingsManager.SetModDescription("Dota 2 items in Risk of Rain 2!");
			AsyncOperationHandle<Sprite> val = Addressables.LoadAssetAsync<Sprite>((object)"2c47c84c04276284788a629fce27c7f9");
			val.Completed += delegate(AsyncOperationHandle<Sprite> x)
			{
				ModSettingsManager.SetModIcon(x.Result);
			};
			AsyncOperationHandle<ExpansionDef> val2 = Addressables.LoadAssetAsync<ExpansionDef>((object)"94098b57c571f0d40b3f17f8c3e81070");
			val2.Completed += delegate(AsyncOperationHandle<ExpansionDef> x)
			{
				expansion = x.Result;
				ContentAddition.AddExpansionDef(expansion);
			};
			foreach (Type item in from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(ItemBase))
				select type)
			{
				ItemBase itemBase = (ItemBase)Activator.CreateInstance(item);
				ConfigEntry<bool> val3 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + itemBase.ConfigItemName, "Enabled", true, "Should this item be available?");
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val3, true));
				ItemsEnabled.Add(itemBase, val3.Value);
			}
			foreach (Type item2 in from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(EquipmentBase))
				select type)
			{
				EquipmentBase equipmentBase = (EquipmentBase)Activator.CreateInstance(item2);
				ConfigEntry<bool> val4 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + equipmentBase.EquipmentName, "Enabled", true, "Should this item be available?");
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val4, true));
				EquipmentEnabled.Add(equipmentBase, val4.Value);
			}
			foreach (KeyValuePair<ItemBase, bool> item3 in ItemsEnabled)
			{
				if (item3.Value)
				{
					Items.Add(item3.Key);
					item3.Key.Init(((BaseUnityPlugin)this).Config);
					Log.Info("Item: " + item3.Key.ItemName + " initialized!");
				}
				else
				{
					Log.Warning("Item: " + item3.Key.ItemName + " NOT initialized.");
				}
			}
			foreach (KeyValuePair<EquipmentBase, bool> item4 in EquipmentEnabled)
			{
				if (item4.Value)
				{
					Equipment.Add(item4.Key);
					item4.Key.Init(((BaseUnityPlugin)this).Config);
					Log.Info("Equipment: " + item4.Key.EquipmentName + " initialized!");
				}
				else
				{
					Log.Warning("Equipment: " + item4.Key.EquipmentName + " NOT initialized.");
				}
			}
			foreach (Type item5 in from type in Assembly.GetExecutingAssembly().GetTypes()
				where !type.IsAbstract && type.IsSubclassOf(typeof(BuffBase))
				select type)
			{
				BuffBase buffBase = (BuffBase)Activator.CreateInstance(item5);
				Buffs.Add(buffBase);
				buffBase.Init();
				Log.Info("Buff: " + buffBase.BuffName + " initialized!");
			}
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
			{
				Log.Debug("Initializing RecipeManager.");
				RecipeManager.Init();
			});
			object obj = <>c.<>9__18_6;
			if (obj == null)
			{
				hook_Init val5 = delegate(orig_Init orig)
				{
					//IL_007d: 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)
					List<Pair> list = new List<Pair>();
					Log.Debug("Adding void items.");
					foreach (ItemBase item6 in Items)
					{
						if ((Object)(object)item6.VoidFor != (Object)null)
						{
							Log.Debug("Pairing " + item6.ItemDef.nameToken + " to " + item6.VoidFor.nameToken + ".");
							list.Add(new Pair
							{
								itemDef1 = item6.VoidFor,
								itemDef2 = item6.ItemDef
							});
						}
					}
					Pair[] first = ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem];
					ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = first.Union(list).ToArray();
					orig.Invoke();
				};
				<>c.<>9__18_6 = val5;
				obj = (object)val5;
			}
			ContagiousItemManager.Init += (hook_Init)obj;
			if ((Object)(object)disabledSkill == (Object)null)
			{
				AsyncOperationHandle<SkillDef> val6 = Addressables.LoadAssetAsync<SkillDef>((object)RoR2_Base_Captain.CaptainSkillUsedUp_asset);
				val6.Completed += delegate(AsyncOperationHandle<SkillDef> x)
				{
					//IL_0068: 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_0078: Unknown result type (might be due to invalid IL or missing references)
					//IL_007d: Unknown result type (might be due to invalid IL or missing references)
					SkillDef result = x.Result;
					disabledSkill = ScriptableObject.CreateInstance<SkillDef>();
					disabledSkill.skillName = result.skillName;
					disabledSkill.skillNameToken = result.skillNameToken;
					disabledSkill.skillDescriptionToken = result.skillDescriptionToken;
					disabledSkill.icon = result.icon;
					disabledSkill.activationStateMachineName = result.activationStateMachineName;
					disabledSkill.activationState = result.activationState;
					disabledSkill.interruptPriority = result.interruptPriority;
					disabledSkill.baseRechargeInterval = result.baseRechargeInterval;
					disabledSkill.baseMaxStock = result.baseMaxStock;
					disabledSkill.rechargeStock = result.rechargeStock;
					disabledSkill.requiredStock = result.requiredStock;
					disabledSkill.stockToConsume = result.stockToConsume;
					disabledSkill.beginSkillCooldownOnSkillEnd = result.beginSkillCooldownOnSkillEnd;
					disabledSkill.fullRestockOnAssign = result.fullRestockOnAssign;
					disabledSkill.dontAllowPastMaxStocks = result.dontAllowPastMaxStocks;
					disabledSkill.canceledFromSprinting = result.canceledFromSprinting;
					disabledSkill.isCombatSkill = result.isCombatSkill;
					disabledSkill.resetCooldownTimerOnUse = result.resetCooldownTimerOnUse;
					disabledSkill.cancelSprintingOnActivation = result.cancelSprintingOnActivation;
					disabledSkill.canceledFromSprinting = result.canceledFromSprinting;
					disabledSkill.forceSprintDuringState = result.forceSprintDuringState;
					disabledSkill.mustKeyPress = result.mustKeyPress;
					disabledSkill.keywordTokens = result.keywordTokens;
					Log.Debug("Disabled skill added.");
					ContentAddition.AddSkillDef(disabledSkill);
				};
			}
			if (isLookingGlassInstalled)
			{
				RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(Compatibility.LookingGlassCompatibility));
			}
		}

		public static void TrySwapShadersInPrefab(GameObject prefab)
		{
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			Renderer[] componentsInChildren = prefab.GetComponentsInChildren<Renderer>();
			for (int i = 0; i < componentsInChildren.Length; i++)
			{
				Material material = componentsInChildren[i].material;
				string name = ((Object)material.shader).name;
				Log.Debug("Trying to swap " + name + " in " + ((Object)prefab).name);
				if (name.Contains("Stubbed"))
				{
					name = name.Replace("Stubbed", string.Empty) + ".shader";
					Shader val = Addressables.LoadAssetAsync<Shader>((object)name).WaitForCompletion();
					if ((Object)(object)val != (Object)null)
					{
						material.shader = val;
						Log.Debug("Successfully swapped to " + name);
					}
					else
					{
						Log.Error("Failed to load shader " + name);
					}
				}
			}
		}

		public static void SetupSoundEvent(string GUID, NetworkSoundEventDef sound)
		{
			//IL_0