]> git.deb.at Git - rhonda/impostor.git/commitdiff
Check client version when parsing C2S handshake
authorminiduikboot <mini@duikbo.at>
Wed, 21 Jul 2021 19:53:22 +0000 (21:53 +0200)
committerminiduikboot <mini@duikbo.at>
Wed, 21 Jul 2021 19:53:22 +0000 (21:53 +0200)
2021.6.30 added new fields, which aren't present on old clients.

This commit makes sure players on old versions are disconnected properly
instead of the server erroring internally.

src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs

index 8b93792dbffdf8ce5a08274acd14cf0829871d8d..62ad375e132e422fb0a37d004d484a599ab50abc 100644 (file)
@@ -9,8 +9,20 @@ namespace Impostor.Api.Net.Messages.C2S
             clientVersion = reader.ReadInt32();
             name = reader.ReadString();
             lastNonceReceived = reader.ReadUInt32();
-            language = (Language)reader.ReadUInt32();
-            chatMode = (QuickChatModes)reader.ReadByte();
+
+            // Version 2021.6.30 (aka 50537300) is the first version that includes language and chat modes
+            // In case the game is older than that, stop reading here.
+            if (clientVersion >= 50537300)
+            {
+                language = (Language)reader.ReadUInt32();
+                chatMode = (QuickChatModes)reader.ReadByte();
+            }
+            else
+            {
+                // This is an old version of Among Us and will fail later in the handshake due to a version mismatch
+                language = Language.English;
+                chatMode = QuickChatModes.FreeChatOrQuickChat;
+            }
         }
     }
 }