crossplayFlags = (CrossplayFlags)reader.ReadInt32();
gameFilterOptions = GameFilterOptions.Deserialize(reader);
}
-
- public static void DeserializeModded(IMessageReader reader, out IGameOptions gameOptions, out CrossplayFlags crossplayFlags, out GameFilterOptions gameFilterOptions, out Guid modGuid)
- {
- Deserialize(reader, out gameOptions, out crossplayFlags, out gameFilterOptions);
- modGuid = new Guid(reader.ReadBytes(16).Span);
- }
}
}
--- /dev/null
+using System;
+using Impostor.Api.Innersloth;
+using Impostor.Api.Innersloth.GameOptions;
+
+namespace Impostor.Api.Net.Messages.C2S
+{
+ /// <summary>
+ /// Special serialization rules for AU MCI HostGame messages.
+ /// <see href="https://github.com/Innersloth-LLC/AmongUsModdingInformation?tab=readme-ov-file#all-client-mod-client-identification"/>
+ /// for more information.
+ /// </summary>
+ public static class Message25HostModdedGameC2S
+ {
+ public static void Serialize(IMessageWriter writer, IGameOptions gameOptions, CrossplayFlags crossplayFlags, GameFilterOptions gameFilterOptions)
+ {
+ Message00HostGameC2S.Serialize(writer, gameOptions, crossplayFlags, gameFilterOptions);
+ }
+
+ public static void Deserialize(IMessageReader reader, out IGameOptions gameOptions, out CrossplayFlags crossplayFlags, out GameFilterOptions gameFilterOptions, out Guid modGuid)
+ {
+ Message00HostGameC2S.Deserialize(reader, out gameOptions, out crossplayFlags, out gameFilterOptions);
+ modGuid = new Guid(reader.ReadBytes(16).Span);
+ }
+ }
+}
{
public static class Rpc23VotingComplete
{
+ // Pre 18.0 version
+ // TODO clean up when 17.4 and below are unsupported
+ public static void Serialize(IMessageWriter writer, byte[] states, byte playerId, bool tie)
+ {
+ writer.WriteBytesAndSize(states);
+ writer.Write(playerId);
+ writer.Write(tie);
+ }
+
public static void Serialize(IMessageWriter writer, byte[] states, byte playerId, bool tie, bool wasOverruled, ushort overrideId)
{
writer.WriteBytesAndSize(states);
writer.Write(overrideId);
}
- public static void Deserialize(IMessageReader reader, bool hasOverruleFields, out IMessageReader[] states, out byte playerId, out bool tie, out bool wasOverruled, out ushort overrideId)
+ public static void Deserialize(IMessageReader reader, out IMessageReader[] states, out byte playerId, out bool tie)
{
var length = reader.ReadPackedInt32();
states = new IMessageReader[length];
playerId = reader.ReadByte();
tie = reader.ReadBoolean();
+ }
- if (hasOverruleFields)
- {
- wasOverruled = reader.ReadBoolean();
- overrideId = reader.ReadUInt16();
- }
- else
+ public static void Deserialize(IMessageReader reader, out IMessageReader[] states, out byte playerId, out bool tie, out bool wasOverruled, out ushort overrideId)
+ {
+ var length = reader.ReadPackedInt32();
+ states = new IMessageReader[length];
+ for (var i = 0; i < length; i++)
{
- wasOverruled = false;
- overrideId = 0;
+ states[i] = reader.ReadMessage();
}
+
+ playerId = reader.ReadByte();
+ tie = reader.ReadBoolean();
+
+ wasOverruled = reader.ReadBoolean();
+ overrideId = reader.ReadUInt16();
}
}
}
if (flag == MessageFlags.HostModdedGame)
{
- Message00HostGameC2S.DeserializeModded(reader, out gameOptions, out _, out gameFilterOptions, out var parsedModGuid);
+ Message25HostModdedGameC2S.Deserialize(reader, out gameOptions, out _, out gameFilterOptions, out var parsedModGuid);
modGuid = parsedModGuid;
}
else
return false;
}
- var hasOverruleFields = sender.Client.GameVersion >= JudgeMinVersion;
- Rpc23VotingComplete.Deserialize(reader, hasOverruleFields, out var states, out var playerId, out var tie, out var wasOverruled, out var overrideId);
- foreach (var messageReader in states)
+ if (sender.Client.GameVersion >= JudgeMinVersion)
{
- messageReader.Dispose();
+ Rpc23VotingComplete.Deserialize(reader, out var states, out var playerId, out var tie, out var wasOverruled, out var overrideId);
+
+ foreach (var messageReader in states)
+ {
+ messageReader.Dispose();
+ }
+ }
+ else
+ {
+ Rpc23VotingComplete.Deserialize(reader, out var states, out var playerId, out var tie);
+
+ foreach (var messageReader in states)
+ {
+ messageReader.Dispose();
+ }
}
// This would be a nice place to implement an anti cheat.