From 0f7befa09ee73248898e8583d84aa8f33f9de208 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 16 Jan 2018 17:02:01 +0200 Subject: [PATCH] Fixed occasional invalid object header errors when attempting to send a status NetworkEvent for a character (easy way to reproduce was to kill multiple characters during the same frame with an explosion). --- .../Source/Characters/CharacterNetworking.cs | 6 +++++- .../BarotraumaClient/Source/Networking/GameClient.cs | 1 - .../Source/Characters/CharacterNetworking.cs | 10 ++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaClient/Source/Characters/CharacterNetworking.cs index 4c6641fbe..97bbaa253 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/CharacterNetworking.cs @@ -197,8 +197,12 @@ namespace Barotrauma IsRemotePlayer = ownerID > 0; } break; - } + case 2: + ReadStatus(msg); + break; + } + msg.ReadPadBits(); break; } } diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index 4f3694e04..47019be0a 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -1045,7 +1045,6 @@ namespace Barotrauma.Networking fl.Close(); throw new Exception("Error while reading update from server: please send us \"crashreport_object.bin\"!"); - break; } prevObjHeader = objHeader; prevBitPos = inc.Position; diff --git a/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs index 82bcb0cb9..3b923cb09 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/CharacterNetworking.cs @@ -379,8 +379,7 @@ namespace Barotrauma if (GameMain.Server == null) return; if (extraData != null) - { - + { switch ((NetEntityEvent.Type)extraData[0]) { case NetEntityEvent.Type.InventoryState: @@ -392,6 +391,13 @@ namespace Barotrauma Client owner = ((Client)extraData[1]); msg.Write(owner == null ? (byte)0 : owner.ID); break; + case NetEntityEvent.Type.Status: + msg.WriteRangedInteger(0, 2, 2); + WriteStatus(msg); + break; + default: + DebugConsole.ThrowError("Invalid NetworkEvent type for entity " + ToString() + " (" + (NetEntityEvent.Type)extraData[0] + ")"); + break; } msg.WritePadBits(); }