From: miniduikboot Date: Sat, 2 Apr 2022 08:41:37 +0000 (+0200) Subject: Do not add ProductUserId/Friendcode on <2.24 X-Git-Tag: v1.7.0~8^2~2 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=729368d777bf7d3209156209ad3a84b014187528;p=rhonda%2Fimpostor.git Do not add ProductUserId/Friendcode on <2.24 Because it is fine to add data to the end of messages the new fields could be added to Message 1 just fine, but because Message 7 contains a loop, we need to send a different message to old clients there. --- diff --git a/src/Impostor.Api/Net/IClient.cs b/src/Impostor.Api/Net/IClient.cs index b7a4467..ceb8f2d 100644 --- a/src/Impostor.Api/Net/IClient.cs +++ b/src/Impostor.Api/Net/IClient.cs @@ -65,6 +65,11 @@ namespace Impostor.Api.Net /// IClientPlayer? Player { get; } + /// + /// Gets the version of the game the client is using. + /// + int GameVersion { get; } + /// /// Gets platform specific data of the . /// diff --git a/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2CPre20220202.cs b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2CPre20220202.cs new file mode 100644 index 0000000..65faac4 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2CPre20220202.cs @@ -0,0 +1,36 @@ +using System; + +namespace Impostor.Api.Net.Messages.S2C +{ + public static class Message07JoinedGameS2CPre20220202 + { + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, IClientPlayer[] otherPlayers) + { + if (clear) + { + writer.Clear(MessageType.Reliable); + } + + writer.StartMessage(MessageFlags.JoinedGame); + writer.Write(gameCode); + writer.Write(playerId); + writer.Write(hostId); + writer.WritePacked(otherPlayers.Length); + + foreach (var ply in otherPlayers) + { + writer.WritePacked(ply.Client.Id); + writer.Write(ply.Client.Name); + ply.Client.PlatformSpecificData.Serialize(writer); + writer.WritePacked(ply.Character?.PlayerInfo.PlayerLevel ?? 1); + } + + writer.EndMessage(); + } + + public static void Deserialize(IMessageReader reader) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Impostor.Server/Net/State/Game.Outgoing.cs b/src/Impostor.Server/Net/State/Game.Outgoing.cs index 8e5ab9b..b7c808b 100644 --- a/src/Impostor.Server/Net/State/Game.Outgoing.cs +++ b/src/Impostor.Server/Net/State/Game.Outgoing.cs @@ -83,7 +83,15 @@ namespace Impostor.Server.Net.State .Select(x => x.Value) .ToArray(); - Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, players); + // TODO: clean up Pre20220202 when versions before it are no longer supported. + if (player.Client.GameVersion >= GameVersion.GetVersion(2022, 2, 2)) + { + Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, players); + } + else + { + Message07JoinedGameS2CPre20220202.Serialize(message, clear, Code, player.Client.Id, HostId, players); + } } private void WriteAlterGameMessage(IMessageWriter message, bool clear, bool isPublic)