Decompiled source of RadialUIPlugin v3.0.0

RadialUI.dll

Decompiled 2 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using Bounce.Unmanaged;
using DataModel;
using HarmonyLib;
using RadialUI.Extensions;
using TaleSpire.GameMaster.Blocks;
using Unity.Mathematics;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("RadialUIPlugin")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("HolloFox")]
[assembly: AssemblyProduct("RadialUIPlugin")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4e4deb5e-97f9-4901-bf67-6748a9c1229a")]
[assembly: AssemblyFileVersion("3.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("3.0.0.0")]
namespace RadialUI
{
	[BepInPlugin("org.hollofox.plugins.RadialUIPlugin", "RadialUIPlugin", "3.0.0.0")]
	public sealed class RadialUIPlugin : BaseUnityPlugin
	{
		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuAttacks = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuAttacks = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onCharacterCallback = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onCanAttack = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onCantAttack = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnCharacter = new Dictionary<string, List<RadialCheckRemove>>();

		internal static NGuid lastCreature;

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuEmotes = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuEmotes = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuGm = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuGm = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuKill = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuKill = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuSize = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuSize = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onStatCallback = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, (string, ShouldShowMenu)> _hideStat = new Dictionary<string, (string, ShouldShowMenu)>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onSubmenuStatusEmotes = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnSubmenuStatusEmotes = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> _onGroupSubmenuGm = new Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnGroupSubmenuGm = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnGMBlock = new Dictionary<string, List<RadialCheckRemove>>();

		internal static readonly Dictionary<string, (ItemArgs, Func<AtmosphereBlock, bool>)> _onGMBlock = new Dictionary<string, (ItemArgs, Func<AtmosphereBlock, bool>)>();

		internal static readonly Dictionary<string, (ItemArgs, Func<HideVolumeItem, bool>)> _onHideVolumeCallback = new Dictionary<string, (ItemArgs, Func<HideVolumeItem, bool>)>();

		internal static readonly Dictionary<string, List<RadialCheckRemove>> _removeOnHideVolume = new Dictionary<string, List<RadialCheckRemove>>();

		internal static HideVolumeItem lastHideVolume;

		public const string Guid = "org.hollofox.plugins.RadialUIPlugin";

		public const string Version = "3.0.0.0";

		public const string Name = "RadialUIPlugin";

		internal static ManualLogSource logger;

		public static void AddCustomButtonAttacksSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onSubmenuAttacks.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonAttacksSubmenu(string key)
		{
			return _onSubmenuAttacks.Remove(key);
		}

		public static void HideDefaultAttacksSubmenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuAttacks, key, value, callback);
		}

		public static void UnHideDefaultAttacksSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuAttacks, key, value);
		}

		public static void AddCustomButtonOnCharacter(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onCharacterCallback.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonOnCharacter(string key)
		{
			return _onCharacterCallback.Remove(key);
		}

		public static void HideDefaultCharacterMenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnCharacter, key, value, callback);
		}

		public static void UnHideDefaultCharacterMenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnCharacter, key, value);
		}

		public static NGuid GetLastRadialTargetCreature()
		{
			//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_0009: Unknown result type (might be due to invalid IL or missing references)
			return lastCreature;
		}

		public static void AddCustomButtonEmotesSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onSubmenuEmotes.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonEmotesSubmenu(string key)
		{
			return _onSubmenuEmotes.Remove(key);
		}

		public static void HideDefaultEmotesSubmenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuEmotes, key, value, callback);
		}

		public static void UnHideDefaultEmotesSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuEmotes, key, value);
		}

		public static void AddCustomButtonGMSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Expected O, but got Unknown
			_onSubmenuGm.Add(key, (value, externalCheck));
			ItemArgs item = new ItemArgs
			{
				Action = delegate(MapMenuItem MapMenuItem, object Object)
				{
					//IL_0029: Unknown result type (might be due to invalid IL or missing references)
					CreatureGuid[] array = default(CreatureGuid[]);
					if (LocalClient.TryGetLassoedCreatureIds(ref array))
					{
						int num = array.Length;
						for (int i = 0; i < num; i++)
						{
							value.Action(MapMenuItem, array[i].Value);
						}
					}
				},
				Title = value.Title,
				Icon = value.Icon,
				SubValueText = value.SubValueText,
				Scale = value.Scale,
				CloseMenuOnActivate = value.CloseMenuOnActivate,
				FadeName = value.FadeName,
				ValueText = value.ValueText,
				Obj = value.Obj
			};
			_onGroupSubmenuGm.Add(key, (item, externalCheck));
		}

		public static bool RemoveCustomButtonGMSubmenu(string key)
		{
			return _onSubmenuGm.Remove(key) && _onGroupSubmenuGm.Remove(key);
		}

		public static void HideDefaultEmotesGMItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuGm, key, value, callback);
		}

		public static void UnHideDefaultGMSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuGm, key, value);
		}

		public static void AddCustomButtonOnKillSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onSubmenuKill.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonOnKillSubmenu(string key)
		{
			return _onSubmenuKill.Remove(key);
		}

		public static void HideDefaultKillSubmenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuKill, key, value, callback);
		}

		public static void ShowDefaultKillSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuKill, key, value);
		}

		public static void AddCustomButtonOnSizeSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onSubmenuSize.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonOnSizeSubmenu(string key)
		{
			return _onSubmenuSize.Remove(key);
		}

		public static void HideDefaultSizeSubmenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuSize, key, value, callback);
		}

		public static void ShowDefaultSizeSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuSize, key, value);
		}

		public static void AddCustomCharacterSubmenuStat(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onStatCallback.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomCharacterSubmenuStat(string key)
		{
			return _onStatCallback.Remove(key);
		}

		public static void HideDefaultCharacterSubmenuStat(string key, string value, ShouldShowMenu callback = null)
		{
			_hideStat.Add(key, (value, callback));
		}

		public static void HideDefaultCharacterSubmenuStat(string key, RadialCheckRemove remove)
		{
			_hideStat.Add(key, (remove.TitleToRemove, remove.ShouldRemoveCallback));
		}

		public static bool ShowDefaultCharacterSubmenuStat(string key)
		{
			return _hideStat.Remove(key);
		}

		public static void AddCustomButtonStatusEmotesSubmenu(string key, ItemArgs value, Func<NGuid, NGuid, bool> externalCheck = null)
		{
			_onSubmenuStatusEmotes.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonStatusEmotesSubmenu(string key)
		{
			return _onSubmenuStatusEmotes.Remove(key);
		}

		public static void HideDefaultEmotesStatusSubmenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnSubmenuStatusEmotes, key, value, callback);
		}

		public static void UnHideDefaultEmotesStatusSubmenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnSubmenuStatusEmotes, key, value);
		}

		public static void HideDefaultGMBlockMenuItem(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnGMBlock, key, value, callback);
		}

		public static void UnHideDefaultGMBlockMenuItem(string key, string value)
		{
			RemoveRemoveOn(_removeOnGMBlock, key, value);
		}

		public static void AddCustomButtonGMBlock(string key, ItemArgs value, Func<AtmosphereBlock, bool> externalCheck = null)
		{
			_onGMBlock.Add(key, (value, externalCheck));
		}

		public static bool RemoveCustomButtonGMBlock(string key)
		{
			return _onGMBlock.Remove(key);
		}

		public static void AddOnHideVolume(string key, ItemArgs value, Func<HideVolumeItem, bool> externalCheck = null)
		{
			_onHideVolumeCallback.Add(key, (value, externalCheck));
		}

		public static bool RemoveOnHideVolume(string key)
		{
			return _onHideVolumeCallback.Remove(key);
		}

		public static void AddOnRemoveHideVolume(string key, string value, ShouldShowMenu callback = null)
		{
			AddRemoveOn(_removeOnHideVolume, key, value, callback);
		}

		public static void RemoveOnRemoveHideVolume(string key, string value)
		{
			RemoveRemoveOn(_removeOnHideVolume, key, value);
		}

		public static HideVolumeItem GetLastRadialHideVolume()
		{
			return lastHideVolume;
		}

		private void Awake()
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Expected O, but got Unknown
			logger = ((BaseUnityPlugin)this).Logger;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"In Awake for RadialUI");
			Harmony val = new Harmony("org.hollofox.plugins.RadialUIPlugin");
			try
			{
				val.PatchAll();
				((BaseUnityPlugin)this).Logger.LogDebug((object)"RadialUI Plug-in loaded");
			}
			catch (Exception ex)
			{
				((BaseUnityPlugin)this).Logger.LogDebug((object)"RadialUI Failed to patch");
				((BaseUnityPlugin)this).Logger.LogError((object)ex);
				val.UnpatchSelf();
				((BaseUnityPlugin)this).Logger.LogDebug((object)"unpatching RadialUI");
			}
		}

		public static void AddRemoveOn(Dictionary<string, List<RadialCheckRemove>> data, string key, string value, ShouldShowMenu shouldRemoveCallback)
		{
			if (!data.ContainsKey(key))
			{
				data.Add(key, new List<RadialCheckRemove>());
			}
			if (shouldRemoveCallback == null)
			{
				shouldRemoveCallback = AlwaysTrue;
			}
			data[key].Add(new RadialCheckRemove(value, shouldRemoveCallback));
		}

		public static bool AlwaysTrue(string s1, string s2, string s3)
		{
			return true;
		}

		public static bool RemoveRemoveOn(Dictionary<string, List<RadialCheckRemove>> data, string key, string value)
		{
			if (!data.ContainsKey(key))
			{
				return false;
			}
			List<RadialCheckRemove> list = data[key];
			int count = list.Count;
			list.RemoveAll((RadialCheckRemove x) => x.TitleToRemove == value);
			bool result = list.Count != count;
			if (list.Count == 0)
			{
				data.Remove(key);
			}
			return result;
		}
	}
	public delegate bool ShouldShowMenu(string menuText, string miniId, string targetId);
	public delegate bool ShouldShowHVMenu(string menuText);
	internal static class RCRExt
	{
		public static bool CanAdd(this Dictionary<string, (string, ShouldShowMenu)> dic, string menuText, string miniId, string targetId)
		{
			return dic.Keys.Where((string key) => dic[key].Item1 == menuText).All((string key) => dic[key].Item2(menuText, miniId, targetId));
		}

		public static bool CanAdd(this Dictionary<string, List<RadialCheckRemove>> dic, string menuText, string miniId, string targetId)
		{
			IEnumerable<RadialCheckRemove> source = dic.Values.SelectMany((List<RadialCheckRemove> l) => l.Where((RadialCheckRemove i) => i.TitleToRemove == menuText));
			return source.All((RadialCheckRemove remover) => !remover.ShouldRemoveCallback(menuText, miniId, targetId));
		}

		public static bool CanAdd(this Dictionary<string, List<RadialCheckRemove>> dic, string menuText)
		{
			IEnumerable<RadialCheckRemove> source = dic.Values.SelectMany((List<RadialCheckRemove> l) => l.Where((RadialCheckRemove i) => i.TitleToRemove == menuText));
			return source.All((RadialCheckRemove remover) => !remover.ShouldRemoveHVCallback(menuText));
		}
	}
	public class RadialCheckRemove
	{
		public string TitleToRemove { get; set; }

		public ShouldShowMenu ShouldRemoveCallback { get; }

		public ShouldShowHVMenu ShouldRemoveHVCallback { get; }

		public RadialCheckRemove()
		{
		}

		public RadialCheckRemove(string titleToRemove, ShouldShowMenu shouldRemoveCallback)
		{
			TitleToRemove = titleToRemove;
			ShouldRemoveCallback = shouldRemoveCallback;
		}
	}
	public class RadialSubmenu
	{
		public enum MenuType
		{
			character = 1,
			canAttack,
			cantAttack,
			HideVolume,
			GMBlock
		}

		private static CreatureGuid radialAsset = default(CreatureGuid);

		private static HideVolumeItem radialHideVolume;

		private static Dictionary<string, List<ItemArgs>> subMenuEntries = new Dictionary<string, List<ItemArgs>>();

		private static Dictionary<ItemArgs, Func<bool>> subMenuChecker = new Dictionary<ItemArgs, Func<bool>>();

		private static MenuType openMenuType = MenuType.character;

		public static void EnsureMainMenuItem(string mainGuid, MenuType type, string title, Sprite icon, Func<NGuid, NGuid, bool> checker = null)
		{
			if (checker == null)
			{
				checker = Reporter;
			}
			if (!subMenuEntries.ContainsKey(mainGuid))
			{
				switch (type)
				{
				case MenuType.character:
					EnsureMainMenuOnCharacter(mainGuid, title, icon, checker);
					break;
				case MenuType.HideVolume:
					EnsureMainMenuOnHideVolume(mainGuid, title, icon);
					break;
				}
				subMenuEntries.Add(mainGuid, new List<ItemArgs>());
			}
		}

		public static void EnsureMainMenuItem(string mainGuid, MenuType type, string title, Sprite icon)
		{
			if (!subMenuEntries.ContainsKey(mainGuid))
			{
				switch (type)
				{
				case MenuType.character:
					EnsureMainMenuOnCharacter(mainGuid, title, icon);
					break;
				case MenuType.HideVolume:
					EnsureMainMenuOnHideVolume(mainGuid, title, icon);
					break;
				}
				subMenuEntries.Add(mainGuid, new List<ItemArgs>());
			}
		}

		private static void EnsureMainMenuOnHideVolume(string mainGuid, string title, Sprite icon)
		{
			RadialUIPlugin.AddOnHideVolume(mainGuid, NewMainMenu(mainGuid, title, icon), Reporter);
			openMenuType = MenuType.HideVolume;
		}

		private static void EnsureMainMenuOnCharacter(string mainGuid, string title, Sprite icon, Func<NGuid, NGuid, bool> checker = null)
		{
			RadialUIPlugin.AddCustomButtonOnCharacter(mainGuid, NewMainMenu(mainGuid, title, icon), checker);
			openMenuType = MenuType.character;
		}

		public static ItemArgs NewMainMenu(string mainGuid, string title, Sprite icon)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			return new ItemArgs
			{
				Action = delegate(MapMenuItem mmi, object obj)
				{
					DisplaySubmenu(mmi, obj, mainGuid);
				},
				Icon = icon,
				Title = title,
				CloseMenuOnActivate = false
			};
		}

		[Obsolete]
		public static void CreateSubMenuItem(string mainGuid, string title, Sprite icon, Action<CreatureGuid, string, MapMenuItem> callback, bool closeMenu)
		{
			CreateSubMenuItem(mainGuid, title, icon, callback, closeMenu, null);
		}

		[Obsolete]
		public static void CreateSubMenuItem(string mainGuid, string title, Sprite icon, Action<CreatureGuid, string, MapMenuItem> callback)
		{
			CreateSubMenuItem(mainGuid, title, icon, callback, closeMenu: true, null);
		}

		public static void CreateSubMenuItem(string mainGuid, string title, Sprite icon, Action<CreatureGuid, string, MapMenuItem> callback, bool closeMenu = true, Func<bool> checker = null)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			if (!subMenuEntries.ContainsKey(mainGuid))
			{
				RadialUIPlugin.logger.LogWarning((object)("Main radial menu '" + mainGuid + "' does not exits. Use EnsureMainMenuItem() before adding sub-menu items."));
				return;
			}
			ItemArgs val = new ItemArgs
			{
				Action = delegate(MapMenuItem mmi, object obj)
				{
					//IL_0007: Unknown result type (might be due to invalid IL or missing references)
					callback(radialAsset, mainGuid, mmi);
				},
				Icon = icon,
				Title = title,
				CloseMenuOnActivate = closeMenu
			};
			subMenuEntries[mainGuid].Add(val);
			if (checker != null)
			{
				subMenuChecker.Add(val, checker);
			}
		}

		public static void CreateSubMenuItem(string mainGuid, string title, Sprite icon, Action<HideVolumeItem, string, MapMenuItem> callback, bool closeMenu = true, Func<bool> checker = null)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: 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_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			if (!subMenuEntries.ContainsKey(mainGuid))
			{
				RadialUIPlugin.logger.LogWarning((object)("Main radial menu '" + mainGuid + "' does not exits. Use EnsureMainMenuItem() before adding sub-menu items."));
				return;
			}
			ItemArgs val = new ItemArgs
			{
				Action = delegate(MapMenuItem mmi, object obj)
				{
					callback(radialHideVolume, mainGuid, mmi);
				},
				Icon = icon,
				Title = title,
				CloseMenuOnActivate = closeMenu
			};
			subMenuEntries[mainGuid].Add(val);
			if (checker != null)
			{
				subMenuChecker.Add(val, checker);
			}
		}

		public static void CreateSubMenuItem(string mainGuid, ItemArgs item, Action<HideVolumeItem, string, MapMenuItem> callback = null, Func<bool> checker = null)
		{
			if (!subMenuEntries.ContainsKey(mainGuid))
			{
				RadialUIPlugin.logger.LogWarning((object)("Main radial menu '" + mainGuid + "' does not exits. Use EnsureMainMenuItem() before adding sub-menu items."));
				return;
			}
			if (callback != null)
			{
				item.Action = delegate(MapMenuItem mmi, object obj)
				{
					callback(radialHideVolume, mainGuid, mmi);
				};
			}
			subMenuEntries[mainGuid].Add(item);
			if (checker != null)
			{
				subMenuChecker.Add(item, checker);
			}
		}

		[Obsolete]
		public static Sprite GetIconFromFile(string fileName)
		{
			return null;
		}

		private static bool Reporter(NGuid selected, NGuid radial)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			radialAsset = new CreatureGuid(radial);
			return true;
		}

		private static bool Reporter(HideVolumeItem item)
		{
			radialHideVolume = item;
			return true;
		}

		private static void DisplaySubmenu(MapMenuItem mmi, object obj, string mainGuid)
		{
			//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_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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)
			Vector3 val = ((openMenuType == MenuType.character) ? (((Component)Talespire.RadialMenus.GetTargetCreature()).transform.position + Vector3.up * Talespire.RadialMenus.GetHeightDiff()) : ((openMenuType != MenuType.HideVolume) ? float3.op_Implicit(GMBlockInteractMenuBoardTool.block.WorldPosition) : Talespire.RadialMenus.GetRadialTargetHideVolume()));
			MapMenu val2 = MapMenuManager.OpenMenu(val, true);
			foreach (ItemArgs item in subMenuEntries[mainGuid])
			{
				if (!subMenuChecker.ContainsKey(item) || subMenuChecker[item]())
				{
					val2.AddItem(item);
				}
			}
		}
	}
	public static class Checkers
	{
		public static bool HasOwnership(NGuid selected, NGuid targeted)
		{
			//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_0007: Unknown result type (might be due to invalid IL or missing references)
			return CreatureManager.PlayerCanControlCreature(LocalPlayer.Id, new CreatureGuid(targeted));
		}

		public static bool CanAttack(NGuid selected, NGuid targeted)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return selected != targeted;
		}
	}
	public static class Talespire
	{
		public static class RadialMenus
		{
			private static BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

			public static List<MapMenu> GetAllOpen()
			{
				FieldInfo field = ((object)SingletonBehaviour<MapMenuManager>.Instance).GetType().GetField("_allOpenMenus", bindFlags);
				return field.GetValue(SingletonBehaviour<MapMenuManager>.Instance) as List<MapMenu>;
			}

			public static NGuid GetTargetCreatureId()
			{
				//IL_001b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0025: 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_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				CreatureBoardAsset targetCreature = GetTargetCreature();
				if ((Object)(object)targetCreature == (Object)null)
				{
					return NGuid.Empty;
				}
				return targetCreature.CreatureId.Value;
			}

			public static float GetHeightDiff()
			{
				CreatureMenuBoardTool creatureMenuBoardTool = GetCreatureMenuBoardTool();
				if ((Object)(object)creatureMenuBoardTool == (Object)null)
				{
					return 0f;
				}
				FieldInfo field = ((object)creatureMenuBoardTool).GetType().GetField("_hitHeightDif", bindFlags);
				return (float)field.GetValue(creatureMenuBoardTool);
			}

			public static CreatureBoardAsset GetTargetCreature()
			{
				CreatureMenuBoardTool creatureMenuBoardTool = GetCreatureMenuBoardTool();
				FieldInfo field = ((object)creatureMenuBoardTool).GetType().GetField("_selectedCreature", bindFlags);
				object? value = field.GetValue(creatureMenuBoardTool);
				return (CreatureBoardAsset)((value is CreatureBoardAsset) ? value : null);
			}

			public static HideVolumeItem GetSelectedHideVolumeItem()
			{
				GMHideVolumeMenuBoardTool gMHideVolumeMenuBoardTool = GetGMHideVolumeMenuBoardTool();
				FieldInfo field = ((object)gMHideVolumeMenuBoardTool).GetType().GetField("_selectedVolume", bindFlags);
				object? value = field.GetValue(gMHideVolumeMenuBoardTool);
				return (HideVolumeItem)((value is HideVolumeItem) ? value : null);
			}

			public static Vector3 GetRadialTargetHideVolume()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_002c: Unknown result type (might be due to invalid IL or missing references)
				GMHideVolumeMenuBoardTool gMHideVolumeMenuBoardTool = GetGMHideVolumeMenuBoardTool();
				FieldInfo field = ((object)gMHideVolumeMenuBoardTool).GetType().GetField("_selectedPos", bindFlags);
				return (Vector3)field.GetValue(gMHideVolumeMenuBoardTool);
			}

			public static CreatureMenuBoardTool GetCreatureMenuBoardTool()
			{
				Object obj = Object.FindObjectOfType(typeof(CreatureMenuBoardTool));
				return (CreatureMenuBoardTool)(object)((obj is CreatureMenuBoardTool) ? obj : null);
			}

			public static GMHideVolumeMenuBoardTool GetGMHideVolumeMenuBoardTool()
			{
				//IL_0010: Unknown result type (might be due to invalid IL or missing references)
				//IL_0016: Expected O, but got Unknown
				return (GMHideVolumeMenuBoardTool)Object.FindObjectOfType(typeof(GMHideVolumeMenuBoardTool));
			}
		}
	}
}
namespace RadialUI.HideVolume_Menu_Patches
{
	[HarmonyPatch(typeof(GMHideVolumeMenuBoardTool), "Begin")]
	internal sealed class HideVolumeMenuPatch
	{
		internal static bool Prefix(HideVolumeItem ____selectedVolume)
		{
			RadialUIPlugin.lastHideVolume = ____selectedVolume;
			return true;
		}

		public static void Postfix(HideVolumeItem ____selectedVolume, Vector3 ____selectedPos, ref GMHideVolumeMenuBoardTool __instance)
		{
			MapMenu mapMenu = Mapmenu.GetMapMenu();
			mapMenu.TryHideItem(RadialUIPlugin._removeOnHideVolume, "Toggle Visibility", null, null);
			mapMenu.TryHideItem(RadialUIPlugin._removeOnHideVolume, "Filters", null, null);
			mapMenu.TryHideItem(RadialUIPlugin._removeOnHideVolume, "Delete", null, null);
			mapMenu.AddItems(RadialUIPlugin._onHideVolumeCallback, ____selectedVolume);
		}
	}
}
namespace RadialUI.Extensions
{
	[HarmonyPatch(typeof(MapMenuManager), "OpenMenu")]
	public static class MapMenuManagerPatch
	{
		public static MapMenu mapMenu;

		public static void Postfix(ref MapMenu __result)
		{
			mapMenu = __result;
		}
	}
	public static class Mapmenu
	{
		internal static void AddItems(this MapMenu map, Dictionary<string, (ItemArgs, Func<NGuid, NGuid, bool>)> list, NGuid targetId)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			NGuid miniId = LocalClient.SelectedCreatureId.Value;
			foreach (string item in list.Keys.Where((string key) => list[key].Item2 == null || list[key].Item2(miniId, targetId)))
			{
				list[item].Item1.Obj = miniId;
				map.AddItem(list[item].Item1);
			}
		}

		internal static MapMenu GetMapMenu()
		{
			RadialUIPlugin.logger.LogInfo((object)$"Fetching MapMenu: {(Object)(object)MapMenuManagerPatch.mapMenu != (Object)null}");
			return MapMenuManagerPatch.mapMenu;
		}

		internal static bool TryHideItem(this MapMenu map, Dictionary<string, List<RadialCheckRemove>> checker, string itemName, string miniId, string targetId)
		{
			return map.TryHideItem(itemName);
		}

		internal static bool TryHideItem(this MapMenu map, string itemName)
		{
			return false;
		}

		internal static void AddItems(this MapMenu map, Dictionary<string, (ItemArgs, Func<HideVolumeItem, bool>)> list, HideVolumeItem selectedVolume)
		{
			foreach (string item in list.Keys.Where((string key) => list[key].Item2 == null || list[key].Item2(selectedVolume)))
			{
				map.AddItem(list[item].Item1);
			}
		}

		internal static void AddItems(this MapMenu map, Dictionary<string, (ItemArgs, Func<AtmosphereBlock, bool>)> list, AtmosphereBlock selectedVolume)
		{
			foreach (string item in list.Keys.Where((string key) => list[key].Item2 == null || list[key].Item2(selectedVolume)))
			{
				list[item].Item1.Obj = list[item].Item1.Obj ?? selectedVolume;
				map.AddItem(list[item].Item1);
			}
		}
	}
	public static class RadialExtensions
	{
		private const BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		public static bool CanShow(this Dictionary<string, List<RadialCheckRemove>> listOfRemovers, string menuId, string minid, string targetid)
		{
			IEnumerable<RadialCheckRemove> source = listOfRemovers.Values.SelectMany((List<RadialCheckRemove> l) => l.Where((RadialCheckRemove r) => r.TitleToRemove == menuId && r.ShouldRemoveCallback != null));
			return source.All((RadialCheckRemove r) => !r.ShouldRemoveCallback(menuId, minid, targetid));
		}
	}
	internal static class Reflections
	{
		private const BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

		internal static Action<MapMenu, object> GetMenuAction<Tclass>(string method, Tclass o)
		{
			return CreateReusableAction<Tclass, MapMenu, object>(method, o);
		}

		internal static Action<MapMenuItem, object> GetMenuItemAction<Tclass>(string method, Tclass o)
		{
			return CreateReusableAction<Tclass, MapMenuItem, object>(method, o);
		}

		internal static T CallMethod<T, TClass>(string methodName, TClass instance, object[] param = null)
		{
			if (param == null)
			{
				param = new object[0];
			}
			MethodInfo method = typeof(TClass).GetMethod(methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			return (T)method.Invoke(instance, param);
		}

		internal static void CallMethod<TClass>(string methodName, TClass instance, object[] param = null)
		{
			if (param == null)
			{
				param = new object[0];
			}
			MethodInfo method = typeof(TClass).GetMethod(methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			method.Invoke(instance, param);
		}

		internal static Action<Tp1, Tp2> CreateReusableAction<TClass, Tp1, Tp2>(string methodName, TClass instance)
		{
			MethodInfo method = typeof(TClass).GetMethod(methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
			if (method == null)
			{
				RadialUIPlugin.logger.LogDebug((object)$"Method {methodName} for {instance.GetType()} was not found.");
				return null;
			}
			return Caller;
			void Caller(Tp1 param1, Tp2 param2)
			{
				method.Invoke(instance, new object[2] { param1, param2 });
			}
		}
	}
}
namespace RadialUI.CreatureGroupMenuPatches
{
	[HarmonyPatch(typeof(CreatureGroupMenuBoardTool), "Menu_GMTools")]
	internal sealed class GroupGMToolsSubMenuPatch
	{
		internal static bool Prefix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature, CreatureGroupMenuBoardTool __instance)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			Action<MapMenu, object> menuAction = Reflections.GetMenuAction<CreatureGroupMenuBoardTool>("Menu_SetSize", __instance);
			Action<MapMenu, object> menuAction2 = Reflections.GetMenuAction<CreatureGroupMenuBoardTool>("BaseColor_Menu", __instance);
			if (menuAction != null && RadialUIPlugin._removeOnSubmenuGm.CanAdd("Set Size", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString()))
			{
				map.AddMenuItem((MenuType)3, menuAction, "Set Size", "", "", Icons.GetIconSprite("creaturesize"), (object)null, true, false, 1f);
			}
			if (menuAction2 != null && RadialUIPlugin._removeOnSubmenuGm.CanAdd("BaseColor", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString()))
			{
				map.AddMenuItem((MenuType)3, menuAction2, "BaseColor", "", "", Icons.GetIconSprite("basecolor"), (object)null, true, false, 1f);
			}
			return false;
		}

		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//IL_0007: 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)
			map.AddItems(RadialUIPlugin._onGroupSubmenuGm, LocalClient.SelectedCreatureId.Value);
		}
	}
}
namespace RadialUI.Creature_Menu_Patches
{
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Attack_Menu")]
	internal sealed class AttacksSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuAttacks, "Hit", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuAttacks, "Magic Missile", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuAttacks, "RedLaser", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuAttacks, "GreenLaser", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.AddItems(RadialUIPlugin._onSubmenuAttacks, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Begin")]
	internal sealed class CreatureRootMenuPatch
	{
		internal static MapMenu map;

		public static void Postfix(CreatureBoardAsset ____selectedCreature, CreatureMenuBoardTool __instance, float ____hitHeightDif)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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_000d: 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_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = ____selectedCreature.CreatureId.Value;
			RadialUIPlugin.lastCreature = value;
			map = Mapmenu.GetMapMenu();
			map.TryHideItem("Attack");
			map.AddItems(RadialUIPlugin._onCharacterCallback, ____selectedCreature.CreatureId.Value);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Emote_Menu")]
	internal sealed class EmotesSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, List<ActionTimeline> ____emotes, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			for (int i = 0; i < ____emotes.Count; i++)
			{
				ActionTimeline val = ____emotes[i];
				map.TryHideItem(RadialUIPlugin._removeOnSubmenuEmotes, ((Object)val).name, ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			}
			map.AddItems(RadialUIPlugin._onSubmenuEmotes, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Menu_GMTools")]
	internal sealed class GMToolsSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_0120: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "Rename", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "Make Not Unique", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "Make Unique", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "Set Size", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuGm, "BaseCikir", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.AddItems(RadialUIPlugin._onSubmenuGm, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Menu_KillMenu")]
	internal sealed class KillSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_0049: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuKill, "Kill Creature", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.AddItems(RadialUIPlugin._onSubmenuKill, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Menu_SetSize")]
	internal sealed class SizeSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_01a1: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "0.5x0.5", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "1x1", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "2x2", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "3x3", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "4x4", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "6x6", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "8x8", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "10x10", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.TryHideItem(RadialUIPlugin._removeOnSubmenuSize, "12x12", ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			map.AddItems(RadialUIPlugin._onSubmenuSize, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "Menu_Stats")]
	internal sealed class StatSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_001e: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			map.AddItems(RadialUIPlugin._onStatCallback, value2);
		}
	}
	[HarmonyPatch(typeof(CreatureMenuBoardTool), "StatusEmote_Menu")]
	internal sealed class StatusSubMenuPatch
	{
		public static void Postfix(MapMenu map, object obj, List<ActionTimeline> ____statusEmotes, CreatureBoardAsset ____selectedCreature)
		{
			//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_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_006b: Unknown result type (might be due to invalid IL or missing references)
			NGuid value = LocalClient.SelectedCreatureId.Value;
			NGuid value2 = ____selectedCreature.CreatureId.Value;
			for (int i = 0; i < ____statusEmotes.Count; i++)
			{
				ActionTimeline val = ____statusEmotes[i];
				map.TryHideItem(RadialUIPlugin._removeOnSubmenuStatusEmotes, ((Object)val).name, ((object)(NGuid)(ref value)).ToString(), ((object)(NGuid)(ref value2)).ToString());
			}
			map.AddItems(RadialUIPlugin._onSubmenuStatusEmotes, value2);
		}
	}
	[HarmonyPatch(typeof(GMBlockInteractMenuBoardTool), "Begin")]
	internal sealed class GMBlockMenuPatch
	{
		public static void Postfix(ref GMBlockInteractMenuBoardTool __instance)
		{
			MapMenu mapMenu = Mapmenu.GetMapMenu();
			mapMenu.TryHideItem(RadialUIPlugin._removeOnGMBlock, "Delete", null, null);
		}
	}
	[HarmonyPatch(typeof(GMBlockButtonAtmosphere), "OnOpenMenu")]
	internal sealed class GMBlockButtonPatch
	{
		public static void Postfix(MapMenu map, GMDataBlockBase ____base)
		{
			map.TryHideItem(RadialUIPlugin._removeOnGMBlock, "Apply", null, null);
			map.TryHideItem(RadialUIPlugin._removeOnGMBlock, "Edit", null, null);
			map.AddItems(RadialUIPlugin._onGMBlock, ____base.AtmosphereBlock);
		}
	}
}