Decompiled source of WolfoQoL OptionalExtras v4.0.2

WolfoQoL_Server.dll

Decompiled 2 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.Headstompers;
using Microsoft.CodeAnalysis;
using On.EntityStates;
using On.EntityStates.Headstompers;
using On.RoR2;
using On.RoR2.Items;
using On.RoR2.UI.MainMenu;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Items;
using RoR2.UI.MainMenu;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using WolfoQoL_Client;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("WolfoQoL_Server")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+93e6e0eb42e43feac200f7f69c72b66d6bd3b0d2")]
[assembly: AssemblyProduct("WolfoQoL_Server")]
[assembly: AssemblyTitle("WolfoQoL_Server")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace WolfoQoL_Extras.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	public class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("WolfoQoL_Server.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		public static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace WolfoQoL_Server
{
	public static class Assets
	{
		public static AssetBundle Bundle => Assets.Bundle;
	}
	public static class ArrayUtil
	{
	}
	public class v
	{
		public static Rect rec256 = new Rect(0f, 0f, 256f, 256f);

		public static Rect rec128 = new Rect(0f, 0f, 128f, 128f);

		public static Rect rec64 = new Rect(0f, 0f, 64f, 64f);

		public static Vector2 half = new Vector2(0.5f, 0.5f);
	}
	public class BuffTimers
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_ApplyJumpVelocity <0>__FeatherRemoveBuffs;

			public static hook_ReadBuffs <1>__FeatherClient;

			public static Action<CharacterBody> <2>__CharacterBody_onBodyStartGlobal;
		}

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

			public static hook_StartFlight <>9__13_0;

			public static hook_OnDestroy <>9__13_1;

			public static hook_OnEnter <>9__13_2;

			public static hook_OnExit <>9__13_3;

			public static hook_OnSprintStart <>9__13_4;

			public static hook_OnSprintStop <>9__13_5;

			public static hook_OnEnter <>9__13_6;

			public static hook_OnExit <>9__13_7;

			public static hook_OnEnter <>9__13_8;

			public static hook_OnEnter <>9__13_9;

			public static hook_OnDisable <>9__13_10;

			public static hook_OnTakeDamageServer <>9__13_11;

			public static hook_ForceShieldRegen <>9__13_12;

			public static hook_OnOwnerKillOther <>9__13_13;

			public static hook_OnLanded <>9__17_0;

			public static hook_OnLanded <>9__17_1;

			internal void <Buffs_NewBuffs>b__13_0(orig_StartFlight orig, JetpackController self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					self.targetBody.AddTimedBuff(FakeBugWings, self.duration);
				}
			}

			internal void <Buffs_NewBuffs>b__13_1(orig_OnDestroy orig, JetpackController self)
			{
				orig.Invoke(self);
				if (NetworkServer.active && Object.op_Implicit((Object)(object)self.targetBody))
				{
					self.targetBody.ClearTimedBuffs(FakeBugWings);
				}
			}

			internal void <Buffs_NewBuffs>b__13_2(orig_OnEnter orig, GhostUtilitySkillState self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					float num = GhostUtilitySkillState.baseDuration * (float)((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().inventory.GetItemCount(Items.LunarUtilityReplacement);
					((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().AddTimedBuff(FakeStrides, num);
				}
			}

			internal void <Buffs_NewBuffs>b__13_3(orig_OnExit orig, GhostUtilitySkillState self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().ClearTimedBuffs(FakeStrides);
				}
			}

			internal void <Buffs_NewBuffs>b__13_4(orig_OnSprintStart orig, CharacterBody self)
			{
				orig.Invoke(self);
				if (NetworkServer.active && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintArmor) > 0)
				{
					self.AddBuff(FakeRoseBuckle);
				}
			}

			internal void <Buffs_NewBuffs>b__13_5(orig_OnSprintStop orig, CharacterBody self)
			{
				orig.Invoke(self);
				if (NetworkServer.active && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintArmor) > 0 && self.HasBuff(FakeRoseBuckle))
				{
					self.RemoveBuff(FakeRoseBuckle);
				}
			}

			internal void <Buffs_NewBuffs>b__13_6(orig_OnEnter orig, FrozenState self)
			{
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					for (float num = 0f; num <= self.freezeDuration; num += 0.5f)
					{
						((EntityState)self).characterBody.AddTimedBuffAuthority(FakeFrozen.buffIndex, num);
					}
				}
			}

			internal void <Buffs_NewBuffs>b__13_7(orig_OnExit orig, FrozenState self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					((EntityState)self).characterBody.ClearTimedBuffs(FakeFrozen);
				}
			}

			internal void <Buffs_NewBuffs>b__13_8(orig_OnEnter orig, BaseHeadstompersState self)
			{
				orig.Invoke(self);
				if (NetworkServer.active && self is HeadstompersIdle && self.body.GetBuffCount(FakeHeadstompOn) == 0)
				{
					self.body.AddBuff(FakeHeadstompOn);
				}
			}

			internal void <Buffs_NewBuffs>b__13_9(orig_OnEnter orig, HeadstompersCooldown self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					((BaseHeadstompersState)self).body.RemoveBuff(FakeHeadstompOn);
					float num = self.duration;
					while (0f < num)
					{
						((BaseHeadstompersState)self).body.AddTimedBuff(FakeHeadstompOff, num);
						num -= 1f;
					}
				}
			}

			internal void <Buffs_NewBuffs>b__13_10(orig_OnDisable orig, HeadstomperBodyBehavior self)
			{
				orig.Invoke(self);
				if (NetworkServer.active && (Object)(object)((BaseItemBodyBehavior)self).body != (Object)null)
				{
					((BaseItemBodyBehavior)self).body.RemoveBuff(FakeHeadstompOn);
				}
			}

			internal void <Buffs_NewBuffs>b__13_11(orig_OnTakeDamageServer orig, CharacterBody self, DamageReport damageReport)
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Invalid comparison between Unknown and I4
				orig.Invoke(self, damageReport);
				if (!NetworkServer.active || (int)self.teamComponent.teamIndex != 1 || !(self.outOfDangerStopwatch < 0.5f))
				{
					return;
				}
				if (self.healthComponent.fullShield > 0f && self.healthComponent.shield < self.healthComponent.fullShield)
				{
					float num = 7f - self.outOfDangerStopwatch;
					if (self.healthComponent.itemCounts.missileVoid > 0)
					{
						self.AddTimedBuff(FakeShieldDelayPink, num);
					}
					else
					{
						self.AddTimedBuff(FakeShieldDelay, num);
					}
				}
				if (Object.op_Implicit((Object)(object)self.inventory))
				{
					float num2 = 7f - self.outOfDangerStopwatch;
					if (self.inventory.GetItemCount(Items.OutOfCombatArmor) > 0)
					{
						self.AddTimedBuff(FakeOpalCooldown, num2);
					}
				}
			}

			internal void <Buffs_NewBuffs>b__13_12(orig_ForceShieldRegen orig, HealthComponent self)
			{
				orig.Invoke(self);
				if (Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(FakeShieldDelay))
				{
					self.body.ClearTimedBuffs(FakeShieldDelay);
					self.body.ClearTimedBuffs(FakeShieldDelayPink);
				}
			}

			internal void <Buffs_NewBuffs>b__13_13(orig_OnOwnerKillOther orig, IcicleAuraController self)
			{
				orig.Invoke(self);
				if (NetworkServer.active)
				{
					if (self.cachedOwnerInfo.characterBody.GetBuffCount(FakeFrostRelic) + 1 > self.maxIcicleCount)
					{
						self.cachedOwnerInfo.characterBody.RemoveOldestTimedBuff(FakeFrostRelic);
					}
					self.cachedOwnerInfo.characterBody.AddTimedBuff(FakeFrostRelic, self.icicleDuration);
				}
			}

			internal void <ModSupport>b__17_0(orig_OnLanded orig, CharacterMotor self)
			{
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_0062: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if (Object.op_Implicit((Object)(object)self.body) && self.body.isPlayerControlled)
				{
					self.body.SetBuffCount(FakeFeather.buffIndex, self.body.inventory.GetItemCount(Items.Feather));
					self.body.SetBuffCount(FakeVoidFeather.buffIndex, self.body.inventory.GetItemCount(VV_VoidFeather));
					if (!NetworkServer.active)
					{
						((Component)self).GetComponent<FeatherTrackerClients>().SetVal(self.body.GetBuffCount(FakeFeather), self.body.GetBuffCount(FakeVoidFeather));
					}
				}
			}

			internal void <ModSupport>b__17_1(orig_OnLanded orig, CharacterMotor self)
			{
				//IL_0034: Unknown result type (might be due to invalid IL or missing references)
				orig.Invoke(self);
				if (Object.op_Implicit((Object)(object)self.body) && self.body.isPlayerControlled)
				{
					self.body.SetBuffCount(FakeFeather.buffIndex, self.body.inventory.GetItemCount(Items.Feather));
					if (!NetworkServer.active)
					{
						((Component)self).GetComponent<FeatherTrackerClients>().SetVal(self.body.GetBuffCount(FakeFeather), self.body.GetBuffCount(FakeVoidFeather));
					}
				}
			}
		}

		public static BuffDef FakeHellFire;

		public static BuffDef FakePercentBurn;

		public static BuffDef FakeBugWings;

		public static BuffDef FakeStrides;

		public static BuffDef FakeRoseBuckle;

		public static BuffDef FakeFrozen;

		public static BuffDef FakeHeadstompOn;

		public static BuffDef FakeHeadstompOff;

		public static BuffDef FakeFeather;

		public static BuffDef FakeShieldDelay;

		public static BuffDef FakeShieldDelayPink;

		public static BuffDef FakeFrostRelic;

		public static BuffDef FakeOpalCooldown;

		public static BuffDef FakeVoidFeather;

		public static ItemIndex VV_VoidFeather = (ItemIndex)(-1);

		public static void Buffs_NewBuffs()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0331: Unknown result type (might be due to invalid IL or missing references)
			//IL_0336: Unknown result type (might be due to invalid IL or missing references)
			//IL_033b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dd: Expected O, but got Unknown
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_042a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Expected O, but got Unknown
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Expected O, but got Unknown
			//IL_03ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b8: Expected O, but got Unknown
			//IL_02e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f1: Expected O, but got Unknown
			//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Expected O, but got Unknown
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0511: Unknown result type (might be due to invalid IL or missing references)
			//IL_0516: Unknown result type (might be due to invalid IL or missing references)
			//IL_059f: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Unknown result type (might be due to invalid IL or missing references)
			//IL_049e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a4: Expected O, but got Unknown
			//IL_04be: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c9: Expected O, but got Unknown
			//IL_06b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0736: Unknown result type (might be due to invalid IL or missing references)
			//IL_073b: Unknown result type (might be due to invalid IL or missing references)
			//IL_078c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0791: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0618: Unknown result type (might be due to invalid IL or missing references)
			//IL_061d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0623: Expected O, but got Unknown
			//IL_097e: 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_0988: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a00: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a05: Unknown result type (might be due to invalid IL or missing references)
			//IL_0844: 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_084f: Expected O, but got Unknown
			//IL_063d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0642: Unknown result type (might be due to invalid IL or missing references)
			//IL_0648: Expected O, but got Unknown
			//IL_0933: Unknown result type (might be due to invalid IL or missing references)
			//IL_0938: Unknown result type (might be due to invalid IL or missing references)
			//IL_093e: Expected O, but got Unknown
			//IL_0869: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0874: Expected O, but got Unknown
			//IL_0662: Unknown result type (might be due to invalid IL or missing references)
			//IL_0667: Unknown result type (might be due to invalid IL or missing references)
			//IL_066d: Expected O, but got Unknown
			bool flag = false;
			if (Chainloader.PluginInfos.ContainsKey("com.RiskyLives.RiskyMod"))
			{
				flag = true;
			}
			BuffDef val = LegacyResourcesAPI.Load<BuffDef>("buffdefs/OnFire");
			FakeHellFire = ScriptableObject.CreateInstance<BuffDef>();
			FakeHellFire.iconSprite = val.iconSprite;
			FakeHellFire.buffColor = Color32.op_Implicit(new Color32((byte)50, (byte)188, byte.MaxValue, byte.MaxValue));
			((Object)FakeHellFire).name = "visual_HelFire";
			FakeHellFire.isDebuff = false;
			FakeHellFire.canStack = true;
			FakeHellFire.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeHellFire);
			FakePercentBurn = ScriptableObject.CreateInstance<BuffDef>();
			FakePercentBurn.iconSprite = val.iconSprite;
			FakePercentBurn.buffColor = Color32.op_Implicit(new Color32((byte)203, (byte)53, (byte)38, byte.MaxValue));
			((Object)FakePercentBurn).name = "visual_EnemyBurn";
			FakePercentBurn.isDebuff = false;
			FakePercentBurn.canStack = true;
			FakePercentBurn.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakePercentBurn);
			FakeBugWings = ScriptableObject.CreateInstance<BuffDef>();
			FakeBugWings.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffBeetleUp.png");
			FakeBugWings.buffColor = Color32.op_Implicit(new Color32((byte)218, (byte)136, (byte)251, byte.MaxValue));
			((Object)FakeBugWings).name = "visual_BugFlight";
			FakeBugWings.isDebuff = false;
			FakeBugWings.canStack = false;
			FakeBugWings.ignoreGrowthNectar = !WConfig.BuffsAffectNectar.Value;
			ContentAddition.AddBuffDef(FakeBugWings);
			if (WConfig.cfgBuff_BugFlight.Value)
			{
				object obj = <>c.<>9__13_0;
				if (obj == null)
				{
					hook_StartFlight val2 = delegate(orig_StartFlight orig, JetpackController self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							self.targetBody.AddTimedBuff(FakeBugWings, self.duration);
						}
					};
					<>c.<>9__13_0 = val2;
					obj = (object)val2;
				}
				JetpackController.StartFlight += (hook_StartFlight)obj;
				object obj2 = <>c.<>9__13_1;
				if (obj2 == null)
				{
					hook_OnDestroy val3 = delegate(orig_OnDestroy orig, JetpackController self)
					{
						orig.Invoke(self);
						if (NetworkServer.active && Object.op_Implicit((Object)(object)self.targetBody))
						{
							self.targetBody.ClearTimedBuffs(FakeBugWings);
						}
					};
					<>c.<>9__13_1 = val3;
					obj2 = (object)val3;
				}
				JetpackController.OnDestroy += (hook_OnDestroy)obj2;
			}
			FakeStrides = ScriptableObject.CreateInstance<BuffDef>();
			FakeStrides.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffLunarShellIcon.png");
			FakeStrides.buffColor = Color32.op_Implicit(new Color32((byte)189, (byte)176, byte.MaxValue, byte.MaxValue));
			((Object)FakeStrides).name = "visual_ShadowIntangible";
			FakeStrides.isDebuff = false;
			FakeStrides.canStack = false;
			FakeStrides.ignoreGrowthNectar = !WConfig.BuffsAffectNectar.Value;
			ContentAddition.AddBuffDef(FakeStrides);
			if (WConfig.cfgBuff_Strides.Value)
			{
				object obj3 = <>c.<>9__13_2;
				if (obj3 == null)
				{
					hook_OnEnter val4 = delegate(orig_OnEnter orig, GhostUtilitySkillState self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							float num5 = GhostUtilitySkillState.baseDuration * (float)((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().inventory.GetItemCount(Items.LunarUtilityReplacement);
							((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().AddTimedBuff(FakeStrides, num5);
						}
					};
					<>c.<>9__13_2 = val4;
					obj3 = (object)val4;
				}
				GhostUtilitySkillState.OnEnter += (hook_OnEnter)obj3;
				object obj4 = <>c.<>9__13_3;
				if (obj4 == null)
				{
					hook_OnExit val5 = delegate(orig_OnExit orig, GhostUtilitySkillState self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							((Component)((EntityState)self).outer).GetComponentInParent<CharacterBody>().ClearTimedBuffs(FakeStrides);
						}
					};
					<>c.<>9__13_3 = val5;
					obj4 = (object)val5;
				}
				GhostUtilitySkillState.OnExit += (hook_OnExit)obj4;
			}
			FakeRoseBuckle = ScriptableObject.CreateInstance<BuffDef>();
			FakeRoseBuckle.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffBodyArmor.png");
			FakeRoseBuckle.buffColor = Color32.op_Implicit(new Color32((byte)251, (byte)199, (byte)38, byte.MaxValue));
			((Object)FakeRoseBuckle).name = "visual_SprintArmor";
			FakeRoseBuckle.isDebuff = false;
			FakeRoseBuckle.canStack = false;
			FakeRoseBuckle.ignoreGrowthNectar = !WConfig.BuffsAffectNectar.Value;
			ContentAddition.AddBuffDef(FakeRoseBuckle);
			if (WConfig.cfgBuff_SprintArmor.Value)
			{
				object obj5 = <>c.<>9__13_4;
				if (obj5 == null)
				{
					hook_OnSprintStart val6 = delegate(orig_OnSprintStart orig, CharacterBody self)
					{
						orig.Invoke(self);
						if (NetworkServer.active && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintArmor) > 0)
						{
							self.AddBuff(FakeRoseBuckle);
						}
					};
					<>c.<>9__13_4 = val6;
					obj5 = (object)val6;
				}
				CharacterBody.OnSprintStart += (hook_OnSprintStart)obj5;
				object obj6 = <>c.<>9__13_5;
				if (obj6 == null)
				{
					hook_OnSprintStop val7 = delegate(orig_OnSprintStop orig, CharacterBody self)
					{
						orig.Invoke(self);
						if (NetworkServer.active && Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.SprintArmor) > 0 && self.HasBuff(FakeRoseBuckle))
						{
							self.RemoveBuff(FakeRoseBuckle);
						}
					};
					<>c.<>9__13_5 = val7;
					obj6 = (object)val7;
				}
				CharacterBody.OnSprintStop += (hook_OnSprintStop)obj6;
			}
			FakeFrozen = ScriptableObject.CreateInstance<BuffDef>();
			FakeFrozen.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffBrokenCube.png");
			FakeFrozen.buffColor = Color32.op_Implicit(new Color32((byte)184, (byte)216, (byte)239, byte.MaxValue));
			((Object)FakeFrozen).name = "visual_Frozen";
			FakeFrozen.isDebuff = false;
			FakeFrozen.canStack = true;
			FakeFrozen.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeFrozen);
			if (WConfig.cfgBuff_Frozen.Value && !flag)
			{
				object obj7 = <>c.<>9__13_6;
				if (obj7 == null)
				{
					hook_OnEnter val8 = delegate(orig_OnEnter orig, FrozenState self)
					{
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							for (float num4 = 0f; num4 <= self.freezeDuration; num4 += 0.5f)
							{
								((EntityState)self).characterBody.AddTimedBuffAuthority(FakeFrozen.buffIndex, num4);
							}
						}
					};
					<>c.<>9__13_6 = val8;
					obj7 = (object)val8;
				}
				FrozenState.OnEnter += (hook_OnEnter)obj7;
				object obj8 = <>c.<>9__13_7;
				if (obj8 == null)
				{
					hook_OnExit val9 = delegate(orig_OnExit orig, FrozenState self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							((EntityState)self).characterBody.ClearTimedBuffs(FakeFrozen);
						}
					};
					<>c.<>9__13_7 = val9;
					obj8 = (object)val9;
				}
				FrozenState.OnExit += (hook_OnExit)obj8;
			}
			FakeHeadstompOn = ScriptableObject.CreateInstance<BuffDef>();
			FakeHeadstompOn.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffHeadStompOn.png");
			FakeHeadstompOn.buffColor = Color32.op_Implicit(new Color32(byte.MaxValue, (byte)250, (byte)250, byte.MaxValue));
			((Object)FakeHeadstompOn).name = "visual_HeadstomperReady";
			FakeHeadstompOn.isDebuff = false;
			FakeHeadstompOn.canStack = false;
			FakeHeadstompOn.ignoreGrowthNectar = !WConfig.BuffsAffectNectar.Value;
			ContentAddition.AddBuffDef(FakeHeadstompOn);
			FakeHeadstompOff = ScriptableObject.CreateInstance<BuffDef>();
			FakeHeadstompOff.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffHeadStompOff.png");
			FakeHeadstompOff.buffColor = Color32.op_Implicit(new Color32((byte)250, (byte)250, byte.MaxValue, byte.MaxValue));
			((Object)FakeHeadstompOff).name = "visual_HeadstomperCooldown";
			FakeHeadstompOff.isDebuff = false;
			FakeHeadstompOff.canStack = true;
			FakeHeadstompOff.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeHeadstompOff);
			if (WConfig.cfgBuff_Headstomper.Value && !flag)
			{
				object obj9 = <>c.<>9__13_8;
				if (obj9 == null)
				{
					hook_OnEnter val10 = delegate(orig_OnEnter orig, BaseHeadstompersState self)
					{
						orig.Invoke(self);
						if (NetworkServer.active && self is HeadstompersIdle && self.body.GetBuffCount(FakeHeadstompOn) == 0)
						{
							self.body.AddBuff(FakeHeadstompOn);
						}
					};
					<>c.<>9__13_8 = val10;
					obj9 = (object)val10;
				}
				BaseHeadstompersState.OnEnter += (hook_OnEnter)obj9;
				object obj10 = <>c.<>9__13_9;
				if (obj10 == null)
				{
					hook_OnEnter val11 = delegate(orig_OnEnter orig, HeadstompersCooldown self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							((BaseHeadstompersState)self).body.RemoveBuff(FakeHeadstompOn);
							float num3 = self.duration;
							while (0f < num3)
							{
								((BaseHeadstompersState)self).body.AddTimedBuff(FakeHeadstompOff, num3);
								num3 -= 1f;
							}
						}
					};
					<>c.<>9__13_9 = val11;
					obj10 = (object)val11;
				}
				HeadstompersCooldown.OnEnter += (hook_OnEnter)obj10;
				object obj11 = <>c.<>9__13_10;
				if (obj11 == null)
				{
					hook_OnDisable val12 = delegate(orig_OnDisable orig, HeadstomperBodyBehavior self)
					{
						orig.Invoke(self);
						if (NetworkServer.active && (Object)(object)((BaseItemBodyBehavior)self).body != (Object)null)
						{
							((BaseItemBodyBehavior)self).body.RemoveBuff(FakeHeadstompOn);
						}
					};
					<>c.<>9__13_10 = val12;
					obj11 = (object)val12;
				}
				HeadstomperBodyBehavior.OnDisable += (hook_OnDisable)obj11;
			}
			BuffDef val13 = LegacyResourcesAPI.Load<BuffDef>("buffdefs/MedkitHeal");
			FakeShieldDelay = ScriptableObject.CreateInstance<BuffDef>();
			FakeShieldDelay.iconSprite = val13.iconSprite;
			FakeShieldDelay.buffColor = new Color(0.3529f, 0.4863f, 0.9647f, 1f);
			((Object)FakeShieldDelay).name = "visual_ShieldDelay";
			FakeShieldDelay.isDebuff = false;
			FakeShieldDelay.canStack = false;
			FakeShieldDelay.isCooldown = false;
			FakeShieldDelay.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeShieldDelay);
			FakeShieldDelayPink = ScriptableObject.CreateInstance<BuffDef>();
			FakeShieldDelayPink.iconSprite = val13.iconSprite;
			FakeShieldDelayPink.buffColor = new Color(1f, 0.2235f, 0.7804f, 1f);
			((Object)FakeShieldDelayPink).name = "visual_ShieldDelayPink";
			FakeShieldDelayPink.isDebuff = false;
			FakeShieldDelayPink.canStack = false;
			FakeShieldDelayPink.isCooldown = false;
			FakeShieldDelayPink.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeShieldDelayPink);
			BuffDef val14 = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/OutOfCombatArmor/bdOutOfCombatArmorBuff.asset").WaitForCompletion();
			FakeOpalCooldown = ScriptableObject.CreateInstance<BuffDef>();
			FakeOpalCooldown.iconSprite = val14.iconSprite;
			FakeOpalCooldown.buffColor = new Color(0.4151f, 0.4014f, 0.4014f, 1f);
			((Object)FakeOpalCooldown).name = "visual_OutOfCombatArmorCooldown";
			FakeOpalCooldown.isDebuff = false;
			FakeOpalCooldown.canStack = false;
			FakeOpalCooldown.isCooldown = false;
			FakeOpalCooldown.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeOpalCooldown);
			if (WConfig.cfgBuff_ShieldOpalCooldown.Value)
			{
				object obj12 = <>c.<>9__13_11;
				if (obj12 == null)
				{
					hook_OnTakeDamageServer val15 = delegate(orig_OnTakeDamageServer orig, CharacterBody self, DamageReport damageReport)
					{
						//IL_0017: Unknown result type (might be due to invalid IL or missing references)
						//IL_001d: Invalid comparison between Unknown and I4
						orig.Invoke(self, damageReport);
						if (NetworkServer.active && (int)self.teamComponent.teamIndex == 1 && self.outOfDangerStopwatch < 0.5f)
						{
							if (self.healthComponent.fullShield > 0f && self.healthComponent.shield < self.healthComponent.fullShield)
							{
								float num = 7f - self.outOfDangerStopwatch;
								if (self.healthComponent.itemCounts.missileVoid > 0)
								{
									self.AddTimedBuff(FakeShieldDelayPink, num);
								}
								else
								{
									self.AddTimedBuff(FakeShieldDelay, num);
								}
							}
							if (Object.op_Implicit((Object)(object)self.inventory))
							{
								float num2 = 7f - self.outOfDangerStopwatch;
								if (self.inventory.GetItemCount(Items.OutOfCombatArmor) > 0)
								{
									self.AddTimedBuff(FakeOpalCooldown, num2);
								}
							}
						}
					};
					<>c.<>9__13_11 = val15;
					obj12 = (object)val15;
				}
				CharacterBody.OnTakeDamageServer += (hook_OnTakeDamageServer)obj12;
				object obj13 = <>c.<>9__13_12;
				if (obj13 == null)
				{
					hook_ForceShieldRegen val16 = delegate(orig_ForceShieldRegen orig, HealthComponent self)
					{
						orig.Invoke(self);
						if (Object.op_Implicit((Object)(object)self.body) && self.body.HasBuff(FakeShieldDelay))
						{
							self.body.ClearTimedBuffs(FakeShieldDelay);
							self.body.ClearTimedBuffs(FakeShieldDelayPink);
						}
					};
					<>c.<>9__13_12 = val16;
					obj13 = (object)val16;
				}
				HealthComponent.ForceShieldRegen += (hook_ForceShieldRegen)obj13;
			}
			FakeFrostRelic = ScriptableObject.CreateInstance<BuffDef>();
			FakeFrostRelic.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffFrostRelic.png");
			FakeFrostRelic.buffColor = Color32.op_Implicit(new Color32((byte)202, (byte)229, byte.MaxValue, byte.MaxValue));
			((Object)FakeFrostRelic).name = "visual_FrostRelicGrowth";
			FakeFrostRelic.isDebuff = false;
			FakeFrostRelic.canStack = true;
			FakeFrostRelic.ignoreGrowthNectar = !WConfig.BuffsAffectNectar.Value;
			ContentAddition.AddBuffDef(FakeFrostRelic);
			if (WConfig.cfgBuff_FrostRelic.Value)
			{
				object obj14 = <>c.<>9__13_13;
				if (obj14 == null)
				{
					hook_OnOwnerKillOther val17 = delegate(orig_OnOwnerKillOther orig, IcicleAuraController self)
					{
						orig.Invoke(self);
						if (NetworkServer.active)
						{
							if (self.cachedOwnerInfo.characterBody.GetBuffCount(FakeFrostRelic) + 1 > self.maxIcicleCount)
							{
								self.cachedOwnerInfo.characterBody.RemoveOldestTimedBuff(FakeFrostRelic);
							}
							self.cachedOwnerInfo.characterBody.AddTimedBuff(FakeFrostRelic, self.icicleDuration);
						}
					};
					<>c.<>9__13_13 = val17;
					obj14 = (object)val17;
				}
				IcicleAuraController.OnOwnerKillOther += (hook_OnOwnerKillOther)obj14;
			}
			FakeFeather = ScriptableObject.CreateInstance<BuffDef>();
			FakeFeather.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffFeather.png");
			FakeFeather.buffColor = Color32.op_Implicit(new Color32((byte)99, (byte)192, byte.MaxValue, byte.MaxValue));
			((Object)FakeFeather).name = "visual_BonusJump";
			FakeFeather.isDebuff = false;
			FakeFeather.canStack = true;
			FakeFeather.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeFeather);
			FakeVoidFeather = ScriptableObject.CreateInstance<BuffDef>();
			FakeVoidFeather.iconSprite = FakeFeather.iconSprite;
			FakeVoidFeather.buffColor = new Color(0.7f, 0.45f, 1f, 1f);
			((Object)FakeVoidFeather).name = "visual_BonusJumpVoid";
			FakeVoidFeather.isDebuff = false;
			FakeVoidFeather.canStack = true;
			FakeVoidFeather.ignoreGrowthNectar = true;
			ContentAddition.AddBuffDef(FakeVoidFeather);
		}

		private static void ReplaceBuffOrderIGuess(orig_SetBuffDefs orig, BuffDef[] newBuffDefs)
		{
			try
			{
				BuffDef[] array = (BuffDef[])(object)new BuffDef[newBuffDefs.Length + 1];
				int num = 0;
				for (int i = 0; i < newBuffDefs.Length; i++)
				{
					if ((Object)(object)newBuffDefs[i] == (Object)(object)Buffs.OutOfCombatArmorBuff)
					{
						array[num] = newBuffDefs[i];
						num++;
						array[num] = FakeOpalCooldown;
					}
					else
					{
						array[num] = newBuffDefs[i];
					}
					Debug.Log((object)newBuffDefs[i]);
					Debug.Log((object)array[num]);
					num++;
				}
				orig.Invoke(array);
			}
			catch (Exception ex)
			{
				Debug.LogWarning((object)ex);
				orig.Invoke(newBuffDefs);
			}
		}

		public static void ModSupport()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Invalid comparison between Unknown and I4
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Expected O, but got Unknown
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Expected O, but got Unknown
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Expected O, but got Unknown
			VV_VoidFeather = ItemCatalog.FindItemIndex("VV_ITEM_DASHQUILL_ITEM");
			if (!WConfig.cfgBuff_Feather.Value)
			{
				return;
			}
			if ((int)VV_VoidFeather != -1)
			{
				FakeVoidFeather.isHidden = false;
				object obj = <>c.<>9__17_0;
				if (obj == null)
				{
					hook_OnLanded val = delegate(orig_OnLanded orig, CharacterMotor self)
					{
						//IL_0037: Unknown result type (might be due to invalid IL or missing references)
						//IL_0062: Unknown result type (might be due to invalid IL or missing references)
						//IL_0072: Unknown result type (might be due to invalid IL or missing references)
						orig.Invoke(self);
						if (Object.op_Implicit((Object)(object)self.body) && self.body.isPlayerControlled)
						{
							self.body.SetBuffCount(FakeFeather.buffIndex, self.body.inventory.GetItemCount(Items.Feather));
							self.body.SetBuffCount(FakeVoidFeather.buffIndex, self.body.inventory.GetItemCount(VV_VoidFeather));
							if (!NetworkServer.active)
							{
								((Component)self).GetComponent<FeatherTrackerClients>().SetVal(self.body.GetBuffCount(FakeFeather), self.body.GetBuffCount(FakeVoidFeather));
							}
						}
					};
					<>c.<>9__17_0 = val;
					obj = (object)val;
				}
				CharacterMotor.OnLanded += (hook_OnLanded)obj;
			}
			else
			{
				object obj2 = <>c.<>9__17_1;
				if (obj2 == null)
				{
					hook_OnLanded val2 = delegate(orig_OnLanded orig, CharacterMotor self)
					{
						//IL_0034: Unknown result type (might be due to invalid IL or missing references)
						orig.Invoke(self);
						if (Object.op_Implicit((Object)(object)self.body) && self.body.isPlayerControlled)
						{
							self.body.SetBuffCount(FakeFeather.buffIndex, self.body.inventory.GetItemCount(Items.Feather));
							if (!NetworkServer.active)
							{
								((Component)self).GetComponent<FeatherTrackerClients>().SetVal(self.body.GetBuffCount(FakeFeather), self.body.GetBuffCount(FakeVoidFeather));
							}
						}
					};
					<>c.<>9__17_1 = val2;
					obj2 = (object)val2;
				}
				CharacterMotor.OnLanded += (hook_OnLanded)obj2;
			}
			object obj3 = <>O.<0>__FeatherRemoveBuffs;
			if (obj3 == null)
			{
				hook_ApplyJumpVelocity val3 = FeatherRemoveBuffs;
				<>O.<0>__FeatherRemoveBuffs = val3;
				obj3 = (object)val3;
			}
			GenericCharacterMain.ApplyJumpVelocity += (hook_ApplyJumpVelocity)obj3;
			object obj4 = <>O.<1>__FeatherClient;
			if (obj4 == null)
			{
				hook_ReadBuffs val4 = FeatherClient;
				<>O.<1>__FeatherClient = val4;
				obj4 = (object)val4;
			}
			CharacterBody.ReadBuffs += (hook_ReadBuffs)obj4;
			CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal;
		}

		private static void CharacterBody_onBodyStartGlobal(CharacterBody obj)
		{
			if (!NetworkServer.active && obj.isPlayerControlled)
			{
				((Component)obj).gameObject.AddComponent<FeatherTrackerClients>();
			}
		}

		private static void FeatherClient(orig_ReadBuffs orig, CharacterBody self, NetworkReader reader)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, reader);
			if (self.isPlayerControlled)
			{
				FeatherTrackerClients component = ((Component)self).GetComponent<FeatherTrackerClients>();
				if (Object.op_Implicit((Object)(object)component))
				{
					self.SetBuffCount(FakeFeather.buffIndex, component.amount);
					self.SetBuffCount(FakeVoidFeather.buffIndex, component.amountVoid);
				}
			}
		}

		private static void FeatherRemoveBuffs(orig_ApplyJumpVelocity orig, CharacterMotor characterMotor, CharacterBody characterBody, float horizontalBonus, float verticalBonus, bool vault)
		{
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(characterMotor, characterBody, horizontalBonus, verticalBonus, vault);
			if (characterBody.isPlayerControlled && characterMotor.jumpCount + 1 > characterBody.baseJumpCount)
			{
				characterBody.SetBuffCount(FakeFeather.buffIndex, characterBody.GetBuffCount(FakeFeather) - 1);
				characterBody.SetBuffCount(FakeVoidFeather.buffIndex, characterBody.GetBuffCount(FakeVoidFeather) - 1);
				if (!NetworkServer.active)
				{
					((Component)characterBody).GetComponent<FeatherTrackerClients>().SetVal(characterBody.GetBuffCount(FakeFeather), characterBody.GetBuffCount(FakeVoidFeather));
				}
			}
		}

		public static void GetDotDef()
		{
			DotController.GetDotDef((DotIndex)1).terminalTimedBuff = null;
			DotController.GetDotDef((DotIndex)1).terminalTimedBuffDuration = 0f;
			DotController.GetDotDef((DotIndex)7).terminalTimedBuff = null;
			DotController.GetDotDef((DotIndex)7).terminalTimedBuffDuration = 0f;
			DotController.GetDotDef((DotIndex)2).associatedBuff = FakeHellFire;
			DotController.GetDotDef((DotIndex)3).associatedBuff = FakePercentBurn;
		}
	}
	public class FeatherTrackerClients : MonoBehaviour
	{
		public int amount = 0;

		public int amountVoid = 0;

		public void SetVal(int one, int two)
		{
			amount = one;
			amountVoid = two;
		}
	}
	public class ConsumedItems
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OnInteractionBegin <0>__UsedKeyGiver;

			public static hook_OnBeadReset <1>__CharacterMaster_OnBeadReset;
		}

		public static ItemDef UsedRustedKey;

		public static ItemDef UsedEncrustedKey;

		public static ItemDef UsedPrayerBeads;

		public static void Start()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Expected O, but got Unknown
			CreateItems();
			if (WConfig.cfgIconsUsedKey.Value)
			{
				object obj = <>O.<0>__UsedKeyGiver;
				if (obj == null)
				{
					hook_OnInteractionBegin val = UsedKeyGiver;
					<>O.<0>__UsedKeyGiver = val;
					obj = (object)val;
				}
				PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj;
			}
			if (WConfig.cfgIconsUsedPrayer.Value)
			{
				object obj2 = <>O.<1>__CharacterMaster_OnBeadReset;
				if (obj2 == null)
				{
					hook_OnBeadReset val2 = CharacterMaster_OnBeadReset;
					<>O.<1>__CharacterMaster_OnBeadReset = val2;
					obj2 = (object)val2;
				}
				CharacterMaster.OnBeadReset += (hook_OnBeadReset)obj2;
			}
		}

		private static void CharacterMaster_OnBeadReset(orig_OnBeadReset orig, CharacterMaster self, bool gainedStats)
		{
			orig.Invoke(self, gainedStats);
			if (gainedStats && NetworkServer.active)
			{
				self.inventory.GiveItem(UsedPrayerBeads, 1);
			}
		}

		public static void CreateItems()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Expected O, but got Unknown
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bc: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Expected O, but got Unknown
			UsedRustedKey = ScriptableObject.CreateInstance<ItemDef>();
			((Object)UsedRustedKey).name = "TreasureCacheConsumed";
			UsedRustedKey.deprecatedTier = (ItemTier)5;
			UsedRustedKey.pickupModelPrefab = LegacyResourcesAPI.Load<ItemDef>("itemdefs/TreasureCache").pickupModelPrefab;
			UsedRustedKey.pickupIconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Items/UsedKey.png");
			UsedRustedKey.nameToken = "ITEM_TREASURECACHECONSUMED_NAME";
			UsedRustedKey.pickupToken = "ITEM_TREASURECACHECONSUMED_DESC";
			UsedRustedKey.descriptionToken = "ITEM_TREASURECACHECONSUMED_DESC";
			UsedRustedKey.loreToken = "";
			UsedRustedKey.hidden = false;
			UsedRustedKey.canRemove = false;
			UsedRustedKey.isConsumed = true;
			UsedRustedKey.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)9 };
			CustomItem val = new CustomItem(UsedRustedKey, (ItemDisplayRule[])(object)new ItemDisplayRule[0]);
			ItemAPI.Add(val);
			UsedEncrustedKey = ScriptableObject.CreateInstance<ItemDef>();
			((Object)UsedEncrustedKey).name = "TreasureCacheVoidConsumed";
			UsedEncrustedKey.deprecatedTier = (ItemTier)5;
			UsedEncrustedKey.pickupModelPrefab = LegacyResourcesAPI.Load<ItemDef>("itemdefs/TreasureCacheVoid").pickupModelPrefab;
			UsedEncrustedKey.pickupIconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Items/UsedKeyVoid.png");
			UsedEncrustedKey.nameToken = "ITEM_TREASURECACHEVOIDCONSUMED_NAME";
			UsedEncrustedKey.pickupToken = "ITEM_TREASURECACHEVOIDCONSUMED_DESC";
			UsedEncrustedKey.descriptionToken = "ITEM_TREASURECACHEVOIDCONSUMED_DESC";
			UsedEncrustedKey.loreToken = "";
			UsedEncrustedKey.hidden = false;
			UsedEncrustedKey.canRemove = false;
			UsedEncrustedKey.isConsumed = true;
			UsedEncrustedKey.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)9 };
			CustomItem val2 = new CustomItem(UsedEncrustedKey, (ItemDisplayRule[])(object)new ItemDisplayRule[0]);
			ItemAPI.Add(val2);
			ItemDef val3 = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/ExtraStatsOnLevelUp/ExtraStatsOnLevelUp.asset").WaitForCompletion();
			UsedPrayerBeads = ScriptableObject.CreateInstance<ItemDef>();
			((Object)UsedPrayerBeads).name = "ExtraStatsOnLevelUpConsumed";
			UsedPrayerBeads.deprecatedTier = (ItemTier)5;
			UsedPrayerBeads.pickupModelPrefab = val3.pickupModelPrefab;
			UsedPrayerBeads.pickupIconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Items/UsedBeads.png");
			UsedPrayerBeads.nameToken = "ITEM_EXTRASTATSONLEVELUP_CONSUMED_NAME";
			UsedPrayerBeads.pickupToken = "ITEM_EXTRASTATSONLEVELUP_CONSUMED_PICKUP";
			UsedPrayerBeads.descriptionToken = "ITEM_EXTRASTATSONLEVELUP_CONSUMED_DESC";
			UsedPrayerBeads.loreToken = "Lore?";
			UsedPrayerBeads.hidden = false;
			UsedPrayerBeads.canRemove = false;
			UsedPrayerBeads.isConsumed = true;
			UsedPrayerBeads.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)9 };
			val2 = new CustomItem(UsedPrayerBeads, (ItemDisplayRule[])(object)new ItemDisplayRule[0]);
			ItemAPI.Add(val2);
		}

		public static void UsedKeyGiver(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Invalid comparison between Unknown and I4
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Invalid comparison between Unknown and I4
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, activator);
			if (NetworkServer.active && !self.available)
			{
				if ((int)self.costType == 12)
				{
					((Component)activator).GetComponent<CharacterBody>().inventory.GiveItem(UsedRustedKey, self.cost);
					CharacterMasterNotificationQueue.PushItemTransformNotification(((Component)activator).GetComponent<CharacterBody>().master, Items.TreasureCache.itemIndex, UsedRustedKey.itemIndex, (TransformationType)0);
				}
				else if ((int)self.costType == 13)
				{
					((Component)activator).GetComponent<CharacterBody>().inventory.GiveItem(UsedEncrustedKey, self.cost);
					CharacterMasterNotificationQueue.PushItemTransformNotification(((Component)activator).GetComponent<CharacterBody>().master, Items.TreasureCacheVoid.itemIndex, UsedEncrustedKey.itemIndex, (TransformationType)0);
				}
			}
		}
	}
	public class WConfig
	{
		public static ConfigFile ConfigFile_Server = new ConfigFile(Paths.ConfigPath + "\\Wolfo.WolfoQoL_Server.cfg", true);

		public static ConfigEntry<bool> cfgIconsUsedKey;

		public static ConfigEntry<bool> cfgIconsUsedPrayer;

		public static ConfigEntry<bool> BuffsAffectNectar;

		public static ConfigEntry<bool> BuffsAffectDeathMark;

		public static ConfigEntry<bool> cfgBuff_BugFlight;

		public static ConfigEntry<bool> cfgBuff_Strides;

		public static ConfigEntry<bool> cfgBuff_SprintArmor;

		public static ConfigEntry<bool> cfgBuff_Frozen;

		public static ConfigEntry<bool> cfgBuff_Headstomper;

		public static ConfigEntry<bool> cfgBuff_Feather;

		public static ConfigEntry<bool> cfgBuff_ShieldOpalCooldown;

		public static ConfigEntry<bool> cfgBuff_FrostRelic;

		public static ConfigEntry<bool> cfgBuff_Shocked;

		public static void Start()
		{
			Debug.Log((object)"WQoL InitConfig");
			BuffConfig();
			InitConfig();
			RiskConfig();
		}

		public static void InitConfig()
		{
			cfgIconsUsedKey = ConfigFile_Server.Bind<bool>("Extra Icons", "Consumed Rusted Keys", true, "Just like how Dio leaves a Consumed Dio");
			cfgIconsUsedPrayer = ConfigFile_Server.Bind<bool>("Extra Icons", "Consumed Prayer Beads", true, "This should tell you how many stats a player got from their Prayer Beads.");
		}

		public static void RiskConfig()
		{
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			ModSettingsManager.SetModDescription("Random assortment of Quality of Life. Required by every player.");
			List<ConfigEntry<bool>> list = new List<ConfigEntry<bool>>();
			ConfigEntryBase[] configEntries = ConfigFile_Server.GetConfigEntries();
			ConfigEntryBase[] array = configEntries;
			foreach (ConfigEntryBase val in array)
			{
				if (val.SettingType == typeof(bool))
				{
					ConfigEntry<bool> val2 = (ConfigEntry<bool>)(object)val;
					ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(val2, true));
				}
				else
				{
					Debug.LogWarning((object)("Could not add config " + val.Definition.Key + " of type : " + val.SettingType));
				}
			}
		}

		public static void BuffConfig()
		{
			BuffsAffectNectar = ConfigFile_Server.Bind<bool>("Buffs", "Mod Buffs affect Nectar", false, "Should various buffs added by mod, (Rose Buckler, Head Stomper, Frost Relic) count for Growth Nectar.");
			cfgBuff_Frozen = ConfigFile_Server.Bind<bool>("Buffs", "Frozen", true, "Icon for; 1 Stack per 0.5s of being frozen, to help visualize how long things are frozen for.");
			cfgBuff_Feather = ConfigFile_Server.Bind<bool>("Buffs", "Hopoo Feathers", true, "Icon for; Extra jumps granted by Hopoo Feathers, to know how many jumps you have left, useful especially if you have a lot of them.\nAlso works for VanillaVoids : Quill");
			cfgBuff_ShieldOpalCooldown = ConfigFile_Server.Bind<bool>("Buffs", "Shield & Opal Cooldown", true, "Icon for; Shield and Opal being on cooldown. This does not come in stacks, so a mod that adds visual buff timers is recommended.");
			cfgBuff_Headstomper = ConfigFile_Server.Bind<bool>("Buffs", "Headstomper", true, "Ready and Cooldown buff, like Bands or other items.");
			cfgBuff_FrostRelic = ConfigFile_Server.Bind<bool>("Buffs", "Frost Relic", true, "Icon for; Frost Relic kill stacks.");
			cfgBuff_Strides = ConfigFile_Server.Bind<bool>("Buffs", "Strides of Heresy", true, "Icon for; Being in Strides of Heresy. Duration not visible by default");
			cfgBuff_SprintArmor = ConfigFile_Server.Bind<bool>("Buffs", "Rose Buckler", true, "Icon for; Rose Buckler being active. Weeping Fungus has a buff, why not this.");
			cfgBuff_BugFlight = ConfigFile_Server.Bind<bool>("Buffs", "Milky Chrysalis", true, "Duration not visible by default, but will tell you when you start descending.");
		}
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Wolfo.WolfoQoL_Server", "WolfoQoL_Extras", "4.0.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class WolfoMain : BaseUnityPlugin
	{
		private static readonly Random random = new Random();

		public static bool ClientModInstalled = false;

		public void Awake()
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Expected O, but got Unknown
			WConfig.Start();
			ClientModInstalled = Chainloader.PluginInfos.ContainsKey("Wolfo.WolfoQoL_Client");
			if (!ClientModInstalled)
			{
				Debug.LogWarning((object)"WolfoQoL_Server without WolfoQoL_Client");
				return;
			}
			Texture2D val = Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/icon.png");
			ModSettingsManager.SetModIcon(Sprite.Create(val, new Rect(0f, 0f, 256f, 256f), new Vector2(0.5f, 0.5f)));
			BuffTimers.Buffs_NewBuffs();
			ConsumedItems.Start();
			((ResourceAvailability)(ref GameModeCatalog.availability)).CallWhenAvailable((Action)ModSupport);
			MainMenuController.Start += new hook_Start(OneTimeOnlyLateRunner);
		}

		internal static void ModSupport()
		{
			BuffTimers.ModSupport();
		}

		public void OneTimeOnlyLateRunner(orig_Start orig, MainMenuController self)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			orig.Invoke(self);
			BuffTimers.GetDotDef();
			MainMenuController.Start -= new hook_Start(OneTimeOnlyLateRunner);
		}
	}
}