fix: Improve player retrieval logic and handle non-existent clients in PlayerEntryScript
This commit is contained in:
48
Main.cs
48
Main.cs
@@ -57,7 +57,21 @@ namespace KCM
|
|||||||
|
|
||||||
public static KCPlayer GetPlayerByClientID(ushort clientId)
|
public static KCPlayer GetPlayerByClientID(ushort clientId)
|
||||||
{
|
{
|
||||||
return kCPlayers[clientSteamIds[clientId]];
|
if (TryGetPlayerByClientID(clientId, out KCPlayer player))
|
||||||
|
{
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryGetPlayerByClientID(ushort clientId, out KCPlayer player)
|
||||||
|
{
|
||||||
|
player = null;
|
||||||
|
if (clientSteamIds.TryGetValue(clientId, out string steamId))
|
||||||
|
{
|
||||||
|
return kCPlayers.TryGetValue(steamId, out player);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Player GetPlayerByTeamID(int teamId) // Need to replace building / production types so that the correct player is used. IResourceStorage and IResourceProvider, and jobs
|
public static Player GetPlayerByTeamID(int teamId) // Need to replace building / production types so that the correct player is used. IResourceStorage and IResourceProvider, and jobs
|
||||||
@@ -166,11 +180,6 @@ namespace KCM
|
|||||||
lobbyManager = new GameObject("LobbyManager").AddComponent<LobbyManager>();
|
lobbyManager = new GameObject("LobbyManager").AddComponent<LobbyManager>();
|
||||||
DontDestroyOnLoad(lobbyManager);
|
DontDestroyOnLoad(lobbyManager);
|
||||||
|
|
||||||
//SteamFriends.InviteUserToGame(new CSteamID(76561198036307537), "test");
|
|
||||||
//SteamMatchmaking.lobby
|
|
||||||
|
|
||||||
//Main.helper.Log($"Timer duration for hazardpay {Player.inst.hazardPayWarmup.Duration}");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -187,10 +196,7 @@ namespace KCM
|
|||||||
FirstSibling = true,
|
FirstSibling = true,
|
||||||
OnClick = () =>
|
OnClick = () =>
|
||||||
{
|
{
|
||||||
//Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel").gameObject.SetActive(false);
|
|
||||||
SfxSystem.PlayUiSelect();
|
SfxSystem.PlayUiSelect();
|
||||||
|
|
||||||
//ServerBrowser.serverBrowserRef.SetActive(true);
|
|
||||||
TransitionTo(MenuState.ServerBrowser);
|
TransitionTo(MenuState.ServerBrowser);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -298,9 +304,6 @@ namespace KCM
|
|||||||
helper.Log("Preload start in main");
|
helper.Log("Preload start in main");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//MainMenuPatches.Patch();
|
|
||||||
Main.helper = helper;
|
Main.helper = helper;
|
||||||
helper.Log(helper.modPath);
|
helper.Log(helper.modPath);
|
||||||
|
|
||||||
@@ -1294,6 +1297,8 @@ namespace KCM
|
|||||||
{
|
{
|
||||||
Main.helper.Log("Attempting to load save from server");
|
Main.helper.Log("Attempting to load save from server");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
using (MemoryStream ms = new MemoryStream(saveBytes))
|
using (MemoryStream ms = new MemoryStream(saveBytes))
|
||||||
{
|
{
|
||||||
BinaryFormatter bf = new BinaryFormatter();
|
BinaryFormatter bf = new BinaryFormatter();
|
||||||
@@ -1301,7 +1306,26 @@ namespace KCM
|
|||||||
saveContainer = (MultiplayerSaveContainer)bf.Deserialize(ms);
|
saveContainer = (MultiplayerSaveContainer)bf.Deserialize(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Main.helper.Log("Deserialize complete, calling Unpack...");
|
||||||
|
saveContainer.Unpack(null);
|
||||||
|
Main.helper.Log("Unpack complete!");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Main.helper.Log("Error loading save from server");
|
||||||
|
Main.helper.Log(e.Message);
|
||||||
|
Main.helper.Log(e.StackTrace);
|
||||||
|
if (e.InnerException != null)
|
||||||
|
{
|
||||||
|
Main.helper.Log("Inner exception: " + e.InnerException.Message);
|
||||||
|
Main.helper.Log(e.InnerException.StackTrace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
memoryStreamHook = false;
|
memoryStreamHook = false;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,15 @@ namespace KCM.ServerLobby
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
KCPlayer player;
|
// First check if the client still exists
|
||||||
Main.kCPlayers.TryGetValue(Main.GetPlayerByClientID(Client).steamId, out player);
|
if (!Main.TryGetPlayerByClientID(Client, out KCPlayer player) || player == null)
|
||||||
|
{
|
||||||
|
// Client no longer exists, stop the repeating invoke and destroy this entry
|
||||||
|
CancelInvoke("SetValues");
|
||||||
|
Destroy(gameObject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
transform.Find("PlayerName").GetComponent<TextMeshProUGUI>().text = player.name;
|
transform.Find("PlayerName").GetComponent<TextMeshProUGUI>().text = player.name;
|
||||||
transform.Find("Ready").gameObject.SetActive(player.ready);
|
transform.Find("Ready").gameObject.SetActive(player.ready);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user