Decompiled source of ShadyMod v1.0.12

BepInEx/plugins/Andy.ShadyMod/Andy.ShadyMod.dll

Decompiled 8 hours ago
using System;
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 Andy.ShadyMod.NetcodePatcher;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using On.GameNetcodeStuff;
using ShadyMod.Interactions;
using ShadyMod.Model;
using ShadyMod.Network;
using ShadyMod.Patches;
using ShadyMod.Perks;
using TMPro;
using Unity.Netcode;
using UnityEngine;

[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("Andy.ShadyMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.12.0")]
[assembly: AssemblyInformationalVersion("1.0.12+de77d5d0b689faef5d5b63c3744e38d99725f6af")]
[assembly: AssemblyProduct("ShadyMod")]
[assembly: AssemblyTitle("Andy.ShadyMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.12.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ShadyMod
{
	public static class Helper
	{
		private static readonly List<string> ignoreEnemies = new List<string>(3) { "FlowerSnakeEnemy", "DoublewingedBird", "Blob" };

		public static string FormatVector3(this Vector3 vector3)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			return $"{vector3.x}|{vector3.y}|{vector3.z}";
		}

		public static bool IsSmall(this PlayerControllerB playerControllerB)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			return ((Component)playerControllerB).transform.localScale.x <= 0.5f;
		}

		public static bool GetRandomBoolean()
		{
			return Random.value > 0.5f;
		}

		public static List<EnemyAI> GetNearbyEnemys(Vector3 playerPos, float detectionRadius = 10f)
		{
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			List<EnemyAI> list = new List<EnemyAI>();
			foreach (KeyValuePair<ulong, NetworkObject> spawnedObject in NetworkManager.Singleton.SpawnManager.SpawnedObjects)
			{
				if (!((Object)(object)spawnedObject.Value == (Object)null))
				{
					EnemyAI enemy = ((Component)spawnedObject.Value).GetComponent<EnemyAI>();
					if (!((Object)(object)enemy == (Object)null) && !enemy.isEnemyDead && !ignoreEnemies.Any((string e) => ((Object)enemy).name.Contains(e, StringComparison.OrdinalIgnoreCase)) && Vector3.Distance(playerPos, ((Component)enemy).transform.position) <= detectionRadius)
					{
						list.Add(enemy);
					}
				}
			}
			return list;
		}

		public static void SendChatMessage(string chatMessage)
		{
			try
			{
				string item = "<color=#FF00FF>Shady</color>: <color=#FFFF00>" + chatMessage + "</color>";
				HUDManager.Instance.ChatMessageHistory.Add(item);
				UpdateChatText();
			}
			catch (Exception ex)
			{
				ShadyMod.Logger.LogError((object)("Failed to send chat message: " + ex.Message));
			}
		}

		public static void DisplayTooltip(string message)
		{
			HUDManager.Instance.DisplayTip("ShadyMod", message, false, false, "LC_Tip1");
		}

		private static void UpdateChatText()
		{
			((TMP_Text)HUDManager.Instance.chatText).text = string.Join("\n", HUDManager.Instance.ChatMessageHistory);
		}
	}
	[BepInPlugin("Andy.ShadyMod", "ShadyMod", "1.0.12")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class ShadyMod : BaseUnityPlugin
	{
		public static AssetBundle? assets = null;

		public static List<Texture2D> BookTextures = new List<Texture2D>();

		private bool isInitalized = false;

		private float defaultPlayerMovementSpeed = 0f;

		private Vector3 defaultPlayerScale = Vector3.zero;

		private Vector3 defaultCameraPos = Vector3.zero;

		private float defaultJumpForce = 0f;

		public static List<PerkBase> Perks = new List<PerkBase>();

		public static ShadyMod Instance { get; private set; } = null;


		internal static ManualLogSource Logger { get; private set; } = null;


		internal static Harmony? Harmony { get; set; }

		private void Awake()
		{
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Expected O, but got Unknown
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c8: Expected O, but got Unknown
			//IL_03d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: Expected O, but got Unknown
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02df: Unknown result type (might be due to invalid IL or missing references)
			//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_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_024f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_0299: Unknown result type (might be due to invalid IL or missing references)
			//IL_02af: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
			NetcodePatcher();
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			Patch();
			assets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "shady"));
			if ((Object)(object)assets == (Object)null)
			{
				Logger.LogError((object)"Failed to load custom assets.");
				return;
			}
			for (int i = 1; i <= 18; i++)
			{
				Texture2D item = assets.LoadAsset<Texture2D>($"Assets/AssetStore/shady/Textures/shadybook/page{i}.png");
				BookTextures.Add(item);
			}
			AssetInfo[] iNSTANCE = AssetInfo.INSTANCE;
			foreach (AssetInfo assetInfo in iNSTANCE)
			{
				Item val = assets.LoadAsset<Item>("Assets/AssetStore/shady/Items/" + assetInfo.Name + ".asset");
				if ((Object)(object)val != (Object)null)
				{
					Logger.LogDebug((object)$"Loading asset: {assetInfo.Name} with Rarity: {assetInfo.Rarity} ...");
					val.canBeGrabbedBeforeGameStart = true;
					if (assetInfo.ItemType == ItemType.McHead)
					{
						val.rotationOffset = new Vector3(180f, 0f, 270f);
						val.positionOffset = new Vector3(0f, 0.322f, -0.2f);
					}
					else if (assetInfo.ItemType == ItemType.ShadyBook)
					{
						val.rotationOffset = new Vector3(-180f, 0f, 0f);
						val.positionOffset = new Vector3(0.08f, 0.322f, -0.1f);
					}
					else if (assetInfo.ItemType == ItemType.Donut || assetInfo.ItemType == ItemType.BadDonut)
					{
						val.positionOffset = new Vector3(0f, 0.15f, -0.1f);
					}
					else if (assetInfo.ItemType == ItemType.Weight)
					{
						val.positionOffset = new Vector3(0f, 0.15f, -0.1f);
					}
					else if (assetInfo.ItemType == ItemType.Robot)
					{
						val.rotationOffset = new Vector3(0f, 180f, 90f);
						val.positionOffset = new Vector3(0.4f, 0.3f, -0.1f);
					}
					else if (assetInfo.ItemType == ItemType.PlayerBox)
					{
						val.rotationOffset = new Vector3(180f, 0f, 270f);
						val.positionOffset = new Vector3(0f, 0.5f, -0.2f);
					}
					Utilities.FixMixerGroups(val.spawnPrefab);
					NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
					Items.RegisterScrap(val, assetInfo.Rarity, assetInfo.Moons);
					if (assetInfo.ItemType == ItemType.PlayerBox)
					{
						TerminalNode val2 = assets.LoadAsset<TerminalNode>("Assets/AssetStore/shady/Items/playerBoxTerminalNode.asset");
						Items.RegisterShopItem(val, (TerminalNode)null, (TerminalNode)null, val2, 100);
					}
					else if (assetInfo.ItemType == ItemType.ShadyBanner)
					{
						TerminalNode val3 = assets.LoadAsset<TerminalNode>("Assets/AssetStore/shady/Items/shadyBannerTerminalNote.asset");
						Items.RegisterShopItem(val, (TerminalNode)null, (TerminalNode)null, val3, 50);
					}
					Logger.LogInfo((object)("Asset " + assetInfo.Name + " successfully registered!"));
				}
				else
				{
					Logger.LogWarning((object)("Asset " + assetInfo.Name + " not found!"));
				}
			}
			PlayerControllerB.Update += new hook_Update(PlayerControllerB_Update);
			PlayerControllerB.SwitchToItemSlot += new hook_SwitchToItemSlot(PlayerControllerB_SwitchToItemSlot);
			PlayerControllerB.DropAllHeldItems += new hook_DropAllHeldItems(PlayerControllerB_DropAllHeldItems);
			Logger.LogInfo((object)"Andy.ShadyMod v1.0.12 has loaded!");
		}

		private void PlayerControllerB_DropAllHeldItems(orig_DropAllHeldItems orig, PlayerControllerB self, bool itemsFall, bool disconnecting, bool setInShip, bool setInElevator, Vector3 syncedPlayerPosition, Vector3 syncedHeldObjectPosition, Vector3 syncedHeldObjectRotation, Vector3 syncedPlayerCamPosition, Vector3 syncedPlayerCamRotation)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, itemsFall, disconnecting, setInShip, setInElevator, syncedPlayerPosition, syncedHeldObjectPosition, syncedHeldObjectRotation, syncedPlayerCamPosition, syncedPlayerCamRotation);
			DisablePerks(self);
		}

		private void PlayerControllerB_SwitchToItemSlot(orig_SwitchToItemSlot orig, PlayerControllerB self, int slot, GrabbableObject fillSlotWithItem)
		{
			orig.Invoke(self, slot, fillSlotWithItem);
			DisablePerks(self);
			if (slot >= 0 && slot < self.ItemSlots.Length)
			{
				EnablePerk(self.ItemSlots[slot], self);
			}
		}

		private void PlayerControllerB_Update(orig_Update orig, PlayerControllerB self)
		{
			//IL_002d: 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_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: 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_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: 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_0107: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			if (!isInitalized)
			{
				defaultPlayerMovementSpeed = self.movementSpeed;
				defaultPlayerScale = new Vector3(((Component)self).transform.localScale.x, ((Component)self).transform.localScale.y, ((Component)self).transform.localScale.z);
				defaultCameraPos = new Vector3(((Component)self.gameplayCamera).transform.localPosition.x, ((Component)self.gameplayCamera).transform.localPosition.y, ((Component)self.gameplayCamera).transform.localPosition.z);
				defaultJumpForce = self.jumpForce;
				Perks = new List<PerkBase>(7)
				{
					new SprintPerk(),
					new SpeedPerk(defaultPlayerMovementSpeed),
					new ScaleSmallPerk(defaultPlayerScale, defaultJumpForce, defaultCameraPos),
					new ScaleBigPerk(defaultPlayerScale, defaultJumpForce, defaultCameraPos),
					new EnemyKillPerk(),
					new EnemyStunnPerk(),
					new EnemySmallPerk()
				};
				isInitalized = true;
				Logger.LogInfo((object)"Shady Mod Initialization complemeted!");
				return;
			}
			GrabbableObject val = null;
			if (self.currentItemSlot >= 0 && self.currentItemSlot < self.ItemSlots.Length)
			{
				val = self.ItemSlots[self.currentItemSlot];
			}
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			foreach (PerkBase perk in Perks)
			{
				if (perk.ShouldApply(self, val))
				{
					perk.OnUpdate(self);
				}
			}
		}

		public static void EnablePerk(GrabbableObject item, PlayerControllerB player)
		{
			PlayerControllerB player2 = player;
			GrabbableObject item2 = item;
			if ((Object)(object)item2 == (Object)null)
			{
				return;
			}
			Perks.ForEach(delegate(PerkBase p)
			{
				if (p.ShouldApply(player2, item2))
				{
					Logger.LogDebug((object)("[PERK]: Applying perk " + p.Name + " ..."));
					p.Apply(player2);
				}
			});
		}

		public static void DisablePerks(PlayerControllerB player, bool force = false)
		{
			PlayerControllerB player2 = player;
			Logger.LogDebug((object)"[PERK]: Disabling all perks...");
			Perks.ForEach(delegate(PerkBase p)
			{
				p.Reset(player2, force);
			});
		}

		internal static void Patch()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (Harmony == null)
			{
				Harmony = new Harmony("Andy.ShadyMod");
			}
			Logger.LogDebug((object)"Patching...");
			Harmony.PatchAll();
			Logger.LogDebug((object)"Finished patching!");
		}

		internal static void Unpatch()
		{
			Logger.LogDebug((object)"Unpatching...");
			Harmony? harmony = Harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			Logger.LogDebug((object)"Finished unpatching!");
		}

		private static void NetcodePatcher()
		{
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "Andy.ShadyMod";

		public const string PLUGIN_NAME = "ShadyMod";

		public const string PLUGIN_VERSION = "1.0.12";
	}
}
namespace ShadyMod.Perks
{
	public class EnemyKillPerk : PerkBase
	{
		public override string Name => "Enemy Kill";

		public override string Description => "Kills all nearby enemys";

		public override string TriggerItemName => "lasse";

		public override bool CanPerkBeIncreased => false;

		public override void OnUpdate(PlayerControllerB player)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			base.OnUpdate(player);
			if (StartOfRound.Instance.inShipPhase)
			{
				return;
			}
			List<EnemyAI> nearbyEnemys = Helper.GetNearbyEnemys(((Component)player).transform.position, 5f);
			if (nearbyEnemys.Count <= 0)
			{
				return;
			}
			bool flag = false;
			List<string> list = new List<string>();
			foreach (EnemyAI item in nearbyEnemys)
			{
				ShadyMod.Logger.LogDebug((object)("Killing nearby enemy " + ((Object)item).name + " ..."));
				if ((Object)(object)item.dieSFX != (Object)null)
				{
					player.movementAudio.PlayOneShot(item.dieSFX);
				}
				item.KillEnemy(false);
				list.Add(((Object)item).name.Replace("(Clone)", string.Empty).Replace("(clone)", string.Empty).Replace("Enemy", string.Empty));
				flag = true;
			}
			if (flag)
			{
				Helper.DisplayTooltip("Great job! You killed " + string.Join(", ", list) + "!");
				player.DestroyItemInSlotAndSync(player.currentItemSlot);
			}
		}
	}
	public class EnemySmallPerk : PerkBase
	{
		public override string Name => "Enemy Small Perk";

		public override string Description => "Scales all nearby enemies small";

		public override string TriggerItemName => "patrick";

		public override bool CanPerkBeIncreased => false;

		public override void OnUpdate(PlayerControllerB player)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			base.OnUpdate(player);
			if (StartOfRound.Instance.inShipPhase)
			{
				return;
			}
			List<EnemyAI> nearbyEnemys = Helper.GetNearbyEnemys(((Component)player).transform.position, 5f);
			if (nearbyEnemys.Count <= 0)
			{
				return;
			}
			bool flag = false;
			foreach (EnemyAI item in nearbyEnemys)
			{
				ShadyMod.Logger.LogDebug((object)("Scaling enemy small: " + ((Object)item).name + " ..."));
				float num = 0.5f;
				if (((Object)item).name.Contains("ForestGiant", StringComparison.OrdinalIgnoreCase))
				{
					num = 0.15f;
				}
				((Component)item).transform.localScale = new Vector3(num, num, num);
			}
			if (flag)
			{
				player.DestroyItemInSlotAndSync(player.currentItemSlot);
			}
		}
	}
	public class EnemyStunnPerk : PerkBase
	{
		public override string Name => "Enemy Stunn Perk";

		public override string Description => "Stunns all nearby enemies for 10/30 seconds";

		public override string TriggerItemName => "jedon";

		public override bool CanPerkBeIncreased => true;

		public override void OnUpdate(PlayerControllerB player)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			base.OnUpdate(player);
			if (StartOfRound.Instance.inShipPhase)
			{
				return;
			}
			List<EnemyAI> nearbyEnemys = Helper.GetNearbyEnemys(((Component)player).transform.position, 5f);
			if (nearbyEnemys.Count <= 0)
			{
				return;
			}
			bool flag = false;
			foreach (EnemyAI item in nearbyEnemys)
			{
				if (!((Object)(object)item.stunnedByPlayer != (Object)null) || !(item.stunnedByPlayer.playerUsername == player.playerUsername))
				{
					ShadyMod.Logger.LogDebug((object)("Stunning nearby enemy " + ((Object)item).name + " ..."));
					if ((Object)(object)item.dieSFX != (Object)null)
					{
						player.movementAudio.PlayOneShot(item.dieSFX);
					}
					int num = 10;
					if (ShouldIncreasePerk(player))
					{
						num = 30;
					}
					item.SetEnemyStunned(true, (float)num, player);
					flag = true;
				}
			}
			if (flag)
			{
				Helper.DisplayTooltip("You scared the enemys, time to leave (be fast)!");
				player.DestroyItemInSlotAndSync(player.currentItemSlot);
			}
		}
	}
	public abstract class PerkBase
	{
		protected bool isApplied = false;

		public abstract string Name { get; }

		public abstract string Description { get; }

		public abstract string TriggerItemName { get; }

		public abstract bool CanPerkBeIncreased { get; }

		public virtual void Apply(PlayerControllerB player, bool force = false)
		{
			if (CanPerkBeIncreased && ShouldIncreasePerk(player))
			{
				Helper.DisplayTooltip("Your own head? Great! Your perk will be increased! @" + player.playerUsername);
			}
		}

		public virtual void Reset(PlayerControllerB player, bool force = false)
		{
		}

		public virtual void OnUpdate(PlayerControllerB player)
		{
		}

		public virtual bool ShouldApply(PlayerControllerB player, GrabbableObject item)
		{
			return ((Object)item).name.Contains(TriggerItemName);
		}

		public virtual bool ShouldIncreasePerk(PlayerControllerB player)
		{
			return ((Object)player).name.Contains(TriggerItemName, StringComparison.OrdinalIgnoreCase);
		}
	}
	public class ScaleSmallPerk : PerkBase
	{
		private const float playerJumpForce = 6f;

		private const float playerScale = 0.5f;

		private readonly Vector3 defaultPlayerScale = Vector3.zero;

		private readonly float defaultPlayerJumpForce = 0f;

		private readonly Vector3 defaultCameraPos = Vector3.zero;

		public override string Name => "Scale Small Perk";

		public override string Description => "Small crewmate (really smol)";

		public override string TriggerItemName => "paul";

		public override bool CanPerkBeIncreased => true;

		public ScaleSmallPerk(Vector3 playerScaleDefault, float playerJumpForceDefault, Vector3 defaultCameraPos)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_002b: 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_0039: Unknown result type (might be due to invalid IL or missing references)
			defaultPlayerScale = playerScaleDefault;
			defaultPlayerJumpForce = playerJumpForceDefault;
			this.defaultCameraPos = defaultCameraPos;
		}

		public override void Apply(PlayerControllerB player, bool force = false)
		{
			//IL_0055: 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)
			base.Apply(player);
			if (force || !isApplied)
			{
				float num = 0.5f;
				float num2 = 6f;
				if (ShouldIncreasePerk(player))
				{
					num = 0.4f;
					num2 -= 1f;
				}
				((Component)player).transform.localScale = new Vector3(num, num, num);
				((Component)player.gameplayCamera).transform.localPosition = new Vector3(0f, num, 0f);
				player.jumpForce = num2;
				if (!force)
				{
					NetworkMessage networkMessage = new NetworkMessage
					{
						PlayerName = player.playerUsername,
						Action = "apply",
						PerkName = Name,
						PlayerId = player.actualClientId
					};
					PerkNetworkHandler.Instance.EventServerRpc(networkMessage.ToString());
				}
				if (!force)
				{
					isApplied = true;
				}
			}
		}

		public override void Reset(PlayerControllerB player, bool force = false)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			if (force || isApplied)
			{
				base.Reset(player);
				((Component)player).transform.localScale = defaultPlayerScale;
				((Component)player.gameplayCamera).transform.localPosition = defaultCameraPos;
				player.jumpForce = defaultPlayerJumpForce;
				if (!force)
				{
					NetworkMessage networkMessage = new NetworkMessage
					{
						PlayerName = player.playerUsername,
						Action = "reset",
						PerkName = Name,
						PlayerId = player.actualClientId
					};
					PerkNetworkHandler.Instance.EventServerRpc(networkMessage.ToString());
				}
				if (!force)
				{
					isApplied = false;
				}
			}
		}
	}
	public class ScaleBigPerk : PerkBase
	{
		private const float playerJumpForce = 20f;

		private const float playerScale = 1.25f;

		private readonly Vector3 defaultPlayerScale = Vector3.zero;

		private readonly float defaultPlayerJumpForce = 0f;

		private readonly Vector3 defaultCameraPos = Vector3.zero;

		public override string Name => "Scale Big Perk";

		public override string Description => "Big crewmate (fr)";

		public override string TriggerItemName => "aveloth";

		public override bool CanPerkBeIncreased => true;

		public ScaleBigPerk(Vector3 playerScaleDefault, float playerJumpForceDefault, Vector3 defaultCameraPos)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: 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_002b: 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_0039: Unknown result type (might be due to invalid IL or missing references)
			defaultPlayerScale = playerScaleDefault;
			defaultPlayerJumpForce = playerJumpForceDefault;
			this.defaultCameraPos = defaultCameraPos;
		}

		public override void Apply(PlayerControllerB player, bool force = false)
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			if (force || !isApplied)
			{
				base.Apply(player);
				float num = 1.25f;
				float num2 = 20f;
				if (ShouldIncreasePerk(player))
				{
					num += 0.5f;
					num2 += 2f;
				}
				((Component)player).transform.localScale = new Vector3(num, num, num);
				((Component)player.gameplayCamera).transform.localPosition = new Vector3(0f, num, 0f);
				player.jumpForce = num2;
				if (!force)
				{
					NetworkMessage networkMessage = new NetworkMessage
					{
						PlayerName = player.playerUsername,
						Action = "apply",
						PerkName = Name,
						PlayerId = player.actualClientId
					};
					PerkNetworkHandler.Instance.EventServerRpc(networkMessage.ToString());
				}
				if (!force)
				{
					isApplied = true;
				}
			}
		}

		public override void Reset(PlayerControllerB player, bool force = false)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			if (force || isApplied)
			{
				base.Reset(player);
				((Component)player).transform.localScale = defaultPlayerScale;
				((Component)player.gameplayCamera).transform.localPosition = defaultCameraPos;
				player.jumpForce = defaultPlayerJumpForce;
				if (!force)
				{
					NetworkMessage networkMessage = new NetworkMessage
					{
						PlayerName = player.playerUsername,
						Action = "reset",
						PerkName = Name,
						PlayerId = player.actualClientId
					};
					PerkNetworkHandler.Instance.EventServerRpc(networkMessage.ToString());
				}
				if (!force)
				{
					isApplied = false;
				}
			}
		}
	}
	public class SpeedPerk : PerkBase
	{
		private const float playerMovementSpeedPerk = 10f;

		private const float movementIncrease = 5f;

		private readonly float defaultMovementSpeed = 0f;

		public override string Name => "Speed Perk";

		public override string Description => "The player moves faster than normal";

		public override string TriggerItemName => "belebt";

		public override bool CanPerkBeIncreased => true;

		public SpeedPerk(float defaultMovementSpeed)
		{
			this.defaultMovementSpeed = defaultMovementSpeed;
		}

		public override void Apply(PlayerControllerB player, bool force = false)
		{
			if (force || !isApplied)
			{
				base.Apply(player);
				player.movementSpeed = 10f;
				if (ShouldIncreasePerk(player))
				{
					player.movementSpeed += 5f;
				}
				if (!force)
				{
					isApplied = true;
				}
			}
		}

		public override void Reset(PlayerControllerB player, bool force = false)
		{
			if (force || isApplied)
			{
				base.Reset(player);
				player.movementSpeed = defaultMovementSpeed;
				if (!force)
				{
					isApplied = false;
				}
			}
		}
	}
	public class SprintPerk : PerkBase
	{
		public override string Name => "Sprint Perk";

		public override string Description => "Endless stamina";

		public override string TriggerItemName => "andy";

		public override bool CanPerkBeIncreased => false;

		public override void OnUpdate(PlayerControllerB player)
		{
			base.OnUpdate(player);
			player.sprintMeter = 1f;
		}
	}
}
namespace ShadyMod.Patches
{
	[HarmonyPatch]
	public class GrabbableObjectPatch
	{
		public static readonly Dictionary<GrabbableObject, PlayerBoxInfo> PlayerBoxes = new Dictionary<GrabbableObject, PlayerBoxInfo>();

		public static readonly Dictionary<GrabbableObject, int> BookPageAssociation = new Dictionary<GrabbableObject, int>();

		private const int MAX_PLAYER_IN_BOX = 2;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GrabbableObject), "ItemActivate")]
		public static void OnItemActivate(GrabbableObject __instance, bool used, bool buttonDown = true)
		{
			if (!AssetInfo.IsShadyItem(((Object)__instance).name))
			{
				return;
			}
			ShadyMod.Logger.LogDebug((object)("OnItemActivate called: " + ((Object)__instance).name + "!"));
			AssetInfo shadyNameByName = AssetInfo.GetShadyNameByName(((Object)__instance).name);
			if (shadyNameByName == null)
			{
				return;
			}
			switch (shadyNameByName.ItemType)
			{
			case ItemType.McHead:
				if (!StartOfRound.Instance.inShipPhase)
				{
					PlayerTeleportInteraction.Execute(__instance, __instance.playerHeldBy, shadyNameByName);
				}
				break;
			case ItemType.Donut:
			case ItemType.BadDonut:
				if (!StartOfRound.Instance.inShipPhase)
				{
					DonutInteraction.ExecuteDonutInteraction(__instance, __instance.playerHeldBy, shadyNameByName);
				}
				break;
			case ItemType.Robot:
				((Component)__instance).gameObject.GetComponent<AudioSource>().PlayOneShot(__instance.itemProperties.grabSFX, 1f);
				break;
			case ItemType.ShadyBook:
			{
				Renderer componentInChildren = ((Component)__instance).GetComponentInChildren<Renderer>();
				if (!((Object)(object)componentInChildren == (Object)null))
				{
					if (!BookPageAssociation.ContainsKey(__instance))
					{
						BookPageAssociation.Add(__instance, 2);
					}
					Material[] materials = componentInChildren.materials;
					int num = BookPageAssociation[__instance];
					materials[2].mainTexture = (Texture)(object)ShadyMod.BookTextures[num];
					if (num + 1 < ShadyMod.BookTextures.Count)
					{
						materials[3].mainTexture = (Texture)(object)ShadyMod.BookTextures[num + 1];
					}
					else
					{
						materials[3].mainTexture = (Texture)(object)ShadyMod.BookTextures[0];
					}
					componentInChildren.materials = materials;
					num += 2;
					if (num >= ShadyMod.BookTextures.Count)
					{
						num = 0;
					}
					((Component)__instance).gameObject.GetComponent<AudioSource>().PlayOneShot(__instance.itemProperties.grabSFX, 1f);
					BookPageAssociation[__instance] = num;
				}
				break;
			}
			case ItemType.Weight:
			case ItemType.ShadyDocument:
			case ItemType.PlayerBox:
			case ItemType.ShadyBanner:
				break;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(GrabbableObject), "DiscardItem")]
		public static void OnDiscardItem(GrabbableObject __instance)
		{
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: 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)
			ShadyMod.DisablePerks(__instance.playerHeldBy);
			if (PlayerBoxes.ContainsKey(__instance))
			{
				foreach (PlayerControllerB item in PlayerBoxes[__instance].Players.ToList())
				{
					RemovePlayerFromBox(__instance, item, disablePerks: true);
					item.DropAllHeldItems(true, false, false, false, default(Vector3), default(Vector3), default(Vector3), default(Vector3), default(Vector3));
				}
			}
			AssetInfo shadyNameByName = AssetInfo.GetShadyNameByName(((Object)__instance).name);
			if (shadyNameByName == null || shadyNameByName.ItemType != 0)
			{
				return;
			}
			ShadyMod.Logger.LogDebug((object)("Item found: " + shadyNameByName.Name));
			if (!(shadyNameByName.Name == "head-paul"))
			{
				return;
			}
			((Component)__instance).transform.localScale = new Vector3(0.75f, 0.75f, 0.75f);
			__instance.itemProperties.positionOffset = new Vector3(0f, 0.322f, -0.2f);
			foreach (KeyValuePair<GrabbableObject, PlayerBoxInfo> playerBox in PlayerBoxes)
			{
				PlayerControllerB playerHeldBy = __instance.playerHeldBy;
				if (playerBox.Value.Players.Contains(playerHeldBy))
				{
					ShadyMod.Logger.LogDebug((object)"Player removed due to head dropped!");
					RemovePlayerFromBox(playerBox.Key, playerHeldBy, disablePerks: true);
					break;
				}
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GrabbableObject), "GrabItem")]
		public static void OnGrabItem(GrabbableObject __instance)
		{
			//IL_00d4: 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_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			if (!AssetInfo.IsShadyItem(((Object)__instance).name))
			{
				return;
			}
			ShadyMod.EnablePerk(__instance, __instance.playerHeldBy);
			AssetInfo shadyNameByName = AssetInfo.GetShadyNameByName(((Object)__instance).name);
			if (shadyNameByName.ItemType == ItemType.PlayerBox)
			{
				if (!PlayerBoxes.ContainsKey(__instance))
				{
					PlayerBoxes.Add(__instance, new PlayerBoxInfo());
				}
				else if (PlayerBoxes[__instance].Players.Contains(__instance.playerHeldBy))
				{
					RemovePlayerFromBox(__instance, __instance.playerHeldBy);
				}
			}
			else
			{
				if (shadyNameByName.ItemType != 0 || !(shadyNameByName.Name == "head-paul"))
				{
					return;
				}
				((Component)__instance).transform.localScale = new Vector3(((Component)__instance).transform.localScale.x * 0.5f, ((Component)__instance).transform.localScale.y * 0.5f, ((Component)__instance).transform.localScale.z * 0.5f);
				__instance.itemProperties.positionOffset = new Vector3(0f, 0.15f, -0.05f);
				foreach (KeyValuePair<GrabbableObject, PlayerBoxInfo> playerBox in PlayerBoxes)
				{
					if (playerBox.Value.Players.Contains(__instance.playerHeldBy))
					{
						RemovePlayerFromBox(playerBox.Key, __instance.playerHeldBy);
						break;
					}
				}
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GrabbableObject), "Update")]
		public static void OnUpdate(GrabbableObject __instance)
		{
			//IL_025d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: 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_015f: Unknown result type (might be due to invalid IL or missing references)
			AssetInfo shadyNameByName = AssetInfo.GetShadyNameByName(((Object)__instance).name);
			if (shadyNameByName == null || shadyNameByName.ItemType != ItemType.PlayerBox)
			{
				return;
			}
			DateTime now = DateTime.Now;
			if (!PlayerBoxes.ContainsKey(__instance))
			{
				PlayerBoxes.Add(__instance, new PlayerBoxInfo());
			}
			if ((NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) && (!(PlayerBoxes[__instance].ResetTime > DateTime.MinValue) || !((now - PlayerBoxes[__instance].ResetTime).TotalSeconds < 2.0)))
			{
				PlayerBoxes[__instance].ResetTime = DateTime.MinValue;
				if (!PlayerBoxes[__instance].Discard)
				{
					if ((Object)(object)__instance.playerHeldBy == (Object)null && PlayerBoxes[__instance].Players.Count < 2)
					{
						for (int i = 0; i < StartOfRound.Instance.allPlayerObjects.Length; i++)
						{
							PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[i];
							if (Vector3.Distance(((Component)val).transform.position, ((Component)__instance).transform.position) <= 1f && val.IsSmall() && !PlayerBoxes[__instance].Players.Contains(val))
							{
								AddPlayerToBox(__instance, val);
							}
							if (PlayerBoxes[__instance].Players.Count >= 2)
							{
								break;
							}
						}
					}
				}
				else
				{
					ShadyMod.Logger.LogDebug((object)"Skipping player add due to discard set!");
				}
			}
			float num = 0f;
			List<PlayerControllerB> list = new List<PlayerControllerB>();
			foreach (PlayerControllerB player in PlayerBoxes[__instance].Players)
			{
				if (!player.IsSmall())
				{
					list.Add(player);
					continue;
				}
				((Component)player).transform.position = ((Component)__instance).transform.position + new Vector3(num, 0f, num);
				num += 0.15f;
			}
			if (!NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
			{
				return;
			}
			foreach (PlayerControllerB item in list)
			{
				RemovePlayerFromBox(__instance, item);
			}
		}

		public static void AddPlayerToBox(GrabbableObject __instance, PlayerControllerB player)
		{
			ShadyMod.Logger.LogDebug((object)("Adding player " + ((Object)player).name + " to box!"));
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				((Component)__instance).gameObject.GetComponent<AudioSource>().PlayOneShot(__instance.itemProperties.grabSFX, 1f);
			}
			PerkNetworkHandler.Instance.AddPlayerToBoxServerRpc(((NetworkBehaviour)__instance).NetworkObjectId, (int)player.playerClientId);
			player.playerCollider.enabled = false;
		}

		public static void RemovePlayerFromBox(GrabbableObject __instance, PlayerControllerB player, bool disablePerks = false)
		{
			ShadyMod.Logger.LogDebug((object)("Removing player " + ((Object)player).name + " from box!"));
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				((Component)__instance).gameObject.GetComponent<AudioSource>().PlayOneShot(__instance.itemProperties.dropSFX, 1f);
			}
			PerkNetworkHandler.Instance.RemovePlayerFromBoxServerRpc(((NetworkBehaviour)__instance).NetworkObjectId, (int)player.playerClientId, disablePerks);
			player.playerCollider.enabled = true;
		}
	}
	[HarmonyPatch]
	public class NetworkObjectManager
	{
		private static GameObject networkPrefab;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		public static void Init()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			if (!((Object)(object)networkPrefab != (Object)null))
			{
				networkPrefab = (GameObject)ShadyMod.assets.LoadAsset("PerkNetworkHandler");
				networkPrefab.AddComponent<PerkNetworkHandler>();
				NetworkManager.Singleton.AddNetworkPrefab(networkPrefab);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "Awake")]
		private static void SpawnNetworkHandler()
		{
			//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)
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				GameObject val = Object.Instantiate<GameObject>(networkPrefab, Vector3.zero, Quaternion.identity);
				val.GetComponent<NetworkObject>().Spawn(false);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "Awake")]
		private static void SubscribeToHandler()
		{
			PerkNetworkHandler.MessageEvent += ReceivedEventFromServer;
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")]
		private static void UnsubscribeFromHandler()
		{
			PerkNetworkHandler.MessageEvent -= ReceivedEventFromServer;
		}

		private static void ReceivedEventFromServer(string json)
		{
			Debug.Log((object)("Recieved event from server: " + json));
			NetworkMessage nm = JsonConvert.DeserializeObject<NetworkMessage>(json);
			if (nm == null)
			{
				return;
			}
			Debug.Log((object)("Action to execute is: " + nm.Action));
			foreach (KeyValuePair<ulong, NetworkObject> spawnedObject in NetworkManager.Singleton.SpawnManager.SpawnedObjects)
			{
				PlayerControllerB component = ((Component)spawnedObject.Value).GetComponent<PlayerControllerB>();
				if (!((Object)(object)component != (Object)null) || !(component.playerUsername == nm.PlayerName))
				{
					continue;
				}
				Debug.Log((object)("Player found: " + component.playerUsername));
				PerkBase perkBase = ShadyMod.Perks.FirstOrDefault((PerkBase p) => p.Name == nm.PerkName);
				if (perkBase == null)
				{
					break;
				}
				string action = nm.Action;
				string text = action;
				if (!(text == "apply"))
				{
					if (text == "reset")
					{
						perkBase.Reset(component, force: true);
					}
				}
				else
				{
					perkBase.Apply(component, force: true);
				}
			}
		}

		public static void SendEventToClients(string eventName)
		{
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				PerkNetworkHandler.Instance.EventClientRpc(eventName);
			}
		}
	}
	[HarmonyPatch]
	public class PlayerPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerControllerB), "KillPlayer")]
		public static void OnPlayerDeath(PlayerControllerB __instance, Vector3 bodyVelocity, bool spawnBody = true, CauseOfDeath causeOfDeath = 0, int deathAnimation = 0, Vector3 positionOffset = default(Vector3))
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			ShadyMod.Logger.LogDebug((object)$"Player {__instance.playerUsername} has died! Cause of death: {causeOfDeath}");
			ShadyMod.DisablePerks(__instance, force: true);
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(PlayerControllerB), "DropAllHeldItems")]
		public static void OnDropAllHeldItems(PlayerControllerB __instance)
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			ShadyMod.DisablePerks(__instance, force: true);
			GrabbableObject val = __instance.ItemSlots[__instance.currentItemSlot];
			if (__instance.IsSmall() && (Object)(object)val != (Object)null)
			{
				((Component)val).transform.localScale = new Vector3(0.75f, 0.75f, 0.75f);
				val.itemProperties.positionOffset = new Vector3(0f, 0.322f, -0.2f);
			}
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			AssetInfo shadyNameByName = AssetInfo.GetShadyNameByName(((Object)val).name);
			if (shadyNameByName == null || shadyNameByName.ItemType != ItemType.PlayerBox)
			{
				return;
			}
			foreach (KeyValuePair<GrabbableObject, PlayerBoxInfo> playerBox in GrabbableObjectPatch.PlayerBoxes)
			{
				if (!((Object)(object)playerBox.Key == (Object)(object)val))
				{
					continue;
				}
				foreach (PlayerControllerB player in playerBox.Value.Players)
				{
					GrabbableObjectPatch.RemovePlayerFromBox(playerBox.Key, player, disablePerks: true);
				}
			}
		}
	}
	[HarmonyPatch]
	public class StartOfRoundPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "StartGame")]
		public static void OnStartGame(StartOfRound __instance)
		{
			ShadyMod.Logger.LogDebug((object)"StartOfRound: StartOfRound.StartGame() called, disabling perks for all players.");
			PlayerControllerB[] allPlayerScripts = __instance.allPlayerScripts;
			foreach (PlayerControllerB player in allPlayerScripts)
			{
				ShadyMod.DisablePerks(player, force: true);
			}
		}
	}
}
namespace ShadyMod.Network
{
	public class PerkNetworkHandler : NetworkBehaviour
	{
		public static PerkNetworkHandler Instance { get; private set; }

		public static event Action<string>? MessageEvent;

		public override void OnNetworkSpawn()
		{
			PerkNetworkHandler.MessageEvent = null;
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				PerkNetworkHandler instance = Instance;
				if (instance != null)
				{
					GameObject gameObject = ((Component)instance).gameObject;
					if (gameObject != null)
					{
						NetworkObject component = gameObject.GetComponent<NetworkObject>();
						if (component != null)
						{
							component.Despawn(true);
						}
					}
				}
			}
			Instance = this;
			((NetworkBehaviour)this).OnNetworkSpawn();
		}

		[ClientRpc]
		public void EventClientRpc(string eventName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2030828849u, val, (RpcDelivery)0);
				bool flag = eventName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(eventName, false);
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2030828849u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				base.__rpc_exec_stage = (__RpcExecStage)0;
				PerkNetworkHandler.MessageEvent?.Invoke(eventName);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void EventServerRpc(string eventName)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d4: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
			{
				ServerRpcParams val = default(ServerRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1747992973u, val, (RpcDelivery)0);
				bool flag = eventName != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe(eventName, false);
				}
				((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1747992973u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				base.__rpc_exec_stage = (__RpcExecStage)0;
				EventClientRpc(eventName);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void TeleportPlayerOutServerRpc(int playerObj, Vector3 teleportPos)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4246910149u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerObj);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref teleportPos);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4246910149u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					TeleportPlayerOutClientRpc(playerObj, teleportPos);
				}
			}
		}

		[ClientRpc]
		public void TeleportPlayerOutClientRpc(int playerObj, Vector3 teleportPos)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2810027324u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, playerObj);
					((FastBufferWriter)(ref val2)).WriteValueSafe(ref teleportPos);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2810027324u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerObj];
					val3.TeleportPlayer(teleportPos, false, 0f, false, true);
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void AddPlayerToBoxServerRpc(ulong networkObjId, int playerObj)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1118754106u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, networkObjId);
					BytePacker.WriteValueBitPacked(val2, playerObj);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1118754106u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					AddPlayerToBoxClientRpc(networkObjId, playerObj);
				}
			}
		}

		[ClientRpc]
		public void AddPlayerToBoxClientRpc(ulong networkObjId, int playerObj)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b0: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3127824493u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, networkObjId);
				BytePacker.WriteValueBitPacked(val2, playerObj);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3127824493u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			base.__rpc_exec_stage = (__RpcExecStage)0;
			foreach (KeyValuePair<ulong, NetworkObject> spawnedObject in ((NetworkBehaviour)this).NetworkManager.SpawnManager.SpawnedObjects)
			{
				if (spawnedObject.Value.NetworkObjectId != networkObjId)
				{
					continue;
				}
				GrabbableObject component = ((Component)spawnedObject.Value).GetComponent<GrabbableObject>();
				PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerObj];
				ShadyMod.Logger.LogDebug((object)("Adding player " + ((Object)val3).name + " to box (RPC)!"));
				if (GrabbableObjectPatch.PlayerBoxes.ContainsKey(component))
				{
					if (!GrabbableObjectPatch.PlayerBoxes[component].Players.Contains(val3))
					{
						GrabbableObjectPatch.PlayerBoxes[component].Players.Add(val3);
					}
				}
				else
				{
					GrabbableObjectPatch.PlayerBoxes.Add(component, new PlayerBoxInfo
					{
						Players = new List<PlayerControllerB>(1) { val3 }
					});
				}
				val3.playerCollider.enabled = false;
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void RemovePlayerFromBoxServerRpc(ulong networkObjId, int playerObj, bool disablePerks)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: 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_00f6: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4245653801u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, networkObjId);
					BytePacker.WriteValueBitPacked(val2, playerObj);
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref disablePerks, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4245653801u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					RemovePlayerFromBoxClientRpc(networkObjId, playerObj, disablePerks);
					ResetDiscardClientRpc(networkObjId);
				}
			}
		}

		[ClientRpc]
		public void ResetDiscardClientRpc(ulong networkObjId)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2958249535u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, networkObjId);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2958249535u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			base.__rpc_exec_stage = (__RpcExecStage)0;
			DateTime now = DateTime.Now;
			foreach (KeyValuePair<ulong, NetworkObject> spawnedObject in ((NetworkBehaviour)this).NetworkManager.SpawnManager.SpawnedObjects)
			{
				if (spawnedObject.Value.NetworkObjectId == networkObjId)
				{
					GrabbableObject component = ((Component)spawnedObject.Value).GetComponent<GrabbableObject>();
					GrabbableObjectPatch.PlayerBoxes[component].ResetTime = now;
					GrabbableObjectPatch.PlayerBoxes[component].Discard = false;
				}
			}
		}

		[ClientRpc]
		public void RemovePlayerFromBoxClientRpc(ulong networkObjId, int playerObj, bool disablePerks)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Invalid comparison between Unknown and I4
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: 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_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: 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_01f3: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2673985171u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, networkObjId);
				BytePacker.WriteValueBitPacked(val2, playerObj);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref disablePerks, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2673985171u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
			{
				return;
			}
			base.__rpc_exec_stage = (__RpcExecStage)0;
			foreach (KeyValuePair<ulong, NetworkObject> spawnedObject in ((NetworkBehaviour)this).NetworkManager.SpawnManager.SpawnedObjects)
			{
				if (spawnedObject.Value.NetworkObjectId != networkObjId)
				{
					continue;
				}
				GrabbableObject component = ((Component)spawnedObject.Value).GetComponent<GrabbableObject>();
				PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerObj];
				ShadyMod.Logger.LogDebug((object)("Removing player " + ((Object)val3).name + " from box (RPC)!"));
				if (GrabbableObjectPatch.PlayerBoxes.ContainsKey(component) && GrabbableObjectPatch.PlayerBoxes[component].Players.Contains(val3))
				{
					GrabbableObjectPatch.PlayerBoxes[component].Discard = true;
					GrabbableObjectPatch.PlayerBoxes[component].Players.Remove(val3);
					((Component)val3).transform.position = ((Component)component).transform.position + new Vector3(1.25f, 0f, 1.25f);
					val3.playerCollider.enabled = true;
					if (disablePerks)
					{
						ShadyMod.DisablePerks(val3, force: true);
					}
				}
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		protected override void __initializeRpcs()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Expected O, but got Unknown
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Expected O, but got Unknown
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Expected O, but got Unknown
			((NetworkBehaviour)this).__registerRpc(2030828849u, new RpcReceiveHandler(__rpc_handler_2030828849), "EventClientRpc");
			((NetworkBehaviour)this).__registerRpc(1747992973u, new RpcReceiveHandler(__rpc_handler_1747992973), "EventServerRpc");
			((NetworkBehaviour)this).__registerRpc(4246910149u, new RpcReceiveHandler(__rpc_handler_4246910149), "TeleportPlayerOutServerRpc");
			((NetworkBehaviour)this).__registerRpc(2810027324u, new RpcReceiveHandler(__rpc_handler_2810027324), "TeleportPlayerOutClientRpc");
			((NetworkBehaviour)this).__registerRpc(1118754106u, new RpcReceiveHandler(__rpc_handler_1118754106), "AddPlayerToBoxServerRpc");
			((NetworkBehaviour)this).__registerRpc(3127824493u, new RpcReceiveHandler(__rpc_handler_3127824493), "AddPlayerToBoxClientRpc");
			((NetworkBehaviour)this).__registerRpc(4245653801u, new RpcReceiveHandler(__rpc_handler_4245653801), "RemovePlayerFromBoxServerRpc");
			((NetworkBehaviour)this).__registerRpc(2958249535u, new RpcReceiveHandler(__rpc_handler_2958249535), "ResetDiscardClientRpc");
			((NetworkBehaviour)this).__registerRpc(2673985171u, new RpcReceiveHandler(__rpc_handler_2673985171), "RemovePlayerFromBoxClientRpc");
			((NetworkBehaviour)this).__initializeRpcs();
		}

		private static void __rpc_handler_2030828849(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				string eventName = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref eventName, false);
				}
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).EventClientRpc(eventName);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1747992973(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				string eventName = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe(ref eventName, false);
				}
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).EventServerRpc(eventName);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_4246910149(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				Vector3 teleportPos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref teleportPos);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).TeleportPlayerOutServerRpc(playerObj, teleportPos);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2810027324(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				Vector3 teleportPos = default(Vector3);
				((FastBufferReader)(ref reader)).ReadValueSafe(ref teleportPos);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).TeleportPlayerOutClientRpc(playerObj, teleportPos);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1118754106(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong networkObjId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref networkObjId);
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).AddPlayerToBoxServerRpc(networkObjId, playerObj);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3127824493(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong networkObjId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref networkObjId);
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).AddPlayerToBoxClientRpc(networkObjId, playerObj);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_4245653801(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0049: 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_005e: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong networkObjId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref networkObjId);
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				bool disablePerks = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref disablePerks, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).RemovePlayerFromBoxServerRpc(networkObjId, playerObj, disablePerks);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2958249535(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong networkObjId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref networkObjId);
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).ResetDiscardClientRpc(networkObjId);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_2673985171(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_0049: 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_005e: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong networkObjId = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref networkObjId);
				int playerObj = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerObj);
				bool disablePerks = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref disablePerks, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)1;
				((PerkNetworkHandler)(object)target).RemovePlayerFromBoxClientRpc(networkObjId, playerObj, disablePerks);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		protected internal override string __getTypeName()
		{
			return "PerkNetworkHandler";
		}
	}
}
namespace ShadyMod.Model
{
	public class AssetInfo
	{
		public static readonly AssetInfo[] INSTANCE = new AssetInfo[17]
		{
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-belebt",
				PrefabName = "belebt",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-paul",
				PrefabName = "paul",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-lasse",
				PrefabName = "lasse",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-aveloth",
				PrefabName = "aveloth",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-andy",
				PrefabName = "andy",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-jedon",
				PrefabName = "jedon",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "head-patrick",
				PrefabName = "patrick",
				ItemType = ItemType.McHead,
				Rarity = 35
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "donut",
				PrefabName = "donut",
				ItemType = ItemType.Donut,
				Rarity = 55
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "bad-donut",
				PrefabName = "donut-bad",
				ItemType = ItemType.BadDonut,
				Rarity = 55
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "weight",
				PrefabName = "weight",
				ItemType = ItemType.Weight,
				Rarity = 65
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "shadydoc1",
				PrefabName = "ShadyDocument1",
				ItemType = ItemType.ShadyDocument,
				Rarity = 25
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "shadydoc2",
				PrefabName = "ShadyDocument2",
				ItemType = ItemType.ShadyDocument,
				Rarity = 25
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "shadydoc3",
				PrefabName = "ShadyDocument3",
				ItemType = ItemType.ShadyDocument,
				Rarity = 25
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "robot",
				PrefabName = "robot",
				ItemType = ItemType.Robot,
				Rarity = 20
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "playerbox",
				PrefabName = "playerbox",
				ItemType = ItemType.PlayerBox,
				Rarity = 15
			},
			new AssetInfo
			{
				Moons = (LevelTypes)1,
				Name = "shadybanner",
				PrefabName = "banner",
				ItemType = ItemType.ShadyBanner,
				Rarity = 1
			},
			new AssetInfo
			{
				Moons = (LevelTypes)(-1),
				Name = "shadybook",
				PrefabName = "shadybook",
				ItemType = ItemType.ShadyBook,
				Rarity = 15
			}
		};

		public string Name { get; set; } = string.Empty;


		public string PrefabName { get; set; } = string.Empty;


		public int Rarity { get; set; } = 0;


		public ItemType ItemType { get; set; }

		public LevelTypes Moons { get; set; } = (LevelTypes)(-1);


		public static bool IsShadyItem(string name)
		{
			return GetShadyNameByName(name) != null;
		}

		public static AssetInfo GetShadyNameByName(string name)
		{
			string searchName = name.ToLower().Replace("(clone)", string.Empty);
			return INSTANCE.FirstOrDefault((AssetInfo p) => p.PrefabName.ToLower() == searchName);
		}
	}
	public enum ItemType
	{
		McHead,
		Donut,
		BadDonut,
		Weight,
		ShadyDocument,
		Robot,
		PlayerBox,
		ShadyBanner,
		ShadyBook
	}
	public class NetworkMessage
	{
		public ulong PlayerId { get; set; } = 0uL;


		public string PlayerName { get; set; } = string.Empty;


		public string Action { get; set; } = string.Empty;


		public string PerkName { get; set; } = string.Empty;


		public override string ToString()
		{
			return JsonConvert.SerializeObject((object)this, (Formatting)0);
		}
	}
	public class PlayerBoxInfo
	{
		public List<PlayerControllerB> Players { get; set; } = new List<PlayerControllerB>();


		public bool Discard { get; set; } = false;


		public DateTime ResetTime { get; set; } = DateTime.MinValue;

	}
}
namespace ShadyMod.Interactions
{
	public static class DonutInteraction
	{
		public static void ExecuteDonutInteraction(GrabbableObject currentItem, PlayerControllerB self, AssetInfo itemInfo)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			if (itemInfo.ItemType == ItemType.BadDonut)
			{
				Helper.DisplayTooltip("That was a bad idea ...");
				self.KillPlayer(new Vector3(0f, 0f), true, (CauseOfDeath)5, 0, default(Vector3), false);
			}
			else
			{
				self.MakeCriticallyInjured(false);
				self.DestroyItemInSlotAndSync(self.currentItemSlot);
			}
			ShadyMod.DisablePerks(self);
		}
	}
	public static class PlayerTeleportInteraction
	{
		private const float teleportOffset = 0.5f;

		private static readonly Dictionary<string, string> SteamNameMapping = new Dictionary<string, string>
		{
			{ "belebt", "belebt" },
			{ "paul", "vette" },
			{ "lasse", "Lasse" },
			{ "aveloth", "aveloth" },
			{ "andy", "Andy" },
			{ "jedon", "JedonFT" },
			{ "patrick", "kxmischFxC" }
		};

		public static void Execute(GrabbableObject currentItem, PlayerControllerB self, AssetInfo itemInfo)
		{
			//IL_01f9: 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_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
			string text = ((Object)currentItem).name.ToLower().Replace("(clone)", string.Empty);
			ShadyMod.Logger.LogDebug((object)("Item Search Name: " + text));
			if (SteamNameMapping.ContainsKey(text))
			{
				string text2 = SteamNameMapping[text];
				bool flag = false;
				for (int i = 0; i < StartOfRound.Instance.allPlayerObjects.Length; i++)
				{
					PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[i];
					if (!val.playerUsername.Contains(text2, StringComparison.OrdinalIgnoreCase))
					{
						continue;
					}
					if (val.playerUsername == self.playerUsername)
					{
						return;
					}
					ShadyMod.Logger.LogDebug((object)("Player found: " + val.playerUsername + " ..."));
					if (val.isPlayerDead)
					{
						bool flag2 = true;
						if ((Object)(object)val.deadBody != (Object)null)
						{
							flag2 = Helper.GetRandomBoolean();
						}
						if (flag2)
						{
							self.KillPlayer(Vector3.zero, false, (CauseOfDeath)15, 0, default(Vector3), false);
						}
						else if ((Object)(object)val.deadBody != (Object)null)
						{
							Helper.DisplayTooltip("Lucky you (@" + val.playerUsername + ")! Maybe you can bring back the dead body!");
							HUDManager.Instance.ShakeCamera((ScreenShakeType)0);
							PerkNetworkHandler.Instance.TeleportPlayerOutServerRpc((int)self.playerClientId, new Vector3(val.deadBody.spawnPosition.x + 0.5f, val.deadBody.spawnPosition.y, val.deadBody.spawnPosition.z + 0.5f));
							ShadyMod.DisablePerks(self);
						}
					}
					else
					{
						ShadyMod.Logger.LogDebug((object)("Teleporting player " + val.playerUsername));
						HUDManager.Instance.ShakeCamera((ScreenShakeType)0);
						PerkNetworkHandler.Instance.TeleportPlayerOutServerRpc((int)self.playerClientId, new Vector3(((Component)val).transform.position.x + 0.5f, ((Component)((Component)val).transform).transform.position.y, ((Component)val).transform.position.z + 0.5f));
						ShadyMod.DisablePerks(self);
					}
					flag = true;
					break;
				}
				if (!flag)
				{
					ShadyMod.Logger.LogWarning((object)("Target Player \"" + text2 + "\" not found to teleport to!"));
					Helper.DisplayTooltip("Target Player \"" + text2 + "\" not found to teleport to (@" + self.playerUsername + ")!");
					return;
				}
			}
			else
			{
				ShadyMod.Logger.LogWarning((object)"Name-Mapping not found!");
			}
			self.DestroyItemInSlotAndSync(self.currentItemSlot);
			ShadyMod.DisablePerks(self);
		}
	}
}
namespace __GEN
{
	internal class NetworkVariableSerializationHelper
	{
		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeSerialization()
		{
		}
	}
}
namespace Andy.ShadyMod.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}

BepInEx/plugins/Andy.ShadyMod/MMHOOK_Assembly-CSharp.dll

Decompiled 8 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using DigitalRuby.ThunderAndLightning;
using Discord;
using Dissonance;
using Dissonance.Integrations.Unity_NFGO;
using DunGen;
using DunGen.Graph;
using DunGen.Tags;
using GameNetcodeStuff;
using MonoMod.Cil;
using MonoMod.RuntimeDetour.HookGen;
using On;
using On.DigitalRuby.ThunderAndLightning;
using On.Dissonance.Integrations.Unity_NFGO;
using On.GameNetcodeStuff;
using On.Scoops.service;
using On.__GEN;
using Scoops.service;
using Steamworks;
using Steamworks.Data;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine.Video;

[assembly: AssemblyVersion("0.0.0.0")]
namespace On
{
	public static class ActivateObjectAfterSceneLoad
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Start(ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Start(orig_Start orig, ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_waitForNavMeshBake(ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_waitForNavMeshBake(orig_waitForNavMeshBake orig, ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetInitialState(ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetInitialState(orig_SetInitialState orig, ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(ActivateObjectAfterSceneLoad self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, ActivateObjectAfterSceneLoad self);

		public static event hook_Start Start
		{
			add
			{
				HookEndpointManager.Add<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_waitForNavMeshBake waitForNavMeshBake
		{
			add
			{
				HookEndpointManager.Add<hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetInitialState SetInitialState
		{
			add
			{
				HookEndpointManager.Add<hook_SetInitialState>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetInitialState>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class ActivateObjectAfterSceneLoad
	{
		public static event Manipulator Start
		{
			add
			{
				HookEndpointManager.Modify<On.ActivateObjectAfterSceneLoad.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.ActivateObjectAfterSceneLoad.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator waitForNavMeshBake
		{
			add
			{
				HookEndpointManager.Modify<On.ActivateObjectAfterSceneLoad.hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.ActivateObjectAfterSceneLoad.hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetInitialState
		{
			add
			{
				HookEndpointManager.Modify<On.ActivateObjectAfterSceneLoad.hook_SetInitialState>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.ActivateObjectAfterSceneLoad.hook_SetInitialState>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.ActivateObjectAfterSceneLoad.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.ActivateObjectAfterSceneLoad.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AdjacentRoomCullingModified
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnEnable(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnEnable(orig_OnEnable orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnDisable(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnDisable(orig_OnDisable orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetDungeon(AdjacentRoomCullingModified self, Dungeon newDungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetDungeon(orig_SetDungeon orig, AdjacentRoomCullingModified self, Dungeon newDungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_AddDungeon(AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_AddDungeon(orig_AddDungeon orig, AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_RemoveDungeon(AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_RemoveDungeon(orig_RemoveDungeon orig, AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ClearAllDungeons(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ClearAllDungeons(orig_ClearAllDungeons orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool orig_IsTileVisible(AdjacentRoomCullingModified self, Tile tile);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool hook_IsTileVisible(orig_IsTileVisible orig, AdjacentRoomCullingModified self, Tile tile);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerable<Door> orig_GetAllDoorsInDungeon(AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerable<Door> hook_GetAllDoorsInDungeon(orig_GetAllDoorsInDungeon orig, AdjacentRoomCullingModified self, Dungeon dungeon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnDoorStateChanged(AdjacentRoomCullingModified self, Door door, bool isOpen);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnDoorStateChanged(orig_OnDoorStateChanged orig, AdjacentRoomCullingModified self, Door door, bool isOpen);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnDungeonGenerationComplete(AdjacentRoomCullingModified self, DungeonGenerator generator);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnDungeonGenerationComplete(orig_OnDungeonGenerationComplete orig, AdjacentRoomCullingModified self, DungeonGenerator generator);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_LateUpdate(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_LateUpdate(orig_LateUpdate orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile orig_GetStartTile(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile hook_GetStartTile(orig_GetStartTile orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetToStartTile(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetToStartTile(orig_SetToStartTile orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_RefreshVisibility(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_RefreshVisibility(orig_RefreshVisibility orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_RefreshDoorVisibilities(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_RefreshDoorVisibilities(orig_RefreshDoorVisibilities orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetDoorVisibility(AdjacentRoomCullingModified self, Door door, bool visible);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetDoorVisibility(orig_SetDoorVisibility orig, AdjacentRoomCullingModified self, Door door, bool visible);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_UpdateVisibleTiles(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_UpdateVisibleTiles(orig_UpdateVisibleTiles orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetTileVisibility(AdjacentRoomCullingModified self, Tile tile, bool visible);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetTileVisibility(orig_SetTileVisibility orig, AdjacentRoomCullingModified self, Tile tile, bool visible);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_UpdateRendererLists(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_UpdateRendererLists(orig_UpdateRendererLists orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_UpdateRendererLists_List1_List1(AdjacentRoomCullingModified self, List<Tile> tiles, List<Door> doors);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_UpdateRendererLists_List1_List1(orig_UpdateRendererLists_List1_List1 orig, AdjacentRoomCullingModified self, List<Tile> tiles, List<Door> doors);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile orig_FindCurrentTile(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile hook_FindCurrentTile(orig_FindCurrentTile orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile orig_SearchForNewCurrentTile(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Tile hook_SearchForNewCurrentTile(orig_SearchForNewCurrentTile orig, AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AdjacentRoomCullingModified self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AdjacentRoomCullingModified self);

		public static class VisibilityChangedDelegate
		{
			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void orig_ctor(VisibilityChangedDelegate self, object @object, IntPtr method);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void hook_ctor(orig_ctor orig, VisibilityChangedDelegate self, object @object, IntPtr method);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void orig_Invoke(VisibilityChangedDelegate self, Tile tile, bool visible);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void hook_Invoke(orig_Invoke orig, VisibilityChangedDelegate self, Tile tile, bool visible);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate IAsyncResult orig_BeginInvoke(VisibilityChangedDelegate self, Tile tile, bool visible, AsyncCallback callback, object @object);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate IAsyncResult hook_BeginInvoke(orig_BeginInvoke orig, VisibilityChangedDelegate self, Tile tile, bool visible, AsyncCallback callback, object @object);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void orig_EndInvoke(VisibilityChangedDelegate self, IAsyncResult result);

			[EditorBrowsable(EditorBrowsableState.Never)]
			public delegate void hook_EndInvoke(orig_EndInvoke orig, VisibilityChangedDelegate self, IAsyncResult result);

			public static event hook_ctor ctor
			{
				add
				{
					HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
				remove
				{
					HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
			}

			public static event hook_Invoke Invoke
			{
				add
				{
					HookEndpointManager.Add<hook_Invoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
				remove
				{
					HookEndpointManager.Remove<hook_Invoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
			}

			public static event hook_BeginInvoke BeginInvoke
			{
				add
				{
					HookEndpointManager.Add<hook_BeginInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
				remove
				{
					HookEndpointManager.Remove<hook_BeginInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
			}

			public static event hook_EndInvoke EndInvoke
			{
				add
				{
					HookEndpointManager.Add<hook_EndInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
				remove
				{
					HookEndpointManager.Remove<hook_EndInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
				}
			}
		}

		public static event hook_OnEnable OnEnable
		{
			add
			{
				HookEndpointManager.Add<hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_OnDisable OnDisable
		{
			add
			{
				HookEndpointManager.Add<hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetDungeon SetDungeon
		{
			add
			{
				HookEndpointManager.Add<hook_SetDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_AddDungeon AddDungeon
		{
			add
			{
				HookEndpointManager.Add<hook_AddDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_AddDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_RemoveDungeon RemoveDungeon
		{
			add
			{
				HookEndpointManager.Add<hook_RemoveDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_RemoveDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ClearAllDungeons ClearAllDungeons
		{
			add
			{
				HookEndpointManager.Add<hook_ClearAllDungeons>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ClearAllDungeons>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_IsTileVisible IsTileVisible
		{
			add
			{
				HookEndpointManager.Add<hook_IsTileVisible>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_IsTileVisible>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_GetAllDoorsInDungeon GetAllDoorsInDungeon
		{
			add
			{
				HookEndpointManager.Add<hook_GetAllDoorsInDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_GetAllDoorsInDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_OnDoorStateChanged OnDoorStateChanged
		{
			add
			{
				HookEndpointManager.Add<hook_OnDoorStateChanged>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnDoorStateChanged>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_OnDungeonGenerationComplete OnDungeonGenerationComplete
		{
			add
			{
				HookEndpointManager.Add<hook_OnDungeonGenerationComplete>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnDungeonGenerationComplete>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_LateUpdate LateUpdate
		{
			add
			{
				HookEndpointManager.Add<hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_GetStartTile GetStartTile
		{
			add
			{
				HookEndpointManager.Add<hook_GetStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_GetStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetToStartTile SetToStartTile
		{
			add
			{
				HookEndpointManager.Add<hook_SetToStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetToStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_RefreshVisibility RefreshVisibility
		{
			add
			{
				HookEndpointManager.Add<hook_RefreshVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_RefreshVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_RefreshDoorVisibilities RefreshDoorVisibilities
		{
			add
			{
				HookEndpointManager.Add<hook_RefreshDoorVisibilities>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_RefreshDoorVisibilities>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetDoorVisibility SetDoorVisibility
		{
			add
			{
				HookEndpointManager.Add<hook_SetDoorVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetDoorVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_UpdateVisibleTiles UpdateVisibleTiles
		{
			add
			{
				HookEndpointManager.Add<hook_UpdateVisibleTiles>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_UpdateVisibleTiles>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetTileVisibility SetTileVisibility
		{
			add
			{
				HookEndpointManager.Add<hook_SetTileVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetTileVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_UpdateRendererLists UpdateRendererLists
		{
			add
			{
				HookEndpointManager.Add<hook_UpdateRendererLists>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_UpdateRendererLists>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_UpdateRendererLists_List1_List1 UpdateRendererLists_List1_List1
		{
			add
			{
				HookEndpointManager.Add<hook_UpdateRendererLists_List1_List1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_UpdateRendererLists_List1_List1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_FindCurrentTile FindCurrentTile
		{
			add
			{
				HookEndpointManager.Add<hook_FindCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_FindCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SearchForNewCurrentTile SearchForNewCurrentTile
		{
			add
			{
				HookEndpointManager.Add<hook_SearchForNewCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SearchForNewCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AdjacentRoomCullingModified
	{
		public static class VisibilityChangedDelegate
		{
			public static event Manipulator ctor
			{
				add
				{
					HookEndpointManager.Modify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
				remove
				{
					HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
			}

			public static event Manipulator Invoke
			{
				add
				{
					HookEndpointManager.Modify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_Invoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
				remove
				{
					HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_Invoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
			}

			public static event Manipulator BeginInvoke
			{
				add
				{
					HookEndpointManager.Modify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_BeginInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
				remove
				{
					HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_BeginInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
			}

			public static event Manipulator EndInvoke
			{
				add
				{
					HookEndpointManager.Modify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_EndInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
				remove
				{
					HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.VisibilityChangedDelegate.hook_EndInvoke>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
				}
			}
		}

		public static event Manipulator OnEnable
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator OnDisable
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetDungeon
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_SetDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_SetDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator AddDungeon
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_AddDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_AddDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator RemoveDungeon
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_RemoveDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_RemoveDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ClearAllDungeons
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_ClearAllDungeons>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_ClearAllDungeons>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator IsTileVisible
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_IsTileVisible>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_IsTileVisible>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator GetAllDoorsInDungeon
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_GetAllDoorsInDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_GetAllDoorsInDungeon>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator OnDoorStateChanged
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_OnDoorStateChanged>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_OnDoorStateChanged>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator OnDungeonGenerationComplete
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_OnDungeonGenerationComplete>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_OnDungeonGenerationComplete>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator LateUpdate
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator GetStartTile
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_GetStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_GetStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetToStartTile
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_SetToStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_SetToStartTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator RefreshVisibility
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_RefreshVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_RefreshVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator RefreshDoorVisibilities
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_RefreshDoorVisibilities>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_RefreshDoorVisibilities>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetDoorVisibility
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_SetDoorVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_SetDoorVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator UpdateVisibleTiles
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_UpdateVisibleTiles>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_UpdateVisibleTiles>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetTileVisibility
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_SetTileVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_SetTileVisibility>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator UpdateRendererLists
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_UpdateRendererLists>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_UpdateRendererLists>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator UpdateRendererLists_List1_List1
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_UpdateRendererLists_List1_List1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_UpdateRendererLists_List1_List1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator FindCurrentTile
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_FindCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_FindCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SearchForNewCurrentTile
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_SearchForNewCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_SearchForNewCurrentTile>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AdjacentRoomCullingModified.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AdjacentRoomCullingModified.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AlarmButton
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_PushAlarmButton(AlarmButton self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_PushAlarmButton(orig_PushAlarmButton orig, AlarmButton self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Update(AlarmButton self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Update(orig_Update orig, AlarmButton self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AlarmButton self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AlarmButton self);

		public static event hook_PushAlarmButton PushAlarmButton
		{
			add
			{
				HookEndpointManager.Add<hook_PushAlarmButton>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_PushAlarmButton>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_Update Update
		{
			add
			{
				HookEndpointManager.Add<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AlarmButton
	{
		public static event Manipulator PushAlarmButton
		{
			add
			{
				HookEndpointManager.Modify<On.AlarmButton.hook_PushAlarmButton>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AlarmButton.hook_PushAlarmButton>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator Update
		{
			add
			{
				HookEndpointManager.Modify<On.AlarmButton.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AlarmButton.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AlarmButton.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AlarmButton.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AnimatedItem
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Start(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Start(orig_Start orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_EquipItem(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_EquipItem(orig_EquipItem orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DiscardItem(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DiscardItem(orig_DiscardItem orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_waitForDiscardAnimationToFinish(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_waitForDiscardAnimationToFinish(orig_waitForDiscardAnimationToFinish orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_PocketItem(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_PocketItem(orig_PocketItem orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Update(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Update(orig_Update orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig___initializeVariables(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook___initializeVariables(orig___initializeVariables orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig___initializeRpcs(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook___initializeRpcs(orig___initializeRpcs orig, AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate string orig___getTypeName(AnimatedItem self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate string hook___getTypeName(orig___getTypeName orig, AnimatedItem self);

		public static event hook_Start Start
		{
			add
			{
				HookEndpointManager.Add<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_EquipItem EquipItem
		{
			add
			{
				HookEndpointManager.Add<hook_EquipItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_EquipItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_DiscardItem DiscardItem
		{
			add
			{
				HookEndpointManager.Add<hook_DiscardItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_DiscardItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_waitForDiscardAnimationToFinish waitForDiscardAnimationToFinish
		{
			add
			{
				HookEndpointManager.Add<hook_waitForDiscardAnimationToFinish>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_waitForDiscardAnimationToFinish>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_PocketItem PocketItem
		{
			add
			{
				HookEndpointManager.Add<hook_PocketItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_PocketItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_Update Update
		{
			add
			{
				HookEndpointManager.Add<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___initializeVariables __initializeVariables
		{
			add
			{
				HookEndpointManager.Add<hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___initializeRpcs __initializeRpcs
		{
			add
			{
				HookEndpointManager.Add<hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___getTypeName __getTypeName
		{
			add
			{
				HookEndpointManager.Add<hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AnimatedItem
	{
		public static event Manipulator Start
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator EquipItem
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_EquipItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_EquipItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator DiscardItem
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_DiscardItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_DiscardItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator waitForDiscardAnimationToFinish
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_waitForDiscardAnimationToFinish>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_waitForDiscardAnimationToFinish>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator PocketItem
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_PocketItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_PocketItem>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator Update
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __initializeVariables
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __initializeRpcs
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __getTypeName
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedItem.hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedItem.hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AnimatedObjectFloatSetter
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_KillPlayerAtPoint(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_KillPlayerAtPoint(orig_KillPlayerAtPoint orig, AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Start(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Start(orig_Start orig, AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_waitForNavMeshBake(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_waitForNavMeshBake(orig_waitForNavMeshBake orig, AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Update(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Update(orig_Update orig, AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetObjectBasedOnAnimatorFloat(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetObjectBasedOnAnimatorFloat(orig_SetObjectBasedOnAnimatorFloat orig, AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AnimatedObjectFloatSetter self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AnimatedObjectFloatSetter self);

		public static event hook_KillPlayerAtPoint KillPlayerAtPoint
		{
			add
			{
				HookEndpointManager.Add<hook_KillPlayerAtPoint>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_KillPlayerAtPoint>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_Start Start
		{
			add
			{
				HookEndpointManager.Add<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_waitForNavMeshBake waitForNavMeshBake
		{
			add
			{
				HookEndpointManager.Add<hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_Update Update
		{
			add
			{
				HookEndpointManager.Add<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetObjectBasedOnAnimatorFloat SetObjectBasedOnAnimatorFloat
		{
			add
			{
				HookEndpointManager.Add<hook_SetObjectBasedOnAnimatorFloat>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetObjectBasedOnAnimatorFloat>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AnimatedObjectFloatSetter
	{
		public static event Manipulator KillPlayerAtPoint
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_KillPlayerAtPoint>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_KillPlayerAtPoint>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator Start
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_Start>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator waitForNavMeshBake
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_waitForNavMeshBake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator Update
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_Update>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetObjectBasedOnAnimatorFloat
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_SetObjectBasedOnAnimatorFloat>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_SetObjectBasedOnAnimatorFloat>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedObjectFloatSetter.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedObjectFloatSetter.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AnimatedTextureUV
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnEnable(AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnEnable(orig_OnEnable orig, AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnDisable(AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnDisable(orig_OnDisable orig, AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_AnimateUV(AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_AnimateUV(orig_AnimateUV orig, AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AnimatedTextureUV self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AnimatedTextureUV self);

		public static event hook_OnEnable OnEnable
		{
			add
			{
				HookEndpointManager.Add<hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_OnDisable OnDisable
		{
			add
			{
				HookEndpointManager.Add<hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_AnimateUV AnimateUV
		{
			add
			{
				HookEndpointManager.Add<hook_AnimateUV>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_AnimateUV>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AnimatedTextureUV
	{
		public static event Manipulator OnEnable
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedTextureUV.hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedTextureUV.hook_OnEnable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator OnDisable
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedTextureUV.hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedTextureUV.hook_OnDisable>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator AnimateUV
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedTextureUV.hook_AnimateUV>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedTextureUV.hook_AnimateUV>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AnimatedTextureUV.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimatedTextureUV.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AnimationStopPoints
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAnimationStopPosition1(AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAnimationStopPosition1(orig_SetAnimationStopPosition1 orig, AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAnimationGo(AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAnimationGo(orig_SetAnimationGo orig, AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAnimationStopPosition2(AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAnimationStopPosition2(orig_SetAnimationStopPosition2 orig, AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AnimationStopPoints self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AnimationStopPoints self);

		public static event hook_SetAnimationStopPosition1 SetAnimationStopPosition1
		{
			add
			{
				HookEndpointManager.Add<hook_SetAnimationStopPosition1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetAnimationStopPosition1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetAnimationGo SetAnimationGo
		{
			add
			{
				HookEndpointManager.Add<hook_SetAnimationGo>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetAnimationGo>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SetAnimationStopPosition2 SetAnimationStopPosition2
		{
			add
			{
				HookEndpointManager.Add<hook_SetAnimationStopPosition2>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SetAnimationStopPosition2>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AnimationStopPoints
	{
		public static event Manipulator SetAnimationStopPosition1
		{
			add
			{
				HookEndpointManager.Modify<On.AnimationStopPoints.hook_SetAnimationStopPosition1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimationStopPoints.hook_SetAnimationStopPosition1>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetAnimationGo
		{
			add
			{
				HookEndpointManager.Modify<On.AnimationStopPoints.hook_SetAnimationGo>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimationStopPoints.hook_SetAnimationGo>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SetAnimationStopPosition2
		{
			add
			{
				HookEndpointManager.Modify<On.AnimationStopPoints.hook_SetAnimationStopPosition2>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimationStopPoints.hook_SetAnimationStopPosition2>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AnimationStopPoints.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AnimationStopPoints.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AudioReverbPresets
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AudioReverbPresets self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AudioReverbPresets self);

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AudioReverbPresets
	{
		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AudioReverbPresets.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AudioReverbPresets.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class AutoParentToShip
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Awake(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Awake(orig_Awake orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_LateUpdate(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_LateUpdate(orig_LateUpdate orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StartSuckingOutOfShip(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StartSuckingOutOfShip(orig_StartSuckingOutOfShip orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_SuckObjectOutOfShip(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_SuckObjectOutOfShip(orig_SuckObjectOutOfShip orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_MoveToOffset(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_MoveToOffset(orig_MoveToOffset orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ctor(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ctor(orig_ctor orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig___initializeVariables(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook___initializeVariables(orig___initializeVariables orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig___initializeRpcs(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook___initializeRpcs(orig___initializeRpcs orig, AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate string orig___getTypeName(AutoParentToShip self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate string hook___getTypeName(orig___getTypeName orig, AutoParentToShip self);

		public static event hook_Awake Awake
		{
			add
			{
				HookEndpointManager.Add<hook_Awake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_Awake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_LateUpdate LateUpdate
		{
			add
			{
				HookEndpointManager.Add<hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_StartSuckingOutOfShip StartSuckingOutOfShip
		{
			add
			{
				HookEndpointManager.Add<hook_StartSuckingOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_StartSuckingOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_SuckObjectOutOfShip SuckObjectOutOfShip
		{
			add
			{
				HookEndpointManager.Add<hook_SuckObjectOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_SuckObjectOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_MoveToOffset MoveToOffset
		{
			add
			{
				HookEndpointManager.Add<hook_MoveToOffset>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_MoveToOffset>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook_ctor ctor
		{
			add
			{
				HookEndpointManager.Add<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___initializeVariables __initializeVariables
		{
			add
			{
				HookEndpointManager.Add<hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___initializeRpcs __initializeRpcs
		{
			add
			{
				HookEndpointManager.Add<hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}

		public static event hook___getTypeName __getTypeName
		{
			add
			{
				HookEndpointManager.Add<hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
			remove
			{
				HookEndpointManager.Remove<hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)value);
			}
		}
	}
}
namespace IL
{
	public static class AutoParentToShip
	{
		public static event Manipulator Awake
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_Awake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_Awake>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator LateUpdate
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_LateUpdate>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator StartSuckingOutOfShip
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_StartSuckingOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_StartSuckingOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator SuckObjectOutOfShip
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_SuckObjectOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_SuckObjectOutOfShip>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator MoveToOffset
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_MoveToOffset>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_MoveToOffset>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator ctor
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook_ctor>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __initializeVariables
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook___initializeVariables>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __initializeRpcs
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook___initializeRpcs>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}

		public static event Manipulator __getTypeName
		{
			add
			{
				HookEndpointManager.Modify<On.AutoParentToShip.hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
			remove
			{
				HookEndpointManager.Unmodify<On.AutoParentToShip.hook___getTypeName>(MethodBase.GetMethodFromHandle((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/), (Delegate)(object)value);
			}
		}
	}
}
namespace On
{
	public static class BaboonBirdAI
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool orig_IVisibleThreat_IsThreatDead(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool hook_IVisibleThreat_IsThreatDead(orig_IVisibleThreat_IsThreatDead orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate GrabbableObject orig_IVisibleThreat_GetHeldObject(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate GrabbableObject hook_IVisibleThreat_GetHeldObject(orig_IVisibleThreat_GetHeldObject orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int orig_IVisibleThreat_SendSpecialBehaviour(BaboonBirdAI self, int id);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int hook_IVisibleThreat_SendSpecialBehaviour(orig_IVisibleThreat_SendSpecialBehaviour orig, BaboonBirdAI self, int id);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int orig_IVisibleThreat_GetThreatLevel(BaboonBirdAI self, Vector3 seenByPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int hook_IVisibleThreat_GetThreatLevel(orig_IVisibleThreat_GetThreatLevel orig, BaboonBirdAI self, Vector3 seenByPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int orig_IVisibleThreat_GetInterestLevel(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate int hook_IVisibleThreat_GetInterestLevel(orig_IVisibleThreat_GetInterestLevel orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Transform orig_IVisibleThreat_GetThreatLookTransform(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Transform hook_IVisibleThreat_GetThreatLookTransform(orig_IVisibleThreat_GetThreatLookTransform orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Transform orig_IVisibleThreat_GetThreatTransform(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Transform hook_IVisibleThreat_GetThreatTransform(orig_IVisibleThreat_GetThreatTransform orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Vector3 orig_IVisibleThreat_GetThreatVelocity(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate Vector3 hook_IVisibleThreat_GetThreatVelocity(orig_IVisibleThreat_GetThreatVelocity orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float orig_IVisibleThreat_GetVisibility(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float hook_IVisibleThreat_GetVisibility(orig_IVisibleThreat_GetVisibility orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Start(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Start(orig_Start orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SyncInitialValuesServerRpc(BaboonBirdAI self, int syncLeadershipLevel, Vector3 campPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SyncInitialValuesServerRpc(orig_SyncInitialValuesServerRpc orig, BaboonBirdAI self, int syncLeadershipLevel, Vector3 campPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SyncInitialValuesClientRpc(BaboonBirdAI self, int syncLeadershipLevel, Vector3 campPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SyncInitialValuesClientRpc(orig_SyncInitialValuesClientRpc orig, BaboonBirdAI self, int syncLeadershipLevel, Vector3 campPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_LateUpdate(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_LateUpdate(orig_LateUpdate orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnCollideWithPlayer(BaboonBirdAI self, Collider other);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnCollideWithPlayer(orig_OnCollideWithPlayer orig, BaboonBirdAI self, Collider other);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnCollideWithEnemy(BaboonBirdAI self, Collider other, EnemyAI enemyScript);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnCollideWithEnemy(orig_OnCollideWithEnemy orig, BaboonBirdAI self, Collider other, EnemyAI enemyScript);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_HitEnemy(BaboonBirdAI self, int force, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_HitEnemy(orig_HitEnemy orig, BaboonBirdAI self, int force, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_KillEnemy(BaboonBirdAI self, bool destroy);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_KillEnemy(orig_KillEnemy orig, BaboonBirdAI self, bool destroy);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StopKillAnimation(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StopKillAnimation(orig_StopKillAnimation orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StabPlayerDeathAnimServerRpc(BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StabPlayerDeathAnimServerRpc(orig_StabPlayerDeathAnimServerRpc orig, BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StabPlayerDeathAnimClientRpc(BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StabPlayerDeathAnimClientRpc(orig_StabPlayerDeathAnimClientRpc orig, BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator orig_killPlayerAnimation(BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate IEnumerator hook_killPlayerAnimation(orig_killPlayerAnimation orig, BaboonBirdAI self, int playerObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_InteractWithScrap(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_InteractWithScrap(orig_InteractWithScrap orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool orig_CanGrabScrap(BaboonBirdAI self, GrabbableObject scrap);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate bool hook_CanGrabScrap(orig_CanGrabScrap orig, BaboonBirdAI self, GrabbableObject scrap);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DropHeldItemAndSync(BaboonBirdAI self, bool sync);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DropHeldItemAndSync(orig_DropHeldItemAndSync orig, BaboonBirdAI self, bool sync);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DropScrapRpc(BaboonBirdAI self, NetworkObjectReference item, Vector3 targetFloorPosition, bool isPlacingObject, bool matchRot, bool inShipRoom, bool droppedInElevator, NetworkObjectReference parentObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DropScrapRpc(orig_DropScrapRpc orig, BaboonBirdAI self, NetworkObjectReference item, Vector3 targetFloorPosition, bool isPlacingObject, bool matchRot, bool inShipRoom, bool droppedInElevator, NetworkObjectReference parentObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DropScrap(BaboonBirdAI self, NetworkObject item, Vector3 targetFloorPosition, bool isPlacingObject, bool matchRot, bool inShipRoom, bool itemDroppedInElevator, NetworkObjectReference parentObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DropScrap(orig_DropScrap orig, BaboonBirdAI self, NetworkObject item, Vector3 targetFloorPosition, bool isPlacingObject, bool matchRot, bool inShipRoom, bool itemDroppedInElevator, NetworkObjectReference parentObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_GrabItemAndSync(BaboonBirdAI self, NetworkObject item);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_GrabItemAndSync(orig_GrabItemAndSync orig, BaboonBirdAI self, NetworkObject item);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_GrabScrapServerRpc(BaboonBirdAI self, NetworkObjectReference item, int clientWhoSentRPC);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_GrabScrapServerRpc(orig_GrabScrapServerRpc orig, BaboonBirdAI self, NetworkObjectReference item, int clientWhoSentRPC);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_GrabScrapClientRpc(BaboonBirdAI self, NetworkObjectReference item, int clientWhoSentRPC);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_GrabScrapClientRpc(orig_GrabScrapClientRpc orig, BaboonBirdAI self, NetworkObjectReference item, int clientWhoSentRPC);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_GrabScrap(BaboonBirdAI self, NetworkObject item);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_GrabScrap(orig_GrabScrap orig, BaboonBirdAI self, NetworkObject item);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ReachedNodeInSearch(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ReachedNodeInSearch(orig_ReachedNodeInSearch orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DoAIInterval(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DoAIInterval(orig_DoAIInterval orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StopFocusingThreat(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StopFocusingThreat(orig_StopFocusingThreat orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StopFocusingThreatServerRpc(BaboonBirdAI self, bool enterScoutingMode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StopFocusingThreatServerRpc(orig_StopFocusingThreatServerRpc orig, BaboonBirdAI self, bool enterScoutingMode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StopFocusingThreatClientRpc(BaboonBirdAI self, bool enterScoutingMode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StopFocusingThreatClientRpc(orig_StopFocusingThreatClientRpc orig, BaboonBirdAI self, bool enterScoutingMode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAggressiveMode(BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAggressiveMode(orig_SetAggressiveMode orig, BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAggressiveModeServerRpc(BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAggressiveModeServerRpc(orig_SetAggressiveModeServerRpc orig, BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetAggressiveModeClientRpc(BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetAggressiveModeClientRpc(orig_SetAggressiveModeClientRpc orig, BaboonBirdAI self, int mode);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetThreatInView(BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetThreatInView(orig_SetThreatInView orig, BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetThreatInViewServerRpc(BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetThreatInViewServerRpc(orig_SetThreatInViewServerRpc orig, BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_SetThreatInViewClientRpc(BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_SetThreatInViewClientRpc(orig_SetThreatInViewClientRpc orig, BaboonBirdAI self, bool inView);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_EnemyEnterRestModeServerRpc(BaboonBirdAI self, bool sleep, bool atCamp);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_EnemyEnterRestModeServerRpc(orig_EnemyEnterRestModeServerRpc orig, BaboonBirdAI self, bool sleep, bool atCamp);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_EnemyEnterRestModeClientRpc(BaboonBirdAI self, bool sleep, bool atCamp);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_EnemyEnterRestModeClientRpc(orig_EnemyEnterRestModeClientRpc orig, BaboonBirdAI self, bool sleep, bool atCamp);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_EnemyGetUpServerRpc(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_EnemyGetUpServerRpc(orig_EnemyGetUpServerRpc orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_EnemyGetUpClientRpc(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_EnemyGetUpClientRpc(orig_EnemyGetUpClientRpc orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_OnDrawGizmos(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_OnDrawGizmos(orig_OnDrawGizmos orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DetectNoise(BaboonBirdAI self, Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot, int noiseID);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DetectNoise(orig_DetectNoise orig, BaboonBirdAI self, Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot, int noiseID);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_AnimateLooking(BaboonBirdAI self, Vector3 lookAtPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_AnimateLooking(orig_AnimateLooking orig, BaboonBirdAI self, Vector3 lookAtPosition);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_Update(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_Update(orig_Update orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float orig_GetComfortableDistanceToThreat(BaboonBirdAI self, Threat focusedThreat);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float hook_GetComfortableDistanceToThreat(orig_GetComfortableDistanceToThreat orig, BaboonBirdAI self, Threat focusedThreat);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_ReactToThreat(BaboonBirdAI self, Threat closestThreat);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_ReactToThreat(orig_ReactToThreat orig, BaboonBirdAI self, Threat closestThreat);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StartFocusOnThreatServerRpc(BaboonBirdAI self, NetworkObjectReference netObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StartFocusOnThreatServerRpc(orig_StartFocusOnThreatServerRpc orig, BaboonBirdAI self, NetworkObjectReference netObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StartFocusOnThreatClientRpc(BaboonBirdAI self, NetworkObjectReference netObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_StartFocusOnThreatClientRpc(orig_StartFocusOnThreatClientRpc orig, BaboonBirdAI self, NetworkObjectReference netObject);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float orig_ReactToOtherBaboonSighted(BaboonBirdAI self, BaboonBirdAI otherBaboon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate float hook_ReactToOtherBaboonSighted(orig_ReactToOtherBaboonSighted orig, BaboonBirdAI self, BaboonBirdAI otherBaboon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_DoLOSCheck(BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_DoLOSCheck(orig_DoLOSCheck orig, BaboonBirdAI self);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_PingBaboonInterest(BaboonBirdAI self, Vector3 interestPosition, int pingImportance);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_PingBaboonInterest(orig_PingBaboonInterest orig, BaboonBirdAI self, Vector3 interestPosition, int pingImportance);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_PingBirdInterestServerRpc(BaboonBirdAI self, Vector3 lookPosition, float timeToPeek);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_PingBirdInterestServerRpc(orig_PingBirdInterestServerRpc orig, BaboonBirdAI self, Vector3 lookPosition, float timeToPeek);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_PingBirdInterestClientRpc(BaboonBirdAI self, Vector3 lookPosition, float timeToPeek);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_PingBirdInterestClientRpc(orig_PingBirdInterestClientRpc orig, BaboonBirdAI self, Vector3 lookPosition, float timeToPeek);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_JoinScoutingGroup(BaboonBirdAI self, BaboonBirdAI otherBaboon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void hook_JoinScoutingGroup(orig_JoinScoutingGroup orig, BaboonBirdAI self, BaboonBirdAI otherBaboon);

		[EditorBrowsable(EditorBrowsableState.Never)]
		public delegate void orig_StartScoutingGroup(BaboonBirdAI self, BaboonBirdAI firstMember, bool syncWithClients);