diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 83f90ba97..655c1dcd5 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -2397,6 +2397,9 @@ namespace Barotrauma { GameMain.Client.Character = character; Controlled = character; + + GameMain.LightManager.LosEnabled = true; + character.memInput.Clear(); character.memPos.Clear(); character.memLocalPos.Clear(); diff --git a/Subsurface/Source/GameSession/GameSession.cs b/Subsurface/Source/GameSession/GameSession.cs index a78996803..acfcc27a8 100644 --- a/Subsurface/Source/GameSession/GameSession.cs +++ b/Subsurface/Source/GameSession/GameSession.cs @@ -170,7 +170,7 @@ namespace Barotrauma public void StartShift(Level level, bool reloadSub = true, bool loadSecondSub = false) { - GameMain.LightManager.LosEnabled = (GameMain.Server==null || GameMain.Server.CharacterInfo!=null); + GameMain.LightManager.LosEnabled = GameMain.NetworkMember == null || GameMain.NetworkMember.CharacterInfo != null; this.level = level; diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index d786d62ac..66ed3eb0f 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -577,6 +577,8 @@ namespace Barotrauma.Networking if (Character != null) Character.Remove(); Entity.Spawner.Clear(); + entityEventManager.Clear(); + LastSentEntityEventID = 0; endVoteTickBox.Selected = false; diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index fb919d7c9..13668474b 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -906,6 +906,12 @@ namespace Barotrauma.Networking List characterInfos = new List(); foreach (Client client in connectedClients) { + client.lastRecvEntitySpawnID = 0; + + client.entityEventLastSent.Clear(); + client.lastSentEntityEventID = 0; + client.lastRecvEntityEventID = 0; + if (client.characterInfo == null) { client.characterInfo = new CharacterInfo(Character.HumanConfigFile, client.name); diff --git a/Subsurface/Source/Networking/NetEntityEvent/ClientEntityEventManager.cs b/Subsurface/Source/Networking/NetEntityEvent/ClientEntityEventManager.cs index 7f0838d03..e82ece6ff 100644 --- a/Subsurface/Source/Networking/NetEntityEvent/ClientEntityEventManager.cs +++ b/Subsurface/Source/Networking/NetEntityEvent/ClientEntityEventManager.cs @@ -120,6 +120,8 @@ namespace Barotrauma.Networking { ID = 0; + lastReceivedID = 0; + events.Clear(); eventLastSent.Clear(); } diff --git a/Subsurface/Source/Networking/NetEntityEvent/NetEntityEventManager.cs b/Subsurface/Source/Networking/NetEntityEvent/NetEntityEventManager.cs index d3ec8f004..2a76f05f6 100644 --- a/Subsurface/Source/Networking/NetEntityEvent/NetEntityEventManager.cs +++ b/Subsurface/Source/Networking/NetEntityEvent/NetEntityEventManager.cs @@ -31,7 +31,6 @@ namespace Barotrauma.Networking //write into a temporary buffer so we can write the length before the actual data NetBuffer tempBuffer = new NetBuffer(); WriteEvent(tempBuffer, e, recipient); - tempBuffer.WritePadBits(); Debug.Assert( tempBuffer.LengthBytes < 256, @@ -40,6 +39,7 @@ namespace Barotrauma.Networking msg.Write((UInt16)e.Entity.ID); msg.Write((byte)tempBuffer.LengthBytes); msg.Write(tempBuffer); + msg.WritePadBits(); } }