Decompiled source of TeleportMenu v2.1.0

Mods/TeleportMenu_IL2CPP.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using HarmonyLib;
using Il2CppScheduleOne.DevUtilities;
using Il2CppScheduleOne.Economy;
using Il2CppScheduleOne.Money;
using Il2CppScheduleOne.PlayerScripts;
using Il2CppScheduleOne.Quests;
using MelonLoader;
using MelonLoader.Utils;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using ScheduleITeleportMenu;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(Main), "Teleport Menu", "2.1.0", "MrTibbz", null)]
[assembly: MelonGame("TVGS", "Schedule I")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("TeleportMenu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TeleportMenu")]
[assembly: AssemblyTitle("TeleportMenu")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

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

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

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace ScheduleITeleportMenu
{
	public class Main : MelonMod
	{
		[Serializable]
		public class TeleportLocation
		{
			public string Name;

			public SerializableVector3 Position;

			public bool IsFavorite;

			public string Category;
		}

		[Serializable]
		public class SerializableVector3
		{
			public float x;

			public float y;

			public float z;

			public SerializableVector3(Vector3 v)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_001f: Unknown result type (might be due to invalid IL or missing references)
				x = v.x;
				y = v.y;
				z = v.z;
			}

			public Vector3 ToVector3()
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				return new Vector3(x, y, z);
			}
		}

		[Serializable]
		private class CombinedData
		{
			public List<TeleportLocation> SavedLocations = new List<TeleportLocation>();

			public List<TeleportLocation> FavoriteLocations = new List<TeleportLocation>();

			public SerializableVector3 SafetyTeleportPosition = new SerializableVector3(Vector3.zero);

			public ModSettings Settings = new ModSettings();
		}

		private enum MenuState
		{
			Main,
			SubMenu,
			Favorites,
			Settings
		}

		[HarmonyPatch(typeof(Customer), "ContractAccepted")]
		private class Patch_ContractAccepted
		{
			private static void Postfix(Customer __instance, Contract __result, EDealWindow window, bool trackContract, Dealer dealer)
			{
				//IL_0036: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
				if ((!trackContract && !IsDealerThePlayer(dealer)) || (Object)(object)__result == (Object)null || (Object)(object)__result.DeliveryLocation == (Object)null)
				{
					return;
				}
				Vector3 position = ((Component)__result.DeliveryLocation).transform.position;
				position.y += 1f;
				object obj = ((Quest)__result).Title;
				if (obj == null)
				{
					if (__instance == null)
					{
						obj = null;
					}
					else
					{
						DeliveryLocation defaultDeliveryLocation = __instance.DefaultDeliveryLocation;
						obj = ((defaultDeliveryLocation != null) ? ((Object)defaultDeliveryLocation).name : null);
					}
					if (obj == null)
					{
						obj = "Deal";
					}
				}
				string dealName = (string)obj;
				if (!Instance.allLocations.Any((TeleportLocation l) => l.Name == dealName && l.Category == "Active Deals"))
				{
					Instance.AddActiveDealTeleport(new TeleportLocation
					{
						Name = dealName,
						Position = new SerializableVector3(position),
						Category = "Active Deals"
					});
				}
			}
		}

		[HarmonyPatch(typeof(Customer), "ProcessHandover")]
		private class Patch_ProcessHandover
		{
			private static void Postfix(Contract contract)
			{
				if (!((Object)(object)contract == (Object)null))
				{
					string dealName = ((Quest)contract).Title;
					if (Instance.allLocations.Any((TeleportLocation l) => l.Name == (dealName ?? "") && l.Category == "Active Deals"))
					{
						Instance.RemoveActiveDealTeleport(dealName ?? "");
					}
				}
			}
		}

		public class ModSettings
		{
			public KeyCode menuKey = (KeyCode)283;

			public KeyCode safetyTeleportKey = (KeyCode)284;

			public int titleFontSize = 18;

			public int titleTextColorR = 255;

			public int titleTextColorG = 255;

			public int titleTextColorB = 255;

			public int textColorR = 255;

			public int textColorG = 255;

			public int textColorB = 255;

			public int fontSize = 14;

			public bool bold;

			public int buttonHoverR = 128;

			public int buttonHoverG = 161;

			public int buttonHoverB = 191;

			public int accentBarR = 110;

			public int accentBarG = 110;

			public int accentBarB = 110;

			public int accentBarA = 255;

			public int backgroundR = 77;

			public int backgroundG = 77;

			public int backgroundB = 77;

			public int backgroundA = 255;

			public bool chargeForTeleport;

			public int teleportCost = 30;
		}

		private string waitingForKey;

		private bool isMenuOpen;

		private Rect windowRect = new Rect(200f, 100f, 400f, 500f);

		private Vector2 scrollPosition;

		private bool isResizing;

		private Vector2 resizeStartMousePosition;

		private Vector2 resizeStartWindowSize;

		private bool isDragging;

		private Vector2 dragOffset;

		private float x = 15f;

		private MenuState currentMenu;

		private string currentCategory = "";

		private string newLocationName = "";

		private string combinedSavePath;

		public static Main Instance;

		private SerializableVector3 safetyTeleportPosition = new SerializableVector3(Vector3.zero);

		private List<TeleportLocation> savedLocations = new List<TeleportLocation>();

		private List<TeleportLocation> favoriteLocations = new List<TeleportLocation>();

		private List<TeleportLocation> allLocations = new List<TeleportLocation>();

		private ModSettings settings = new ModSettings();

		private void TeleportToLocation(TeleportLocation location)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Player.Local != (Object)null)
			{
				((Component)Player.Local).transform.position = location.Position.ToVector3();
				MelonLogger.Msg($"Teleported to {location.Name} ({location.Position.x}, {location.Position.y}, {location.Position.z})");
			}
			if (!settings.chargeForTeleport)
			{
				return;
			}
			MoneyManager instance = NetworkSingleton<MoneyManager>.Instance;
			int teleportCost = settings.teleportCost;
			if ((Object)(object)instance != (Object)null)
			{
				if (instance.cashBalance >= (float)teleportCost)
				{
					instance.ChangeCashBalance((float)(-teleportCost), true, false);
					MelonLogger.Msg($"[Teleport Menu] Charged ${teleportCost} for teleport. Remaining: ${instance.cashBalance}");
				}
				else
				{
					MelonLogger.Msg($"[Teleport Menu] Not enough money! Requires ${teleportCost}.");
				}
			}
		}

		public override void OnInitializeMelon()
		{
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			combinedSavePath = Path.Combine(MelonEnvironment.UserDataDirectory, "TeleportMenu/AllData.json");
			LoadAllData();
			InitializeAllLocations();
			Instance = this;
			new Harmony("TeleportMenuPatches").PatchAll();
			foreach (TeleportLocation saved in savedLocations)
			{
				if (!allLocations.Any((TeleportLocation l) => l.Name == saved.Name && l.Category == saved.Category))
				{
					allLocations.Add(saved);
				}
			}
			if (!allLocations.Any((TeleportLocation l) => l.Category == "Custom Teleports"))
			{
				allLocations.Add(new TeleportLocation
				{
					Name = "",
					Position = new SerializableVector3(Vector3.zero),
					Category = "Custom Teleports"
				});
			}
			foreach (TeleportLocation fav in favoriteLocations)
			{
				TeleportLocation teleportLocation = allLocations.FirstOrDefault((TeleportLocation l) => l.Name == fav.Name && l.Category == fav.Category);
				if (teleportLocation != null)
				{
					teleportLocation.IsFavorite = true;
				}
			}
			MelonLogger.Msg("Initialization complete.");
		}

		public override void OnUpdate()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: 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_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: 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)
			if (Input.GetKeyDown(settings.menuKey))
			{
				isMenuOpen = !isMenuOpen;
				if (isMenuOpen)
				{
					Cursor.visible = true;
					Cursor.lockState = (CursorLockMode)0;
					if ((Object)(object)PlayerSingleton<PlayerMovement>.Instance != (Object)null)
					{
						((Behaviour)PlayerSingleton<PlayerMovement>.Instance).enabled = false;
					}
					if ((Object)(object)PlayerSingleton<PlayerCamera>.Instance != (Object)null)
					{
						((Behaviour)PlayerSingleton<PlayerCamera>.Instance).enabled = false;
					}
				}
				else
				{
					Cursor.visible = false;
					Cursor.lockState = (CursorLockMode)1;
					if ((Object)(object)PlayerSingleton<PlayerMovement>.Instance != (Object)null)
					{
						((Behaviour)PlayerSingleton<PlayerMovement>.Instance).enabled = true;
					}
					if ((Object)(object)PlayerSingleton<PlayerCamera>.Instance != (Object)null)
					{
						((Behaviour)PlayerSingleton<PlayerCamera>.Instance).enabled = true;
					}
				}
			}
			if (isResizing && Input.GetMouseButton(0))
			{
				Vector2 val = Vector2.op_Implicit(Input.mousePosition) - resizeStartMousePosition;
				((Rect)(ref windowRect)).width = Mathf.Max(200f, resizeStartWindowSize.x + val.x);
				((Rect)(ref windowRect)).height = Mathf.Max(200f, resizeStartWindowSize.y - val.y);
			}
			else if (Input.GetMouseButtonUp(0))
			{
				isResizing = false;
			}
			if (isDragging && Input.GetMouseButton(0))
			{
				((Rect)(ref windowRect)).position = Vector2.op_Implicit(Input.mousePosition) - dragOffset;
			}
			else if (Input.GetMouseButtonUp(0))
			{
				isDragging = false;
			}
			HandleTyping();
			if (Input.GetKeyDown(settings.safetyTeleportKey))
			{
				TeleportToLocation(new TeleportLocation
				{
					Name = "Safety Teleport",
					Position = safetyTeleportPosition,
					Category = "Custom Teleports"
				});
			}
		}

		public override void OnGUI()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Invalid comparison between Unknown and I4
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: 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_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0230: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_0240: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Event.current.type == 0 && Event.current.button == 1)
			{
				if (currentMenu == MenuState.Favorites || currentMenu == MenuState.Settings || currentMenu == MenuState.SubMenu)
				{
					currentMenu = MenuState.Main;
					scrollPosition = Vector2.zero;
					Event.current.Use();
				}
				else
				{
					_ = currentMenu;
				}
			}
			if (waitingForKey != null && (int)Event.current.type == 4)
			{
				KeyCode keyCode = Event.current.keyCode;
				if ((int)keyCode != 0)
				{
					if (waitingForKey == "menuKey")
					{
						settings.menuKey = keyCode;
						MelonLogger.Msg($"[Teleport Menu] Menu key set to {keyCode}");
					}
					else if (waitingForKey == "safetyTeleportKey")
					{
						settings.safetyTeleportKey = keyCode;
						MelonLogger.Msg($"[Teleport Menu] Safety teleport key set to {keyCode}");
					}
					waitingForKey = null;
					SaveAllData();
					Event.current.Use();
				}
			}
			if (isMenuOpen && (Event.current.isKey || Event.current.isMouse))
			{
				Event.current.Use();
			}
			if (!isMenuOpen)
			{
				return;
			}
			GUI.backgroundColor = new Color((float)settings.backgroundR / 255f, (float)settings.backgroundG / 255f, (float)settings.backgroundB / 255f, (float)settings.backgroundA / 255f);
			windowRect = GUI.Window(0, windowRect, WindowFunction.op_Implicit((Action<int>)DrawWindow), "");
			if ((int)Event.current.type == 0)
			{
				Rect val = new Rect(((Rect)(ref windowRect)).x, ((Rect)(ref windowRect)).y, ((Rect)(ref windowRect)).width, 20f);
				if (((Rect)(ref val)).Contains(Event.current.mousePosition))
				{
					isDragging = true;
					dragOffset = Vector2.op_Implicit(Input.mousePosition) - ((Rect)(ref windowRect)).position;
					Event.current.Use();
				}
			}
		}

		private void HandleTyping()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Invalid comparison between Unknown and I4
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Invalid comparison between Unknown and I4
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Invalid comparison between Unknown and I4
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			if (!isMenuOpen)
			{
				return;
			}
			foreach (KeyCode value in Enum.GetValues(typeof(KeyCode)))
			{
				if (!Input.GetKeyDown(value))
				{
					continue;
				}
				if ((int)value == 8)
				{
					if (newLocationName.Length > 0)
					{
						newLocationName = newLocationName.Substring(0, newLocationName.Length - 1);
					}
				}
				else if ((int)value != 13 && (int)value != 271)
				{
					string text = KeyCodeToString(value);
					if (!string.IsNullOrEmpty(text))
					{
						newLocationName += text;
					}
				}
			}
		}

		private string KeyCodeToString(KeyCode key)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Invalid comparison between Unknown and I4
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Invalid comparison between Unknown and I4
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Invalid comparison between Unknown and I4
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Invalid comparison between Unknown and I4
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Invalid comparison between Unknown and I4
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected I4, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Invalid comparison between Unknown and I4
			if ((int)key >= 97 && (int)key <= 122)
			{
				string text = ((object)(KeyCode)(ref key)).ToString();
				if (Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303))
				{
					return text.ToUpper();
				}
				return text.ToLower();
			}
			if ((int)key >= 48 && (int)key <= 57)
			{
				return (key - 48).ToString();
			}
			if ((int)key == 32)
			{
				return " ";
			}
			if ((int)key == 45)
			{
				return "-";
			}
			if ((int)key == 46)
			{
				return ".";
			}
			return null;
		}

		private GUIStyle GetLabelStyle()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Expected O, but got Unknown
			GUIStyle val = new GUIStyle(GUI.skin.label)
			{
				fontSize = settings.fontSize,
				fontStyle = (FontStyle)(settings.bold ? 1 : 0)
			};
			val.normal.textColor = new Color((float)settings.textColorR / 255f, (float)settings.textColorG / 255f, (float)settings.textColorB / 255f);
			return val;
		}

		private GUIStyle GetButtonStyle()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			GUIStyle val = new GUIStyle(GUI.skin.button)
			{
				fontSize = settings.fontSize,
				fontStyle = (FontStyle)(settings.bold ? 1 : 0)
			};
			val.normal.textColor = new Color((float)settings.textColorR / 255f, (float)settings.textColorG / 255f, (float)settings.textColorB / 255f);
			val.hover.textColor = new Color((float)settings.buttonHoverR / 255f, (float)settings.buttonHoverG / 255f, (float)settings.buttonHoverB / 255f);
			return val;
		}

		private GUIStyle GetCenteredLabelStyle()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Expected O, but got Unknown
			return new GUIStyle(GetLabelStyle())
			{
				alignment = (TextAnchor)4
			};
		}

		private void DrawWindow(int windowID)
		{
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: 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)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Expected O, but got Unknown
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fb: Expected O, but got Unknown
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			GUI.backgroundColor = new Color((float)settings.accentBarR / 255f, (float)settings.accentBarG / 255f, (float)settings.accentBarB / 255f, (float)settings.accentBarA / 255f);
			GUI.Box(new Rect(0f, 0f, ((Rect)(ref windowRect)).width, 20f), "Teleport Menu", new GUIStyle
			{
				fontSize = settings.titleFontSize,
				fontStyle = (FontStyle)(settings.bold ? 1 : 0),
				normal = new GUIStyleState
				{
					textColor = new Color((float)settings.titleTextColorR / 255f, (float)settings.titleTextColorG / 255f, (float)settings.titleTextColorB / 255f)
				},
				alignment = (TextAnchor)4
			});
			float num = 1300f;
			scrollPosition = GUI.BeginScrollView(new Rect(0f, 20f, ((Rect)(ref windowRect)).width, ((Rect)(ref windowRect)).height - 20f), scrollPosition, new Rect(0f, 0f, ((Rect)(ref windowRect)).width - 20f, num));
			GUIStyle buttonStyle = GetButtonStyle();
			GUIStyle labelStyle = GetLabelStyle();
			switch (currentMenu)
			{
			case MenuState.Main:
				DrawMainMenu(buttonStyle);
				break;
			case MenuState.SubMenu:
				DrawLocationSubMenu(buttonStyle);
				break;
			case MenuState.Favorites:
				DrawFavoritesMenu(buttonStyle);
				break;
			case MenuState.Settings:
				DrawSettingsMenu(buttonStyle, labelStyle);
				break;
			}
			GUI.EndScrollView();
			GUI.DragWindow(new Rect(0f, 0f, ((Rect)(ref windowRect)).width - 20f, 20f));
		}

		private void DrawMainMenu(GUIStyle buttonStyle)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			float num = 20f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Favorites", buttonStyle))
			{
				currentMenu = MenuState.Favorites;
				scrollPosition = Vector2.zero;
			}
			num += 45f;
			foreach (string item in from c in allLocations.Select((TeleportLocation l) => l.Category).Distinct()
				where c != "Custom Teleports"
				select c)
			{
				if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), item, buttonStyle))
				{
					currentCategory = item;
					currentMenu = MenuState.SubMenu;
					scrollPosition = Vector2.zero;
				}
				num += 45f;
			}
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Custom Teleports", buttonStyle))
			{
				currentCategory = "Custom Teleports";
				currentMenu = MenuState.SubMenu;
				scrollPosition = Vector2.zero;
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Settings", buttonStyle))
			{
				currentMenu = MenuState.Settings;
				scrollPosition = Vector2.zero;
			}
		}

		private void DrawFavoritesMenu(GUIStyle buttonStyle)
		{
			//IL_00da: 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_019a: 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_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			float num = 20f;
			float num2 = ((Rect)(ref windowRect)).width - 87f;
			List<string> categoryOrder = GetMenuCategoryOrder();
			List<TeleportLocation> list = favoriteLocations.OrderBy((TeleportLocation f) => categoryOrder.IndexOf(f.Category)).ToList();
			string text = "";
			foreach (TeleportLocation loc in list)
			{
				if (loc.Category != text)
				{
					text = loc.Category;
					GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), text ?? "", GetCenteredLabelStyle());
					num += 30f;
				}
				if (GUI.Button(new Rect(x, num, num2, 40f), loc.Name, buttonStyle))
				{
					TeleportToLocation(loc);
				}
				if (GUI.Button(new Rect(x + num2 + 5f, num, 40f, 40f), "X", buttonStyle))
				{
					loc.IsFavorite = false;
					favoriteLocations.RemoveAll((TeleportLocation f) => f.Name == loc.Name && f.Category == loc.Category);
					SaveAllData();
					break;
				}
				num += 45f;
			}
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Back", buttonStyle))
			{
				currentMenu = MenuState.Main;
				scrollPosition = Vector2.zero;
			}
		}

		private void DrawLocationSubMenu(GUIStyle buttonStyle)
		{
			//IL_005f: 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_00e1: 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_0463: Unknown result type (might be due to invalid IL or missing references)
			//IL_047d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_0274: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: Unknown result type (might be due to invalid IL or missing references)
			//IL_028c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Expected O, but got Unknown
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
			float num = 20f;
			float num2 = 40f;
			float num3 = 40f;
			List<TeleportLocation> list = allLocations.Where((TeleportLocation l) => l.Category == currentCategory && (!string.IsNullOrEmpty(l.Name) || currentCategory != "Custom Teleports")).ToList();
			if (currentCategory == "Custom Teleports")
			{
				GUI.Label(new Rect(20f, num, ((Rect)(ref windowRect)).width - 40f, 30f), "Enter Name: " + newLocationName, GetLabelStyle());
				num += 35f;
				if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Save Current Location", buttonStyle))
				{
					SaveCurrentLocation();
				}
				num += 45f;
				if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Set Safety Teleport", buttonStyle))
				{
					safetyTeleportPosition = new SerializableVector3(((Component)Player.Local).transform.position);
					SaveAllData();
					MelonLogger.Msg($"Safety Teleport location saved at ({safetyTeleportPosition.x}, {safetyTeleportPosition.y}, {safetyTeleportPosition.z})");
				}
				num += 45f;
			}
			foreach (TeleportLocation loc in list)
			{
				float num4 = ((Rect)(ref windowRect)).width - 87f;
				if (currentCategory == "Custom Teleports")
				{
					num4 = ((Rect)(ref windowRect)).width - 131f;
				}
				string text = loc.Name ?? "";
				if (string.IsNullOrEmpty(loc.Name))
				{
					text = "Unnamed Location";
				}
				if (GUI.Button(new Rect(x, num, num4, 40f), text, buttonStyle))
				{
					TeleportToLocation(loc);
				}
				string text2 = (loc.IsFavorite ? "★" : "☆");
				GUIStyle val = new GUIStyle(GUI.skin.button)
				{
					fontSize = settings.fontSize + 2
				};
				val.normal.textColor = (loc.IsFavorite ? Color.yellow : Color.white);
				val.hover.textColor = new Color((float)settings.buttonHoverR, (float)settings.buttonHoverG, (float)settings.buttonHoverB);
				val.alignment = (TextAnchor)4;
				GUIStyle val2 = val;
				if (GUI.Button(new Rect(x + num4 + 5f, num, num2, 40f), text2, val2))
				{
					loc.IsFavorite = !loc.IsFavorite;
					if (loc.IsFavorite)
					{
						if (!favoriteLocations.Any((TeleportLocation f) => f.Name == loc.Name && f.Category == loc.Category))
						{
							favoriteLocations.Add(loc);
						}
					}
					else
					{
						favoriteLocations.RemoveAll((TeleportLocation f) => f.Name == loc.Name && f.Category == loc.Category);
					}
					SaveAllData();
				}
				if (currentCategory == "Custom Teleports" && GUI.Button(new Rect(x + num4 + 5f + num2 + 5f, num, num3, 40f), "X", buttonStyle))
				{
					savedLocations.RemoveAll((TeleportLocation l) => l.Name == loc.Name && l.Category == loc.Category);
					allLocations.RemoveAll((TeleportLocation l) => l.Name == loc.Name && l.Category == loc.Category);
					favoriteLocations.RemoveAll((TeleportLocation f) => f.Name == loc.Name && f.Category == loc.Category);
					SaveAllData();
					break;
				}
				num += 45f;
			}
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Back", buttonStyle))
			{
				currentMenu = MenuState.Main;
				scrollPosition = Vector2.zero;
			}
		}

		private void InitializeAllLocations()
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_018a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_050b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0550: Unknown result type (might be due to invalid IL or missing references)
			//IL_0595: Unknown result type (might be due to invalid IL or missing references)
			//IL_05da: Unknown result type (might be due to invalid IL or missing references)
			//IL_061f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0664: Unknown result type (might be due to invalid IL or missing references)
			//IL_06a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_0733: Unknown result type (might be due to invalid IL or missing references)
			//IL_0778: Unknown result type (might be due to invalid IL or missing references)
			//IL_07bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0802: Unknown result type (might be due to invalid IL or missing references)
			//IL_0847: Unknown result type (might be due to invalid IL or missing references)
			//IL_088c: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0916: Unknown result type (might be due to invalid IL or missing references)
			//IL_095b: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a2a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bc8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c52: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c97: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cdc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d21: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d66: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dab: Unknown result type (might be due to invalid IL or missing references)
			//IL_0df0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e35: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e7a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ebf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f04: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f8e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_1018: Unknown result type (might be due to invalid IL or missing references)
			//IL_105d: Unknown result type (might be due to invalid IL or missing references)
			//IL_10a2: Unknown result type (might be due to invalid IL or missing references)
			allLocations = new List<TeleportLocation>();
			allLocations.Add(new TeleportLocation
			{
				Name = "RV",
				Position = new SerializableVector3(new Vector3(14f, 0.9f, -77f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Motel",
				Position = new SerializableVector3(new Vector3(-66f, 1.6f, 83f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Sweatshop",
				Position = new SerializableVector3(new Vector3(-64f, 0.4f, 142f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Storage Unit",
				Position = new SerializableVector3(new Vector3(-5.1f, 1f, 103f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Bungalow",
				Position = new SerializableVector3(new Vector3(-168f, -2.7f, 114f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Barn",
				Position = new SerializableVector3(new Vector3(181f, 1f, -14f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Docks Warehouse",
				Position = new SerializableVector3(new Vector3(-81f, -1.5f, -59f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Manor (Inside Gate)",
				Position = new SerializableVector3(new Vector3(163f, 11f, -71f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Manor (Outside Gate)",
				Position = new SerializableVector3(new Vector3(166f, 11f, -79f)),
				Category = "Properties"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Laundromat",
				Position = new SerializableVector3(new Vector3(-22.5f, 1f, 25f)),
				Category = "Businesses"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Post Office",
				Position = new SerializableVector3(new Vector3(47f, 1f, 5f)),
				Category = "Businesses"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Car Wash",
				Position = new SerializableVector3(new Vector3(-8.5f, 1f, -19f)),
				Category = "Businesses"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Taco Ticklers",
				Position = new SerializableVector3(new Vector3(-30f, 1f, 62f)),
				Category = "Businesses"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Dan's Hardware",
				Position = new SerializableVector3(new Vector3(-21f, -3f, 137f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Handy Hank's",
				Position = new SerializableVector3(new Vector3(104f, 1f, 25f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Gas-Mart",
				Position = new SerializableVector3(new Vector3(-113f, -2.9f, 68f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Gas-Mart/Auto Shop",
				Position = new SerializableVector3(new Vector3(16f, 1f, -16.5f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Pawnshop",
				Position = new SerializableVector3(new Vector3(-61.3f, 1f, 53f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Shred Shack",
				Position = new SerializableVector3(new Vector3(-39f, -2.9f, 121f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Ray's Real Estate",
				Position = new SerializableVector3(new Vector3(81.5f, 1f, -7f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Blueball's Boutique",
				Position = new SerializableVector3(new Vector3(71f, 1f, -8f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Thrifty Threads",
				Position = new SerializableVector3(new Vector3(-22.5f, 1f, 12f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Top Tattoo",
				Position = new SerializableVector3(new Vector3(-130f, -2.9f, 67.4f)),
				Category = "Stores"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Benji Coleman",
				Position = new SerializableVector3(new Vector3(-67f, 1.6f, 88f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Molly Presley",
				Position = new SerializableVector3(new Vector3(-166f, -2.8f, 93f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Brad Crosby",
				Position = new SerializableVector3(new Vector3(2.6f, 1f, 83f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Jane Lucero",
				Position = new SerializableVector3(new Vector3(-27.4f, 0.9f, -82f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Wei Long",
				Position = new SerializableVector3(new Vector3(65f, 5f, -67f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Leo Rivers",
				Position = new SerializableVector3(new Vector3(149f, 1.7f, 65f)),
				Category = "Dealers"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Warehouse (Outside)",
				Position = new SerializableVector3(new Vector3(-42f, -1.5f, 43f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Warehouse (Inside)",
				Position = new SerializableVector3(new Vector3(-42f, -1f, 38f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Casino",
				Position = new SerializableVector3(new Vector3(22.8f, 2f, 89f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Construction site",
				Position = new SerializableVector3(new Vector3(-130f, -3f, 97f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Water Front",
				Position = new SerializableVector3(new Vector3(51.5f, 1f, 95f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Westville",
				Position = new SerializableVector3(new Vector3(-137.2f, -3f, 44f)),
				Category = "World"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "North Arcade Wall",
				Position = new SerializableVector3(new Vector3(-48f, -3f, 148f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Thompson Construction",
				Position = new SerializableVector3(new Vector3(-36f, 1f, 113f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Taco Ticklers Exterior Wall",
				Position = new SerializableVector3(new Vector3(-24f, 1f, 82f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Skate Park",
				Position = new SerializableVector3(new Vector3(-41f, 1f, 87f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Motel Office",
				Position = new SerializableVector3(new Vector3(-66f, 1f, 77f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Under West Bridge",
				Position = new SerializableVector3(new Vector3(-89f, -3f, 67f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Gas-Mart",
				Position = new SerializableVector3(new Vector3(-113f, -3f, 55f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Alleyway Behind Top Tattoo",
				Position = new SerializableVector3(new Vector3(-139f, -3f, 73f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Brown Apartment Block",
				Position = new SerializableVector3(new Vector3(-171f, -3f, 93f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Pawn Shop West Wall",
				Position = new SerializableVector3(new Vector3(-67f, 1f, 52f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Alleyway Behind The Laundromat",
				Position = new SerializableVector3(new Vector3(-34f, -2f, 25f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Alleyway Behind Slop Shop",
				Position = new SerializableVector3(new Vector3(-3f, 1f, 32f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Alleyway Behind Grocery Store",
				Position = new SerializableVector3(new Vector3(6f, 1f, 72f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind The Supermarket",
				Position = new SerializableVector3(new Vector3(25f, 1f, 69f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Crimson Canary",
				Position = new SerializableVector3(new Vector3(46f, 1f, 66f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Medical Practice",
				Position = new SerializableVector3(new Vector3(98f, 1f, 72f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Fire Station",
				Position = new SerializableVector3(new Vector3(114f, 1f, 38f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Bank",
				Position = new SerializableVector3(new Vector3(76f, 1f, 36f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Fountain",
				Position = new SerializableVector3(new Vector3(48f, 1f, 32f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Central Canal",
				Position = new SerializableVector3(new Vector3(26f, -1f, 13f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Auto Shops",
				Position = new SerializableVector3(new Vector3(2f, 1f, -4f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Grey Docks Building",
				Position = new SerializableVector3(new Vector3(-47f, -1.5f, -72f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Behind Randys Bait Tackle",
				Position = new SerializableVector3(new Vector3(-98f, -2f, -37f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Gazebo",
				Position = new SerializableVector3(new Vector3(93f, 5f, -129f)),
				Category = "Dead Drops"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Albert Hoover's Stash",
				Position = new SerializableVector3(new Vector3(-18f, -3f, 147f)),
				Category = "Supplier Stashes"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Shirley Watt's Stash",
				Position = new SerializableVector3(new Vector3(-66f, -1.5f, 32f)),
				Category = "Supplier Stashes"
			});
			allLocations.Add(new TeleportLocation
			{
				Name = "Salvador Moreno's Stash",
				Position = new SerializableVector3(new Vector3(148f, 1f, 35f)),
				Category = "Supplier Stashes"
			});
			foreach (TeleportLocation savedLocation in savedLocations)
			{
				savedLocation.Category = "Custom Teleports";
				allLocations.Add(savedLocation);
			}
		}

		public void AddActiveDealTeleport(TeleportLocation loc)
		{
			TeleportLocation loc2 = loc;
			allLocations.RemoveAll((TeleportLocation l) => l.Name == loc2.Name && l.Category == "Active Deals");
			allLocations.Add(loc2);
			MelonLogger.Msg("[Teleport Menu] Added Active Deal teleport: " + loc2.Name);
		}

		public void RemoveActiveDealTeleport(string dealName)
		{
			string dealName2 = dealName;
			allLocations.RemoveAll((TeleportLocation l) => l.Name == dealName2 && l.Category == "Active Deals");
			MelonLogger.Msg("[Teleport Menu] Removed Active Deal teleport: " + dealName2);
		}

		private static bool IsDealerThePlayer(object dealer)
		{
			if (dealer == null)
			{
				return true;
			}
			Type type = dealer.GetType();
			string[] array = new string[4] { "IsLocalPlayer", "isLocalPlayer", "IsPlayer", "isPlayer" };
			foreach (string name in array)
			{
				PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (property != null && property.PropertyType == typeof(bool))
				{
					return (bool)property.GetValue(dealer);
				}
				FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field != null && field.FieldType == typeof(bool))
				{
					return (bool)field.GetValue(dealer);
				}
			}
			PropertyInfo propertyInfo = type.GetProperty("Owner") ?? type.GetProperty("Player") ?? type.GetProperty("owner");
			if (propertyInfo != null)
			{
				object value = propertyInfo.GetValue(dealer);
				if (value != null && (Object)(object)Player.Local != (Object)null)
				{
					return value == Player.Local;
				}
			}
			return false;
		}

		private void SaveCurrentLocation()
		{
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			if (string.IsNullOrWhiteSpace(newLocationName))
			{
				newLocationName = GenerateLocationName();
			}
			TeleportLocation newLoc = new TeleportLocation
			{
				Name = newLocationName,
				Position = new SerializableVector3(((Component)Player.Local).transform.position),
				Category = "Custom Teleports"
			};
			savedLocations.Add(newLoc);
			SaveAllData();
			if (!allLocations.Any((TeleportLocation l) => l.Name == newLoc.Name && l.Category == newLoc.Category))
			{
				allLocations.Add(newLoc);
			}
			MelonLogger.Msg("Saved location: " + newLocationName);
			newLocationName = "";
			currentCategory = "Custom Teleports";
			currentMenu = MenuState.SubMenu;
		}

		private string GenerateLocationName()
		{
			int num = 1;
			string text = "Location_";
			string name = text + num;
			while (savedLocations.Any((TeleportLocation l) => l.Name == name))
			{
				num++;
				name = text + num;
			}
			return name;
		}

		private List<string> GetMenuCategoryOrder()
		{
			List<string> list = allLocations.Select((TeleportLocation l) => l.Category).Distinct().ToList();
			if (!list.Contains("Custom Teleports"))
			{
				list.Add("Custom Teleports");
			}
			return list;
		}

		private void DrawSettingsMenu(GUIStyle buttonStyle, GUIStyle labelStyle)
		{
			//IL_0016: 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_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: 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)
			//IL_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0367: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0459: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_056b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0606: Unknown result type (might be due to invalid IL or missing references)
			//IL_065d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0699: Unknown result type (might be due to invalid IL or missing references)
			//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0726: Unknown result type (might be due to invalid IL or missing references)
			//IL_075b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0795: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0830: Unknown result type (might be due to invalid IL or missing references)
			//IL_086d: Unknown result type (might be due to invalid IL or missing references)
			//IL_08cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0908: Unknown result type (might be due to invalid IL or missing references)
			//IL_0966: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_09dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a3b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a78: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ad6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b13: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b71: Unknown result type (might be due to invalid IL or missing references)
			//IL_0bae: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c0c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c46: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d7c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0db9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e17: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e54: Unknown result type (might be due to invalid IL or missing references)
			//IL_0eb2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ee5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f1a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f48: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f97: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fe2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_101f: Unknown result type (might be due to invalid IL or missing references)
			//IL_105c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1099: Unknown result type (might be due to invalid IL or missing references)
			//IL_10e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_1137: Unknown result type (might be due to invalid IL or missing references)
			//IL_1151: Unknown result type (might be due to invalid IL or missing references)
			//IL_1156: Unknown result type (might be due to invalid IL or missing references)
			float num = 20f;
			GUI.Label(new Rect(20f, num, 400f, 25f), $"Menu Toggle Key: {settings.menuKey}", labelStyle);
			if (GUI.Button(new Rect(275f, num, 100f, 25f), (waitingForKey == "menuKey") ? "Press Key..." : "Change", buttonStyle))
			{
				waitingForKey = "menuKey";
			}
			num += 35f;
			GUI.Label(new Rect(20f, num, 400f, 25f), $"Safety Teleport Key: {settings.safetyTeleportKey}", labelStyle);
			if (GUI.Button(new Rect(275f, num, 100f, 25f), (waitingForKey == "safetyTeleportKey") ? "Press Key..." : "Change", buttonStyle))
			{
				waitingForKey = "safetyTeleportKey";
			}
			num += 35f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 35f), "Reset Keys", buttonStyle))
			{
				settings.menuKey = (KeyCode)283;
				settings.safetyTeleportKey = (KeyCode)284;
				SaveAllData();
				MelonLogger.Msg("Keys reset.");
			}
			num += 45f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Title Settings", GetCenteredLabelStyle());
			num += 35f;
			float num2 = settings.titleTextColorR;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.titleTextColorR = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Red: {settings.titleTextColorR}", labelStyle);
			num += 25f;
			num2 = settings.titleTextColorG;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.titleTextColorG = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Green: {settings.titleTextColorG}", labelStyle);
			num += 25f;
			num2 = settings.titleTextColorB;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.titleTextColorB = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Blue: {settings.titleTextColorB}", labelStyle);
			num += 25f;
			settings.titleFontSize = (int)GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), (float)settings.titleFontSize, 10f, 30f);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Font Size: {settings.titleFontSize}", labelStyle);
			num += 35f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Text Settings", GetCenteredLabelStyle());
			num += 35f;
			num2 = settings.textColorR;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.textColorR = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Red: {settings.textColorR}", labelStyle);
			num += 25f;
			num2 = settings.textColorG;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.textColorG = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Green: {settings.textColorG}", labelStyle);
			num += 25f;
			num2 = settings.textColorB;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.textColorB = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Blue: {settings.textColorB}", labelStyle);
			num += 25f;
			settings.fontSize = (int)GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), (float)settings.fontSize, 10f, 30f);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Font Size: {settings.fontSize}", labelStyle);
			num += 25f;
			settings.bold = GUI.Toggle(new Rect(20f, num, 20f, 20f), settings.bold, "");
			GUI.Label(new Rect(40f, num - 2f, 200f, 25f), "Bold", labelStyle);
			num += 35f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Hover Color", GetCenteredLabelStyle());
			num += 35f;
			num2 = settings.buttonHoverR;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.buttonHoverR = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Red: {settings.buttonHoverR}", labelStyle);
			num += 25f;
			num2 = settings.buttonHoverG;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.buttonHoverG = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Green: {settings.buttonHoverG}", labelStyle);
			num += 25f;
			num2 = settings.buttonHoverB;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.buttonHoverB = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Blue: {settings.buttonHoverB}", labelStyle);
			num += 35f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Accent Color & Alpha", GetCenteredLabelStyle());
			num += 35f;
			num2 = settings.accentBarR;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.accentBarR = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Red: {settings.accentBarR}", labelStyle);
			num += 25f;
			num2 = settings.accentBarG;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.accentBarG = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Green: {settings.accentBarG}", labelStyle);
			num += 25f;
			num2 = settings.accentBarB;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.accentBarB = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Blue: {settings.accentBarB}", labelStyle);
			num += 25f;
			num2 = settings.accentBarA;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.accentBarA = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Alpha: {settings.accentBarA}", labelStyle);
			num += 35f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Background Settings", GetCenteredLabelStyle());
			num += 35f;
			num2 = settings.backgroundR;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.backgroundR = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Red: {settings.backgroundR}", labelStyle);
			num += 25f;
			num2 = settings.backgroundG;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.backgroundG = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Green: {settings.backgroundG}", labelStyle);
			num += 25f;
			num2 = settings.backgroundB;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.backgroundB = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Blue: {settings.backgroundB}", labelStyle);
			num += 25f;
			num2 = settings.backgroundA;
			num2 = GUI.HorizontalSlider(new Rect(20f, num, 200f, 20f), num2, 0f, 255f);
			settings.backgroundA = Mathf.RoundToInt(num2);
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Alpha: {settings.backgroundA}", labelStyle);
			num += 35f;
			GUI.Label(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 25f), "Teleport Cost Settings", GetCenteredLabelStyle());
			num += 35f;
			settings.chargeForTeleport = GUI.Toggle(new Rect(20f, num, 200f, 25f), settings.chargeForTeleport, "");
			GUI.Label(new Rect(40f, num - 2f, 200f, 25f), "Enable Teleport Cost", labelStyle);
			num += 30f;
			GUI.Label(new Rect(230f, num - 4f, 200f, 25f), $"Cost: ${settings.teleportCost}", labelStyle);
			settings.teleportCost = (int)GUI.HorizontalSlider(new Rect(20f, num, 200f, 25f), (float)settings.teleportCost, 0f, 500f);
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Save Settings", buttonStyle))
			{
				SaveAllData();
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Load Settings", buttonStyle))
			{
				LoadAllData();
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Reset Settings", buttonStyle))
			{
				ResetSettings();
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Export Teleports", buttonStyle))
			{
				string exportPath = Path.Combine(MelonEnvironment.UserDataDirectory, "TeleportMenu/ExportedTeleports.json");
				ExportTeleports(exportPath);
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Import Teleports", buttonStyle))
			{
				string importPath = Path.Combine(MelonEnvironment.UserDataDirectory, "TeleportMenu/ExportedTeleports.json");
				ImportTeleports(importPath);
			}
			num += 45f;
			if (GUI.Button(new Rect(x, num, ((Rect)(ref windowRect)).width - 40f, 40f), "Back", buttonStyle))
			{
				currentMenu = MenuState.Main;
				scrollPosition = Vector2.zero;
			}
		}

		private void ResetSettings()
		{
			settings = new ModSettings();
			MelonLogger.Msg("Settings reset to default.");
		}

		private void ExportTeleports(string exportPath)
		{
			try
			{
				string directoryName = Path.GetDirectoryName(exportPath);
				if (!Directory.Exists(directoryName))
				{
					Directory.CreateDirectory(directoryName);
				}
				string contents = JsonConvert.SerializeObject((object)savedLocations, (Formatting)1);
				File.WriteAllText(exportPath, contents);
				MelonLogger.Msg($"[Teleport Menu] Exported {savedLocations.Count} custom teleports to {exportPath}");
			}
			catch (Exception value)
			{
				MelonLogger.Error($"[Teleport Menu] Failed to export teleports: {value}");
			}
		}

		private void ImportTeleports(string importPath)
		{
			try
			{
				if (!File.Exists(importPath))
				{
					MelonLogger.Error("[Teleport Menu] Import file not found: " + importPath);
					return;
				}
				List<TeleportLocation> list = JsonConvert.DeserializeObject<List<TeleportLocation>>(File.ReadAllText(importPath)) ?? new List<TeleportLocation>();
				foreach (TeleportLocation loc in list)
				{
					loc.Category = "Custom Teleports";
					if (!savedLocations.Any((TeleportLocation l) => l.Name == loc.Name && l.Category == "Custom Teleports"))
					{
						savedLocations.Add(loc);
					}
					if (!allLocations.Any((TeleportLocation l) => l.Name == loc.Name && l.Category == "Custom Teleports"))
					{
						allLocations.Add(loc);
					}
					if (loc.IsFavorite && !favoriteLocations.Any((TeleportLocation f) => f.Name == loc.Name && f.Category == loc.Category))
					{
						favoriteLocations.Add(loc);
					}
				}
				SaveAllData();
				MelonLogger.Msg($"[Teleport Menu] Imported {list.Count} custom teleports from {importPath}");
			}
			catch (Exception value)
			{
				MelonLogger.Error($"[Teleport Menu] Failed to import teleports: {value}");
			}
		}

		private void SaveAllData()
		{
			try
			{
				string directoryName = Path.GetDirectoryName(combinedSavePath);
				if (!Directory.Exists(directoryName))
				{
					Directory.CreateDirectory(directoryName);
				}
				string contents = JsonConvert.SerializeObject((object)new CombinedData
				{
					SavedLocations = savedLocations,
					FavoriteLocations = favoriteLocations,
					SafetyTeleportPosition = safetyTeleportPosition,
					Settings = settings
				}, (Formatting)1);
				File.WriteAllText(combinedSavePath, contents);
				MelonLogger.Msg("All data saved.");
			}
			catch (Exception value)
			{
				MelonLogger.Error($"[Teleport Menu] Failed to data: {value}");
			}
		}

		private void LoadAllData()
		{
			//IL_00db: 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_0056: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (File.Exists(combinedSavePath))
				{
					CombinedData combinedData = JsonConvert.DeserializeObject<CombinedData>(File.ReadAllText(combinedSavePath));
					if (combinedData != null)
					{
						savedLocations = combinedData.SavedLocations ?? new List<TeleportLocation>();
						favoriteLocations = combinedData.FavoriteLocations ?? new List<TeleportLocation>();
						safetyTeleportPosition = combinedData.SafetyTeleportPosition ?? new SerializableVector3(Vector3.zero);
						settings = combinedData.Settings ?? new ModSettings();
					}
					MelonLogger.Msg("All data loaded.");
				}
				else
				{
					savedLocations = new List<TeleportLocation>();
					favoriteLocations = new List<TeleportLocation>();
					safetyTeleportPosition = new SerializableVector3(Vector3.zero);
					settings = new ModSettings();
					MelonLogger.Msg(" No data found, starting fresh.");
				}
			}
			catch (Exception value)
			{
				savedLocations = new List<TeleportLocation>();
				favoriteLocations = new List<TeleportLocation>();
				safetyTeleportPosition = new SerializableVector3(Vector3.zero);
				settings = new ModSettings();
				MelonLogger.Error($"[Teleport Menu] Failed to load data: {value}");
			}
		}
	}
}