Fix replay player disconnect handling
This commit is contained in:
committed by
Matthias Mailänder
parent
7cdc98c8fa
commit
111d9e4230
@@ -26,7 +26,6 @@ namespace OpenRA.Network
|
||||
|
||||
readonly Queue<Chunk> chunks = new Queue<Chunk>();
|
||||
readonly Queue<(int Frame, int SyncHash, ulong DefeatState)> sync = new Queue<(int, int, ulong)>();
|
||||
readonly Dictionary<int, int> lastClientsFrame = new Dictionary<int, int>();
|
||||
readonly int orderLatency;
|
||||
int ordersFrame;
|
||||
|
||||
@@ -58,9 +57,6 @@ namespace OpenRA.Network
|
||||
var frame = BitConverter.ToInt32(packet, 0);
|
||||
packets.Add((client, packet));
|
||||
|
||||
if (frame != int.MaxValue && (!lastClientsFrame.ContainsKey(client) || frame > lastClientsFrame[client]))
|
||||
lastClientsFrame[client] = frame;
|
||||
|
||||
if (packet.Length > 4 && (packet[4] == (byte)OrderType.Disconnect || packet[4] == (byte)OrderType.SyncHash))
|
||||
continue;
|
||||
|
||||
@@ -90,31 +86,6 @@ namespace OpenRA.Network
|
||||
TickCount = Math.Max(TickCount, frame);
|
||||
}
|
||||
}
|
||||
|
||||
var lastClientToDisconnect = lastClientsFrame.MaxBy(kvp => kvp.Value).Key;
|
||||
|
||||
// 2nd parse : replace all disconnect packets without frame with real
|
||||
// disconnect frame
|
||||
// NOTE: to modify/remove if a reconnect feature is set
|
||||
foreach (var tmpChunk in chunks)
|
||||
{
|
||||
foreach (var tmpPacketPair in tmpChunk.Packets)
|
||||
{
|
||||
var client = tmpPacketPair.ClientId;
|
||||
|
||||
// Don't replace the final disconnection packet - we still want this to end the replay.
|
||||
if (client == lastClientToDisconnect)
|
||||
continue;
|
||||
|
||||
var packet = tmpPacketPair.Packet;
|
||||
if (packet.Length == Order.DisconnectOrderLength + 4 && packet[4] == (byte)OrderType.Disconnect)
|
||||
{
|
||||
var lastClientFrame = lastClientsFrame[client];
|
||||
var lastFramePacket = BitConverter.GetBytes(lastClientFrame);
|
||||
Array.Copy(lastFramePacket, packet, lastFramePacket.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var gameSpeeds = Game.ModData.Manifest.Get<GameSpeeds>();
|
||||
|
||||
Reference in New Issue
Block a user