Decompiled source of TestModFlloppis4 v1.2.0

BepInEx/plugins/MushroomMan-QuickChat/QuickChat/QuickChat.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalConfig;
using LethalConfig.ConfigItems;
using LethalConfig.ConfigItems.Options;
using QuickChat.RadialMenu;
using TMPro;
using TerminalApi;
using TerminalApi.Classes;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("QuickChat")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("QuickChat")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("5c2f0b6a-7ca6-4131-abbf-3f1d4650154e")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")]
[assembly: AssemblyVersion("1.0.0.0")]
internal static class QuickChatExtensions
{
	internal static string RemoveWhiteSpace(this string self)
	{
		return new string(self.Where((char c) => !char.IsWhiteSpace(c)).ToArray());
	}

	internal static string CapitalizeFirstChar(this string self)
	{
		if (self == null || self.Length == 0)
		{
			return self;
		}
		return self[0].ToString().ToUpper() + self.Substring(1);
	}
}
namespace QuickChat
{
	[HarmonyPatch(typeof(HUDManager))]
	internal class ChatCharacterLimitPatcher
	{
		public static int CharacterLimit = 9999;

		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void CharacterLimitPatchTMP(ref TMP_InputField ___chatTextField)
		{
			___chatTextField.characterLimit = 0;
		}

		[HarmonyPatch("AddPlayerChatMessageServerRpc")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> CharacterLimitPatchServerRPC(IEnumerable<CodeInstruction> instructions)
		{
			return FindAndReplaceCharacterLimit(new List<CodeInstruction>(instructions)).AsEnumerable();
		}

		[HarmonyPatch("SubmitChat_performed")]
		[HarmonyTranspiler]
		private static IEnumerable<CodeInstruction> CharacterLimitPatchSubmitChat(IEnumerable<CodeInstruction> instructions)
		{
			return FindAndReplaceCharacterLimit(new List<CodeInstruction>(instructions)).AsEnumerable();
		}

		private static List<CodeInstruction> FindAndReplaceCharacterLimit(List<CodeInstruction> code)
		{
			for (int i = 0; i < code.Count - 1; i++)
			{
				if (code[i].opcode == OpCodes.Callvirt && code[i].operand.ToString() == "Int32 get_Length()" && code[i + 1].opcode == OpCodes.Ldc_I4_S)
				{
					code[i + 1].opcode = OpCodes.Ldc_I4;
					code[i + 1].operand = CharacterLimit;
					break;
				}
			}
			return code;
		}
	}
	[HarmonyPatch(typeof(HUDManager))]
	internal class ChatPatcher
	{
		internal static Dictionary<string, string> ChatShortcuts = new Dictionary<string, string>();

		internal static string Prefix = "/";

		internal static bool CaseSensitive = false;

		internal static void ChatCommandsGen(string rawShortcuts)
		{
			string[] array = rawShortcuts.Split(new char[1] { ',' });
			ChatShortcuts.Clear();
			string[] array2 = array;
			for (int i = 0; i < array2.Length; i++)
			{
				string[] array3 = array2[i].Split(new char[1] { ':' });
				if (!Utility.IsNullOrWhiteSpace(array3[0]) && !Utility.IsNullOrWhiteSpace(array3[1]))
				{
					string text = Prefix + array3[0].RemoveWhiteSpace();
					string text2 = array3[1].Trim();
					if (!CaseSensitive)
					{
						text = text.ToLower();
					}
					Plugin.LogSource.LogDebug((object)("New Chat Shortcut: \"" + text + "\" => \"" + text2 + "\""));
					ChatShortcuts.Add(text, text2);
				}
			}
		}

		internal static void ChatShortcutsGeneration(int num, List<SimpleShortcut> simpleShortcuts)
		{
			ChatShortcuts.Clear();
			for (int i = 0; i < num; i++)
			{
				string nameValue = simpleShortcuts[i].nameValue;
				string resultValue = simpleShortcuts[i].resultValue;
				if (!Utility.IsNullOrWhiteSpace(nameValue) && !Utility.IsNullOrWhiteSpace(resultValue))
				{
					string text = Prefix + nameValue.RemoveWhiteSpace();
					string text2 = resultValue.Trim();
					if (!CaseSensitive)
					{
						text = text.ToLower();
					}
					Plugin.LogSource.LogDebug((object)("New Chat Shortcut: \"" + text + "\" => \"" + text2 + "\""));
					ChatShortcuts.Add(text, text2);
				}
			}
		}

		public static string GetChatShortcutsList()
		{
			string text = string.Empty;
			foreach (KeyValuePair<string, string> chatShortcut in ChatShortcuts)
			{
				int num = ChatShortcuts.Keys.ToList().IndexOf(chatShortcut.Key);
				text = text + GetChatShortcutAdvancedFormat(num, chatShortcut.Key, chatShortcut.Value) + "\n";
			}
			return text;
		}

		public static string GetChatShortcutAdvancedFormat(int num, string name, string result)
		{
			return $"{num} - {name} : {result}";
		}

		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void StopSelectionOnOpenChatPatch(ref TMP_InputField ___chatTextField)
		{
			___chatTextField.onFocusSelectAll = false;
		}

		[HarmonyPatch("AddTextToChatOnServer")]
		[HarmonyPrefix]
		private static void ChatPatch(ref string chatMessage, ref int playerId)
		{
			string key = (CaseSensitive ? chatMessage : chatMessage.ToLower());
			Plugin.LogSource.LogDebug((object)("Tried to change command " + chatMessage));
			if (ChatShortcuts.ContainsKey(key))
			{
				string text = (chatMessage = ChatShortcuts[key]);
				Plugin.LogSource.LogDebug((object)("Found command " + chatMessage + " => " + text));
			}
		}

		[HarmonyPatch("EnableChat_performed")]
		[HarmonyPostfix]
		private static void PrefixOnChatPatch(ref PlayerControllerB ___localPlayer, ref TMP_InputField ___chatTextField)
		{
			if (ShortcutHandler.QuickChatPrefixOnChat.Value)
			{
				___chatTextField.text = ShortcutHandler.QuickChatPrefix.Value;
				___chatTextField.MoveToEndOfLine(false, false);
			}
		}
	}
	internal class RadialMenuConfig
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static EventHandler <>9__9_0;

			public static EventHandler <>9__9_1;

			public static EventHandler <>9__9_2;

			public static EventHandler <>9__10_0;

			public static CanModifyDelegate <>9__10_6;

			public static EventHandler <>9__10_1;

			public static CanModifyDelegate <>9__10_7;

			public static EventHandler <>9__10_2;

			public static EventHandler <>9__10_3;

			public static CanModifyDelegate <>9__10_8;

			public static EventHandler <>9__10_4;

			public static CanModifyDelegate <>9__10_9;

			public static EventHandler <>9__10_5;

			internal void <Init>b__9_0(object obj, EventArgs args)
			{
				//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)
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((Graphic)RadialMenuHUD.RadialMenuHUDBackground).color = Color32.op_Implicit(new Color32((byte)0, (byte)0, (byte)0, (byte)QuickChatRadialMenuBackgroundAlpha.Value));
				}
			}

			internal void <Init>b__9_1(object obj, EventArgs args)
			{
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((TMP_Text)RadialMenuHUD.RadialMenuHUDRecentText).fontSizeMin = QuickChatRadialMenuRecentTextMinSize.Value;
				}
			}

			internal void <Init>b__9_2(object obj, EventArgs args)
			{
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((TMP_Text)RadialMenuHUD.RadialMenuHUDRecentText).fontSizeMax = QuickChatRadialMenuRecentTextMaxSize.Value;
				}
			}

			internal void <Binds>b__10_0(object obj, EventArgs args)
			{
				//IL_0047: 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)
				if (!QuickChatRadialMenuToggleUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, ((InputControl)Keyboard.current[QuickChatRadialMenuToggleKey.Value]).path, !QuickChatRadialMenuToggleUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, GetMousePath(QuickChatRadialMenuToggleMouseButton.Value), QuickChatRadialMenuToggleUseMouse.Value);
				}
			}

			internal CanModifyResult <Binds>b__10_6()
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				return CanModifyResult.op_Implicit(!QuickChatRadialMenuToggleUseMouse.Value);
			}

			internal void <Binds>b__10_1(object obj, EventArgs args)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuToggleAction, ((InputControl)Keyboard.current[QuickChatRadialMenuToggleKey.Value]).path, !QuickChatRadialMenuToggleUseMouse.Value);
			}

			internal CanModifyResult <Binds>b__10_7()
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				return CanModifyResult.op_Implicit(QuickChatRadialMenuToggleUseMouse.Value);
			}

			internal void <Binds>b__10_2(object obj, EventArgs args)
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuToggleAction, GetMousePath(QuickChatRadialMenuToggleMouseButton.Value), QuickChatRadialMenuToggleUseMouse.Value);
			}

			internal void <Binds>b__10_3(object obj, EventArgs args)
			{
				//IL_0047: 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)
				if (!QuickChatRadialMenuGoBackUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, ((InputControl)Keyboard.current[QuickChatRadialMenuGoBackKey.Value]).path, !QuickChatRadialMenuGoBackUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, GetMousePath(QuickChatRadialMenuGoBackMouseButton.Value), QuickChatRadialMenuGoBackUseMouse.Value);
				}
			}

			internal CanModifyResult <Binds>b__10_8()
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				return CanModifyResult.op_Implicit(!QuickChatRadialMenuGoBackUseMouse.Value);
			}

			internal void <Binds>b__10_4(object obj, EventArgs args)
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, ((InputControl)Keyboard.current[QuickChatRadialMenuGoBackKey.Value]).path, !QuickChatRadialMenuGoBackUseMouse.Value);
			}

			internal CanModifyResult <Binds>b__10_9()
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				return CanModifyResult.op_Implicit(QuickChatRadialMenuGoBackUseMouse.Value);
			}

			internal void <Binds>b__10_5(object obj, EventArgs args)
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, GetMousePath(QuickChatRadialMenuGoBackMouseButton.Value), QuickChatRadialMenuGoBackUseMouse.Value);
			}
		}

		internal static ConfigEntry<bool> QuickChatRadialMenuToggleUseMouse;

		internal static ConfigEntry<Key> QuickChatRadialMenuToggleKey;

		internal static ConfigEntry<MouseButton> QuickChatRadialMenuToggleMouseButton;

		internal static ConfigEntry<bool> QuickChatRadialMenuGoBackUseMouse;

		internal static ConfigEntry<Key> QuickChatRadialMenuGoBackKey;

		internal static ConfigEntry<MouseButton> QuickChatRadialMenuGoBackMouseButton;

		internal static ConfigEntry<int> QuickChatRadialMenuBackgroundAlpha;

		internal static ConfigEntry<int> QuickChatRadialMenuRecentTextMinSize;

		internal static ConfigEntry<int> QuickChatRadialMenuRecentTextMaxSize;

		internal static void Init()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Expected O, but got Unknown
			//IL_0050: Expected O, but got Unknown
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: 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)
			//IL_00d1: Expected O, but got Unknown
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Expected O, but got Unknown
			//IL_00de: Expected O, but got Unknown
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Expected O, but got Unknown
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: 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_0120: Expected O, but got Unknown
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Expected O, but got Unknown
			//IL_012d: Expected O, but got Unknown
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Expected O, but got Unknown
			Binds();
			QuickChatRadialMenuBackgroundAlpha = Plugin.ConfigF.Bind<int>("Radial Menu Background", "Alpha of Radial Menu background", 100, "The alpha (transparency) of the background when opening the Radial Menu.");
			ConfigEntry<int> quickChatRadialMenuBackgroundAlpha = QuickChatRadialMenuBackgroundAlpha;
			IntSliderOptions val = new IntSliderOptions
			{
				RequiresRestart = false
			};
			((BaseRangeOptions<int>)val).Min = 0;
			((BaseRangeOptions<int>)val).Max = 255;
			IntSliderConfigItem val2 = new IntSliderConfigItem(quickChatRadialMenuBackgroundAlpha, val);
			QuickChatRadialMenuBackgroundAlpha.SettingChanged += delegate
			{
				//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)
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((Graphic)RadialMenuHUD.RadialMenuHUDBackground).color = Color32.op_Implicit(new Color32((byte)0, (byte)0, (byte)0, (byte)QuickChatRadialMenuBackgroundAlpha.Value));
				}
			};
			QuickChatRadialMenuRecentTextMinSize = Plugin.ConfigF.Bind<int>("Radial Menu Recent Text", "Radial Menu Text Minimum Size", 8, "The minimum size that the recent text can be.");
			QuickChatRadialMenuRecentTextMaxSize = Plugin.ConfigF.Bind<int>("Radial Menu Recent Text", "Radial Menu Text Maximum Size", 10, "The maximum size that the recent text can be.");
			ConfigEntry<int> quickChatRadialMenuRecentTextMinSize = QuickChatRadialMenuRecentTextMinSize;
			IntSliderOptions val3 = new IntSliderOptions
			{
				RequiresRestart = false
			};
			((BaseRangeOptions<int>)val3).Min = 1;
			((BaseRangeOptions<int>)val3).Max = 24;
			IntSliderConfigItem val4 = new IntSliderConfigItem(quickChatRadialMenuRecentTextMinSize, val3);
			QuickChatRadialMenuRecentTextMinSize.SettingChanged += delegate
			{
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((TMP_Text)RadialMenuHUD.RadialMenuHUDRecentText).fontSizeMin = QuickChatRadialMenuRecentTextMinSize.Value;
				}
			};
			ConfigEntry<int> quickChatRadialMenuRecentTextMaxSize = QuickChatRadialMenuRecentTextMaxSize;
			IntSliderOptions val5 = new IntSliderOptions
			{
				RequiresRestart = false
			};
			((BaseRangeOptions<int>)val5).Min = 1;
			((BaseRangeOptions<int>)val5).Max = 24;
			IntSliderConfigItem val6 = new IntSliderConfigItem(quickChatRadialMenuRecentTextMaxSize, val5);
			QuickChatRadialMenuRecentTextMaxSize.SettingChanged += delegate
			{
				if (RadialMenuManager.RadialMenuLoaded)
				{
					((TMP_Text)RadialMenuHUD.RadialMenuHUDRecentText).fontSizeMax = QuickChatRadialMenuRecentTextMaxSize.Value;
				}
			};
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val4);
			LethalConfigManager.AddConfigItem((BaseConfigItem)val6);
		}

		internal static void Binds()
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Expected O, but got Unknown
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: 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_0133: Expected O, but got Unknown
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Expected O, but got Unknown
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Expected O, but got Unknown
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Expected O, but got Unknown
			//IL_0216: Unknown result type (might be due to invalid IL or missing references)
			//IL_021b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Expected O, but got Unknown
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0260: Unknown result type (might be due to invalid IL or missing references)
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Expected O, but got Unknown
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Expected O, but got Unknown
			QuickChatRadialMenuToggleUseMouse = Plugin.ConfigF.Bind<bool>("Radial Menu Binds", "Toggle Open & Close Use Mouse", false, "Whether or not you use the mouse to open the radial menu.");
			QuickChatRadialMenuToggleKey = Plugin.ConfigF.Bind<Key>("Radial Menu Binds", "Toggle Open & Close Key", (Key)53, "The key used to open and close the radial menu.");
			QuickChatRadialMenuToggleMouseButton = Plugin.ConfigF.Bind<MouseButton>("Radial Menu Binds", "Toggle Open & Close Mouse", (MouseButton)2, "The mouse button used to open and close the radial menu.");
			BoolCheckBoxConfigItem val = new BoolCheckBoxConfigItem(QuickChatRadialMenuToggleUseMouse, false);
			QuickChatRadialMenuToggleUseMouse.SettingChanged += delegate
			{
				//IL_0047: 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)
				if (!QuickChatRadialMenuToggleUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, ((InputControl)Keyboard.current[QuickChatRadialMenuToggleKey.Value]).path, !QuickChatRadialMenuToggleUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, GetMousePath(QuickChatRadialMenuToggleMouseButton.Value), QuickChatRadialMenuToggleUseMouse.Value);
				}
			};
			ConfigEntry<Key> quickChatRadialMenuToggleKey = QuickChatRadialMenuToggleKey;
			EnumDropDownOptions val2 = new EnumDropDownOptions
			{
				RequiresRestart = false
			};
			object obj2 = <>c.<>9__10_6;
			if (obj2 == null)
			{
				CanModifyDelegate val3 = () => CanModifyResult.op_Implicit(!QuickChatRadialMenuToggleUseMouse.Value);
				<>c.<>9__10_6 = val3;
				obj2 = (object)val3;
			}
			((BaseOptions)val2).CanModifyCallback = (CanModifyDelegate)obj2;
			EnumDropDownConfigItem<Key> val4 = new EnumDropDownConfigItem<Key>(quickChatRadialMenuToggleKey, val2);
			QuickChatRadialMenuToggleKey.SettingChanged += delegate
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuToggleAction, ((InputControl)Keyboard.current[QuickChatRadialMenuToggleKey.Value]).path, !QuickChatRadialMenuToggleUseMouse.Value);
			};
			ConfigEntry<MouseButton> quickChatRadialMenuToggleMouseButton = QuickChatRadialMenuToggleMouseButton;
			EnumDropDownOptions val5 = new EnumDropDownOptions
			{
				RequiresRestart = false
			};
			object obj3 = <>c.<>9__10_7;
			if (obj3 == null)
			{
				CanModifyDelegate val6 = () => CanModifyResult.op_Implicit(QuickChatRadialMenuToggleUseMouse.Value);
				<>c.<>9__10_7 = val6;
				obj3 = (object)val6;
			}
			((BaseOptions)val5).CanModifyCallback = (CanModifyDelegate)obj3;
			EnumDropDownConfigItem<MouseButton> val7 = new EnumDropDownConfigItem<MouseButton>(quickChatRadialMenuToggleMouseButton, val5);
			QuickChatRadialMenuToggleKey.SettingChanged += delegate
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuToggleAction, GetMousePath(QuickChatRadialMenuToggleMouseButton.Value), QuickChatRadialMenuToggleUseMouse.Value);
			};
			QuickChatRadialMenuGoBackUseMouse = Plugin.ConfigF.Bind<bool>("Radial Menu Binds", "Go Back Use Mouse", true, "Whether or not you use the mouse to go back one menu in the radial menu.");
			QuickChatRadialMenuGoBackKey = Plugin.ConfigF.Bind<Key>("Radial Menu Binds", "Go Back Key", (Key)32, "The key used to go back one menu in the radial menu.");
			QuickChatRadialMenuGoBackMouseButton = Plugin.ConfigF.Bind<MouseButton>("Radial Menu Binds", "Go Back Mouse", (MouseButton)1, "The mouse button used to go back one menu in the radial menu.");
			BoolCheckBoxConfigItem val8 = new BoolCheckBoxConfigItem(QuickChatRadialMenuGoBackUseMouse, false);
			QuickChatRadialMenuGoBackUseMouse.SettingChanged += delegate
			{
				//IL_0047: 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)
				if (!QuickChatRadialMenuGoBackUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, ((InputControl)Keyboard.current[QuickChatRadialMenuGoBackKey.Value]).path, !QuickChatRadialMenuGoBackUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, GetMousePath(QuickChatRadialMenuGoBackMouseButton.Value), QuickChatRadialMenuGoBackUseMouse.Value);
				}
			};
			ConfigEntry<Key> quickChatRadialMenuGoBackKey = QuickChatRadialMenuGoBackKey;
			EnumDropDownOptions val9 = new EnumDropDownOptions
			{
				RequiresRestart = false
			};
			object obj4 = <>c.<>9__10_8;
			if (obj4 == null)
			{
				CanModifyDelegate val10 = () => CanModifyResult.op_Implicit(!QuickChatRadialMenuGoBackUseMouse.Value);
				<>c.<>9__10_8 = val10;
				obj4 = (object)val10;
			}
			((BaseOptions)val9).CanModifyCallback = (CanModifyDelegate)obj4;
			EnumDropDownConfigItem<Key> val11 = new EnumDropDownConfigItem<Key>(quickChatRadialMenuGoBackKey, val9);
			QuickChatRadialMenuGoBackKey.SettingChanged += delegate
			{
				//IL_000f: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, ((InputControl)Keyboard.current[QuickChatRadialMenuGoBackKey.Value]).path, !QuickChatRadialMenuGoBackUseMouse.Value);
			};
			ConfigEntry<MouseButton> quickChatRadialMenuGoBackMouseButton = QuickChatRadialMenuGoBackMouseButton;
			EnumDropDownOptions val12 = new EnumDropDownOptions
			{
				RequiresRestart = false
			};
			object obj5 = <>c.<>9__10_9;
			if (obj5 == null)
			{
				CanModifyDelegate val13 = () => CanModifyResult.op_Implicit(QuickChatRadialMenuGoBackUseMouse.Value);
				<>c.<>9__10_9 = val13;
				obj5 = (object)val13;
			}
			((BaseOptions)val12).CanModifyCallback = (CanModifyDelegate)obj5;
			EnumDropDownConfigItem<MouseButton> obj6 = new EnumDropDownConfigItem<MouseButton>(quickChatRadialMenuGoBackMouseButton, val12);
			QuickChatRadialMenuGoBackMouseButton.SettingChanged += delegate
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, GetMousePath(QuickChatRadialMenuGoBackMouseButton.Value), QuickChatRadialMenuGoBackUseMouse.Value);
			};
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val4);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val7);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val8);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val11);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)obj6);
			UpdateBindings();
		}

		internal static void ChangeBinding(InputAction action, string bindingPathOverride, bool allowChange)
		{
			if (allowChange && action != null)
			{
				InputActionRebindingExtensions.ApplyBindingOverride(action, bindingPathOverride, (string)null, (string)null);
			}
		}

		internal static string GetMousePath(MouseButton button)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected I4, but got Unknown
			Mouse current = Mouse.current;
			string result = string.Empty;
			switch ((int)button)
			{
			case 0:
				result = ((InputControl)current.leftButton).path;
				break;
			case 1:
				result = ((InputControl)current.rightButton).path;
				break;
			case 2:
				result = ((InputControl)current.middleButton).path;
				break;
			case 3:
				result = ((InputControl)current.forwardButton).path;
				break;
			case 4:
				result = ((InputControl)current.backButton).path;
				break;
			}
			return result;
		}

		internal static void UpdateBindings()
		{
			//IL_0048: 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_00af: 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)
			try
			{
				if (!QuickChatRadialMenuToggleUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, ((InputControl)Keyboard.current[QuickChatRadialMenuToggleKey.Value]).path, !QuickChatRadialMenuToggleUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuToggleAction, GetMousePath(QuickChatRadialMenuToggleMouseButton.Value), QuickChatRadialMenuToggleUseMouse.Value);
				}
			}
			catch
			{
			}
			try
			{
				if (!QuickChatRadialMenuGoBackUseMouse.Value)
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, ((InputControl)Keyboard.current[QuickChatRadialMenuGoBackKey.Value]).path, !QuickChatRadialMenuGoBackUseMouse.Value);
				}
				else
				{
					ChangeBinding(RadialMenuInput.RadialMenuGoBackAction, GetMousePath(QuickChatRadialMenuGoBackMouseButton.Value), QuickChatRadialMenuGoBackUseMouse.Value);
				}
			}
			catch
			{
			}
		}
	}
	internal class ShortcutHandler
	{
		internal static ConfigEntry<bool> QuickChatUseAdvanced;

		internal static ConfigEntry<bool> QuickChatPrefixOnChat;

		internal static ConfigEntry<bool> QuickChatCaseSensitive;

		internal static ConfigEntry<string> QuickChatPrefix;

		internal static ConfigEntry<int> QuickChatSimpleShortcutsNumber;

		internal static ConfigEntry<string> QuickChatShortcutsAdvanced;

		internal static List<SimpleShortcut> SimpleShortcuts = new List<SimpleShortcut>();

		internal static bool UseAdvanced => QuickChatUseAdvanced.Value;

		internal static int SimpleShortcutsNum => QuickChatSimpleShortcutsNumber.Value;

		internal static string AdvancedShortcutsRaw => QuickChatShortcutsAdvanced.Value;

		internal static void Init()
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Expected O, but got Unknown
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Expected O, but got Unknown
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Expected O, but got Unknown
			//IL_02ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Expected O, but got Unknown
			//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Expected O, but got Unknown
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Expected O, but got Unknown
			//IL_0171: Expected O, but got Unknown
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Expected O, but got Unknown
			//IL_0309: Expected O, but got Unknown
			//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Expected O, but got Unknown
			//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Expected O, but got Unknown
			//IL_022f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Expected O, but got Unknown
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0272: Expected O, but got Unknown
			QuickChatUseAdvanced = Plugin.ConfigF.Bind<bool>("General", "Use Advanced Shortcut Definition", false, "Allows user to define shortcuts with one Text Field (Only one restart required).");
			QuickChatPrefixOnChat = Plugin.ConfigF.Bind<bool>("General", "Put Prefix on Chat", false, "Automatically your desired prefix when you open chat.");
			QuickChatCaseSensitive = Plugin.ConfigF.Bind<bool>("Shortcuts", "Is Case Sensitive?", false, "Are the shortcuts case sensitive? (Requires shortcut to be UPPERCASE or lowercase depending on definition of shortcut).");
			QuickChatPrefix = Plugin.ConfigF.Bind<string>("Shortcuts", "Chat Prefix", "/", "The prefix to use before a shortcut (say the prefix was \"/\": [/SHORTCUT_NAME => MESSAGE].");
			BoolCheckBoxConfigItem val = new BoolCheckBoxConfigItem(QuickChatUseAdvanced, true);
			BoolCheckBoxConfigItem val2 = new BoolCheckBoxConfigItem(QuickChatPrefixOnChat, false);
			BoolCheckBoxConfigItem val3 = new BoolCheckBoxConfigItem(QuickChatCaseSensitive, false);
			QuickChatCaseSensitive.SettingChanged += delegate
			{
				SaveCaseSensitive();
			};
			TextInputFieldConfigItem val4 = new TextInputFieldConfigItem(QuickChatPrefix, new TextInputFieldOptions
			{
				RequiresRestart = false
			});
			QuickChatPrefix.SettingChanged += delegate
			{
				SaveChatShortcuts(SimpleShortcutsNum, SimpleShortcuts);
			};
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val2);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3);
			LethalConfigManager.AddConfigItem((BaseConfigItem)val4);
			if (!UseAdvanced)
			{
				QuickChatSimpleShortcutsNumber = Plugin.ConfigF.Bind<int>("Shortcuts", "Simple Shortcuts Amount", 4, "Amount of simple shortcuts (REQUIRES RESTART TO UPDATE).");
				ConfigEntry<int> quickChatSimpleShortcutsNumber = QuickChatSimpleShortcutsNumber;
				IntInputFieldOptions val5 = new IntInputFieldOptions
				{
					RequiresRestart = true
				};
				((BaseRangeOptions<int>)val5).Min = 1;
				((BaseRangeOptions<int>)val5).Max = 20;
				LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(quickChatSimpleShortcutsNumber, val5));
				for (int i = 0; i < SimpleShortcutsNum; i++)
				{
					int num = i + 1;
					ConfigEntry<string> val6 = Plugin.ConfigF.Bind<string>($"Simple Shortcut {num}", "Name", $"Name{num}", "The Name of the Shortcut that will be changed to the Result on enter.");
					TextInputFieldConfigItem val7 = new TextInputFieldConfigItem(val6, new TextInputFieldOptions
					{
						RequiresRestart = false
					});
					val6.SettingChanged += delegate
					{
						SaveChatShortcuts(SimpleShortcutsNum, SimpleShortcuts);
					};
					ConfigEntry<string> val8 = Plugin.ConfigF.Bind<string>($"Simple Shortcut {num}", "Result", $"Result{num}", "The Result that will be shown after entering the Shortcut.");
					TextInputFieldConfigItem val9 = new TextInputFieldConfigItem(val8, new TextInputFieldOptions
					{
						RequiresRestart = false
					});
					val8.SettingChanged += delegate
					{
						SaveChatShortcuts(SimpleShortcutsNum, SimpleShortcuts);
					};
					LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val7);
					LethalConfigManager.AddConfigItem((BaseConfigItem)val9);
					SimpleShortcuts.Add(new SimpleShortcut
					{
						name = val6,
						result = val8
					});
				}
			}
			else
			{
				QuickChatShortcutsAdvanced = Plugin.ConfigF.Bind<string>("Shortcuts", "Advanced Chat Shortcuts", "a:My Balls", "Shortcuts in format of [SHORTCUT_NAME : MESSAGE, SHORTCUT_NAME2 : MESSAGE2] without the [].");
				TextInputFieldConfigItem val10 = new TextInputFieldConfigItem(QuickChatShortcutsAdvanced, new TextInputFieldOptions
				{
					RequiresRestart = false
				});
				QuickChatShortcutsAdvanced.SettingChanged += delegate
				{
					SaveChatShortcuts(AdvancedShortcutsRaw);
				};
				LethalConfigManager.AddConfigItem((BaseConfigItem)val10);
			}
			SaveCaseSensitive();
			SaveBasedOnUseAdvanced();
			Plugin.LogSource.LogDebug((object)"QuickChat Config Successfully Loaded!");
		}

		internal static void SaveCaseSensitive()
		{
			ChatPatcher.CaseSensitive = QuickChatCaseSensitive.Value;
		}

		internal static void SavePrefix()
		{
			ChatPatcher.Prefix = QuickChatPrefix.Value;
		}

		internal static void SaveChatShortcuts(string rawShortcuts)
		{
			SavePrefix();
			ChatPatcher.ChatCommandsGen(rawShortcuts);
		}

		internal static void SaveChatShortcuts(int num, List<SimpleShortcut> simpleShortcuts)
		{
			if (simpleShortcuts.Count == 0 || simpleShortcuts == null)
			{
				SaveChatShortcuts(AdvancedShortcutsRaw);
			}
			SavePrefix();
			ChatPatcher.ChatShortcutsGeneration(num, simpleShortcuts);
		}

		internal static void SaveBasedOnUseAdvanced()
		{
			if (UseAdvanced)
			{
				SaveChatShortcuts(AdvancedShortcutsRaw);
			}
			else
			{
				SaveChatShortcuts(SimpleShortcutsNum, SimpleShortcuts);
			}
		}

		internal static string GetConfigType()
		{
			if (!UseAdvanced)
			{
				return "Simple";
			}
			return "Advanced";
		}
	}
	internal class SimpleShortcut
	{
		internal ConfigEntry<string> name;

		internal ConfigEntry<string> result;

		internal string nameValue => name.Value;

		internal string resultValue => result.Value;
	}
	[BepInPlugin("alfungy.quickchat", "Quick Chat", "2.1.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		private readonly Harmony Harmony = new Harmony("alfungy.quickchat");

		internal static ManualLogSource LogSource = Logger.CreateLogSource("alfungy.quickchat");

		internal static ConfigFile ConfigF;

		private void Awake()
		{
			ConfigF = ((BaseUnityPlugin)this).Config;
			LogSource.LogInfo((object)"Quick Chat 2.1.1 has been loaded!");
			LethalConfigManager.SkipAutoGen();
			RadialMenuConfig.Init();
			RadialMenuSetupDefaults.Init();
			ShortcutHandler.Init();
			TerminalHandler.Init();
			Harmony.PatchAll(typeof(ChatPatcher));
			Harmony.PatchAll(typeof(ChatCharacterLimitPatcher));
			Harmony.PatchAll(typeof(RadialMenuHUD));
			Harmony.PatchAll(typeof(RadialMenuInput));
			Harmony.PatchAll(typeof(RadialMenuSetupDefaults));
			Harmony.PatchAll(typeof(RadialMenuManager));
		}
	}
	internal static class PluginInfo
	{
		public const string ModGUID = "alfungy.quickchat";

		public const string ModName = "Quick Chat";

		public const string ModVersion = "2.1.1";
	}
	[HarmonyPatch(typeof(Terminal))]
	internal class TerminalHandler
	{
		internal static TerminalNode ShortcutHomeNode => TerminalApi.CreateTerminalNode("Welcome to the Quick Chat Shortcuts Page or the Q.C.S.P. for very very long.\nHere you can currently only view your shortcuts.\n\n----------------------------\n\nConfig Type: " + ShortcutHandler.GetConfigType() + "\n\nShortcuts List:\n" + ChatPatcher.GetChatShortcutsList(), false, "");

		internal static TerminalNode CurrentNode => TerminalApi.Terminal.currentNode;

		internal static Terminal CurrentTerminal => TerminalApi.Terminal;

		internal static void Init()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: 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_002b: 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_0062: Expected O, but got Unknown
			TerminalApi.AddCommand("qcview", new CommandInfo
			{
				Title = "qcview",
				Description = "Display all shortcuts",
				Category = "Other",
				TriggerNode = ShortcutHomeNode,
				DisplayTextSupplier = () => ShortcutHomeNode.displayText
			}, (string)null, true);
		}
	}
}
namespace QuickChat.RadialMenu
{
	public class RadialMenuHUD
	{
		public delegate void RadialMenuHUDLoadingEvent();

		public delegate void RadialMenuHUDTextEvent(string text);

		internal static GameObject RadialMenuHUDObject;

		internal static Image RadialMenuHUDBackground;

		internal static TextMeshProUGUI RadialMenuHUDRecentText;

		internal static Camera RadialMenuHUDCamera;

		internal static Vector2 Center => new Vector2((float)(Screen.width / 2), (float)(Screen.height / 2));

		public static event RadialMenuHUDLoadingEvent OnHUDPreLoaded;

		public static event RadialMenuHUDLoadingEvent OnHUDPostLoaded;

		public static event RadialMenuHUDLoadingEvent OnHUDPreUnloaded;

		public static event RadialMenuHUDLoadingEvent OnHUDPostUnloaded;

		public static event RadialMenuHUDTextEvent OnHUDChatPreviewUpdated;

		public static event RadialMenuHUDTextEvent OnHUDRecentTextUpdated;

		internal static void Init()
		{
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Expected O, but got Unknown
			//IL_00a6: 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)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: 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)
			//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)
			//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_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: Unknown result type (might be due to invalid IL or missing references)
			RadialMenuHUD.OnHUDPreLoaded?.Invoke();
			Transform val = ((Component)GameObject.Find("Systems").transform.Find("UI")).transform.Find("Canvas");
			RadialMenuHUDCamera = ((Component)((Component)GameObject.Find("Systems").transform.Find("UI")).transform.Find("UICamera")).GetComponent<Camera>();
			RadialMenuHUDObject = new GameObject
			{
				name = "QuickChat Container"
			};
			RadialMenuHUDObject.transform.SetParent(val, false);
			RectTransform obj = RadialMenuHUDObject.AddComponent<RectTransform>();
			obj.offsetMax = new Vector2(25f, 75f);
			obj.offsetMin = new Vector2(0f, 50f);
			RadialMenuHUDBackground = new GameObject
			{
				name = "QuickChat Background"
			}.AddComponent<Image>();
			((Component)RadialMenuHUDBackground).transform.SetParent(RadialMenuHUDObject.transform, false);
			((Component)RadialMenuHUDBackground).transform.SetSiblingIndex(0);
			((Graphic)RadialMenuHUDBackground).color = Color32.op_Implicit(new Color32((byte)0, (byte)0, (byte)0, (byte)RadialMenuConfig.QuickChatRadialMenuBackgroundAlpha.Value));
			((Graphic)RadialMenuHUDBackground).rectTransform.anchoredPosition = Vector2.op_Implicit(RadialMenuHUDCamera.ScreenToWorldPoint(Vector2.op_Implicit(Center)));
			((Graphic)RadialMenuHUDBackground).rectTransform.sizeDelta = new Vector2((float)Screen.width, (float)Screen.height);
			RadialMenuHUDRecentText = new GameObject
			{
				name = "Most Recent Text"
			}.AddComponent<TextMeshProUGUI>();
			((TMP_Text)RadialMenuHUDRecentText).transform.SetParent(RadialMenuHUDObject.transform, false);
			((TMP_Text)RadialMenuHUDRecentText).alignment = (TextAlignmentOptions)514;
			((TMP_Text)RadialMenuHUDRecentText).enableWordWrapping = true;
			((TMP_Text)RadialMenuHUDRecentText).enableAutoSizing = true;
			((TMP_Text)RadialMenuHUDRecentText).fontSizeMin = RadialMenuConfig.QuickChatRadialMenuRecentTextMinSize.Value;
			((TMP_Text)RadialMenuHUDRecentText).fontSizeMax = RadialMenuConfig.QuickChatRadialMenuRecentTextMaxSize.Value;
			((TMP_Text)RadialMenuHUDRecentText).rectTransform.sizeDelta = new Vector2(350f, 350f);
			((TMP_Text)RadialMenuHUDRecentText).rectTransform.anchoredPosition = Vector2.op_Implicit(RadialMenuHUDCamera.ScreenToWorldPoint(Vector2.op_Implicit(Center)));
			RadialMenuHUDObject.SetActive(false);
			RadialMenuManager.RadialMenuLoaded = true;
			RadialMenuHUD.OnHUDPostLoaded?.Invoke();
		}

		public static void DeInit()
		{
			RadialMenuHUD.OnHUDPreUnloaded?.Invoke();
			RadialMenuManager.RadialMenuLoaded = false;
			RadialMenuHUD.OnHUDPostUnloaded?.Invoke();
		}

		public static void ToggleRadialMenu(bool open, bool modifyInput = true)
		{
			if (RadialMenuManager.RadialMenuLoaded)
			{
				if (!open)
				{
					RadialMenuManager.ResetChatText();
				}
				PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
				RadialMenuHUDObject.SetActive(open);
				RadialMenuManager.RadialMenuOpen = open;
				if (modifyInput)
				{
					Cursor.visible = open;
					Cursor.lockState = (CursorLockMode)((!open) ? 1 : 0);
					localPlayerController.disableLookInput = open;
				}
				HUDManager.Instance.chatTextField.textComponent.enableWordWrapping = !open;
			}
		}

		public static void UpdateChatPreview(string text)
		{
			HUDManager.Instance.chatTextField.text = string.Empty;
			HUDManager.Instance.chatTextField.MoveToEndOfLine(false, false);
			HUDManager.Instance.PingHUDElement(HUDManager.Instance.Chat, 1f, 1f, 1f);
			RadialMenuHUD.OnHUDChatPreviewUpdated?.Invoke(text);
		}

		public static void UpdateChatRecentText(string text)
		{
			((TMP_Text)RadialMenuHUDRecentText).text = text;
			RadialMenuHUD.OnHUDRecentTextUpdated?.Invoke(text);
		}

		[HarmonyPatch(typeof(QuickMenuManager), "OpenQuickMenu")]
		[HarmonyPostfix]
		private static void OpenQuickMenuCloseRadialMenuPatch()
		{
			ToggleRadialMenu(open: false, modifyInput: false);
		}

		[HarmonyPatch(typeof(QuickMenuManager), "CloseQuickMenu")]
		[HarmonyPostfix]
		private static void CloseQuickMenuFixLookInputPatch()
		{
			GameNetworkManager.Instance.localPlayerController.disableLookInput = false;
		}

		[HarmonyPatch(typeof(PlayerControllerB), "KillPlayer")]
		[HarmonyPostfix]
		private static void PlayerControllerBKillPlayerCloseRadialMenuPatch()
		{
			ToggleRadialMenu(open: false, modifyInput: false);
		}
	}
	public class RadialMenuInput
	{
		public delegate void RadialMenuInputLoadingEvent();

		public delegate void RadialMenuInputEvent();

		public delegate void RadialMenuToggleInputEvent(bool activated);

		internal static InputAction RadialMenuToggleAction = new InputAction("Open", (InputActionType)1, "<Keyboard>/alt", (string)null, (string)null, (string)null);

		internal static InputAction RadialMenuGoBackAction = new InputAction("Close", (InputActionType)1, "<Mouse>/rightButton", (string)null, (string)null, (string)null);

		public static event RadialMenuInputLoadingEvent OnInputPreLoaded;

		public static event RadialMenuInputLoadingEvent OnInputPostLoaded;

		public static event RadialMenuInputLoadingEvent OnInputPreUnloaded;

		public static event RadialMenuInputLoadingEvent OnInputPostUnloaded;

		public static event RadialMenuInputEvent OnInputGoBack;

		public static event RadialMenuToggleInputEvent OnInputToggle;

		internal static void Init()
		{
			RadialMenuInput.OnInputPreLoaded?.Invoke();
			RadialMenuConfig.UpdateBindings();
			RadialMenuToggleAction.Enable();
			RadialMenuGoBackAction.Enable();
			RadialMenuToggleAction.performed += RadialMenuToggleAction_performed;
			RadialMenuGoBackAction.performed += RadialMenuGoBackAction_performed;
			Cursor.lockState = (CursorLockMode)1;
			RadialMenuInput.OnInputPostLoaded?.Invoke();
		}

		internal static void DeInit()
		{
			RadialMenuInput.OnInputPreUnloaded?.Invoke();
			RadialMenuToggleAction.Disable();
			RadialMenuGoBackAction.Disable();
			RadialMenuToggleAction.performed -= RadialMenuToggleAction_performed;
			RadialMenuGoBackAction.performed -= RadialMenuGoBackAction_performed;
			RadialMenuInput.OnInputPostUnloaded?.Invoke();
		}

		private static void RadialMenuToggleAction_performed(CallbackContext ctx)
		{
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if (!localPlayerController.isTypingChat && !localPlayerController.isPlayerDead && !localPlayerController.quickMenuManager.isMenuOpen)
			{
				RadialMenuManager.RadialMenuOpen = !RadialMenuManager.RadialMenuOpen;
				RadialMenuHUD.ToggleRadialMenu(RadialMenuManager.RadialMenuOpen);
				RadialMenuInput.OnInputToggle?.Invoke(RadialMenuManager.RadialMenuOpen);
			}
		}

		private static void RadialMenuGoBackAction_performed(CallbackContext ctx)
		{
			RadialMenuManager.GoBackMenu();
			RadialMenuManager.UpdateChat();
			RadialMenuInput.OnInputGoBack?.Invoke();
		}

		[HarmonyPatch(typeof(HUDManager), "CanPlayerScan")]
		[HarmonyPrefix]
		private static bool PingScanRadialMenuOpenPatch()
		{
			if (RadialMenuManager.RadialMenuOpen)
			{
				return false;
			}
			return true;
		}

		[HarmonyPatch(typeof(PlayerControllerB), "CanUseItem")]
		[HarmonyPrefix]
		private static bool ActivateItemRadialMenuOpenPatch()
		{
			if (RadialMenuManager.RadialMenuOpen)
			{
				return false;
			}
			return true;
		}
	}
	public class RadialMenuManager
	{
		public delegate void RadialMenuMainLoadingEvent();

		internal static bool RadialMenuLoaded = false;

		internal static bool RadialMenuOpen = false;

		public static List<RadialMenu> RadialMenuRegistry { get; private set; } = new List<RadialMenu>();


		public static List<RadialMenu> RadialMenuHistory { get; private set; } = new List<RadialMenu>();


		public static RadialMenu CurrentMenu { get; private set; }

		public static RadialMenu LastMenu
		{
			get
			{
				if (RadialMenuHistory.Count <= 0)
				{
					return null;
				}
				return RadialMenuHistory.Last();
			}
		}

		public static RadialMenu MainMenu { get; private set; } = new RadialMenu
		{
			name = "MainMenu"
		};


		public static List<RadialMenu.RadialButton> RadialButtonHistory { get; private set; } = new List<RadialMenu.RadialButton>();


		public static RadialMenu.RadialButton MostRecentButton
		{
			get
			{
				if (RadialButtonHistory.Count <= 0)
				{
					return null;
				}
				return RadialButtonHistory.Last();
			}
		}

		public static string MostRecentText
		{
			get
			{
				if (RadialButtonHistory.Count <= 0)
				{
					return string.Empty;
				}
				return RadialButtonHistory.Last().text.Trim();
			}
		}

		public static event RadialMenuMainLoadingEvent OnMainMenuPreRegister;

		public static event RadialMenuMainLoadingEvent OnMainMenuPostRegister;

		public static event RadialMenuMainLoadingEvent OnReady;

		public static event RadialMenuMainLoadingEvent OnPreExit;

		public static event RadialMenuMainLoadingEvent OnPostExit;

		[HarmonyPatch(typeof(RoundManager), "Awake")]
		[HarmonyPostfix]
		private static void AwakePatch()
		{
			RadialMenuHUD.Init();
			RadialMenuInput.Init();
			RadialMenuManager.OnMainMenuPreRegister?.Invoke();
			RegisterRadialMenu(MainMenu);
			RadialMenuManager.OnMainMenuPostRegister?.Invoke();
			foreach (RadialMenu item in RadialMenuRegistry)
			{
				item.CreateRadialMenu(RadialMenuHUD.RadialMenuHUDObject.transform);
			}
			SetCurrentMenu(MainMenu);
			RefreshMenu();
			RadialMenuManager.OnReady?.Invoke();
		}

		[HarmonyPatch(typeof(GameNetworkManager), "Disconnect")]
		[HarmonyPostfix]
		private static void ResetPatch()
		{
			RadialMenuManager.OnPreExit?.Invoke();
			foreach (RadialMenu item in RadialMenuRegistry)
			{
				item.RemoveRadialMenu();
			}
			RadialMenuInput.DeInit();
			RadialMenuHUD.DeInit();
			RadialMenuManager.OnPostExit?.Invoke();
		}

		public static RadialMenu ConstructAndRegisterRadialMenu(RadialMenu radialMenu)
		{
			RegisterRadialMenu(radialMenu);
			return radialMenu;
		}

		public static void RegisterRadialMenu(RadialMenu radialMenu)
		{
			if (!RadialMenuRegistry.Contains(radialMenu))
			{
				RadialMenuRegistry.Add(radialMenu);
			}
		}

		public static void SetCurrentMenu(RadialMenu menu, bool saveLastToHistory = true)
		{
			if (CurrentMenu != menu)
			{
				if (CurrentMenu != null && saveLastToHistory && CurrentMenu.saveToHistory)
				{
					RadialMenuHistory.Add(CurrentMenu);
				}
				CurrentMenu = menu;
			}
		}

		public static void GoBackMenu()
		{
			if (RadialMenuHistory.Count > 0)
			{
				RadialMenu lastMenu = LastMenu;
				RadialMenu currentMenu = CurrentMenu;
				if (RadialMenuHistory.Count == RadialButtonHistory.Count)
				{
					RemoveRadialButtonHistory();
				}
				SetCurrentMenu(lastMenu, saveLastToHistory: false);
				RefreshMenu(currentMenu, lastMenu);
				RemoveFromRadialMenuHistory();
			}
		}

		public static void RefreshMenu()
		{
			RadialMenu lastMenu = LastMenu;
			if (lastMenu != null)
			{
				lastMenu.gameObject.SetActive(false);
			}
			RadialMenu currentMenu = CurrentMenu;
			if (currentMenu != null)
			{
				currentMenu.gameObject.SetActive(true);
			}
		}

		public static void RefreshMenu(RadialMenu deactivatingMenu, RadialMenu activatingMenu)
		{
			if (deactivatingMenu != null)
			{
				deactivatingMenu.gameObject.SetActive(false);
			}
			if (activatingMenu != null)
			{
				activatingMenu.gameObject.SetActive(true);
			}
		}

		public static void AddToRadialMenuHistory(RadialMenu radialMenu)
		{
			RadialMenuHistory.Add(radialMenu);
		}

		public static void ModifyRadialMenuHistory(RadialMenu radialMenu, int i)
		{
			RadialMenuHistory.RemoveAt(i);
			RadialMenuHistory.Insert(i, radialMenu);
		}

		public static void RemoveFromRadialMenuHistory()
		{
			RadialMenuHistory.RemoveAt(RadialMenuHistory.Count - 1);
		}

		public static void RemoveFromRadialMenuHistory(int i)
		{
			RadialMenuHistory.RemoveAt(i);
		}

		public static void AddRadialButtonHistory(RadialMenu.RadialButton radialButton)
		{
			RadialButtonHistory.Add(radialButton);
			UpdateChat();
		}

		public static void AddRadialButtonHistory(string text)
		{
			RadialMenu.RadialButton item = new RadialMenu.RadialButton(text);
			RadialButtonHistory.Add(item);
			UpdateChat();
		}

		public static void InsertRadialButtonHistory(RadialMenu.RadialButton radialButton, int i)
		{
			RadialButtonHistory.Insert(i, radialButton);
			UpdateChat();
		}

		public static void InsertRadialButtonHistory(string text, int i)
		{
			RadialMenu.RadialButton item = new RadialMenu.RadialButton(text);
			RadialButtonHistory.Insert(i, item);
			UpdateChat();
		}

		public static void ModifyRadialButtonHistory(RadialMenu.RadialButton radialButton, int i)
		{
			RadialButtonHistory.RemoveAt(i);
			RadialButtonHistory.Insert(i, radialButton);
			UpdateChat();
		}

		public static void ModifyRadialButtonHistory(string text, int i)
		{
			RadialMenu.RadialButton item = new RadialMenu.RadialButton(text);
			RadialButtonHistory.RemoveAt(i);
			RadialButtonHistory.Insert(i, item);
			UpdateChat();
		}

		public static void RemoveRadialButtonHistory()
		{
			if (RadialButtonHistory.Count > 0)
			{
				RadialButtonHistory.RemoveAt(RadialButtonHistory.Count - 1);
				UpdateChat();
			}
		}

		public static void RemoveRadialButtonHistory(int i)
		{
			if (RadialButtonHistory.Count > 0)
			{
				RadialButtonHistory.RemoveAt(i);
				UpdateChat();
			}
		}

		internal static void UpdateChat()
		{
			RadialMenuHUD.UpdateChatPreview(JoinChatText().CapitalizeFirstChar());
			RadialMenuHUD.UpdateChatRecentText(MostRecentText.CapitalizeFirstChar());
		}

		internal static string JoinChatText()
		{
			return GeneralExtensions.Join<RadialMenu.RadialButton>((IEnumerable<RadialMenu.RadialButton>)RadialButtonHistory, (Func<RadialMenu.RadialButton, string>)((RadialMenu.RadialButton radialButton) => radialButton.text), " ").Trim();
		}

		internal static void ResetChatText()
		{
			RadialButtonHistory.Clear();
			RadialMenuHUD.UpdateChatPreview(string.Empty);
			RadialMenuHUD.UpdateChatRecentText(string.Empty);
			SetCurrentMenu(MainMenu);
			RefreshMenu();
			RadialMenuHistory.Clear();
		}

		internal static void SendChatText()
		{
			char value = (MostRecentButton.punctuation?.Invoke()).Value;
			string self = JoinChatText();
			self = self.CapitalizeFirstChar() + value;
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			HUDManager.Instance.AddTextToChatOnServer(self, (int)localPlayerController.playerClientId);
			RadialMenuHUD.ToggleRadialMenu(open: false);
		}
	}
	public class RadialMenu
	{
		public class RadialButton
		{
			public delegate void RadialButtonClicked(RadialMenu radialMenu, RadialButton radialButton);

			private Sprite m_buttonSprite;

			private Color m_buttonColor = Color.white;

			private string m_text = string.Empty;

			private string m_displayText = string.Empty;

			private Func<char> m_punctuation = () => '.';

			private Vector2 m_positionOverride = Vector2.zero;

			private Vector2 m_sizeDelta = Vector2.one * 75f;

			private float m_textSize = 12f;

			private Color m_textColor = Color.black;

			private TextAlignmentOptions m_textAlignment = (TextAlignmentOptions)514;

			public RadialMenu parentRadialMenu;

			public Func<RadialMenu> connectingRadialMenu;

			public Action<RadialMenu, RadialButton> preRadialButtonClicked;

			public Action<RadialMenu, RadialButton> postRadialButtonClicked;

			public bool saveToHistory = true;

			private bool created;

			public GameObject gameObject { get; private set; }

			public Transform transform { get; private set; }

			public RectTransform rectTransform { get; private set; }

			public Image image { get; private set; }

			public Button button { get; private set; }

			public TextMeshProUGUI textField { get; private set; }

			public Sprite buttonSprite
			{
				get
				{
					return m_buttonSprite;
				}
				set
				{
					if (created && (Object)(object)image != (Object)null)
					{
						image.sprite = value;
					}
					m_buttonSprite = value;
				}
			}

			public Color buttonColor
			{
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return m_buttonColor;
				}
				set
				{
					//IL_0023: Unknown result type (might be due to invalid IL or missing references)
					//IL_0024: Unknown result type (might be due to invalid IL or missing references)
					//IL_001c: Unknown result type (might be due to invalid IL or missing references)
					if (created && (Object)(object)image != (Object)null)
					{
						((Graphic)image).color = value;
					}
					m_buttonColor = value;
				}
			}

			public string text
			{
				get
				{
					return m_text;
				}
				set
				{
					string text = value.Trim();
					if (created && (Object)(object)textField != (Object)null)
					{
						((TMP_Text)textField).text = ((displayText == string.Empty) ? ("\"" + text + "\"") : displayText);
					}
					m_text = text;
				}
			}

			public string displayText
			{
				get
				{
					return m_displayText;
				}
				set
				{
					if (created && (Object)(object)textField != (Object)null)
					{
						((TMP_Text)textField).text = ((displayText == string.Empty) ? ("\"" + value + "\"") : displayText);
					}
					m_displayText = value;
				}
			}

			public Func<char> punctuation
			{
				get
				{
					return m_punctuation;
				}
				set
				{
					m_punctuation = value;
				}
			}

			public Vector2 positionOverride
			{
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return m_positionOverride;
				}
				set
				{
					//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)
					m_positionOverride = value;
					if (created && parentRadialMenu != null)
					{
						parentRadialMenu.EvenlySplitOnUnitCircle();
					}
				}
			}

			public Vector2 sizeDelta
			{
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return m_sizeDelta;
				}
				set
				{
					//IL_0023: Unknown result type (might be due to invalid IL or missing references)
					//IL_0024: Unknown result type (might be due to invalid IL or missing references)
					//IL_001c: Unknown result type (might be due to invalid IL or missing references)
					if (created && (Object)(object)rectTransform != (Object)null)
					{
						rectTransform.sizeDelta = value;
					}
					m_sizeDelta = value;
				}
			}

			public float textSize
			{
				get
				{
					return m_textSize;
				}
				set
				{
					if (created && (Object)(object)textField != (Object)null)
					{
						((TMP_Text)textField).fontSize = value;
					}
					m_textSize = value;
				}
			}

			public Color textColor
			{
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return m_textColor;
				}
				set
				{
					//IL_0023: Unknown result type (might be due to invalid IL or missing references)
					//IL_0024: Unknown result type (might be due to invalid IL or missing references)
					//IL_001c: Unknown result type (might be due to invalid IL or missing references)
					if (created && (Object)(object)textField != (Object)null)
					{
						((Graphic)textField).color = value;
					}
					m_textColor = value;
				}
			}

			public TextAlignmentOptions textAlignment
			{
				get
				{
					//IL_0001: Unknown result type (might be due to invalid IL or missing references)
					return m_textAlignment;
				}
				set
				{
					//IL_0023: Unknown result type (might be due to invalid IL or missing references)
					//IL_0024: Unknown result type (might be due to invalid IL or missing references)
					//IL_001c: Unknown result type (might be due to invalid IL or missing references)
					if (created && (Object)(object)textField != (Object)null)
					{
						((TMP_Text)textField).alignment = value;
					}
					m_textAlignment = value;
				}
			}

			private string expressText
			{
				get
				{
					if (!(displayText == string.Empty))
					{
						return displayText;
					}
					return "\"" + text + "\"";
				}
			}

			public event RadialButtonClicked PreRadialButtonClicked;

			public event RadialButtonClicked PostRadialButtonClicked;

			internal void QuoteOnQuoteDestroyRadialButton()
			{
				if (created)
				{
					created = false;
				}
			}

			internal void CreateTextField()
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0005: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_0093: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				GameObject val = new GameObject
				{
					name = expressText
				};
				val.transform.SetParent(transform, false);
				textField = val.AddComponent<TextMeshProUGUI>();
				((TMP_Text)textField).text = ((displayText == string.Empty) ? ("\"" + text + "\"") : displayText);
				((TMP_Text)textField).fontSize = textSize;
				((Graphic)textField).color = textColor;
				((TMP_Text)textField).alignment = textAlignment;
				((TMP_Text)textField).rectTransform.sizeDelta = sizeDelta;
				((TMP_Text)textField).enableWordWrapping = true;
			}

			internal void SetupRadialButton(RadialMenu parentRadialMenu)
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				//IL_0016: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Expected O, but got Unknown
				//IL_0080: Unknown result type (might be due to invalid IL or missing references)
				//IL_00be: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c8: Expected O, but got Unknown
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				if (!created)
				{
					created = true;
					gameObject = new GameObject
					{
						name = expressText
					};
					transform = gameObject.transform;
					transform.SetParent(parentRadialMenu.transform, false);
					this.parentRadialMenu = parentRadialMenu;
					CreateTextField();
					image = gameObject.AddComponent<Image>();
					image.sprite = buttonSprite;
					((Graphic)image).color = buttonColor;
					button = gameObject.AddComponent<Button>();
					((Selectable)button).image = image;
					((UnityEvent)button.onClick).AddListener(new UnityAction(OnClick));
					text = text.Trim();
					Transform obj = ((Component)button).transform;
					rectTransform = (RectTransform)(object)((obj is RectTransform) ? obj : null);
					rectTransform.sizeDelta = sizeDelta;
				}
			}

			internal void OnClick()
			{
				preRadialButtonClicked?.Invoke(parentRadialMenu, this);
				this.PreRadialButtonClicked?.Invoke(parentRadialMenu, this);
				RadialMenu radialMenu = connectingRadialMenu?.Invoke();
				RadialMenu currentMenu = RadialMenuManager.CurrentMenu;
				if (saveToHistory)
				{
					RadialMenuManager.AddRadialButtonHistory(this);
				}
				if (radialMenu == null || radialMenu.radialButtons.Count <= 0)
				{
					RadialMenuManager.SendChatText();
				}
				else
				{
					RadialMenuManager.SetCurrentMenu(radialMenu, RadialMenuManager.LastMenu != currentMenu);
				}
				RadialMenuManager.RefreshMenu(currentMenu, radialMenu);
				postRadialButtonClicked?.Invoke(parentRadialMenu, this);
				this.PostRadialButtonClicked?.Invoke(parentRadialMenu, this);
			}

			public RadialButton()
			{
			}//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_005c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: 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)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)


			public RadialButton(RadialMenu connectingRadialMenu)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				displayText = connectingRadialMenu.name;
				this.connectingRadialMenu = () => connectingRadialMenu;
			}

			public RadialButton(RadialMenu connectingRadialMenu, Color buttonColor)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
				displayText = connectingRadialMenu.name;
				this.buttonColor = buttonColor;
				this.connectingRadialMenu = () => connectingRadialMenu;
			}

			public RadialButton(string text)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
			}

			public RadialButton(string text, Color buttonColor)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_009c: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
				this.buttonColor = buttonColor;
			}

			public RadialButton(string text, char punctuation)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
				displayText = $"\"{text}{punctuation}\"";
				this.punctuation = () => punctuation;
			}

			public RadialButton(string text, string displayText)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
				this.displayText = displayText;
			}

			public RadialButton(string text, RadialMenu connectingRadialMenu)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
				this.connectingRadialMenu = () => connectingRadialMenu;
			}

			public RadialButton(string text, string displayText, RadialMenu connectingRadialMenu)
			{
				//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_0047: 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_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_005c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0072: 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)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				this.text = text;
				this.displayText = displayText;
				this.connectingRadialMenu = () => connectingRadialMenu;
			}
		}

		public class UnitCircleOffset
		{
			public const float RIGHT = 0f;

			public const float TOP_RIGHT = (float)Math.PI / 4f;

			public const float TOP = (float)Math.PI / 2f;

			public const float TOP_LEFT = (float)Math.PI * 3f / 4f;

			public const float LEFT = (float)Math.PI;

			public const float BOTTOM_LEFT = 3.926991f;

			public const float BOTTOM = 4.712389f;

			public const float BOTTOM_RIGHT = 5.4977875f;
		}

		private List<RadialButton> m_radialButtons = new List<RadialButton>();

		public string name = "Menu";

		public bool saveToHistory = true;

		private float m_radialOffset = 4.712389f;

		private float m_outwards = 175f;

		public GameObject gameObject { get; private set; }

		public Transform transform { get; private set; }

		public List<RadialButton> radialButtons
		{
			get
			{
				return m_radialButtons;
			}
			set
			{
				m_radialButtons = value;
				UpdateRadialButtons(m_radialButtons);
			}
		}

		public float radialOffset
		{
			get
			{
				return m_radialOffset;
			}
			set
			{
				m_radialOffset = value;
				EvenlySplitOnUnitCircle();
			}
		}

		public float outwards
		{
			get
			{
				return m_outwards;
			}
			set
			{
				m_outwards = value;
				EvenlySplitOnUnitCircle();
			}
		}

		public bool created { get; private set; }

		public void AddRadialButton(RadialButton button)
		{
			radialButtons.Add(button);
		}

		public void InsertRadialButton(RadialButton button, int i)
		{
			radialButtons.Insert(i, button);
		}

		public void UpdateRadialButtons(List<RadialButton> radialButtons)
		{
			if (created)
			{
				m_radialButtons.ForEach(delegate(RadialButton button)
				{
					button.QuoteOnQuoteDestroyRadialButton();
				});
			}
			m_radialButtons.Clear();
			m_radialButtons = radialButtons;
			UpdateRadialButtons();
		}

		public void UpdateRadialButtons()
		{
			if (created)
			{
				radialButtons.ForEach(delegate(RadialButton button)
				{
					button.SetupRadialButton(this);
				});
				EvenlySplitOnUnitCircle();
			}
		}

		public void RemoveRadialButton(int i)
		{
			radialButtons.RemoveAt(i);
		}

		internal void EvenlySplitOnUnitCircle()
		{
			//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_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: 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_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_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)
			//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_002a: Unknown result type (might be due to invalid IL or missing references)
			for (int j = 0; j < radialButtons.Count; j++)
			{
				RadialButton radialButton = radialButtons[j];
				if (radialButton.positionOverride != Vector2.zero)
				{
					radialButton.rectTransform.anchoredPosition = radialButton.positionOverride;
					continue;
				}
				float x2 = GetPointOnUnitCircle(j);
				Vector2 anchoredPosition = Vector2.op_Implicit(RadialMenuHUD.RadialMenuHUDCamera.ScreenToWorldPoint(Vector2.op_Implicit(RadialMenuHUD.Center))) + GetPositionOnUnitCircle(x2) * outwards;
				radialButton.rectTransform.anchoredPosition = anchoredPosition;
			}
			float GetPointOnUnitCircle(int i)
			{
				return (float)Math.PI * 2f * ((float)i / (float)radialButtons.Count) + radialOffset;
			}
			static Vector2 GetPositionOnUnitCircle(float x)
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				return new Vector2(Mathf.Cos(x), Mathf.Sin(x));
			}
		}

		internal void CreateRadialMenu(Transform parentTransform)
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			if (!created)
			{
				created = true;
				gameObject = new GameObject
				{
					name = name
				};
				transform = gameObject.transform;
				transform.SetParent(parentTransform, false);
				UpdateRadialButtons();
				gameObject.SetActive(false);
			}
		}

		internal void RemoveRadialMenu()
		{
			created = false;
			radialButtons.ForEach(delegate(RadialButton button)
			{
				button.QuoteOnQuoteDestroyRadialButton();
			});
		}

		public RadialMenu(bool autoRegister = true)
		{
			if (autoRegister)
			{
				RadialMenuManager.RegisterRadialMenu(this);
			}
		}

		public RadialMenu(string name, bool autoRegister = true)
		{
			this.name = name;
			if (autoRegister)
			{
				RadialMenuManager.RegisterRadialMenu(this);
			}
		}
	}
	public class RadialMenuSetupDefaults
	{
		public static RadialMenu positionsMenu = new RadialMenu("Positionni");

		public static RadialMenu playersMenu = new RadialMenu("Players");

		public static RadialMenu monstersMenu2 = new RadialMenu("Monstersi 2")
		{
			saveToHistory = false,
			radialOffset = (float)Math.PI
		};

		public static RadialMenu monstersMenu = new RadialMenu("Monstersi")
		{
			radialOffset = 0f
		};

		public static RadialMenu commandsMenu = new RadialMenu("Commandii");

		public static RadialMenu answersMenu = new RadialMenu("Answersi");

		public static RadialMenu questionsMenu = new RadialMenu("Questionni");

		public static RadialMenu greetingsMenu = new RadialMenu("Emotionsi");

		public static RadialMenu observationsMenu = new RadialMenu("Observationni");

		public static RadialMenu urgentMenu = new RadialMenu("URGENTSI");

		public static RadialMenu defaultMenu = new RadialMenu("Flopsi Quicksi Chat");

		public static List<RadialMenu.RadialButton> defaultMenuButtons = new List<RadialMenu.RadialButton>();

		internal static void Init()
		{
			//IL_000b: 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_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: 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_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0416: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_0455: Unknown result type (might be due to invalid IL or missing references)
			//IL_046a: Unknown result type (might be due to invalid IL or missing references)
			//IL_047f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0494: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04be: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d3: Unknown result type (might be due to invalid IL or missing references)
			defaultMenuButtons = new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton(observationsMenu, Color.cyan),
				new RadialMenu.RadialButton(questionsMenu, Color.yellow),
				new RadialMenu.RadialButton(commandsMenu, Color.magenta),
				new RadialMenu.RadialButton(urgentMenu, Color.red),
				new RadialMenu.RadialButton(answersMenu, Color.green),
				new RadialMenu.RadialButton(playersMenu, Color.blue),
				new RadialMenu.RadialButton(greetingsMenu, Color.white)
			};
			positionsMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("thaddar way!", "\"thaddar way!\" (point)")
				{
					postRadialButtonClicked = delegate
					{
						PerformEmoteFix(2);
					}
				},
				new RadialMenu.RadialButton("ta the rightsi"),
				new RadialMenu.RadialButton("uppa 'head"),
				new RadialMenu.RadialButton("atta FireExitsi"),
				new RadialMenu.RadialButton("atta Main"),
				new RadialMenu.RadialButton("!"),
				new RadialMenu.RadialButton("'ere"),
				new RadialMenu.RadialButton("ta the leftsi")
			});
			monstersMenu2.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton
				{
					displayText = "<<LASTSI PAGE>>",
					saveToHistory = false,
					connectingRadialMenu = () => monstersMenu
				},
				new RadialMenu.RadialButton("Nutcrackersi", positionsMenu),
				new RadialMenu.RadialButton("Coilli", positionsMenu),
				new RadialMenu.RadialButton("Jestersi", positionsMenu),
				new RadialMenu.RadialButton("Maski", positionsMenu),
				new RadialMenu.RadialButton("Giantii", positionsMenu),
				new RadialMenu.RadialButton("Birdsi", positionsMenu),
				new RadialMenu.RadialButton("Dogsi", positionsMenu)
				{
					preRadialButtonClicked = delegate
					{
						RadialMenuManager.ModifyRadialButtonHistory("Theres'an", RadialMenuManager.RadialButtonHistory.Count - 1);
					}
				},
				new RadialMenu.RadialButton("Wormmi", positionsMenu)
				{
					preRadialButtonClicked = delegate
					{
						RadialMenuManager.ModifyRadialButtonHistory("Theres'an", RadialMenuManager.RadialButtonHistory.Count - 1);
					}
				}
			});
			monstersMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton
				{
					displayText = "<<NEXTTI PAGE>>",
					saveToHistory = false,
					connectingRadialMenu = () => monstersMenu2
				},
				new RadialMenu.RadialButton("Snarey Flee", positionsMenu),
				new RadialMenu.RadialButton("Spiderri", positionsMenu),
				new RadialMenu.RadialButton("Bugsi", positionsMenu),
				new RadialMenu.RadialButton("Brackenna", positionsMenu),
				new RadialMenu.RadialButton("Thumpersi", positionsMenu),
				new RadialMenu.RadialButton("Slimesii", positionsMenu),
				new RadialMenu.RadialButton("Ghostii", positionsMenu),
				new RadialMenu.RadialButton("Lizardsi", positionsMenu)
			});
			commandsMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("Followwi me"),
				new RadialMenu.RadialButton("Stopsi"),
				new RadialMenu.RadialButton("Shhhh!"),
				new RadialMenu.RadialButton("Amma go 'head"),
				new RadialMenu.RadialButton("Letsi go", "\"Letsi go {direction}\"", positionsMenu)
			});
			answersMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("Eh?", Color.gray)
				{
					textColor = Color.white
				},
				new RadialMenu.RadialButton("Uuhh-", Color.gray),
				new RadialMenu.RadialButton("Oi!", Color.gray),
				new RadialMenu.RadialButton("Dunno-", Color.gray),
				new RadialMenu.RadialButton("Nuh uh!", Color.red),
				new RadialMenu.RadialButton("<color=red>ACK!", Color.white),
				new RadialMenu.RadialButton("<color=red>AAA?", Color.white),
				new RadialMenu.RadialButton("<color=red>AAAAA!!!", Color.white),
				new RadialMenu.RadialButton("Yuh?", Color.green),
				new RadialMenu.RadialButton("Yuh!", Color.green)
			});
			questionsMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("Wha was thaddar", '?'),
				new RadialMenu.RadialButton("Whosi there", '?'),
				new RadialMenu.RadialButton("Are'ya oki", '?'),
				new RadialMenu.RadialButton("Did'ja hearsi that", '?'),
				new RadialMenu.RadialButton("Are'ya real", '?'),
				new RadialMenu.RadialButton("Wha upsi", '?'),
				new RadialMenu.RadialButton("Wha", '?')
			});
			greetingsMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("<color=green>O-O", ' '),
				new RadialMenu.RadialButton("<color=green>O-O!", ' '),
				new RadialMenu.RadialButton("<color=blue>O~O", ' '),
				new RadialMenu.RadialButton("<color=blue>O~O!", ' '),
				new RadialMenu.RadialButton("<color=red>>:[", ' '),
				new RadialMenu.RadialButton("<color=red>>:]", ' '),
				new RadialMenu.RadialButton("<color=blue>o-o", ' '),
				new RadialMenu.RadialButton("<color=blue>>~<", ' '),
				new RadialMenu.RadialButton("<color=blue>>~<!", ' '),
				new RadialMenu.RadialButton("<color=blue>>-<", ' '),
				new RadialMenu.RadialButton("<color=blue>>-<!", ' '),
				new RadialMenu.RadialButton("<color=blue>;<", ' '),
				new RadialMenu.RadialButton("<color=green>;>", ' '),
				new RadialMenu.RadialButton("<color=green>>:P", ' '),
				new RadialMenu.RadialButton(":o", ' '),
				new RadialMenu.RadialButton("<color=red>>:o", ' '),
				new RadialMenu.RadialButton(">:D", ' '),
				new RadialMenu.RadialButton(">:D", ' '),
				new RadialMenu.RadialButton("<color=blue>D;", ' ')
			});
			observationsMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("More scrapsi", "\"More scrapsi {direction}\"", positionsMenu),
				new RadialMenu.RadialButton("Theres'a trappi", "\"Theres'a trappi {direction}\"", positionsMenu),
				new RadialMenu.RadialButton("Theresi dead-end", "\"Theresi dead-end {direction}\"", positionsMenu),
				new RadialMenu.RadialButton("Theres'a", "\"Theres'a(n) {monster} {direction}\"", monstersMenu),
				new RadialMenu.RadialButton("Thaddar'n mimic", '!'),
				new RadialMenu.RadialButton("Tha notsi real", '!')
			});
			urgentMenu.UpdateRadialButtons(new List<RadialMenu.RadialButton>
			{
				new RadialMenu.RadialButton("<color=red>NUTCRACKERSI", '!'),
				new RadialMenu.RadialButton("<color=red>COILLSI", '!'),
				new RadialMenu.RadialButton("<color=red>JESTERRI", '!'),
				new RadialMenu.RadialButton("<color=red>MASKII", '!'),
				new RadialMenu.RadialButton("<color=red>GIANTI", '!'),
				new RadialMenu.RadialButton("<color=red>BIRDSII", '!'),
				new RadialMenu.RadialButton("<color=red>SNAREY FLEE", '!'),
				new RadialMenu.RadialButton("<color=red>SPIDERSI", '!'),
				new RadialMenu.RadialButton("<color=red>BUGS-A", '!'),
				new RadialMenu.RadialButton("<color=red>BRACKENNA", '!'),
				new RadialMenu.RadialButton("<color=red>THUMPERSI", '!'),
				new RadialMenu.RadialButton("<color=red>SLIMESII", '!'),
				new RadialMenu.RadialButton("<color=red>GHOSTII HAUNTED", '!'),
				new RadialMenu.RadialButton("<color=red>LIZARDSI", '!'),
				new RadialMenu.RadialButton("<color=red>RUNSI", '!'),
				new RadialMenu.RadialButton("<color=red>GO GO", '!'),
				new RadialMenu.RadialButton("<color=red>HELPSII", '!')
			});
			defaultMenu.UpdateRadialButtons(defaultMenuButtons);
			foreach (RadialMenu.RadialButton defaultMenuButton in defaultMenuButtons)
			{
				DisplayTextConfigFromButton(defaultMenuButton, defaultMenuButtons.IndexOf(defaultMenuButton));
				ColorConfigFromButton(defaultMenuButton, defaultMenuButtons.IndexOf(defaultMenuButton));
			}
			RadialMenuManager.MainMenu.AddRadialButton(new RadialMenu.RadialButton(defaultMenu));
			RadialMenuManager.OnReady += RadialMenuManager_OnReady;
			RadialMenuManager.OnPostExit += RadialMenuManager_OnExit;
		}

		private static void RadialMenuManager_OnReady()
		{
			if (!((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null))
			{
				SetupPlayerMenu(GameNetworkManager.Instance.localPlayerController.quickMenuManager);
			}
		}

		private static void RadialMenuManager_OnExit()
		{
			playersMenu.radialButtons.Clear();
			playersMenu.UpdateRadialButtons();
		}

		private static void PerformEmoteFix(int emoteIndex)
		{
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			localPlayerController.timeSinceStartingEmote = 0f;
			localPlayerController.performingEmote = true;
			localPlayerController.playerBodyAnimator.SetInteger("emoteNumber", emoteIndex);
			localPlayerController.StartPerformingEmoteServerRpc();
		}

		private static void ColorConfigFromButton(RadialMenu.RadialButton radialButton, int i)
		{
			//IL_003d: 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_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Expected O, but got Unknown
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0118: Expected O, but got Unknown
			//IL_0118: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Expected O, but got Unknown
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Expected O, but got Unknown
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Expected O, but got Unknown
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0181: Expected O, but got Unknown
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Expected O, but got Unknown
			RadialMenu radialMenu = radialButton.connectingRadialMenu();
			ConfigEntry<int>[] colorValues = new ConfigEntry<int>[4]
			{
				Plugin.ConfigF.Bind<int>(radialMenu.name + " RadialMenu Options", "Color R", ConvertToRGB32(radialButton.buttonColor.r), "The Red of the RadialButton Color"),
				Plugin.ConfigF.Bind<int>(radialMenu.name + " RadialMenu Options", "Color G", ConvertToRGB32(radialButton.buttonColor.g), "The Green of the RadialButton Color"),
				Plugin.ConfigF.Bind<int>(radialMenu.name + " RadialMenu Options", "Color B", ConvertToRGB32(radialButton.buttonColor.b), "The Blue of the RadialButton Color"),
				Plugin.ConfigF.Bind<int>(radialMenu.name + " RadialMenu Options", "Color A", ConvertToRGB32(radialButton.buttonColor.a), "The Alpha (Transparency) of the RadialButton Color")
			};
			IntSliderOptions val = new IntSliderOptions();
			((BaseRangeOptions<int>)val).Min = 0;
			((BaseRangeOptions<int>)val).Max = 255;
			((BaseOptions)val).RequiresRestart = false;
			IntSliderOptions val2 = val;
			IntSliderConfigItem val3 = new IntSliderConfigItem(colorValues[0], val2);
			colorValues[0].SettingChanged += delegate
			{
				//IL_0025: 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_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				RadialMenu.RadialButton radialButton5 = defaultMenuButtons[i];
				radialButton5.buttonColor = new Color(ConvertToRGB(colorValues[0].Value), radialButton5.buttonColor.g, radialButton5.buttonColor.b, radialButton5.buttonColor.a);
			};
			IntSliderConfigItem val4 = new IntSliderConfigItem(colorValues[1], val2);
			colorValues[1].SettingChanged += delegate
			{
				//IL_0013: 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_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				RadialMenu.RadialButton radialButton4 = defaultMenuButtons[i];
				radialButton4.buttonColor = new Color(radialButton4.buttonColor.r, ConvertToRGB(colorValues[1].Value), radialButton4.buttonColor.b, radialButton4.buttonColor.a);
			};
			IntSliderConfigItem val5 = new IntSliderConfigItem(colorValues[2], val2);
			colorValues[2].SettingChanged += delegate
			{
				//IL_0013: 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)
				//IL_003b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				RadialMenu.RadialButton radialButton3 = defaultMenuButtons[i];
				radialButton3.buttonColor = new Color(radialButton3.buttonColor.r, radialButton3.buttonColor.g, ConvertToRGB(colorValues[2].Value), radialButton3.buttonColor.a);
			};
			IntSliderConfigItem val6 = new IntSliderConfigItem(colorValues[3], val2);
			colorValues[3].SettingChanged += delegate
			{
				//IL_0013: 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)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				RadialMenu.RadialButton radialButton2 = defaultMenuButtons[i];
				radialButton2.buttonColor = new Color(radialButton2.buttonColor.r, radialButton2.buttonColor.g, radialButton2.buttonColor.b, ConvertToRGB(colorValues[3].Value));
			};
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val4);
			LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val5);
			LethalConfigManager.AddConfigItem((BaseConfigItem)val6);
		}

		private static void DisplayTextConfigFromButton(RadialMenu.RadialButton radialButton, int i)
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Expected O, but got Unknown
			RadialMenu radialMenu = radialButton.connectingRadialMenu();
			ConfigEntry<string> displayTextValue = Plugin.ConfigF.Bind<string>(radialMenu.name + " RadialMenu Options", "Display Text", radialButton.displayText, "The Display Text of the Radial Button");
			TextInputFieldConfigItem val = new TextInputFieldConfigItem(displayTextValue, false);
			displayTextValue.SettingChanged += delegate
			{
				defaultMenuButtons[i].displayText = displayTextValue.Value;
			};
			LethalConfigManager.AddConfigItem((BaseConfigItem)val);
		}

		private static int ConvertToRGB32(float colorValue)
		{
			return (int)(colorValue * 255f);
		}

		private static float ConvertToRGB(int colorValue)
		{
			return (float)colorValue / 255f;
		}

		[HarmonyPatch(typeof(QuickMenuManager), "AddUserToPlayerList")]
		[HarmonyPostfix]
		private static void SetupPlayerMenuJoin(QuickMenuManager __instance)
		{
			SetupPlayerMenu(__instance);
		}

		[HarmonyPatch(typeof(QuickMenuManager), "RemoveUserFromPlayerList")]
		[HarmonyPostfix]
		private static void SetupPlayerMenuLeave(QuickMenuManager __instance)
		{
			SetupPlayerMenu(__instance);
		}

		private static void SetupPlayerMenu(QuickMenuManager __instance)
		{
			List<RadialMenu.RadialButton> radialButtons = new List<RadialMenu.RadialButton>();
			PlayerListSlot[] playerListSlots = __instance.playerListSlots;
			foreach (PlayerListSlot val in playerListSlots)
			{
				playersMenu.AddRadialButton(new RadialMenu.RadialButton
				{
					text = ((TMP_Text)val.usernameHeader).text
				});
			}
			playersMenu.UpdateRadialButtons(radialButtons);
		}
	}
}