Decompiled source of WolfoQualityOfLife v4.2.5

WolfoQoL_Client.dll

Decompiled 13 hours 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 EntityStates;
using EntityStates.Bell.BellWeapon;
using EntityStates.Chef;
using EntityStates.Commando;
using EntityStates.Croco;
using EntityStates.FalseSon;
using EntityStates.FalseSonBoss;
using EntityStates.Interactables.GoldBeacon;
using EntityStates.Loader;
using EntityStates.LunarTeleporter;
using EntityStates.Mage;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using EntityStates.MeridianEvent;
using EntityStates.Missions.Arena.NullWard;
using EntityStates.Missions.BrotherEncounter;
using EntityStates.Missions.GeodeSecretMission;
using EntityStates.Missions.Moon;
using EntityStates.QuestVolatileBattery;
using EntityStates.Scrapper;
using EntityStates.ShrineHalcyonite;
using EntityStates.Toolbot;
using EntityStates.VoidRaidCrab;
using EntityStates.VoidSurvivor;
using EntityStates.VoidSurvivor.Weapon;
using HG;
using IL.EntityStates;
using IL.EntityStates.Bell.BellWeapon;
using IL.EntityStates.Merc;
using IL.EntityStates.Merc.Weapon;
using IL.RoR2;
using IL.RoR2.UI;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On;
using On.EntityStates;
using On.EntityStates.Chef;
using On.EntityStates.Commando;
using On.EntityStates.Croco;
using On.EntityStates.FalseSon;
using On.EntityStates.FalseSonBoss;
using On.EntityStates.Interactables.GoldBeacon;
using On.EntityStates.Loader;
using On.EntityStates.LunarTeleporter;
using On.EntityStates.Mage;
using On.EntityStates.Merc;
using On.EntityStates.Merc.Weapon;
using On.EntityStates.Missions.Arena.NullWard;
using On.EntityStates.Missions.BrotherEncounter;
using On.EntityStates.Missions.GeodeSecretMission;
using On.EntityStates.Missions.Moon;
using On.EntityStates.QuestVolatileBattery;
using On.EntityStates.Scrapper;
using On.EntityStates.ShrineHalcyonite;
using On.EntityStates.Toolbot;
using On.EntityStates.VoidRaidCrab;
using On.EntityStates.VoidSurvivor;
using On.EntityStates.VoidSurvivor.Weapon;
using On.RoR2;
using On.RoR2.UI;
using On.RoR2.UI.LogBook;
using On.RoR2.UI.MainMenu;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using RoR2.ContentManagement;
using RoR2.ExpansionManagement;
using RoR2.Hologram;
using RoR2.Items;
using RoR2.Navigation;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.Stats;
using RoR2.UI;
using RoR2.UI.LogBook;
using RoR2.UI.MainMenu;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.UI;
using WolfoFixes;
using WolfoQoL_Client.DeathScreen;
using WolfoQoL_Client.Reminders;
using WolfoQoL_Client.Skins;
using WolfoQoL_Client.Text;

[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_Client")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+b9c8280ffec4d1eebdf86179ba07c3462841e051")]
[assembly: AssemblyProduct("WolfoQoL_Client")]
[assembly: AssemblyTitle("WolfoQoL_Client")]
[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_Client
{
	public static class Assets
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_SetFolders <0>__SetFolders;
		}

		public static AssetBundle Bundle;

		public static PluginInfo PluginInfo;

		public static string Folder = "QualityOfLife\\";

		internal static string assemblyDir => Path.GetDirectoryName(PluginInfo.Location);

		internal static void Init(PluginInfo info)
		{
			//IL_00c3: 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_00ce: Expected O, but got Unknown
			PluginInfo = info;
			if (!Directory.Exists(GetPathToFile(Folder)))
			{
				Folder = "plugins\\" + Folder;
			}
			if (Directory.Exists(GetPathToFile(Folder + "AssetBundles")))
			{
				Bundle = AssetBundle.LoadFromFile(GetPathToFile(Folder + "AssetBundles", "wolfoqualityoflife"));
			}
			else
			{
				Debug.LogError((object)"COULD NOT FIND ASSETBUNDLES FOLDER");
			}
			if (WConfig.cfgTestDisableMod.Value)
			{
				return;
			}
			if (Directory.Exists(GetPathToFile(Folder + "Languages")))
			{
				object obj = <>O.<0>__SetFolders;
				if (obj == null)
				{
					hook_SetFolders val = SetFolders;
					<>O.<0>__SetFolders = val;
					obj = (object)val;
				}
				Language.SetFolders += (hook_SetFolders)obj;
			}
			else
			{
				Debug.LogError((object)"COULD NOT FIND LANGUAGES FOLDER");
			}
		}

		private static void SetFolders(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
		{
			IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(GetPathToFile(Folder + "Languages")), self.name);
			orig.Invoke(self, newFolders.Union(second));
		}

		internal static string GetPathToFile(string folderName)
		{
			return Path.Combine(assemblyDir, folderName);
		}

		internal static string GetPathToFile(string folderName, string fileName)
		{
			return Path.Combine(assemblyDir, folderName, fileName);
		}
	}
	public class ClientChecks
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Start <0>__AddClientListeners;

			public static hook_OnDeserialize <1>__ClientCheck_Multishop;

			public static hook_OnEnter <2>__ScrapperBaseState_OnEnter;

			public static Manipulator <3>__ClientCheck_Purchase;

			public static Manipulator <4>__Inventory_OnDeserialize;

			public static hook_OnDisable <5>__EquipmentDrone_ForceMessage;
		}

		public static void Start()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			//IL_0095: 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_00a0: Expected O, but got Unknown
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			object obj = <>O.<0>__AddClientListeners;
			if (obj == null)
			{
				hook_Start val = AddClientListeners;
				<>O.<0>__AddClientListeners = val;
				obj = (object)val;
			}
			PlayerCharacterMasterController.Start += (hook_Start)obj;
			object obj2 = <>O.<1>__ClientCheck_Multishop;
			if (obj2 == null)
			{
				hook_OnDeserialize val2 = ClientCheck_Multishop;
				<>O.<1>__ClientCheck_Multishop = val2;
				obj2 = (object)val2;
			}
			MultiShopController.OnDeserialize += (hook_OnDeserialize)obj2;
			object obj3 = <>O.<2>__ScrapperBaseState_OnEnter;
			if (obj3 == null)
			{
				hook_OnEnter val3 = ScrapperBaseState_OnEnter;
				<>O.<2>__ScrapperBaseState_OnEnter = val3;
				obj3 = (object)val3;
			}
			ScrapperBaseState.OnEnter += (hook_OnEnter)obj3;
			object obj4 = <>O.<3>__ClientCheck_Purchase;
			if (obj4 == null)
			{
				Manipulator val4 = ClientCheck_Purchase;
				<>O.<3>__ClientCheck_Purchase = val4;
				obj4 = (object)val4;
			}
			PurchaseInteraction.OnDeserialize += (Manipulator)obj4;
			object obj5 = <>O.<4>__Inventory_OnDeserialize;
			if (obj5 == null)
			{
				Manipulator val5 = Inventory_OnDeserialize;
				<>O.<4>__Inventory_OnDeserialize = val5;
				obj5 = (object)val5;
			}
			Inventory.OnDeserialize += (Manipulator)obj5;
			object obj6 = <>O.<5>__EquipmentDrone_ForceMessage;
			if (obj6 == null)
			{
				hook_OnDisable val6 = EquipmentDrone_ForceMessage;
				<>O.<5>__EquipmentDrone_ForceMessage = val6;
				obj6 = (object)val6;
			}
			SummonMasterBehavior.OnDisable += (hook_OnDisable)obj6;
		}

		private static void EquipmentDrone_ForceMessage(orig_OnDisable orig, SummonMasterBehavior self)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Invalid comparison between Unknown and I4
			orig.Invoke(self);
			if (self.callOnEquipmentSpentOnPurchase)
			{
				PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>();
				if (Object.op_Implicit((Object)(object)component) && (int)component.costType == 7)
				{
					ItemLoss_ClientListener.forceEquip = true;
					ItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
					ItemLoss_ClientListener.TryMessage();
				}
			}
		}

		private static void ClientCheck_Purchase(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.PurchaseInteraction", "available")
			});
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.PurchaseInteraction", "available")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Func<bool, PurchaseInteraction, bool>>((Func<bool, PurchaseInteraction, bool>)delegate(bool t, PurchaseInteraction pur)
				{
					if (!t)
					{
						CheckInteractable_ClientOnly(pur, isMulti: false);
					}
					return t;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : PurchaseInteraction_OnDeserialize");
			}
		}

		private static void Inventory_OnDeserialize(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.Inventory", "itemStacks"),
				(Instruction x) => ILPatternMatchingExt.MatchCall(x, "RoR2.NetworkExtensions", "ReadItemStacks")
			}))
			{
				val.EmitDelegate<Func<Inventory, Inventory>>((Func<Inventory, Inventory>)delegate(Inventory inventory)
				{
					//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)
					ItemLoss_ClientListener itemLoss_ClientListener2 = default(ItemLoss_ClientListener);
					if (((Component)inventory).TryGetComponent<ItemLoss_ClientListener>(ref itemLoss_ClientListener2))
					{
						Array.Copy(inventory.itemStacks, itemLoss_ClientListener2.prevItems, itemLoss_ClientListener2.prevItems.Length);
						itemLoss_ClientListener2.prevEquip = inventory.currentEquipmentIndex;
					}
					return inventory;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : Inventory_OnDeserialize");
			}
			val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.Inventory", "equipmentDisabled")
			});
			if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0)
			}))
			{
				val.EmitDelegate<Func<Inventory, Inventory>>((Func<Inventory, Inventory>)delegate(Inventory inventory)
				{
					//IL_0010: Unknown result type (might be due to invalid IL or missing references)
					//IL_0015: Unknown result type (might be due to invalid IL or missing references)
					ItemLoss_ClientListener itemLoss_ClientListener = default(ItemLoss_ClientListener);
					if (((Component)inventory).TryGetComponent<ItemLoss_ClientListener>(ref itemLoss_ClientListener))
					{
						itemLoss_ClientListener.prevEquip = inventory.currentEquipmentIndex;
					}
					return inventory;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed : Inventory_OnDeserialize");
			}
		}

		private static void ScrapperBaseState_OnEnter(orig_OnEnter orig, ScrapperBaseState self)
		{
			orig.Invoke(self);
			if (!NetworkServer.active && self is WaitToBeginScrapping)
			{
				ItemLoss_ClientListener.isScrapper = true;
				ItemLoss_ClientListener.TryMessage();
			}
		}

		public static void AddClientListeners(orig_Start orig, PlayerCharacterMasterController self)
		{
			orig.Invoke(self);
			if (!WolfoMain.HostHasMod)
			{
				((Component)self).gameObject.AddComponent<KillerInfo_ClientListener>();
				((Component)self).gameObject.AddComponent<ItemLoss_ClientListener>();
			}
		}

		private static void ClientCheck_Multishop(orig_OnDeserialize orig, MultiShopController self, NetworkReader reader, bool initialState)
		{
			bool available = self.available;
			orig.Invoke(self, reader, initialState);
			if (available && !self.available && ((Object)self).name.StartsWith("FreeChestMultiShop"))
			{
				CheckInteractable_ClientOnly(null, isMulti: true);
			}
		}

		public static void CheckInteractable_ClientOnly(PurchaseInteraction purchase, bool isMulti)
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: 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_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Expected I4, but got Unknown
			if (isMulti)
			{
				if (Object.op_Implicit((Object)(object)TreasureReminder.instance.Objective_FreeChest))
				{
					TreasureReminder.instance.DeductFreeChestCount();
				}
				return;
			}
			if (purchase.saleStarCompatible)
			{
				ItemLoss_ClientListener.TrySaleStar(purchase);
			}
			CostTypeIndex costType = purchase.costType;
			CostTypeIndex val = costType;
			switch ((int)val)
			{
			case 4:
			case 5:
			case 6:
			case 10:
				if (((Object)((Component)purchase).gameObject).name.StartsWith("LunarCauldron"))
				{
					ItemLoss_ClientListener.token = "ITEM_LOSS_CAULDRON";
				}
				else
				{
					ItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
				}
				ItemLoss_ClientListener.TryMessage();
				break;
			case 7:
				ItemLoss_ClientListener.checkEquip = true;
				ItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
				ItemLoss_ClientListener.TryMessage();
				break;
			case 9:
				ItemLoss_ClientListener.checkEquip = true;
				ItemLoss_ClientListener.token = "ITEM_LOSS_CLEANSING";
				ItemLoss_ClientListener.TryMessage();
				break;
			case 12:
				if (Object.op_Implicit((Object)(object)TreasureReminder.instance))
				{
					TreasureReminder.instance.DeductLockboxCount();
				}
				break;
			case 13:
				if (Object.op_Implicit((Object)(object)TreasureReminder.instance))
				{
					TreasureReminder.instance.DeductLockboxVoidCount();
				}
				break;
			case 0:
				if (Object.op_Implicit((Object)(object)((Component)purchase).gameObject.GetComponent<ShrineBossBehavior>()))
				{
					ShrineBoss_IconStack.AddShrineIcon_Static();
				}
				break;
			case 1:
			case 2:
			case 3:
			case 8:
			case 11:
				break;
			}
		}
	}
	public class KillerInfo_ClientListener : MonoBehaviour
	{
		public GameObject playerBodyObject;

		public CharacterBody charBody;

		public CharacterMaster playerMaster;

		public UnityAction deathEvent;

		public bool killed = false;

		private DamageDealtMessage latestDmg;

		public void OnEnable()
		{
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Expected O, but got Unknown
			if (WolfoMain.HostHasMod)
			{
				Debug.Log((object)"Host has mod, removing Client Workaround : KillerInfo_ClientListener");
				Object.Destroy((Object)(object)this);
				return;
			}
			PlayerCharacterMasterController component = ((Component)this).GetComponent<PlayerCharacterMasterController>();
			if (!((Object)(object)component == (Object)null))
			{
				GlobalEventManager.onClientDamageNotified += onClientDamageNotified;
				playerMaster = component.master;
				playerMaster.onBodyStart += Master_onBodyStart;
				if (deathEvent == null)
				{
					deathEvent = new UnityAction(OnBodyDeath);
					playerMaster.onBodyDeath.AddListener(deathEvent);
				}
			}
		}

		public void OnDisable()
		{
			if (deathEvent != null)
			{
				playerMaster.onBodyDeath.RemoveListener(deathEvent);
			}
			playerMaster.onBodyStart -= Master_onBodyStart;
			GlobalEventManager.onClientDamageNotified -= onClientDamageNotified;
		}

		public void SendMessage()
		{
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			if (latestDmg == null)
			{
				return;
			}
			if (charBody.healthComponent.alive)
			{
				Debug.Log((object)("KillerInfo_ClientListener | Sending message but is Alive?" + (object)charBody));
			}
			if (killed)
			{
				Debug.Log((object)("KillerInfo_ClientListener | Already sent message, how are they dying again?" + (object)charBody));
				return;
			}
			killed = true;
			string bestBodyName = Util.GetBestBodyName(latestDmg.attacker);
			CharacterMaster attackerMaster = null;
			CharacterBody val = null;
			if (Object.op_Implicit((Object)(object)latestDmg.attacker))
			{
				val = latestDmg.attacker.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)val))
				{
					attackerMaster = val.master;
				}
			}
			DeathMessage.DeathAndKillerInventoryMessage(latestDmg.damage, charBody, val, attackerMaster, latestDmg.damageType, latestDmg.damageColorIndex, latestDmg.delayedHit, sendOverNetwork: false);
		}

		public IEnumerator Delay_DeathMessage()
		{
			yield return (object)new WaitForSeconds(0.3f);
			SendMessage();
			latestDmg = null;
		}

		private void Master_onBodyStart(CharacterBody obj)
		{
			killed = false;
			playerBodyObject = ((Component)obj).gameObject;
			charBody = obj;
		}

		private void OnBodyDeath()
		{
			((MonoBehaviour)this).StartCoroutine(Delay_DeathMessage());
			if (WConfig.cfgTestClient.Value)
			{
				SendMessage();
				killed = false;
			}
		}

		private void onClientDamageNotified(DamageDealtMessage dmg)
		{
			if ((Object)(object)dmg.victim == (Object)(object)playerBodyObject)
			{
				latestDmg = dmg;
			}
		}
	}
	public class ItemLoss_ClientListener : MonoBehaviour
	{
		public static ItemLoss_ClientListener latest;

		public static bool isScrapper = false;

		public static bool forceEquip = false;

		public static bool checkEquip = false;

		public static bool checkSaleStar = false;

		public static string token = "ITEM_LOSS_GENERIC";

		public PlayerCharacterMasterController playerMaster;

		public Inventory inventory;

		public int[] prevItems = ItemCatalog.RequestItemStackArray();

		public EquipmentIndex prevEquip = (EquipmentIndex)(-1);

		public void OnEnable()
		{
			if (WolfoMain.HostHasMod)
			{
				Debug.Log((object)"Host has mod, removing Client Workaround : ItemLoss_ClientListener");
				Object.Destroy((Object)(object)this);
			}
			else
			{
				playerMaster = ((Component)this).GetComponent<PlayerCharacterMasterController>();
				inventory = playerMaster.master.inventory;
				inventory.onInventoryChanged += Inventory_onInventoryChanged;
			}
		}

		public void OnDisable()
		{
			if (Object.op_Implicit((Object)(object)inventory))
			{
				inventory.onInventoryChanged -= Inventory_onInventoryChanged;
			}
		}

		private void Inventory_onInventoryChanged()
		{
			latest = this;
			if (forceEquip)
			{
				TryMessage();
			}
		}

		public static void TryMessage()
		{
			if ((Object)(object)latest != (Object)null)
			{
				latest.TryMessageInstance();
			}
		}

		public static void TrySaleStar(PurchaseInteraction purchase)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected I4, but got Unknown
			if (WConfig.cfgMessagesSaleStar.Value && (Object)(object)latest != (Object)null)
			{
				int num = (int)Items.LowerPricedChests.itemIndex;
				int num2 = latest.prevItems[num];
				int num3 = latest.inventory.itemStacks[num];
				Debug.Log((object)("SaleStar " + num2 + " " + num3));
				if (num2 > 0 && num3 == 0)
				{
					latest.prevItems[num] = 0;
					Chat.AddMessage((ChatMessageBase)(object)new SaleStarMessage
					{
						interactableToken = purchase.displayNameToken,
						subjectNetworkUserObject = latest.playerMaster.networkUserObject
					});
				}
			}
		}

		public void TryMessageInstance()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Invalid comparison between Unknown and I4
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Invalid comparison between Unknown and I4
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			bool flag = false;
			if (isScrapper)
			{
				flag = ItemScrapMessage(inventory.itemStacks);
			}
			else if (!forceEquip)
			{
				flag = ((!checkEquip || (int)inventory.currentEquipmentIndex != -1) ? ItemMessage(inventory.itemStacks) : EquipmentMessage());
			}
			else
			{
				if ((int)prevEquip == -1)
				{
					prevEquip = inventory.currentEquipmentIndex;
				}
				flag = EquipmentMessage();
			}
			if (!flag)
			{
				Debug.Log((object)"Attempted message with no differences.");
			}
			forceEquip = false;
			checkEquip = false;
			isScrapper = false;
		}

		public bool ItemScrapMessage(int[] now)
		{
			//IL_0098: 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)
			if (!WConfig.cfgMessageScrap.Value)
			{
				return false;
			}
			bool flag = false;
			int num = -1;
			int itemCount = -1;
			for (int i = 0; i < prevItems.Length; i++)
			{
				if (prevItems[i] > now[i])
				{
					flag = true;
					num = i;
					itemCount = prevItems[i] - now[i];
					break;
				}
			}
			if (flag)
			{
				ItemLoss_Host.ItemLossMessage obj = new ItemLoss_Host.ItemLossMessage
				{
					baseToken = "ITEM_LOSS_SCRAP"
				};
				((SubjectChatMessage)obj).subjectAsNetworkUser = playerMaster.networkUser;
				obj.pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex((ItemIndex)num);
				obj.itemCount = itemCount;
				Chat.AddMessage((ChatMessageBase)(object)obj);
			}
			Array.Copy(inventory.itemStacks, prevItems, prevItems.Length);
			return flag;
		}

		public bool ItemMessage(int[] now)
		{
			//IL_00b9: 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)
			int[] array = ItemCatalog.RequestItemStackArray();
			int num = 0;
			int num2 = -1;
			for (int i = 0; i < prevItems.Length; i++)
			{
				if (prevItems[i] > now[i])
				{
					num++;
					num2 = i;
					array[i] = prevItems[i] - now[i];
				}
			}
			if (num == 1)
			{
				if (token != "ITEM_LOSS_CAULDRON")
				{
					ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)num2);
					if (itemDef.ContainsTag((ItemTag)10))
					{
						token = "ITEM_LOSS_USED";
					}
				}
				ItemLoss_Host.ItemLossMessage obj = new ItemLoss_Host.ItemLossMessage
				{
					baseToken = token
				};
				((SubjectChatMessage)obj).subjectAsNetworkUser = playerMaster.networkUser;
				obj.pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex((ItemIndex)num2);
				Chat.AddMessage((ChatMessageBase)(object)obj);
			}
			else if (num > 0)
			{
				ItemLoss_Host.ItemLossMessage obj2 = new ItemLoss_Host.ItemLossMessage
				{
					baseToken = token
				};
				((SubjectChatMessage)obj2).subjectAsNetworkUser = playerMaster.networkUser;
				obj2.itemStacks = array;
				Chat.AddMessage((ChatMessageBase)(object)obj2);
			}
			Array.Copy(inventory.itemStacks, prevItems, prevItems.Length);
			return num > 0;
		}

		public bool EquipmentMessage()
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Invalid comparison between Unknown and I4
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			bool result = false;
			if ((int)prevEquip != -1)
			{
				result = true;
				ItemLoss_Host.ItemLossMessage obj = new ItemLoss_Host.ItemLossMessage
				{
					baseToken = token,
					pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex(prevEquip)
				};
				((SubjectChatMessage)obj).subjectAsNetworkUser = playerMaster.networkUser;
				Chat.AddMessage((ChatMessageBase)(object)obj);
			}
			else
			{
				Debug.LogWarning((object)"EquipmentMessage but without Equipment?");
			}
			prevEquip = inventory.currentEquipmentIndex;
			return result;
		}
	}
	public class Eclipse
	{
		public static void Start()
		{
			DifficultyColors();
		}

		private static DifficultyIndex EclipseRun_GetEclipseDifficultyIndex(orig_GetEclipseDifficultyIndex orig, int eclipseLevel)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			DifficultyIndex val = orig.Invoke(eclipseLevel);
			Debug.Log((object)("EclipseLevel" + ((object)(DifficultyIndex)(ref val)).ToString()));
			return orig.Invoke(eclipseLevel);
		}

		private static void EclipseRun_OverrideRuleChoices(orig_OverrideRuleChoices orig, EclipseRun self, RuleChoiceMask mustInclude, RuleChoiceMask mustExclude, ulong runSeed)
		{
			Debug.Log((object)"EclipseRuleoverride");
			orig.Invoke(self, mustInclude, mustExclude, runSeed);
			for (int i = 1; i > 17; i++)
			{
				RuleChoiceDef val = RuleCatalog.FindChoiceDef($"Difficulty.Eclipse{i}");
				if (((SerializableBitArray)mustInclude)[val.globalIndex])
				{
					PreGameController.instance.ruleBookBuffer.ApplyChoice(val);
					break;
				}
				((SerializableBitArray)mustInclude)[val.globalIndex] = true;
				((SerializableBitArray)mustExclude)[val.globalIndex] = false;
			}
		}

		private static void DifficultyColors()
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: 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)
			Color color = default(Color);
			((Color)(ref color))..ctor(0.2f, 0.22f, 0.4f, 1f);
			DifficultyCatalog.difficultyDefs[3].color = color;
			DifficultyCatalog.difficultyDefs[4].color = color;
			DifficultyCatalog.difficultyDefs[5].color = color;
			DifficultyCatalog.difficultyDefs[6].color = color;
			DifficultyCatalog.difficultyDefs[7].color = color;
			DifficultyCatalog.difficultyDefs[8].color = color;
			DifficultyCatalog.difficultyDefs[9].color = color;
			DifficultyCatalog.difficultyDefs[10].color = color;
			DifficultyCatalog.difficultyDefs[3].serverTag = "e1";
			DifficultyCatalog.difficultyDefs[4].serverTag = "e2";
			DifficultyCatalog.difficultyDefs[5].serverTag = "e3";
			DifficultyCatalog.difficultyDefs[6].serverTag = "e4";
			DifficultyCatalog.difficultyDefs[7].serverTag = "e5";
			DifficultyCatalog.difficultyDefs[8].serverTag = "e6";
			DifficultyCatalog.difficultyDefs[9].serverTag = "e7";
			DifficultyCatalog.difficultyDefs[10].serverTag = "e8";
		}
	}
	public class ItemOrbPhysicsChanger : MonoBehaviour
	{
		public Rigidbody body;

		public void Awake()
		{
			body = ((Component)this).GetComponent<Rigidbody>();
		}

		public void FixedUpdate()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)body) && body.velocity.y < -30f)
			{
				((Component)this).gameObject.layer = 8;
				Object.Destroy((Object)(object)this);
			}
		}
	}
	public class GameplayQualityOfLife
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_FixedUpdate <0>__LunarTeleporterBaseState_FixedUpdate;

			public static hook_TryZoneStart <1>__TeleportItems;
		}

		public static void Start()
		{
			//IL_004c: 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_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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			if (WConfig.cfgGameplay.Value)
			{
				PrismaticTrial.AllowPrismaticTrials();
				object obj = <>O.<0>__LunarTeleporterBaseState_FixedUpdate;
				if (obj == null)
				{
					hook_FixedUpdate val = LunarTeleporterBaseState_FixedUpdate;
					<>O.<0>__LunarTeleporterBaseState_FixedUpdate = val;
					obj = (object)val;
				}
				LunarTeleporterBaseState.FixedUpdate += (hook_FixedUpdate)obj;
			}
			if (WConfig.ItemsTeleport.Value)
			{
				GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/PickupDroplet.prefab").WaitForCompletion();
				val2.AddComponent<ItemOrbPhysicsChanger>();
				object obj2 = <>O.<1>__TeleportItems;
				if (obj2 == null)
				{
					hook_TryZoneStart val3 = TeleportItems;
					<>O.<1>__TeleportItems = val3;
					obj2 = (object)val3;
				}
				MapZone.TryZoneStart += (hook_TryZoneStart)obj2;
			}
			GeyserLock.Start();
		}

		public static bool IsItem(Collider collider)
		{
			if (Object.op_Implicit((Object)(object)((Component)collider).GetComponent<PickupDropletController>()))
			{
				return true;
			}
			if (Object.op_Implicit((Object)(object)((Component)collider).GetComponent<GenericPickupController>()))
			{
				return true;
			}
			if (Object.op_Implicit((Object)(object)((Component)collider).GetComponent<PickupPickerController>()))
			{
				return true;
			}
			return false;
		}

		public static void TeleportItems(orig_TryZoneStart orig, MapZone self, Collider collider)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Invalid comparison between Unknown and I4
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Expected O, but got Unknown
			//IL_007e: 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_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, collider);
			if ((int)self.zoneType != 0 || !IsItem(collider))
			{
				return;
			}
			GameObject teleportEffectPrefab = Run.instance.GetTeleportEffectPrefab(((Component)collider).gameObject);
			InfiniteTowerRun component = ((Component)Run.instance).GetComponent<InfiniteTowerRun>();
			if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.safeWardController))
			{
				Debug.Log((object)"it tp item back");
				TeleportHelper.TeleportGameObject(((Component)collider).gameObject, ((Component)component.safeWardController).transform.position);
				if (Object.op_Implicit((Object)(object)teleportEffectPrefab))
				{
					EffectManager.SimpleEffect(teleportEffectPrefab, ((Component)component.safeWardController).transform.position, Quaternion.identity, true);
				}
				return;
			}
			SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>();
			val.hullSize = (HullClassification)0;
			val.nodeGraphType = (GraphType)0;
			val.prefab = LegacyResourcesAPI.Load<GameObject>("SpawnCards/HelperPrefab");
			DirectorPlacementRule val2 = new DirectorPlacementRule
			{
				placementMode = (PlacementMode)3,
				position = ((Component)collider).transform.position
			};
			GameObject val3 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, val2, RoR2Application.rng));
			if (Object.op_Implicit((Object)(object)val3))
			{
				TeleportHelper.TeleportGameObject(((Component)collider).gameObject, val3.transform.position);
				if (Object.op_Implicit((Object)(object)teleportEffectPrefab))
				{
					EffectManager.SimpleEffect(teleportEffectPrefab, val3.transform.position, Quaternion.identity, true);
				}
				Object.Destroy((Object)(object)val3);
			}
			Object.Destroy((Object)(object)val);
		}

		public static void LunarTeleporterBaseState_FixedUpdate(orig_FixedUpdate orig, LunarTeleporterBaseState self)
		{
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			((EntityState)self).fixedAge = ((EntityState)self).fixedAge + ((EntityState)self).GetDeltaTime();
			if (NetworkServer.active && Object.op_Implicit((Object)(object)TeleporterInteraction.instance))
			{
				if (TeleporterInteraction.instance.isCharging || TeleporterInteraction.instance.isInFinalSequence)
				{
					self.genericInteraction.Networkinteractability = (Interactability)0;
				}
				else
				{
					self.genericInteraction.Networkinteractability = self.preferredInteractability;
				}
			}
		}
	}
	public class GeyserLock
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__GenericCharacterMain_ProcessJump_bool;

			public static hook_OnEnter <1>__DodgeState_OnEnter;

			public static hook_OnEnter <2>__SlideState_OnEnter;

			public static hook_OnEnter <3>__BaseChargeFist_OnEnter;

			public static hook_OnExit <4>__Assaulter2_OnExit;

			public static hook_OnExit <5>__FocusedAssaultDash_OnExit;

			public static hook_OnExit <6>__EvisDash_OnExit;

			public static hook_OnEnter <7>__FlyUpState_OnEnter;

			public static hook_OnEnter <8>__VoidBlinkBase_OnEnter;

			public static hook_OnEnter <9>__OilSpillBase_OnEnter;

			public static hook_OnEnter <10>__StepBrothers_OnEnter;

			public static hook_OnEnter <11>__GhostUtilitySkillState_OnEnter;
		}

		public static void Start()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Expected O, but got Unknown
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Expected O, but got Unknown
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Expected O, but got Unknown
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Expected O, but got Unknown
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Expected O, but got Unknown
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Expected O, but got Unknown
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Expected O, but got Unknown
			//IL_0151: 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_015c: Expected O, but got Unknown
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Expected O, but got Unknown
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Expected O, but got Unknown
			if (WConfig.CancelGeyserLock_Skill.Value)
			{
				object obj = <>O.<0>__GenericCharacterMain_ProcessJump_bool;
				if (obj == null)
				{
					Manipulator val = GenericCharacterMain_ProcessJump_bool;
					<>O.<0>__GenericCharacterMain_ProcessJump_bool = val;
					obj = (object)val;
				}
				GenericCharacterMain.ProcessJump_bool += (Manipulator)obj;
				object obj2 = <>O.<1>__DodgeState_OnEnter;
				if (obj2 == null)
				{
					hook_OnEnter val2 = DodgeState_OnEnter;
					<>O.<1>__DodgeState_OnEnter = val2;
					obj2 = (object)val2;
				}
				DodgeState.OnEnter += (hook_OnEnter)obj2;
				object obj3 = <>O.<2>__SlideState_OnEnter;
				if (obj3 == null)
				{
					hook_OnEnter val3 = SlideState_OnEnter;
					<>O.<2>__SlideState_OnEnter = val3;
					obj3 = (object)val3;
				}
				SlideState.OnEnter += (hook_OnEnter)obj3;
				object obj4 = <>O.<3>__BaseChargeFist_OnEnter;
				if (obj4 == null)
				{
					hook_OnEnter val4 = BaseChargeFist_OnEnter;
					<>O.<3>__BaseChargeFist_OnEnter = val4;
					obj4 = (object)val4;
				}
				BaseChargeFist.OnEnter += (hook_OnEnter)obj4;
				object obj5 = <>O.<4>__Assaulter2_OnExit;
				if (obj5 == null)
				{
					hook_OnExit val5 = Assaulter2_OnExit;
					<>O.<4>__Assaulter2_OnExit = val5;
					obj5 = (object)val5;
				}
				Assaulter2.OnExit += (hook_OnExit)obj5;
				object obj6 = <>O.<5>__FocusedAssaultDash_OnExit;
				if (obj6 == null)
				{
					hook_OnExit val6 = FocusedAssaultDash_OnExit;
					<>O.<5>__FocusedAssaultDash_OnExit = val6;
					obj6 = (object)val6;
				}
				FocusedAssaultDash.OnExit += (hook_OnExit)obj6;
				object obj7 = <>O.<6>__EvisDash_OnExit;
				if (obj7 == null)
				{
					hook_OnExit val7 = EvisDash_OnExit;
					<>O.<6>__EvisDash_OnExit = val7;
					obj7 = (object)val7;
				}
				EvisDash.OnExit += (hook_OnExit)obj7;
				object obj8 = <>O.<7>__FlyUpState_OnEnter;
				if (obj8 == null)
				{
					hook_OnEnter val8 = FlyUpState_OnEnter;
					<>O.<7>__FlyUpState_OnEnter = val8;
					obj8 = (object)val8;
				}
				FlyUpState.OnEnter += (hook_OnEnter)obj8;
				object obj9 = <>O.<8>__VoidBlinkBase_OnEnter;
				if (obj9 == null)
				{
					hook_OnEnter val9 = VoidBlinkBase_OnEnter;
					<>O.<8>__VoidBlinkBase_OnEnter = val9;
					obj9 = (object)val9;
				}
				VoidBlinkBase.OnEnter += (hook_OnEnter)obj9;
				object obj10 = <>O.<9>__OilSpillBase_OnEnter;
				if (obj10 == null)
				{
					hook_OnEnter val10 = OilSpillBase_OnEnter;
					<>O.<9>__OilSpillBase_OnEnter = val10;
					obj10 = (object)val10;
				}
				OilSpillBase.OnEnter += (hook_OnEnter)obj10;
				object obj11 = <>O.<10>__StepBrothers_OnEnter;
				if (obj11 == null)
				{
					hook_OnEnter val11 = StepBrothers_OnEnter;
					<>O.<10>__StepBrothers_OnEnter = val11;
					obj11 = (object)val11;
				}
				StepBrothers.OnEnter += (hook_OnEnter)obj11;
				object obj12 = <>O.<11>__GhostUtilitySkillState_OnEnter;
				if (obj12 == null)
				{
					hook_OnEnter val12 = GhostUtilitySkillState_OnEnter;
					<>O.<11>__GhostUtilitySkillState_OnEnter = val12;
					obj12 = (object)val12;
				}
				GhostUtilitySkillState.OnEnter += (hook_OnEnter)obj12;
			}
		}

		private static void EvisDash_OnExit(orig_OnExit orig, EvisDash self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void Assaulter2_OnExit(orig_OnExit orig, Assaulter2 self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void FocusedAssaultDash_OnExit(orig_OnExit orig, FocusedAssaultDash self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void StepBrothers_OnEnter(orig_OnEnter orig, StepBrothers self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void OilSpillBase_OnEnter(orig_OnEnter orig, OilSpillBase self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void VoidBlinkBase_OnEnter(orig_OnEnter orig, VoidBlinkBase self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void BaseChargeFist_OnEnter(orig_OnEnter orig, BaseChargeFist self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void FlyUpState_OnEnter(orig_OnEnter orig, FlyUpState self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void DodgeState_OnEnter(orig_OnEnter orig, DodgeState self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void GhostUtilitySkillState_OnEnter(orig_OnEnter orig, GhostUtilitySkillState self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void SlideState_OnEnter(orig_OnEnter orig, SlideState self)
		{
			orig.Invoke(self);
			((EntityState)self).characterMotor.disableAirControlUntilCollision = false;
		}

		private static void GenericCharacterMain_ProcessJump_bool(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			ILCursor val = new ILCursor(il);
			if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.CharacterBody", "onJump")
			}))
			{
				val.EmitDelegate<Func<CharacterBody, CharacterBody>>((Func<CharacterBody, CharacterBody>)delegate(CharacterBody body)
				{
					if (WConfig.CancelGeyserLock_Jump.Value)
					{
						body.characterMotor.disableAirControlUntilCollision = false;
					}
					return body;
				});
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: PlayerPingsIL");
			}
		}

		public static void AllUtilitiesRemoveGeyserLock(orig_OnSkillActivated orig, CharacterBody self, GenericSkill skill)
		{
			orig.Invoke(self, skill);
			if ((Object)(object)self.skillLocator.utility == (Object)(object)skill && Object.op_Implicit((Object)(object)self.characterMotor))
			{
				self.characterMotor.disableAirControlUntilCollision = false;
			}
		}
	}
	public class PrismaticTrial
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_OverrideRuleChoices <0>__WeeklyRun_OverrideRuleChoices;
		}

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

			public static hook_OnEnable <>9__0_0;

			public static hook_GetCurrentSeedCycle <>9__0_1;

			public static hook_ClientSubmitLeaderboardScore <>9__0_2;

			public static hook_OnEnable <>9__0_3;

			internal void <AllowPrismaticTrials>b__0_0(orig_OnEnable orig, WeeklyRunScreenController self)
			{
				Object.Destroy((Object)(object)((Component)((Component)self.leaderboard).gameObject.transform.parent.parent).gameObject);
				((Behaviour)self).enabled = false;
			}

			internal uint <AllowPrismaticTrials>b__0_1(orig_GetCurrentSeedCycle orig)
			{
				return (uint)((double)WeeklyRun.now.Ticks * WolfoMain.random.NextDouble());
			}

			internal void <AllowPrismaticTrials>b__0_2(orig_ClientSubmitLeaderboardScore orig, WeeklyRun self, RunReport runReport)
			{
			}

			internal void <AllowPrismaticTrials>b__0_3(orig_OnEnable orig, DisableIfGameModded self)
			{
			}
		}

		public static void AllowPrismaticTrials()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			//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_0045: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Expected O, but got Unknown
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Expected O, but got Unknown
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				hook_OnEnable val = delegate(orig_OnEnable orig, WeeklyRunScreenController self)
				{
					Object.Destroy((Object)(object)((Component)((Component)self.leaderboard).gameObject.transform.parent.parent).gameObject);
					((Behaviour)self).enabled = false;
				};
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			WeeklyRunScreenController.OnEnable += (hook_OnEnable)obj;
			object obj2 = <>c.<>9__0_1;
			if (obj2 == null)
			{
				hook_GetCurrentSeedCycle val2 = (orig_GetCurrentSeedCycle orig) => (uint)((double)WeeklyRun.now.Ticks * WolfoMain.random.NextDouble());
				<>c.<>9__0_1 = val2;
				obj2 = (object)val2;
			}
			WeeklyRun.GetCurrentSeedCycle += (hook_GetCurrentSeedCycle)obj2;
			object obj3 = <>c.<>9__0_2;
			if (obj3 == null)
			{
				hook_ClientSubmitLeaderboardScore val3 = delegate
				{
				};
				<>c.<>9__0_2 = val3;
				obj3 = (object)val3;
			}
			WeeklyRun.ClientSubmitLeaderboardScore += (hook_ClientSubmitLeaderboardScore)obj3;
			object obj4 = <>c.<>9__0_3;
			if (obj4 == null)
			{
				hook_OnEnable val4 = delegate
				{
				};
				<>c.<>9__0_3 = val4;
				obj4 = (object)val4;
			}
			DisableIfGameModded.OnEnable += (hook_OnEnable)obj4;
			object obj5 = <>O.<0>__WeeklyRun_OverrideRuleChoices;
			if (obj5 == null)
			{
				hook_OverrideRuleChoices val5 = WeeklyRun_OverrideRuleChoices;
				<>O.<0>__WeeklyRun_OverrideRuleChoices = val5;
				obj5 = (object)val5;
			}
			WeeklyRun.OverrideRuleChoices += (hook_OverrideRuleChoices)obj5;
		}

		private static void WeeklyRun_OverrideRuleChoices(orig_OverrideRuleChoices orig, WeeklyRun self, RuleChoiceMask mustInclude, RuleChoiceMask mustExclude, ulong runSeed)
		{
			orig.Invoke(self, mustInclude, mustExclude, runSeed);
		}
	}
	public class LookingGlassPresets
	{
		public enum Preset
		{
			Set,
			Default,
			AllOff,
			Simpler,
			Minimal
		}

		public static ConfigEntry<Preset> cfgLookingGlassPreset;

		public static void Start()
		{
			if (Chainloader.PluginInfos.TryGetValue("droppod.lookingglass", out var _))
			{
				cfgLookingGlassPreset = WConfig.ConfigFile_Client.Bind<Preset>("Hud", "LookingGlass Preset", Preset.Set, "Some Presets for Looking Glass.\nWill overwrite your settings with a premade preset if changed in game, never on startup.\nProbably best to leave it alone if you already customized it.");
				cfgLookingGlassPreset.SettingChanged += CfgLookingGlassPreset_SettingChanged;
			}
		}

		private static void CfgLookingGlassPreset_SettingChanged(object sender, EventArgs e)
		{
			if (Chainloader.PluginInfos.TryGetValue("droppod.lookingglass", out var value))
			{
				ConfigFile config = value.Instance.Config;
				ConfigEntryBase[] configEntries = config.GetConfigEntries();
				ConfigEntryBase[] array = configEntries;
				foreach (ConfigEntryBase val in array)
				{
					if (cfgLookingGlassPreset.Value == Preset.Default)
					{
						val.BoxedValue = val.DefaultValue;
					}
					else if (cfgLookingGlassPreset.Value == Preset.AllOff)
					{
						if (val is ConfigEntry<bool>)
						{
							switch (val.Definition.Key)
							{
							case "Override Stats Display Height":
							case "Attach To Objective Panel":
							case "Use default colors":
								continue;
							}
							val.BoxedValue = false;
						}
					}
					else
					{
						if (cfgLookingGlassPreset.Value < Preset.Simpler)
						{
							continue;
						}
						switch (val.Definition.Key)
						{
						case "Stats Display String":
							if (cfgLookingGlassPreset.Value == Preset.Simpler)
							{
								val.BoxedValue = "<margin-left=0.6em><line-height=110%><align=center><size=120%>Stats:</size></align>\nDamage: [damage]\nCrit Chance: [critWithLuck]\nAttack Speed: [attackSpeed]\nArmor: [armor] | [armorDamageReduction]\nRegen: [regen]\nSpeed: [speed]\nJumps: [availableJumps]/[maxJumps]\nKills: [killCount]\n \n\n</line-height></margin>";
							}
							else if (cfgLookingGlassPreset.Value == Preset.Minimal)
							{
								val.BoxedValue = string.Empty;
							}
							break;
						case "Secondary Stats Display String":
							if (cfgLookingGlassPreset.Value == Preset.Simpler)
							{
								val.BoxedValue = "<margin-left=0.6em><line-height=110%><align=center><size=120%>Stats:</size></align>\nDamage: [damage]\nCrit Chance: [critWithLuck]\nAttack Speed: [attackSpeed]\nArmor: [armor] | [armorDamageReduction]\nRegen: [regen]\nSpeed: [speed]\nJumps: [availableJumps]/[maxJumps]\nKills: [killCount]\nMountain Shrines: [mountainShrines]\nBazaar Portal: [shopPortal]\n \n\n</line-height></margin>";
							}
							else if (cfgLookingGlassPreset.Value == Preset.Minimal)
							{
								val.BoxedValue = "<margin-left=0.6em><line-height=110%>Crit Chance: [critWithLuck]\nMountain Shrines: [mountainShrines]\nBazaar Portal: [shopPortal]</line-height></margin>";
							}
							break;
						case "StatsDisplay":
							val.BoxedValue = true;
							break;
						case "Use Secondary StatsDisplay":
							val.BoxedValue = true;
							break;
						case "StatsDisplay font size":
							val.BoxedValue = 13f;
							break;
						case "StatsDisplay update interval":
							val.BoxedValue = 0.3f;
							break;
						case "Sort Scrapper":
							val.BoxedValue = true;
							break;
						case "Tier Sort":
							val.BoxedValue = val.DefaultValue;
							break;
						case "Stack Size Sort":
							val.BoxedValue = false;
							break;
						case "Sort Command Menu":
							val.BoxedValue = false;
							break;
						case "Command Menu Descending":
							val.BoxedValue = false;
							break;
						case "Disable Command Window Blur":
							val.BoxedValue = false;
							break;
						case "Hide Count If Zero":
							val.BoxedValue = true;
							break;
						case "Tier Order":
							val.BoxedValue = "Tier1 VoidTier1 Tier2 VoidTier2 Tier3 VoidTier3 Boss VoidBoss Lunar NoTier";
							break;
						case "Full Item Description On Pickup":
							val.BoxedValue = false;
							break;
						case "Item Stats On Ping":
							val.BoxedValue = false;
							break;
						case "Permanent Cooldown Indicator For Skills":
							val.BoxedValue = false;
							break;
						case "Permanent Cooldown Indicator For Equip":
							if (cfgLookingGlassPreset.Value == Preset.Minimal)
							{
								val.BoxedValue = false;
							}
							else
							{
								val.BoxedValue = true;
							}
							break;
						case "Item Counters":
							if (cfgLookingGlassPreset.Value == Preset.Minimal)
							{
								val.BoxedValue = false;
							}
							else
							{
								val.BoxedValue = true;
							}
							break;
						}
					}
				}
			}
			cfgLookingGlassPreset.Value = Preset.Set;
		}
	}
	public class RandomMisc
	{
		public class InstantiateGameObjectAtLocation : MonoBehaviour
		{
			public GameObject objectToInstantiate;

			public void Start()
			{
				Object.Instantiate<GameObject>(objectToInstantiate, ((Component)this).transform);
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__BiggerSaleStarRange;

			public static hook_GetBestBodyName <1>__MarriedLemurianNameHook;
		}

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

			public static hook_OnEnter <>9__0_0;

			public static hook_FixedUpdate <>9__0_1;

			public static Func<Instruction, bool> <>9__3_0;

			public static Func<Instruction, bool> <>9__3_8;

			public static Func<GameObject, InteractionDriver, GameObject> <>9__3_1;

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Instruction, bool> <>9__3_3;

			public static Func<Instruction, bool> <>9__3_4;

			public static Func<Instruction, bool> <>9__3_5;

			public static Func<Instruction, bool> <>9__3_6;

			public static Func<GameObject, GameObject> <>9__3_7;

			internal void <Start>b__0_0(orig_OnEnter orig, ReadyMegaBlaster self)
			{
				orig.Invoke(self);
				((EntityState)self).characterBody.AddSpreadBloom(0.4f);
			}

			internal void <Start>b__0_1(orig_FixedUpdate orig, ReadyMegaBlaster self)
			{
				orig.Invoke(self);
				((EntityState)self).characterBody.SetSpreadBloom(0.2f, true);
			}

			internal bool <BiggerSaleStarRange>b__3_0(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Items", "LowerPricedChests");
			}

			internal bool <BiggerSaleStarRange>b__3_8(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "currentInteractable");
			}

			internal GameObject <BiggerSaleStarRange>b__3_1(GameObject target, InteractionDriver interactionDriver)
			{
				//IL_0062: 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_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d5: Expected O, but got Unknown
				//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
				//IL_0204: Unknown result type (might be due to invalid IL or missing references)
				//IL_0215: Unknown result type (might be due to invalid IL or missing references)
				//IL_021a: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cb: 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_00da: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
				//IL_0083: Unknown result type (might be due to invalid IL or missing references)
				//IL_0085: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
				//IL_014b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				if (interactionDriver.networkIdentity.hasAuthority)
				{
					if (interactionDriver.characterBody.inventory.GetItemCount(Items.LowerPricedChests) > 0)
					{
						if ((Object)(object)target == (Object)null)
						{
							float num = 0f;
							float num2 = interactionDriver.interactor.maxInteractionDistance * 2f;
							Vector3 val = interactionDriver.inputBank.aimOrigin;
							Vector3 val2 = interactionDriver.inputBank.aimDirection;
							if (interactionDriver.useAimOffset)
							{
								Vector3 val3 = val + val2 * num2;
								val = interactionDriver.inputBank.aimOrigin + interactionDriver.aimOffset;
								val2 = (val3 - val) / num2;
							}
							Ray val4 = default(Ray);
							((Ray)(ref val4))..ctor(val, val2);
							Ray val5 = CameraRigController.ModifyAimRayIfApplicable(val4, ((Component)interactionDriver).gameObject, ref num);
							target = interactionDriver.interactor.FindBestInteractableObject(val5, num2 + num, ((Ray)(ref val4)).origin, num2);
						}
						if (Object.op_Implicit((Object)(object)target))
						{
							PurchaseInteraction component = target.GetComponent<PurchaseInteraction>();
							if ((Object)(object)component != (Object)null && component.saleStarCompatible && !Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
							{
								interactionDriver.saleStarEffect = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/LowerPricedChestsGlow"), target.transform.position, Quaternion.identity, target.transform);
								return null;
							}
						}
						else if (Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
						{
							Object.Destroy((Object)(object)interactionDriver.saleStarEffect);
							return null;
						}
					}
					else if (Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
					{
						if (!Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect.GetComponent<ObjectScaleCurve>()))
						{
							AnimationCurve val6 = new AnimationCurve();
							val6.keys = (Keyframe[])(object)new Keyframe[3]
							{
								new Keyframe(0f, 1f),
								new Keyframe(0.25f, 1.05f),
								new Keyframe(1f, 0f)
							};
							val6.postWrapMode = (WrapMode)1;
							val6.preWrapMode = (WrapMode)1;
							AnimationCurve overallCurve = val6;
							interactionDriver.saleStarEffect.AddComponent<ObjectScaleCurve>();
							ObjectScaleCurve val7 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(2)).gameObject.AddComponent<ObjectScaleCurve>();
							val7.overallCurve = overallCurve;
							val7.useOverallCurveOnly = true;
							val7.timeMax = 1.1f;
							val7 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(3)).gameObject.AddComponent<ObjectScaleCurve>();
							val7.overallCurve = overallCurve;
							val7.useOverallCurveOnly = true;
							val7.timeMax = 1.1f;
							val7 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(0)).gameObject.AddComponent<ObjectScaleCurve>();
							val7.overallCurve = overallCurve;
							val7.useOverallCurveOnly = true;
							val7.timeMax = 1.1f;
							Object.Destroy((Object)(object)interactionDriver.saleStarEffect, 1.6f);
						}
						return null;
					}
				}
				return null;
			}

			internal bool <BiggerSaleStarRange>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect");
			}

			internal bool <BiggerSaleStarRange>b__3_3(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall(x, "UnityEngine.Object", "Destroy");
			}

			internal bool <BiggerSaleStarRange>b__3_4(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect");
			}

			internal bool <BiggerSaleStarRange>b__3_5(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall(x, "UnityEngine.Object", "Destroy");
			}

			internal bool <BiggerSaleStarRange>b__3_6(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect");
			}

			internal GameObject <BiggerSaleStarRange>b__3_7(GameObject target)
			{
				return null;
			}
		}

		public static BodyIndex LemurianBruiser = (BodyIndex)(-1);

		public static void Start()
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_013e: Unknown result type (might be due to invalid IL or missing references)
			//IL_014b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_029d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f0: Expected O, but got Unknown
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Expected O, but got Unknown
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_0325: Unknown result type (might be due to invalid IL or missing references)
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0358: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0374: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0315: Expected O, but got Unknown
			//IL_03d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0404: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Expected O, but got Unknown
			RandomMiscWithConfig.Start();
			HoldoutZoneFlowers.FlowersForOtherHoldoutZones();
			if (!Chainloader.PluginInfos.ContainsKey("0p41.Sots_Items_Reworked"))
			{
				object obj = <>O.<0>__BiggerSaleStarRange;
				if (obj == null)
				{
					Manipulator val = BiggerSaleStarRange;
					<>O.<0>__BiggerSaleStarRange = val;
					obj = (object)val;
				}
				InteractionDriver.MyFixedUpdate += (Manipulator)obj;
			}
			Material val2 = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC2/Child/matChild.mat").WaitForCompletion();
			val2.SetFloat("_EliteBrightnessMax", 1.09f);
			val2.SetFloat("_EliteBrightnessMin", -0.7f);
			GameObject val3 = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/LowerPricedChestsGlow");
			val3.transform.GetChild(0).localPosition = new Vector3(0f, 0.6f, 0f);
			val3.transform.GetChild(1).localPosition = new Vector3(0f, 0.6f, 0f);
			val3.transform.GetChild(2).localPosition = new Vector3(0f, 0.4f, 0f);
			val3.transform.GetChild(3).localPosition = new Vector3(0f, 0.7f, 0f);
			val3.transform.GetChild(3).localScale = new Vector3(1f, 1.4f, 1f);
			ItemDefInfo val4 = default(ItemDefInfo);
			val4.itemDef = LegacyResourcesAPI.Load<ItemDef>("ItemDefs/LunarTrinket");
			val4.count = 1;
			val4.dontExceedCount = true;
			ItemDefInfo val5 = val4;
			ItemDefInfo[] itemDefInfos = (ItemDefInfo[])(object)new ItemDefInfo[1] { val5 };
			LegacyResourcesAPI.Load<GameObject>("Prefabs/charactermasters/ScavLunar1Master").AddComponent<GivePickupsOnStart>().itemDefInfos = itemDefInfos;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/charactermasters/ScavLunar2Master").AddComponent<GivePickupsOnStart>().itemDefInfos = itemDefInfos;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/charactermasters/ScavLunar3Master").AddComponent<GivePickupsOnStart>().itemDefInfos = itemDefInfos;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/charactermasters/ScavLunar4Master").AddComponent<GivePickupsOnStart>().itemDefInfos = itemDefInfos;
			GameObject val6 = PrefabAPI.InstantiateClone(((Component)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Hacking.prefab").WaitForCompletion().transform.GetChild(2).GetChild(0).GetChild(4)).gameObject, "ShockIndicator", false);
			Material val7 = Object.Instantiate<Material>(((Renderer)((Component)val6.transform.GetChild(0)).GetComponent<MeshRenderer>()).material);
			val7.SetColor("_TintColor", new Color(0f, 0.4f, 0.8f, 1f));
			((Renderer)((Component)val6.transform.GetChild(0)).GetComponent<MeshRenderer>()).material = val7;
			val6.transform.localScale = new Vector3(6.67f, 6.67f, 6.67f);
			GameObject val8 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Captain/CaptainSupplyDrop, Shocking.prefab").WaitForCompletion();
			((Component)val8.transform.GetChild(2).GetChild(0)).gameObject.AddComponent<InstantiateGameObjectAtLocation>().objectToInstantiate = val6;
			object obj2 = <>c.<>9__0_0;
			if (obj2 == null)
			{
				hook_OnEnter val9 = delegate(orig_OnEnter orig, ReadyMegaBlaster self)
				{
					orig.Invoke(self);
					((EntityState)self).characterBody.AddSpreadBloom(0.4f);
				};
				<>c.<>9__0_0 = val9;
				obj2 = (object)val9;
			}
			ReadyMegaBlaster.OnEnter += (hook_OnEnter)obj2;
			object obj3 = <>c.<>9__0_1;
			if (obj3 == null)
			{
				hook_FixedUpdate val10 = delegate(orig_FixedUpdate orig, ReadyMegaBlaster self)
				{
					orig.Invoke(self);
					((EntityState)self).characterBody.SetSpreadBloom(0.2f, true);
				};
				<>c.<>9__0_1 = val10;
				obj3 = (object)val10;
			}
			ReadyMegaBlaster.FixedUpdate += (hook_FixedUpdate)obj3;
			SceneDef val11 = Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/Base/rootjungle/rootjungle.asset").WaitForCompletion();
			MusicTrackDef bossTrack = Addressables.LoadAssetAsync<MusicTrackDef>((object)"RoR2/DLC1/Common/muBossfightDLC1_12.asset").WaitForCompletion();
			val11.bossTrack = bossTrack;
			GameObject val12 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/MiniGeodeBody.prefab").WaitForCompletion();
			val12.transform.localScale = Vector3.one * 1.5f;
			Light component = ((Component)val12.transform.GetChild(0).GetChild(2)).GetComponent<Light>();
			component.range = 25f;
			component.intensity = 8f;
			object obj4 = <>O.<1>__MarriedLemurianNameHook;
			if (obj4 == null)
			{
				hook_GetBestBodyName val13 = MarriedLemurianNameHook;
				<>O.<1>__MarriedLemurianNameHook = val13;
				obj4 = (object)val13;
			}
			Util.GetBestBodyName += (hook_GetBestBodyName)obj4;
			GameObject val14 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/KillEliteFrenzy/NoCooldownEffect.prefab").WaitForCompletion();
			val14.GetComponentInChildren<PostProcessVolume>().priority = 19f;
			PostProcessProfile val15 = Addressables.LoadAssetAsync<PostProcessProfile>((object)"affc373eac3cb4c43b38adc2c7a61451").WaitForCompletion();
			PostProcessEffectSettings obj5 = val15.settings[1];
			((ParameterOverride<float>)(object)((ColorGrading)((obj5 is ColorGrading) ? obj5 : null)).postExposure).value = 0.2f;
			val15.settings[2].active = false;
		}

		public static string MarriedLemurianNameHook(orig_GetBestBodyName orig, GameObject bodyObject)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)bodyObject))
			{
				CharacterBody component = bodyObject.GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && component.bodyIndex == LemurianBruiser && component.inventory.GetItemCount(Items.Clover) >= 20)
				{
					if (component.inventory.GetItemCount(Items.FireRing) > 0)
					{
						return "Kjaro";
					}
					if (component.inventory.GetItemCount(Items.IceRing) > 0)
					{
						return "Runald";
					}
				}
			}
			return orig.Invoke(bodyObject);
		}

		private static void BiggerSaleStarRange(ILContext il)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Expected O, but got Unknown
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Items", "LowerPricedChests")
			});
			if (val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[1]
			{
				(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "currentInteractable")
			}))
			{
				val.Emit(OpCodes.Ldarg_0);
				val.EmitDelegate<Func<GameObject, InteractionDriver, GameObject>>((Func<GameObject, InteractionDriver, GameObject>)delegate(GameObject target, InteractionDriver interactionDriver)
				{
					//IL_0062: 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_0074: Unknown result type (might be due to invalid IL or missing references)
					//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
					//IL_01d5: Expected O, but got Unknown
					//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
					//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
					//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
					//IL_0204: Unknown result type (might be due to invalid IL or missing references)
					//IL_0215: Unknown result type (might be due to invalid IL or missing references)
					//IL_021a: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
					//IL_00cb: 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_00da: 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_00ea: Unknown result type (might be due to invalid IL or missing references)
					//IL_0083: Unknown result type (might be due to invalid IL or missing references)
					//IL_0085: Unknown result type (might be due to invalid IL or missing references)
					//IL_0089: Unknown result type (might be due to invalid IL or missing references)
					//IL_008e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0093: Unknown result type (might be due to invalid IL or missing references)
					//IL_009b: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
					//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
					//IL_00af: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
					//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
					//IL_014b: Unknown result type (might be due to invalid IL or missing references)
					//IL_0150: Unknown result type (might be due to invalid IL or missing references)
					if (interactionDriver.networkIdentity.hasAuthority)
					{
						if (interactionDriver.characterBody.inventory.GetItemCount(Items.LowerPricedChests) > 0)
						{
							if ((Object)(object)target == (Object)null)
							{
								float num = 0f;
								float num2 = interactionDriver.interactor.maxInteractionDistance * 2f;
								Vector3 val2 = interactionDriver.inputBank.aimOrigin;
								Vector3 val3 = interactionDriver.inputBank.aimDirection;
								if (interactionDriver.useAimOffset)
								{
									Vector3 val4 = val2 + val3 * num2;
									val2 = interactionDriver.inputBank.aimOrigin + interactionDriver.aimOffset;
									val3 = (val4 - val2) / num2;
								}
								Ray val5 = default(Ray);
								((Ray)(ref val5))..ctor(val2, val3);
								Ray val6 = CameraRigController.ModifyAimRayIfApplicable(val5, ((Component)interactionDriver).gameObject, ref num);
								target = interactionDriver.interactor.FindBestInteractableObject(val6, num2 + num, ((Ray)(ref val5)).origin, num2);
							}
							if (Object.op_Implicit((Object)(object)target))
							{
								PurchaseInteraction component = target.GetComponent<PurchaseInteraction>();
								if ((Object)(object)component != (Object)null && component.saleStarCompatible && !Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
								{
									interactionDriver.saleStarEffect = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/LowerPricedChestsGlow"), target.transform.position, Quaternion.identity, target.transform);
									return null;
								}
							}
							else if (Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
							{
								Object.Destroy((Object)(object)interactionDriver.saleStarEffect);
								return null;
							}
						}
						else if (Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect))
						{
							if (!Object.op_Implicit((Object)(object)interactionDriver.saleStarEffect.GetComponent<ObjectScaleCurve>()))
							{
								AnimationCurve val7 = new AnimationCurve();
								val7.keys = (Keyframe[])(object)new Keyframe[3]
								{
									new Keyframe(0f, 1f),
									new Keyframe(0.25f, 1.05f),
									new Keyframe(1f, 0f)
								};
								val7.postWrapMode = (WrapMode)1;
								val7.preWrapMode = (WrapMode)1;
								AnimationCurve overallCurve = val7;
								interactionDriver.saleStarEffect.AddComponent<ObjectScaleCurve>();
								ObjectScaleCurve val8 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(2)).gameObject.AddComponent<ObjectScaleCurve>();
								val8.overallCurve = overallCurve;
								val8.useOverallCurveOnly = true;
								val8.timeMax = 1.1f;
								val8 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(3)).gameObject.AddComponent<ObjectScaleCurve>();
								val8.overallCurve = overallCurve;
								val8.useOverallCurveOnly = true;
								val8.timeMax = 1.1f;
								val8 = ((Component)interactionDriver.saleStarEffect.transform.GetChild(0)).gameObject.AddComponent<ObjectScaleCurve>();
								val8.overallCurve = overallCurve;
								val8.useOverallCurveOnly = true;
								val8.timeMax = 1.1f;
								Object.Destroy((Object)(object)interactionDriver.saleStarEffect, 1.6f);
							}
							return null;
						}
					}
					return null;
				});
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect"),
					(Instruction x) => ILPatternMatchingExt.MatchCall(x, "UnityEngine.Object", "Destroy")
				});
				val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect"),
					(Instruction x) => ILPatternMatchingExt.MatchCall(x, "UnityEngine.Object", "Destroy")
				});
				val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, "RoR2.InteractionDriver", "saleStarEffect")
				});
				val.EmitDelegate<Func<GameObject, GameObject>>((Func<GameObject, GameObject>)((GameObject target) => null));
				Debug.Log((object)"IL Found: Sale Star Range");
			}
			else
			{
				Debug.LogWarning((object)"IL Failed: Sale Star Range");
			}
		}
	}
	public class RandomMiscWithConfig
	{
		public static void Start()
		{
		}
	}
	public class BodyIcons
	{
		public class AllyBodyIconOverwrite : MonoBehaviour
		{
			public Texture2D portraitIcon;

			public void Start()
			{
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002f: Invalid comparison between Unknown and I4
				CharacterBody component = ((Component)this).GetComponent<CharacterBody>();
				if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.teamComponent) && (int)component.teamComponent.teamIndex == 1)
				{
					component.portraitIcon = (Texture)(object)portraitIcon;
				}
			}
		}

		public static void Start()
		{
			if (WConfig.cfgIconsBodyIcons.Value)
			{
				NewBodyIcons();
			}
		}

		public static void NewBodyIcons()
		{
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BanditBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/Bandit1.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherHurtBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyBrotherHurt.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherHauntBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyBrotherHurt.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EngiWalkerTurretBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyEngiWalkerTurret.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallRedBuddyBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyRoboBallBuddyRed.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallGreenBuddyBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyRoboBallBuddyGreen.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyBrother.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/SquidTurretBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodySquidTurret.png");
			LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/WispSoulBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyWispSoul.png");
			GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/CU8/DevotedLemurianBody.prefab").WaitForCompletion();
			GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/CU8/DevotedLemurianBruiserBody.prefab").WaitForCompletion();
			val.GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyDevotedLemurian.png");
			val2.GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyDevotedElder.png");
			Texture portraitIcon = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ArtifactShellBody").GetComponent<CharacterBody>().portraitIcon;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ExplosivePotDestructibleBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/ClayPot.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/FusionCellDestructibleBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/FusionCell.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/TimeCrystalBody").GetComponent<CharacterBody>().portraitIcon = portraitIcon;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/AltarSkeletonBody").GetComponent<CharacterBody>().portraitIcon = portraitIcon;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/SulfurPodBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/SulfurPod.png");
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/FalseSonBoss/LunarRain.prefab").WaitForCompletion().GetComponent<CharacterBody>()
				.portraitIcon = portraitIcon;
			Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/CorruptionSpike/CorruptionSpike.prefab").WaitForCompletion().GetComponent<CharacterBody>()
				.portraitIcon = portraitIcon;
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/TitanGoldBody").AddComponent<AllyBodyIconOverwrite>().portraitIcon = Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texBodyTitanGoldAlly.png");
			LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ParentPodBody").GetComponent<CharacterBody>().portraitIcon = (Texture)(object)Assets.Bundle.LoadAsset<Texture2D>("Assets/WQoL/Body/texAncestralIncubatorIcon.png");
		}
	}
	public class BuffIcons
	{
		public static void BuffColorChanger()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			LegacyResourcesAPI.Load<BuffDef>("buffdefs/AffixHauntedRecipient").buffColor = Color32.op_Implicit(new Color32((byte)148, (byte)215, (byte)214, byte.MaxValue));
			LegacyResourcesAPI.Load<BuffDef>("buffdefs/SmallArmorBoost").buffColor = new Color(0.6784f, 0.6118f, 0.4118f, 1f);
			LegacyResourcesAPI.Load<BuffDef>("buffdefs/WhipBoost").buffColor = Color32.op_Implicit(new Color32((byte)245, (byte)158, (byte)73, byte.MaxValue));
		}

		public static void Awake()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: 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_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			if (WConfig.cfgBuff_RepeatColors.Value)
			{
				BuffColorChanger();
			}
			BuffDef val = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/ImmuneToDebuff/bdImmuneToDebuffReady.asset").WaitForCompletion();
			if (((Object)val.iconSprite).name.StartsWith("texBuffImmune"))
			{
				val.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffRaincoat.png");
			}
			BuffDef val2 = Addressables.LoadAssetAsync<BuffDef>((object)"64016639a97b88f43b182dfebe9fee92").WaitForCompletion();
			val2.isHidden = false;
			val2.canStack = false;
			BuffDef val3 = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC2/Items/TeleportOnLowHealth/bdTeleportOnLowHealthActive.asset").WaitForCompletion();
			val3.isHidden = false;
			val3.iconSprite = Assets.Bundle.LoadAsset<Sprite>("Assets/WQoL/Buffs/texBuffTeleportOnLowHealthIcon.png");
		}
	}
	public class LogbookStuff
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_BuildMonsterEntries <0>__AddMissingMonsters;

			public static hook_BuildMonsterEntries <1>__SortBossMonster;

			public static hook_BuildPickupEntries <2>__AddMissingEquipment;

			public static hook_BuildPickupEntries <3>__SortBossEquip_AddBG;

			public static hook_BuildSurvivorEntries <4>__SurvivorEntryColor;

			public static hook_GetPickupStatus <5>__EliteEquipmentViewable;

			public static Action <6>__Add;
		}

		public static void NormalLogbook()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected O, but got Unknown
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Expected O, but got Unknown
			//IL_0095: 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_00a0: Expected O, but got Unknown
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Expected O, but got Unknown
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//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)
			object obj = <>O.<0>__AddMissingMonsters;
			if (obj == null)
			{
				hook_BuildMonsterEntries val = AddMissingMonsters;
				<>O.<0>__AddMissingMonsters = val;
				obj = (object)val;
			}
			LogBookController.BuildMonsterEntries += (hook_BuildMonsterEntries)obj;
			object obj2 = <>O.<1>__SortBossMonster;
			if (obj2 == null)
			{
				hook_BuildMonsterEntries val2 = SortBossMonster;
				<>O.<1>__SortBossMonster = val2;
				obj2 = (object)val2;
			}
			LogBookController.BuildMonsterEntries += (hook_BuildMonsterEntries)obj2;
			object obj3 = <>O.<2>__AddMissingEquipment;
			if (obj3 == null)
			{
				hook_BuildPickupEntries val3 = AddMissingEquipment;
				<>O.<2>__AddMissingEquipment = val3;
				obj3 = (object)val3;
			}
			LogBookController.BuildPickupEntries += (hook_BuildPickupEntries)obj3;
			object obj4 = <>O.<3>__SortBossEquip_AddBG;
			if (obj4 == null)
			{
				hook_BuildPickupEntries val4 = SortBossEquip_AddBG;
				<>O.<3>__SortBossEquip_AddBG = val4;
				obj4 = (object)val4;
			}
			LogBookController.BuildPickupEntries += (hook_BuildPickupEntries)obj4;
			object obj5 = <>O.<4>__SurvivorEntryColor;
			if (obj5 == null)
			{
				hook_BuildSurvivorEntries val5 = SurvivorEntryColor;
				<>O.<4>__SurvivorEntryColor = val5;
				obj5 = (object)val5;
			}
			LogBookController.BuildSurvivorEntries += (hook_BuildSurvivorEntries)obj5;
			object obj6 = <>O.<5>__EliteEquipmentViewable;
			if (obj6 == null)
			{
				hook_GetPickupStatus val6 = EliteEquipmentViewable;
				<>O.<5>__EliteEquipmentViewable = val6;
				obj6 = (object)val6;
			}
			LogBookController.GetPickupStatus += (hook_GetPickupStatus)obj6;
			((ResourceAvailability)(ref SceneCatalog.availability)).CallWhenAvailable((Action)LogSimuStages.Add);
			Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC2/meridian/meridian.asset").WaitForCompletion().stageOrder = 80;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/goldshores").stageOrder = 81;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/bazaar").stageOrder = 90;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/arena").stageOrder = 91;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/voidstage").stageOrder = 92;
			Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC1/voidraid/voidraid.asset").WaitForCompletion().stageOrder = 93;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/mysteryspace").stageOrder = 110;
			LegacyResourcesAPI.Load<SceneDef>("SceneDefs/limbo").stageOrder = 111;
		}

		private static EntryStatus EliteEquipmentViewable(orig_GetPickupStatus orig, ref Entry entry, UserProfile viewerProfile)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Invalid comparison between Unknown and I4
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: 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_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Invalid comparison between Unknown and I4
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			EntryStatus val = orig.Invoke(ref entry, viewerProfile);
			if ((int)val == 4)
			{
				return val;
			}
			PickupIndex val2 = (PickupIndex)entry.extraData;
			PickupDef pickupDef = PickupCatalog.GetPickupDef(val2);
			EquipmentIndex val3 = (EquipmentIndex)((pickupDef == null) ? (-1) : ((int)pickupDef.equipmentIndex));
			if ((int)val3 != -1)
			{
				EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(val3);
				if (Object.op_Implicit((Object)(object)equipmentDef.passiveBuffDef) && equipmentDef.passiveBuffDef.isElite)
				{
					if (viewerProfile.HasDiscoveredPickup(val2))
					{
						return (EntryStatus)4;
					}
					bool flag = false;
					if ((Object)(object)equipmentDef == (Object)(object)Equipment.AffixLunar)
					{
						flag = viewerProfile.HasUnlockable(Items.LunarBadLuck.unlockableDef);
					}
					else if ((Object)(object)equipmentDef == (Object)(object)Equipment.EliteVoidEquipment)
					{
						flag = viewerProfile.HasAchievement("Characters.VoidSurvivor");
					}
					else if ((Object)(object)equipmentDef == (Object)(object)Equipment.EliteAurelioniteEquipment)
					{
						flag = viewerProfile.HasUnlockable(Equipment.HealAndRevive.unlockableDef);
					}
					else
					{
						EliteDef eliteDef = equipmentDef.passiveBuffDef.eliteDef;
						flag = (((int)eliteDef.devotionLevel != 2) ? viewerProfile.HasUnlockable(Survivors.Captain.unlockableDef) : viewerProfile.HasUnlockable(Items.Clover.unlockableDef));
					}
					if (flag)
					{
						return (EntryStatus)4;
					}
					return (EntryStatus)3;
				}
			}
			return val;
		}

		private static Entry[] SortBossMonster(orig_BuildMonsterEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
		{
			if (!WConfig.cfgLogbook_SortBosses.Value)
			{
				return orig.Invoke(expansionAvailability);
			}
			Entry[] array = orig.Invoke(expansionAvailability);
			List<Entry> list = new List<Entry>();
			List<Entry> list2 = new List<Entry>();
			for (int i = 0; i < array.Length; i++)
			{
				object extraData = array[i].extraData;
				if (((CharacterBody)((extraData is CharacterBody) ? extraData : null)).isChampion)
				{
					list2.Add(array[i]);
				}
				else
				{
					list.Add(array[i]);
				}
			}
			list.AddRange(list2);
			return list.ToArray();
		}

		public static Entry[] AddMissingMonsters(orig_BuildMonsterEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
		{
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			if (!WConfig.cfgLogbook_More.Value)
			{
				return orig.Invoke(expansionAvailability);
			}
			GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GupBody");
			GameObject val2 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GeepBody");
			GameObject val3 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GipBody");
			ModelPanelParameters val4 = ((Component)val2.transform.GetChild(0).GetChild(0)).gameObject.AddComponent<ModelPanelParameters>();
			ModelPanelParameters val5 = ((Component)val3.transform.GetChild(0).GetChild(0)).gameObject.AddComponent<ModelPanelParameters>();
			UnlockableDef logUnlockableDef = val.GetComponent<DeathRewards>().logUnlockableDef;
			val2.GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef;
			val3.GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef;
			UnlockableDef logUnlockableDef2 = LegacyResourcesAPI.Load<UnlockableDef>("UnlockableDefs/Logs.Stages.limbo");
			GameObject val6 = Le