Decompiled source of RiskOfTheAncients2 v2.0.3

ROTA2.dll

Decompiled 2 months 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 IL.RoR2;
using KinematicCharacterController;
using LookingGlass;
using LookingGlass.ItemStatsNameSpace;
using LookingGlass.StatsDisplay;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
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: IgnoresAccessChecksTo("LookingGlass")]
[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+83904d3265da6684f4bcd14b27b49c64936fafa4")]
[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;
		}
	}
}
namespace ROTA2
{
	public static class Compatibility
	{
		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static void LookingGlassCompatibility()
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Expected O, but got Unknown
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Expected O, but got Unknown
			//IL_01c4: 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_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_0241: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Expected O, but got Unknown
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b3: 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_0275: Expected O, but got Unknown
			//IL_02fb: 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_0310: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: 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_0344: Unknown result type (might be due to invalid IL or missing references)
			//IL_0350: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_0359: Unknown result type (might be due to invalid IL or missing references)
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e7: Expected O, but got Unknown
			//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Expected O, but got Unknown
			//IL_0418: 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_042d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0439: Unknown result type (might be due to invalid IL or missing references)
			//IL_0445: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Unknown result type (might be due to invalid IL or missing references)
			//IL_0461: Unknown result type (might be due to invalid IL or missing references)
			//IL_046d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Expected O, but got Unknown
			//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0497: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a1: Expected O, but got Unknown
			//IL_0524: Unknown result type (might be due to invalid IL or missing references)
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_0539: Unknown result type (might be due to invalid IL or missing references)
			//IL_0545: Unknown result type (might be due to invalid IL or missing references)
			//IL_0551: 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_0513: Expected O, but got Unknown
			//IL_0599: 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_05ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_057b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0585: Expected O, but got Unknown
			//IL_0636: 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_064b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0657: Unknown result type (might be due to invalid IL or missing references)
			//IL_0663: 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_067f: Unknown result type (might be due to invalid IL or missing references)
			//IL_068b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0692: Unknown result type (might be due to invalid IL or missing references)
			//IL_0694: Unknown result type (might be due to invalid IL or missing references)
			//IL_0699: Unknown result type (might be due to invalid IL or missing references)
			//IL_0618: Unknown result type (might be due to invalid IL or missing references)
			//IL_0622: Expected O, but got Unknown
			//IL_06de: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_070b: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cd: Expected O, but got Unknown
			//IL_0750: Unknown result type (might be due to invalid IL or missing references)
			//IL_0755: Unknown result type (might be due to invalid IL or missing references)
			//IL_0765: Unknown result type (might be due to invalid IL or missing references)
			//IL_0771: Unknown result type (might be due to invalid IL or missing references)
			//IL_077d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0735: Unknown result type (might be due to invalid IL or missing references)
			//IL_073f: Expected O, but got Unknown
			//IL_07c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b1: Expected O, but got Unknown
			//IL_0834: Unknown result type (might be due to invalid IL or missing references)
			//IL_0839: Unknown result type (might be due to invalid IL or missing references)
			//IL_0849: Unknown result type (might be due to invalid IL or missing references)
			//IL_0855: Unknown result type (might be due to invalid IL or missing references)
			//IL_0861: Unknown result type (might be due to invalid IL or missing references)
			//IL_0819: Unknown result type (might be due to invalid IL or missing references)
			//IL_0823: Expected O, but got Unknown
			//IL_08a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_08be: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_088b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0895: Expected O, but got Unknown
			//IL_0946: Unknown result type (might be due to invalid IL or missing references)
			//IL_094b: Unknown result type (might be due to invalid IL or missing references)
			//IL_095b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0967: Unknown result type (might be due to invalid IL or missing references)
			//IL_0973: Unknown result type (might be due to invalid IL or missing references)
			//IL_0983: Unknown result type (might be due to invalid IL or missing references)
			//IL_098f: Unknown result type (might be due to invalid IL or missing references)
			//IL_099b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0928: Unknown result type (might be due to invalid IL or missing references)
			//IL_0932: Expected O, but got Unknown
			//IL_09e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a04: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a38: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_09cf: Expected O, but got Unknown
			//IL_0a80: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a95: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0abd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ac9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ad5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0adc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ade: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a62: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6c: Expected O, but got Unknown
			//IL_0b2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b30: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b40: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b58: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b68: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b74: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b80: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b17: Expected O, but got Unknown
			//IL_0bc8: 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_0bdd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0be9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bf5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c05: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c11: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c1d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0baa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bb4: Expected O, but got Unknown
			//IL_0c62: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c77: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c8f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c51: Expected O, but got Unknown
			//IL_0cd4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cd9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cf5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d01: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cc3: Expected O, but got Unknown
			//IL_0d46: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d4b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d73: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d35: Expected O, but got Unknown
			//IL_0dbb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dc0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ddc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0de8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0df8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e04: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e10: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d9d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0da7: Expected O, but got Unknown
			//IL_0e58: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e5d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e79: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e95: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ea1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ead: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e44: Expected O, but got Unknown
			//IL_0ef5: 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_0f0a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f16: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f22: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f32: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f4a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ed7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee1: Expected O, but got Unknown
			//IL_0f8f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f94: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fb0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fbc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f74: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f7e: Expected O, but got Unknown
			//IL_1001: Unknown result type (might be due to invalid IL or missing references)
			//IL_1006: Unknown result type (might be due to invalid IL or missing references)
			//IL_1016: Unknown result type (might be due to invalid IL or missing references)
			//IL_1022: Unknown result type (might be due to invalid IL or missing references)
			//IL_102e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fe6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ff0: Expected O, but got Unknown
			//IL_1073: Unknown result type (might be due to invalid IL or missing references)
			//IL_1078: Unknown result type (might be due to invalid IL or missing references)
			//IL_1088: Unknown result type (might be due to invalid IL or missing references)
			//IL_1095: Unknown result type (might be due to invalid IL or missing references)
			//IL_10a1: 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_1062: Expected O, but got Unknown
			//IL_10e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_10eb: 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_1107: Unknown result type (might be due to invalid IL or missing references)
			//IL_1113: Unknown result type (might be due to invalid IL or missing references)
			//IL_111a: Unknown result type (might be due to invalid IL or missing references)
			//IL_111c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1121: Unknown result type (might be due to invalid IL or missing references)
			//IL_10cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_10d5: Expected O, but got Unknown
			//IL_1166: Unknown result type (might be due to invalid IL or missing references)
			//IL_116b: Unknown result type (might be due to invalid IL or missing references)
			//IL_117b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1187: Unknown result type (might be due to invalid IL or missing references)
			//IL_1193: Unknown result type (might be due to invalid IL or missing references)
			//IL_114b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1155: Expected O, but got Unknown
			//IL_11d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_11dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_11ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_11f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_1205: Unknown result type (might be due to invalid IL or missing references)
			//IL_11bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_11c7: Expected O, but got Unknown
			//IL_124d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1252: Unknown result type (might be due to invalid IL or missing references)
			//IL_1262: Unknown result type (might be due to invalid IL or missing references)
			//IL_126e: Unknown result type (might be due to invalid IL or missing references)
			//IL_127a: Unknown result type (might be due to invalid IL or missing references)
			//IL_128a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1296: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_122f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1239: Expected O, but got Unknown
			//IL_12ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_12ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_12ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_130b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1317: Unknown result type (might be due to invalid IL or missing references)
			//IL_1327: Unknown result type (might be due to invalid IL or missing references)
			//IL_1333: Unknown result type (might be due to invalid IL or missing references)
			//IL_133f: Unknown result type (might be due to invalid IL or missing references)
			//IL_134f: Unknown result type (might be due to invalid IL or missing references)
			//IL_135b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1367: Unknown result type (might be due to invalid IL or missing references)
			//IL_1377: Unknown result type (might be due to invalid IL or missing references)
			//IL_1383: Unknown result type (might be due to invalid IL or missing references)
			//IL_138f: Unknown result type (might be due to invalid IL or missing references)
			//IL_12cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_12d6: Expected O, but got Unknown
			//IL_13d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_13dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_13ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_13f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_1404: Unknown result type (might be due to invalid IL or missing references)
			//IL_1414: Unknown result type (might be due to invalid IL or missing references)
			//IL_1420: Unknown result type (might be due to invalid IL or missing references)
			//IL_142c: Unknown result type (might be due to invalid IL or missing references)
			//IL_143c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1448: Unknown result type (might be due to invalid IL or missing references)
			//IL_1454: Unknown result type (might be due to invalid IL or missing references)
			//IL_13b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_13c3: Expected O, but got Unknown
			//IL_149c: Unknown result type (might be due to invalid IL or missing references)
			//IL_14a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_14b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_14bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_14c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_14e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_14f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_147e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1488: Expected O, but got Unknown
			//IL_1539: Unknown result type (might be due to invalid IL or missing references)
			//IL_153e: Unknown result type (might be due to invalid IL or missing references)
			//IL_154e: Unknown result type (might be due to invalid IL or missing references)
			//IL_155a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1566: Unknown result type (might be due to invalid IL or missing references)
			//IL_1576: Unknown result type (might be due to invalid IL or missing references)
			//IL_1582: Unknown result type (might be due to invalid IL or missing references)
			//IL_158e: Unknown result type (might be due to invalid IL or missing references)
			//IL_151b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1525: Expected O, but got Unknown
			//IL_15d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_15db: Unknown result type (might be due to invalid IL or missing references)
			//IL_15eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_15f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1603: Unknown result type (might be due to invalid IL or missing references)
			//IL_1613: Unknown result type (might be due to invalid IL or missing references)
			//IL_161f: Unknown result type (might be due to invalid IL or missing references)
			//IL_162b: Unknown result type (might be due to invalid IL or missing references)
			//IL_163b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1647: Unknown result type (might be due to invalid IL or missing references)
			//IL_1653: Unknown result type (might be due to invalid IL or missing references)
			//IL_1663: Unknown result type (might be due to invalid IL or missing references)
			//IL_166f: Unknown result type (might be due to invalid IL or missing references)
			//IL_167b: Unknown result type (might be due to invalid IL or missing references)
			//IL_15b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c2: Expected O, but got Unknown
			//IL_16c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_16c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_16d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_16e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_16f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_16fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_170c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1718: Unknown result type (might be due to invalid IL or missing references)
			//IL_1724: Unknown result type (might be due to invalid IL or missing references)
			//IL_1734: Unknown result type (might be due to invalid IL or missing references)
			//IL_1740: Unknown result type (might be due to invalid IL or missing references)
			//IL_174c: Unknown result type (might be due to invalid IL or missing references)
			//IL_175c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1768: Unknown result type (might be due to invalid IL or missing references)
			//IL_1774: Unknown result type (might be due to invalid IL or missing references)
			//IL_16a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_16af: Expected O, but got Unknown
			//IL_17bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_17c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_17d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_17dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_17e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_17f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_1805: Unknown result type (might be due to invalid IL or missing references)
			//IL_1811: Unknown result type (might be due to invalid IL or missing references)
			//IL_1821: Unknown result type (might be due to invalid IL or missing references)
			//IL_182d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1839: Unknown result type (might be due to invalid IL or missing references)
			//IL_1849: Unknown result type (might be due to invalid IL or missing references)
			//IL_1855: Unknown result type (might be due to invalid IL or missing references)
			//IL_1861: Unknown result type (might be due to invalid IL or missing references)
			//IL_179e: Unknown result type (might be due to invalid IL or missing references)
			//IL_17a8: Expected O, but got Unknown
			//IL_18a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_18ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_18be: Unknown result type (might be due to invalid IL or missing references)
			//IL_18ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_18d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_18e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_18f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_18fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_190e: Unknown result type (might be due to invalid IL or missing references)
			//IL_191a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1926: Unknown result type (might be due to invalid IL or missing references)
			//IL_1936: Unknown result type (might be due to invalid IL or missing references)
			//IL_1942: Unknown result type (might be due to invalid IL or missing references)
			//IL_194e: Unknown result type (might be due to invalid IL or missing references)
			//IL_195e: Unknown result type (might be due to invalid IL or missing references)
			//IL_196a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1976: Unknown result type (might be due to invalid IL or missing references)
			//IL_1986: Unknown result type (might be due to invalid IL or missing references)
			//IL_1992: Unknown result type (might be due to invalid IL or missing references)
			//IL_199e: Unknown result type (might be due to invalid IL or missing references)
			//IL_188b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1895: Expected O, but got Unknown
			//IL_19e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_19e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_19f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a04: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a10: Unknown result type (might be due to invalid IL or missing references)
			//IL_19c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_19d2: Expected O, but got Unknown
			//IL_1a3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_1a44: Expected O, but got Unknown
			Log.Debug("Adding LookingGlass stat display definitions.");
			Func<float, string> utility = (float x) => (!StatsDisplayClass.builtInColors.Value) ? x.ToString(StatsDisplayDefinitions.floatPrecision) : ("<style=\"cIsUtility\">" + x.ToString(StatsDisplayDefinitions.floatPrecision) + "</style");
			StatsDisplayClass.statDictionary.Add("magicResistance", delegate(CharacterBody cachedUserBody)
			{
				StatsAPI.CustomStats component = ((Component)cachedUserBody).GetComponent<StatsAPI.CustomStats>();
				return Object.op_Implicit((Object)(object)component) ? (utility((1f - component.MagicResistanceMultiplier) * 100f) + "%") : (utility(0f) + "%");
			});
			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)3 },
					calculateValues = (CharacterMaster master, int count) => new List<float>(1) { (ItemBase<HealingSalve>.Instance.RegenerationBase.Value + ItemBase<HealingSalve>.Instance.RegenerationPerStack.Value * (float)(count - 1)) * (1f + 0.2f * master.GetBody().level) * 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<Cloak>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Magic Resistance: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					calculateValuesNew = (float luck, int count, float proc) => new List<float>(1) { 1f - (1f - ItemBase<Cloak>.Instance.MagicResistanceBase.Value / 100f) * Mathf.Pow(1f - ItemBase<Cloak>.Instance.MagicResistancePerStack.Value / 100f, (float)(count - 1)) }
				}, ItemBase<Cloak>.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 num3 = 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)
								{
									num3++;
								}
							}
						}
						return new List<float>(2)
						{
							(ItemBase<QuicksilverAmulet>.Instance.AttackSpeedBase.Value / 100f + ItemBase<QuicksilverAmulet>.Instance.AttackSpeedPerStack.Value / 100f * (float)(count - 1)) * (float)num3,
							(ItemBase<QuicksilverAmulet>.Instance.MovementSpeedBase.Value / 100f + ItemBase<QuicksilverAmulet>.Instance.MovementSpeedPerStack.Value / 100f * (float)(count - 1)) * (float)num3
						};
					}
				}, 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.InvulnerabilityDuration.Value,
						ItemBase<AeonDisk>.Instance.MovementSpeedDuration.Value
					}
				}, 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 num2 = 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(num2, 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<UnwaveringCondition>.Instance])
			{
				ItemDefinitions.RegisterItemStatsDef(new ItemStatsDef
				{
					descriptions = { "Magic Resistance: " },
					valueTypes = { (ValueType)2 },
					measurementUnits = { (MeasurementUnits)1 },
					descriptions = { "Maximum Health: " },
					valueTypes = { (ValueType)3 },
					measurementUnits = { (MeasurementUnits)4 },
					calculateValuesNew = delegate(float luck, int count, float proc)
					{
						float num = 1f - ItemBase<UnwaveringCondition>.Instance.MagicResistanceBase.Value / 100f;
						for (int i = 1; i < count; i++)
						{
							num *= 1f - ItemBase<UnwaveringCondition>.Instance.MagicResistancePerStack.Value / 100f;
						}
						return new List<float>(2)
						{
							1f - (1f - ItemBase<UnwaveringCondition>.Instance.MagicResistanceBase.Value / 100f) * Mathf.Pow(1f - ItemBase<UnwaveringCondition>.Instance.MagicResistancePerStack.Value / 100f, (float)(count - 1)),
							ItemBase<UnwaveringCondition>.Instance.CombinedHealthLimit.Value * Mathf.Pow(1f - ItemBase<UnwaveringCondition>.Instance.LimitReductionPerStack.Value / 100f, (float)(count - 1))
						};
					}
				}, ItemBase<UnwaveringCondition>.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.Hoof,
					Items.Syringe
				}, ItemBase<PowerTreads>.GetItemDef());
				itemsToWatchFor.AddRange(new <>z__ReadOnlyArray<ItemDef>((ItemDef[])(object)new ItemDef[2]
				{
					Items.Hoof,
					Items.Syringe
				}));
			}
			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.3")]
	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.3";

		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_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Expected O, but got Unknown
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Expected O, but got Unknown
			//IL_041a: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Expected O, but got Unknown
			//IL_043c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: 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);
			};
			StatsAPI.Init();
			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;