From 9c039e75749d859a2b89cbf83270cbb0ac3d270b Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 1 Aug 2017 21:29:55 +0300 Subject: [PATCH] Fixed exceptions during job assignment if a client or the host is controlling a character with no CharacterInfo (i.e. any non-human character) --- .../BarotraumaShared/Source/Networking/GameServer.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs b/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs index 6e264c446..1642b1663 100644 --- a/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs @@ -1876,7 +1876,10 @@ namespace Barotrauma.Networking else //taking control of a new character { newCharacter.ResetNetState(); - newCharacter.LastNetworkUpdateID = client.Character.LastNetworkUpdateID; + if (client.Character != null) + { + newCharacter.LastNetworkUpdateID = client.Character.LastNetworkUpdateID; + } newCharacter.IsRemotePlayer = true; newCharacter.Enabled = true; @@ -1936,12 +1939,12 @@ namespace Barotrauma.Networking { assignedClientCount[GameMain.NetLobbyScreen.JobPreferences[0]] = 1; } - else if (myCharacter != null && !myCharacter.IsDead) + else if (myCharacter?.Info?.Job != null && !myCharacter.IsDead) { assignedClientCount[myCharacter.Info.Job.Prefab] = 1; } } - else if (myCharacter != null && !myCharacter.IsDead && myCharacter.TeamID == teamID) + else if (myCharacter?.Info?.Job != null && !myCharacter.IsDead && myCharacter.TeamID == teamID) { assignedClientCount[myCharacter.Info.Job.Prefab]++; } @@ -1950,7 +1953,7 @@ namespace Barotrauma.Networking foreach (Client c in connectedClients) { if (c.TeamID != teamID || unassigned.Contains(c)) continue; - if (c.Character != null && !c.Character.IsDead) + if (c.Character?.Info?.Job != null && !c.Character.IsDead) { assignedClientCount[c.Character.Info.Job.Prefab]++; }