Input syncing between clients, inventory sync bugfix, structure sync bugfix, settings button highlight bugfix, spectating bugfixes, in-game chatbox not visible when joining a server when the round is running

This commit is contained in:
Regalis
2015-11-14 00:09:56 +02:00
parent 24ed95cd68
commit ab7c39071c
15 changed files with 105 additions and 101 deletions

View File

@@ -248,7 +248,7 @@ namespace Barotrauma.Networking
if (gameStarted && disconnectedClients[i].Character!=null)
{
disconnectedClients[i].Character.Remove();
disconnectedClients[i].Character.Kill(CauseOfDeath.Damage, true);
disconnectedClients[i].Character = null;
}
@@ -609,7 +609,7 @@ namespace Barotrauma.Networking
{
if (NetworkEvent.Events.Count == 0) return;
List<Client> recipients = ConnectedClients.FindAll(c => c.Character != null);
List<Client> recipients = ConnectedClients.FindAll(c => c.Character != null || c.Spectating);
if (recipients.Count == 0) return;
@@ -784,6 +784,7 @@ namespace Barotrauma.Networking
var messageBox = new GUIMessageBox("The round has ended", endMessage, 400, 300);
Character.Controlled = null;
myCharacter = null;
GameMain.GameScreen.Cam.TargetPos = Vector2.Zero;
GameMain.LightManager.LosEnabled = false;

View File

@@ -32,6 +32,7 @@ namespace Barotrauma.Networking
public const float IdSendInterval = 0.2f;
public const float RerequestInterval = 0.2f;
public const int ResendAttempts = 8;
public const int ReliableMessageBufferSize = 100;
public const int ResendAttempts = 10;
}
}

View File

@@ -201,7 +201,7 @@ namespace Barotrauma.Networking
}
System.Diagnostics.Debug.WriteLine(e.ToString());
//System.Diagnostics.Debug.WriteLine(e.ToString());
object data;

View File

@@ -229,7 +229,7 @@ namespace Barotrauma.Networking
public virtual void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch)
{
if (!gameStarted && Screen.Selected != GameMain.GameScreen) return;
if (!gameStarted || Screen.Selected != GameMain.GameScreen) return;
inGameHUD.Draw(spriteBatch);
}

View File

@@ -97,14 +97,13 @@ namespace Barotrauma.Networking.ReliableMessages
message.Write((byte)PacketTypes.ReliableMessage);
message.Write(messageID);
int bufferSize=100;
if (messageBuffer.Count>bufferSize)
if (messageBuffer.Count > NetConfig.ReliableMessageBufferSize)
{
int end = messageCount-bufferSize;
int start = end - (messageBuffer.Count - bufferSize);
if (start<=0)
int end = messageCount - NetConfig.ReliableMessageBufferSize;
int start = end - (messageBuffer.Count - NetConfig.ReliableMessageBufferSize);
if (start<0)
{
int wrappedStart = start + ushort.MaxValue;
if (wrappedStart==0) wrappedStart = ushort.MaxValue;
@@ -119,7 +118,7 @@ namespace Barotrauma.Networking.ReliableMessages
}
}
for (ushort i = (ushort)Math.Max(start,1); i <= (ushort)Math.Max(end,1); i++)
for (ushort i = (ushort)Math.Max(start,0); i <= (ushort)Math.Max(end,0); i++)
{
messageBuffer.Remove(i);
if (i == ushort.MaxValue) break;
@@ -219,12 +218,11 @@ namespace Barotrauma.Networking.ReliableMessages
{
foreach (var message in missingMessages.Where(m => m.Value.ResendRequestsSent > NetConfig.ResendAttempts).ToList())
{
Debug.WriteLine("Max rerequest attempts reached on message "+message.Value.ID);
missingMessages.Remove(message.Key);
}
int bufferSize = 20;
while (missingMessageIds.Count>bufferSize)
while (missingMessageIds.Count>NetConfig.ReliableMessageBufferSize)
{
ushort id = missingMessageIds.Dequeue();
@@ -245,7 +243,8 @@ namespace Barotrauma.Networking.ReliableMessages
resendRequest.Write((byte)PacketTypes.ResendRequest);
resendRequest.Write(missingMessage.ID);
receiver.SendMessage(resendRequest, recipient, NetDeliveryMethod.Unreliable);
receiver.SendMessage(resendRequest, recipient,
missingMessage.ResendRequestsSent==0 ? NetDeliveryMethod.ReliableUnordered : NetDeliveryMethod.Unreliable);
missingMessage.ResendTimer = Math.Max(recipient.AverageRoundtripTime, NetConfig.RerequestInterval);