fix: Improve player retrieval logic and handle non-existent clients in PlayerEntryScript
This commit is contained in:
58
Main.cs
58
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,14 +1297,35 @@ namespace KCM
|
|||||||
{
|
{
|
||||||
Main.helper.Log("Attempting to load save from server");
|
Main.helper.Log("Attempting to load save from server");
|
||||||
|
|
||||||
using (MemoryStream ms = new MemoryStream(saveBytes))
|
try
|
||||||
{
|
{
|
||||||
BinaryFormatter bf = new BinaryFormatter();
|
using (MemoryStream ms = new MemoryStream(saveBytes))
|
||||||
bf.Binder = new MultiplayerSaveDeserializationBinder();
|
{
|
||||||
saveContainer = (MultiplayerSaveContainer)bf.Deserialize(ms);
|
BinaryFormatter bf = new BinaryFormatter();
|
||||||
|
bf.Binder = new MultiplayerSaveDeserializationBinder();
|
||||||
|
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,13 +37,20 @@ 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);
|
||||||
|
|
||||||
var bannerTexture = World.inst.liverySets[player.banner].banners;
|
var bannerTexture = World.inst.liverySets[player.banner].banners;
|
||||||
|
|
||||||
banner.texture = bannerTexture;
|
banner.texture = bannerTexture;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user