Decompiled source of CustomNames v1.0.0

CustomNamesMod -1.0.0/BepInEx/plugins/CustomNamesMod/UCHCustomNames.dll

Decompiled 8 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("UCHCustomNames")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("UCHCustomNames")]
[assembly: AssemblyCopyright("Copyright ©  2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("0d1b656b-fd01-4b18-8792-d987bfceba21")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("com.customnames.uch", "UCH Custom Names", "1.0")]
public class CustomNames : BaseUnityPlugin
{
	private class LocalPlayerInfo
	{
		public int playerNumber;

		public string currentName;

		public string newName;

		public LobbyPlayer lobbyPlayer;

		public bool isInLobby;
	}

	private static CustomNames instance;

	private bool menuVisible;

	private Vector2 scrollPos = Vector2.zero;

	private Rect menuRect = new Rect((float)(Screen.width / 2 - 200), (float)(Screen.height / 2 - 250), 400f, 500f);

	private List<LocalPlayerInfo> localPlayers = new List<LocalPlayerInfo>();

	private int selectedPlayer;

	private string newName = "";

	private GUIStyle titleStyle;

	private GUIStyle labelStyle;

	private GUIStyle buttonStyle;

	private GUIStyle boxStyle;

	private bool stylesInitialized;

	private HashSet<int> autoAppliedPlayers = new HashSet<int>();

	private Texture2D cursorTexture;

	private Vector2 cursorHotspot = new Vector2(16f, 16f);

	private static void LogInfo(string message)
	{
		if ((Object)(object)instance != (Object)null)
		{
			((BaseUnityPlugin)instance).Logger.LogInfo((object)message);
		}
		else
		{
			Debug.Log((object)("[UCH Custom Names] " + message));
		}
	}

	private static void LogWarning(string message)
	{
		if ((Object)(object)instance != (Object)null)
		{
			((BaseUnityPlugin)instance).Logger.LogWarning((object)message);
		}
		else
		{
			Debug.LogWarning((object)("[UCH Custom Names] " + message));
		}
	}

	private static void LogError(string message)
	{
		if ((Object)(object)instance != (Object)null)
		{
			((BaseUnityPlugin)instance).Logger.LogError((object)message);
		}
		else
		{
			Debug.LogError((object)("[UCH Custom Names] " + message));
		}
	}

	private void Awake()
	{
		instance = this;
		LogInfo("========================================");
		LogInfo("UCH Custom Names - Mod Loaded!");
		LogInfo("Game version: " + Application.version);
		LogInfo("Unity version: " + Application.unityVersion);
		LogInfo("========================================");
		SceneManager.sceneLoaded += OnSceneLoaded;
		CreateStyles();
		CreateCursorTexture();
		LogInfo("Mod initialization complete. Press F5 to toggle menu.");
	}

	private void CreateCursorTexture()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//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_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
		//IL_011e: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0130: Unknown result type (might be due to invalid IL or missing references)
		int num = 32;
		cursorTexture = new Texture2D(num, num, (TextureFormat)5, false);
		Color val = default(Color);
		((Color)(ref val))..ctor(0f, 0f, 0f, 0f);
		Color white = Color.white;
		Color black = Color.black;
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cursorTexture.SetPixel(i, j, val);
			}
		}
		int num2 = num / 2;
		int num3 = 2;
		for (int k = 0; k < num; k++)
		{
			for (int l = -num3; l <= num3; l++)
			{
				int num4 = num2 + l;
				if (num4 >= 0 && num4 < num)
				{
					if (l == -num3 || l == num3 || k == 0 || k == num - 1)
					{
						cursorTexture.SetPixel(k, num4, black);
					}
					else
					{
						cursorTexture.SetPixel(k, num4, white);
					}
				}
			}
		}
		for (int m = 0; m < num; m++)
		{
			for (int n = -num3; n <= num3; n++)
			{
				int num5 = num2 + n;
				if (num5 >= 0 && num5 < num)
				{
					if (n == -num3 || n == num3 || m == 0 || m == num - 1)
					{
						cursorTexture.SetPixel(num5, m, black);
					}
					else
					{
						cursorTexture.SetPixel(num5, m, white);
					}
				}
			}
		}
		cursorTexture.Apply();
	}

	private void CreateStyles()
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: 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_0030: 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_0045: Expected O, but got Unknown
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		//IL_005d: 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_0072: Expected O, but got Unknown
		//IL_007d: 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_008a: Unknown result type (might be due to invalid IL or missing references)
		//IL_008f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0099: Expected O, but got Unknown
		//IL_0099: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00aa: Expected O, but got Unknown
		//IL_00af: Expected O, but got Unknown
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d2: Expected O, but got Unknown
		//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
		//IL_00db: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e5: Expected O, but got Unknown
		//IL_00ea: Expected O, but got Unknown
		try
		{
			LogInfo("Creating GUI styles...");
			GUIStyle val = new GUIStyle(GUI.skin.label)
			{
				fontSize = 24,
				fontStyle = (FontStyle)1,
				alignment = (TextAnchor)4
			};
			val.normal.textColor = Color.white;
			titleStyle = val;
			GUIStyle val2 = new GUIStyle(GUI.skin.label)
			{
				fontSize = 14
			};
			val2.normal.textColor = Color.white;
			labelStyle = val2;
			buttonStyle = new GUIStyle(GUI.skin.button)
			{
				fontSize = 14,
				margin = new RectOffset(5, 5, 5, 5),
				padding = new RectOffset(10, 10, 5, 5)
			};
			boxStyle = new GUIStyle(GUI.skin.box)
			{
				margin = new RectOffset(10, 10, 10, 10),
				padding = new RectOffset(10, 10, 10, 10)
			};
			stylesInitialized = true;
			LogInfo("GUI styles created successfully.");
		}
		catch (Exception ex)
		{
			LogError("Error creating GUI styles: " + ex.Message);
		}
	}

	private void OnDestroy()
	{
		SceneManager.sceneLoaded -= OnSceneLoaded;
		LogInfo("Mod destroyed.");
	}

	private void Update()
	{
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		if (Input.GetKeyDown((KeyCode)286))
		{
			LogInfo("F5 key pressed!");
			menuVisible = !menuVisible;
			LogInfo($"Menu visible: {menuVisible}");
			if (menuVisible)
			{
				RefreshLocalPlayers();
				LogInfo($"Players found after refresh: {localPlayers.Count}");
				if (localPlayers.Count > 0)
				{
					newName = localPlayers[selectedPlayer].newName;
					LogInfo($"Selected player: {selectedPlayer}, Name: {newName}");
				}
			}
		}
		if (menuVisible && localPlayers.Count > 0)
		{
			if (Input.GetKeyDown((KeyCode)273))
			{
				selectedPlayer = Mathf.Max(0, selectedPlayer - 1);
				if (selectedPlayer < localPlayers.Count)
				{
					newName = localPlayers[selectedPlayer].newName;
					LogInfo($"Up arrow - Selected player: {selectedPlayer}");
				}
			}
			else if (Input.GetKeyDown((KeyCode)274))
			{
				selectedPlayer = Mathf.Min(localPlayers.Count - 1, selectedPlayer + 1);
				if (selectedPlayer < localPlayers.Count)
				{
					newName = localPlayers[selectedPlayer].newName;
					LogInfo($"Down arrow - Selected player: {selectedPlayer}");
				}
			}
		}
		if (IsInLobby())
		{
			LobbyPlayer[] array = Object.FindObjectsOfType<LobbyPlayer>();
			foreach (LobbyPlayer val in array)
			{
				if (!((Object)(object)val != (Object)null) || !val.IsLocalPlayer)
				{
					continue;
				}
				int networkNumber = val.networkNumber;
				if (autoAppliedPlayers.Contains(networkNumber))
				{
					continue;
				}
				string savedName = GetSavedName(networkNumber);
				if (val.playerName != savedName)
				{
					LogInfo($"AUTO-APPLY: Player {networkNumber} has name '{val.playerName}', applying saved name '{savedName}'");
					try
					{
						val.CallCmdSetPlayerInfo(savedName, val.NetworkSkillMean, val.NetworkSkillStdDev, val.NetworkIsHost, val.NetworkGSID, val.Networkplatform);
						LogInfo($"SUCCESS: Auto-applied name '{savedName}' to Player {networkNumber}");
					}
					catch (Exception ex)
					{
						LogError($"Error auto-applying name to Player {networkNumber}: {ex.Message}");
					}
				}
				else
				{
					LogInfo($"AUTO-APPLY: Player {networkNumber} already has correct name '{savedName}'");
				}
				autoAppliedPlayers.Add(networkNumber);
			}
		}
		else if (autoAppliedPlayers.Count > 0)
		{
			autoAppliedPlayers.Clear();
			LogInfo("Left lobby, cleared auto-apply tracking.");
		}
	}

	private void OnGUI()
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0045: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Expected O, but got Unknown
		//IL_0106: Unknown result type (might be due to invalid IL or missing references)
		//IL_010b: Unknown result type (might be due to invalid IL or missing references)
		if (menuVisible)
		{
			Vector3 mousePosition = Input.mousePosition;
			float num = (float)Screen.height - mousePosition.y;
			GUI.DrawTexture(new Rect(mousePosition.x - cursorHotspot.x, num - cursorHotspot.y, 32f, 32f), (Texture)(object)cursorTexture);
		}
		if (!menuVisible)
		{
			return;
		}
		try
		{
			if (Time.frameCount % 60 == 0)
			{
				LogInfo($"OnGUI - Menu is visible. Frame: {Time.frameCount}");
			}
			GUI.color = new Color(0f, 0f, 0f, 0.7f);
			GUI.DrawTexture(new Rect(0f, 0f, (float)Screen.width, (float)Screen.height), (Texture)(object)Texture2D.whiteTexture);
			GUI.color = Color.white;
			if (!stylesInitialized)
			{
				LogWarning("Styles not initialized, recreating...");
				CreateStyles();
			}
			menuRect = GUI.Window(1, menuRect, new WindowFunction(DrawMenu), "", boxStyle);
		}
		catch (Exception ex)
		{
			LogError("Error in OnGUI: " + ex.Message + "\n" + ex.StackTrace);
			menuVisible = false;
			LogInfo("Menu disabled due to error.");
		}
	}

	private void DrawMenu(int windowID)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0154: Unknown result type (might be due to invalid IL or missing references)
		//IL_014d: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_024b: Unknown result type (might be due to invalid IL or missing references)
		try
		{
			GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
			GUILayout.Label("CUSTOM NAMES", titleStyle, Array.Empty<GUILayoutOption>());
			GUILayout.Space(5f);
			bool flag = IsInLobby();
			GUI.color = (flag ? Color.green : Color.yellow);
			GUILayout.Label("Status: " + (flag ? "IN LOBBY ✅" : "NOT IN LOBBY ⚠\ufe0f"), labelStyle, Array.Empty<GUILayoutOption>());
			GUI.color = Color.white;
			GUILayout.Label($"Players: {localPlayers.Count}", labelStyle, Array.Empty<GUILayoutOption>());
			Scene activeScene = SceneManager.GetActiveScene();
			string name = ((Scene)(ref activeScene)).name;
			GUILayout.Label("Scene: " + name, labelStyle, Array.Empty<GUILayoutOption>());
			GUILayout.Space(5f);
			scrollPos = GUILayout.BeginScrollView(scrollPos, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(150f) });
			if (localPlayers.Count == 0)
			{
				GUILayout.Label("No players found. Join a game or press REFRESH.", labelStyle, Array.Empty<GUILayoutOption>());
			}
			else
			{
				for (int i = 0; i < localPlayers.Count; i++)
				{
					LocalPlayerInfo localPlayerInfo = localPlayers[i];
					bool flag2 = i == selectedPlayer;
					GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
					GUI.color = (flag2 ? Color.cyan : Color.white);
					if (GUILayout.Button($"P{localPlayerInfo.playerNumber}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(40f) }))
					{
						selectedPlayer = i;
						newName = localPlayerInfo.newName;
						LogInfo($"Selected player {i}: P{localPlayerInfo.playerNumber} - {localPlayerInfo.currentName}");
					}
					GUI.color = Color.white;
					string obj = (localPlayerInfo.isInLobby ? "●" : "○");
					GUI.color = (localPlayerInfo.isInLobby ? Color.green : Color.gray);
					GUILayout.Label(obj, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(20f) });
					GUI.color = (flag2 ? Color.cyan : Color.white);
					GUILayout.Label(localPlayerInfo.currentName, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) });
					GUI.color = Color.white;
					GUILayout.EndHorizontal();
				}
			}
			GUILayout.EndScrollView();
			GUILayout.Space(10f);
			if (selectedPlayer < localPlayers.Count && localPlayers.Count > 0)
			{
				GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
				GUILayout.Label("New Name:", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) });
				newName = GUILayout.TextField(newName, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.ExpandWidth(true) });
				GUILayout.EndHorizontal();
				GUILayout.Space(5f);
				GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
				if (GUILayout.Button("APPLY", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(30f) }))
				{
					LogInfo("APPLY button clicked");
					ApplySelectedName();
				}
				if (GUILayout.Button("SAVE", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(30f) }))
				{
					LogInfo("SAVE button clicked");
					SaveCurrentName();
				}
				if (GUILayout.Button("RESET ALL", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(30f) }))
				{
					LogInfo("RESET ALL button clicked");
					ResetAllNames();
				}
				if (GUILayout.Button("REFRESH", buttonStyle, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(30f) }))
				{
					LogInfo("REFRESH button clicked");
					RefreshLocalPlayers();
				}
				GUILayout.EndHorizontal();
			}
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("CLOSE (F5)", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(30f) }))
			{
				LogInfo("CLOSE button clicked");
				menuVisible = false;
			}
			GUILayout.EndVertical();
			GUI.DragWindow();
		}
		catch (Exception ex)
		{
			LogError("Error in DrawMenu: " + ex.Message + "\n" + ex.StackTrace);
		}
	}

	private string GetSavedName(int playerNumber)
	{
		return PlayerPrefs.GetString("UCH_Name_" + playerNumber, $"Player {playerNumber}");
	}

	private void SetSavedName(int playerNumber, string name)
	{
		LogInfo($"SetSavedName({playerNumber}) = '{name}'");
		PlayerPrefs.SetString("UCH_Name_" + playerNumber, name);
		PlayerPrefs.Save();
		LogInfo("PlayerPrefs saved.");
	}

	private void RefreshLocalPlayers()
	{
		LogInfo("=== REFRESH LOCAL PLAYERS ===");
		localPlayers.Clear();
		try
		{
			LobbyPlayer[] array = Object.FindObjectsOfType<LobbyPlayer>();
			LogInfo($"Total LobbyPlayer found: {array.Length}");
			List<LobbyPlayer> list = (from p in array
				where (Object)(object)p != (Object)null && p.IsLocalPlayer
				orderby p.networkNumber
				select p).ToList();
			LogInfo($"Local players found: {list.Count}");
			foreach (LobbyPlayer item in list)
			{
				LogInfo($"  - Player {item.networkNumber}: '{item.playerName}' (IsLocalPlayer: {item.IsLocalPlayer})");
				LocalPlayerInfo localPlayerInfo = new LocalPlayerInfo
				{
					playerNumber = item.networkNumber,
					currentName = item.playerName,
					newName = GetSavedName(item.networkNumber),
					lobbyPlayer = item,
					isInLobby = IsInLobby()
				};
				localPlayers.Add(localPlayerInfo);
				LogInfo($"    Added to list: P{localPlayerInfo.playerNumber} - '{localPlayerInfo.currentName}' -> new: '{localPlayerInfo.newName}'");
			}
			if (localPlayers.Count == 0)
			{
				LogInfo("No local players found. Checking saved names...");
				for (int num = 1; num <= 10; num++)
				{
					string savedName = GetSavedName(num);
					if (savedName != $"Player {num}")
					{
						LogInfo($"  Saved player {num}: '{savedName}'");
						localPlayers.Add(new LocalPlayerInfo
						{
							playerNumber = num,
							currentName = savedName,
							newName = savedName,
							lobbyPlayer = null,
							isInLobby = false
						});
					}
				}
				if (localPlayers.Count == 0)
				{
					LogInfo("No saved names found. Creating default player.");
					localPlayers.Add(new LocalPlayerInfo
					{
						playerNumber = 1,
						currentName = "Player 1",
						newName = "Player 1",
						lobbyPlayer = null,
						isInLobby = false
					});
				}
			}
			if (selectedPlayer >= localPlayers.Count)
			{
				selectedPlayer = 0;
			}
			if (localPlayers.Count > 0)
			{
				newName = localPlayers[selectedPlayer].newName;
			}
			LogInfo($"Refresh complete. Total players in list: {localPlayers.Count}");
			LogInfo("=====================================");
		}
		catch (Exception ex)
		{
			LogError("Error in RefreshLocalPlayers: " + ex.Message + "\n" + ex.StackTrace);
		}
	}

	private void ApplySelectedName()
	{
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		LogInfo("=== APPLY SELECTED NAME ===");
		if (selectedPlayer >= localPlayers.Count)
		{
			LogWarning($"Selected player {selectedPlayer} out of range (count: {localPlayers.Count})");
			return;
		}
		LocalPlayerInfo localPlayerInfo = localPlayers[selectedPlayer];
		LogInfo($"Applying name to Player {localPlayerInfo.playerNumber}: '{newName}'");
		if (string.IsNullOrEmpty(newName))
		{
			LogWarning("Name is empty, ignoring.");
			return;
		}
		if (localPlayerInfo.isInLobby && (Object)(object)localPlayerInfo.lobbyPlayer != (Object)null)
		{
			LogInfo("Player is in lobby, updating via network...");
			try
			{
				localPlayerInfo.lobbyPlayer.CallCmdSetPlayerInfo(newName, localPlayerInfo.lobbyPlayer.NetworkSkillMean, localPlayerInfo.lobbyPlayer.NetworkSkillStdDev, localPlayerInfo.lobbyPlayer.NetworkIsHost, localPlayerInfo.lobbyPlayer.NetworkGSID, localPlayerInfo.lobbyPlayer.Networkplatform);
				localPlayerInfo.currentName = newName;
				localPlayerInfo.newName = newName;
				SetSavedName(localPlayerInfo.playerNumber, newName);
				autoAppliedPlayers.Add(localPlayerInfo.playerNumber);
				LogInfo($"SUCCESS: Name updated for Player {localPlayerInfo.playerNumber}: {newName}");
			}
			catch (Exception ex)
			{
				LogError("Error updating name via network: " + ex.Message);
			}
		}
		else
		{
			LogInfo("Player is offline or not in lobby, saving locally.");
			SetSavedName(localPlayerInfo.playerNumber, newName);
			localPlayerInfo.currentName = newName;
			localPlayerInfo.newName = newName;
			LogInfo($"SUCCESS: Name saved for offline Player {localPlayerInfo.playerNumber}: {newName}");
		}
		RefreshLocalPlayers();
		LogInfo("=================================");
	}

	private void SaveCurrentName()
	{
		LogInfo("=== SAVE CURRENT NAME ===");
		if (selectedPlayer >= localPlayers.Count)
		{
			LogWarning($"Selected player {selectedPlayer} out of range (count: {localPlayers.Count})");
			return;
		}
		LocalPlayerInfo localPlayerInfo = localPlayers[selectedPlayer];
		LogInfo($"Saving name for Player {localPlayerInfo.playerNumber}: '{newName}'");
		if (string.IsNullOrEmpty(newName))
		{
			LogWarning("Name is empty, ignoring.");
			return;
		}
		SetSavedName(localPlayerInfo.playerNumber, newName);
		localPlayerInfo.currentName = newName;
		localPlayerInfo.newName = newName;
		LogInfo("SUCCESS: Name saved: " + newName);
		RefreshLocalPlayers();
		LogInfo("=================================");
	}

	private void ResetAllNames()
	{
		//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
		LogInfo("=== RESET ALL NAMES ===");
		foreach (LocalPlayerInfo localPlayer in localPlayers)
		{
			string text = $"Player {localPlayer.playerNumber}";
			LogInfo($"Resetting Player {localPlayer.playerNumber}: '{localPlayer.currentName}' -> '{text}'");
			SetSavedName(localPlayer.playerNumber, text);
			localPlayer.currentName = text;
			localPlayer.newName = text;
			autoAppliedPlayers.Remove(localPlayer.playerNumber);
			if (localPlayer.isInLobby && (Object)(object)localPlayer.lobbyPlayer != (Object)null)
			{
				try
				{
					LogInfo($"  Updating Player {localPlayer.playerNumber} via network...");
					localPlayer.lobbyPlayer.CallCmdSetPlayerInfo(text, localPlayer.lobbyPlayer.NetworkSkillMean, localPlayer.lobbyPlayer.NetworkSkillStdDev, localPlayer.lobbyPlayer.NetworkIsHost, localPlayer.lobbyPlayer.NetworkGSID, localPlayer.lobbyPlayer.Networkplatform);
				}
				catch (Exception ex)
				{
					LogError($"  Error updating Player {localPlayer.playerNumber}: {ex.Message}");
				}
			}
		}
		RefreshLocalPlayers();
		LogInfo("All names reset to default.");
		LogInfo("=================================");
	}

	private bool IsInLobby()
	{
		//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)
		try
		{
			Scene activeScene = SceneManager.GetActiveScene();
			bool num = ((Scene)(ref activeScene)).name == "TreeHouseLobby";
			bool flag = (Object)(object)LobbyManager.instance != (Object)null;
			bool flag2 = flag && LobbyManager.instance.IsInOnlineGame;
			return num && flag && flag2;
		}
		catch
		{
			return false;
		}
	}

	private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		LogInfo("=== SCENE LOADED ===");
		LogInfo($"Scene: '{((Scene)(ref scene)).name}' (buildIndex: {((Scene)(ref scene)).buildIndex})");
		LogInfo($"Load mode: {mode}");
		if (((Scene)(ref scene)).name == "TreeHouseLobby")
		{
			LogInfo("Entered lobby! Refreshing players...");
			autoAppliedPlayers.Clear();
			RefreshLocalPlayers();
		}
		else
		{
			LogInfo("Scene '" + ((Scene)(ref scene)).name + "' is not the lobby. No action taken.");
		}
		LogInfo("====================");
	}

	public static void ChangePlayerName(int playerNumber, string newName)
	{
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)instance == (Object)null)
		{
			LogWarning("Instance is null, cannot change name.");
			return;
		}
		LogInfo($"Static call: ChangePlayerName({playerNumber}, '{newName}')");
		LobbyPlayer[] array = Object.FindObjectsOfType<LobbyPlayer>();
		foreach (LobbyPlayer val in array)
		{
			if (!((Object)(object)val != (Object)null) || !val.IsLocalPlayer || val.networkNumber != playerNumber)
			{
				continue;
			}
			LogInfo($"Found local player {playerNumber}, applying name...");
			try
			{
				val.CallCmdSetPlayerInfo(newName, val.NetworkSkillMean, val.NetworkSkillStdDev, val.NetworkIsHost, val.NetworkGSID, val.Networkplatform);
				if ((Object)(object)instance != (Object)null)
				{
					instance.SetSavedName(playerNumber, newName);
					instance.autoAppliedPlayers.Add(playerNumber);
				}
				LogInfo("Name changed successfully to: " + newName);
				break;
			}
			catch (Exception ex)
			{
				LogError("Error in static ChangePlayerName: " + ex.Message);
				break;
			}
		}
	}
}