diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index d9d8ec9ec..039a1709c 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -1812,12 +1812,13 @@ namespace Barotrauma break; case NetEntityEvent.Type.ApplyStatusEffect: //no further data needed, the server applies the effect - //on the character of the client who sent the message + //on the character of the client who sent the message break; case NetEntityEvent.Type.ChangeProperty: WritePropertyChange(msg, extraData); break; } + msg.WritePadBits(); } public void ServerRead(ClientNetObject type, NetBuffer msg, Client c) diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index aadc2134c..8688f9273 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -61,6 +61,11 @@ namespace Barotrauma.Networking get { return entityEventManager; } } + public TimeSpan UpdateInterval + { + get { return updateInterval; } + } + public GameServer(string name, int port, bool isPublic = false, string password = "", bool attemptUPnP = false, int maxPlayers = 10) { name = name.Replace(":", ""); diff --git a/Subsurface/Source/Networking/NetEntityEvent/ServerEntityEventManager.cs b/Subsurface/Source/Networking/NetEntityEvent/ServerEntityEventManager.cs index 3314bd7e9..f497600db 100644 --- a/Subsurface/Source/Networking/NetEntityEvent/ServerEntityEventManager.cs +++ b/Subsurface/Source/Networking/NetEntityEvent/ServerEntityEventManager.cs @@ -2,8 +2,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Barotrauma.Networking { @@ -252,9 +250,12 @@ namespace Barotrauma.Networking { if (uniqueEvents.Count > 0) { + double midRoundSyncTimeOut = uniqueEvents.Count / MaxEventsPerWrite * server.UpdateInterval.TotalSeconds; + midRoundSyncTimeOut = Math.Max(5.0f, midRoundSyncTimeOut * 1.5f); + client.UnreceivedEntityEventCount = (UInt16)uniqueEvents.Count; client.NeedsMidRoundSync = true; - client.MidRoundSyncTimeOut = Timing.TotalTime + 10.0; + client.MidRoundSyncTimeOut = Timing.TotalTime + midRoundSyncTimeOut; } else { @@ -293,11 +294,13 @@ namespace Barotrauma.Networking msg.Position += msgLength * 8; } else - { + { + DebugConsole.NewMessage("received msg " + thisEventID, Microsoft.Xna.Framework.Color.Green); + UInt16 characterStateID = msg.ReadUInt16(); NetBuffer buffer = new NetBuffer(); - buffer.Write(msg.ReadBytes(msgLength-2)); + buffer.Write(msg.ReadBytes(msgLength - 2)); BufferEvent(new BufferedEvent(sender, sender.Character, characterStateID, entity, buffer)); sender.lastSentEntityEventID++;