Release 1.10.6.0 - Autumn Update 2025 Hotfix 1

This commit is contained in:
Regalis11
2025-09-25 11:11:35 +03:00
parent bad999d5fc
commit b2d91cde7c
25 changed files with 435 additions and 226 deletions
@@ -4384,9 +4384,22 @@ namespace Barotrauma.Networking
moustacheIndex: netInfo.MoustacheIndex,
faceAttachmentIndex: netInfo.FaceAttachmentIndex);
sender.CharacterInfo.Head.SkinColor = netInfo.SkinColor;
sender.CharacterInfo.Head.HairColor = netInfo.HairColor;
sender.CharacterInfo.Head.FacialHairColor = netInfo.FacialHairColor;
sender.CharacterInfo.Head.SkinColor = validateColor(netInfo.SkinColor, "skin color", sender.CharacterInfo.SkinColors.Select(kvp => kvp.Color));
sender.CharacterInfo.Head.HairColor = validateColor(netInfo.HairColor, "hair color", sender.CharacterInfo.HairColors.Select(kvp => kvp.Color));
sender.CharacterInfo.Head.FacialHairColor = validateColor(netInfo.FacialHairColor, "facial hair color", sender.CharacterInfo.FacialHairColors.Select(kvp => kvp.Color));
Color validateColor(Color newColor, string colorName, IEnumerable<Color> supportedColors)
{
if (!supportedColors.Contains(newColor))
{
DebugConsole.AddWarning($"Client {sender.Name} attempted to set their {colorName} to an unsupported value ({newColor}).");
return supportedColors.First();
}
else
{
return newColor;
}
}
if (netInfo.JobVariants.Length > 0)
{
@@ -269,8 +269,27 @@ namespace Barotrauma.Networking
return;
}
var packet = INetSerializableStruct.Read<PeerPacketMessage>(inc);
callbacks.OnMessageReceived.Invoke(conn, packet.GetReadMessage(packetHeader.IsCompressed(), conn));
try
{
var packet = INetSerializableStruct.Read<PeerPacketMessage>(inc);
callbacks.OnMessageReceived.Invoke(conn, packet.GetReadMessage(packetHeader.IsCompressed(), conn));
}
catch (NetStructReadException)
{
//kick the client if we fail to parse their message
if (conn != OwnerConnection)
{
if (connectedClients.Find(c => c.Connection == conn) is { } connectedClient)
{
Disconnect(connectedClient.Connection, PeerDisconnectPacket.WithReason(DisconnectReason.MalformedData));
}
}
else
{
throw;
}
}
}
LidgrenConnection? FindConnection(NetConnection ligdrenConn)
@@ -73,11 +73,31 @@ namespace Barotrauma.Networking
try
{
foreach (var incBuf in ChildServerRelay.Read())
foreach (byte[] incBuf in ChildServerRelay.Read())
{
IReadMessage inc = new ReadOnlyMessage(incBuf, false, 0, incBuf.Length, OwnerConnection);
HandleDataMessage(inc);
P2PEndpoint? senderEndpoint = null;
try
{
IReadMessage inc = new ReadOnlyMessage(incBuf, false, 0, incBuf.Length, OwnerConnection);
HandleDataMessage(inc, out senderEndpoint);
}
catch (NetStructReadException)
{
//kick the client if we fail to parse their message
if (senderEndpoint != null && senderEndpoint != ownerEndpoint)
{
if (pendingClients.Find(c => c.Connection.Endpoint == senderEndpoint) is { } pendingClient)
{
RemovePendingClient(pendingClient, PeerDisconnectPacket.WithReason(DisconnectReason.MalformedData));
}
if (connectedClients.Find(c => c.Connection.Endpoint == senderEndpoint) is { } connectedClient)
{
Disconnect(connectedClient.Connection, PeerDisconnectPacket.WithReason(DisconnectReason.MalformedData));
}
break;
}
throw;
}
}
}
@@ -100,8 +120,9 @@ namespace Barotrauma.Networking
}
}
private void HandleDataMessage(IReadMessage inc)
private void HandleDataMessage(IReadMessage inc, out P2PEndpoint? senderEndPoint)
{
senderEndPoint = null;
if (!started) { return; }
var senderInfo = INetSerializableStruct.Read<P2POwnerToServerHeader>(inc);