From c3e01572094ec300f581efe55293d7071170cf1d Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Fri, 12 Nov 2021 21:11:48 +0100 Subject: [PATCH] Add name/psd/level to JoinGame- and JoinedGameS2C Two players can now connect to the same lobby --- src/Impostor.Api/Net/IClient.cs | 4 +++- .../Net/Inner/Objects/IInnerPlayerInfo.cs | 4 +++- .../Net/Messages/S2C/Message01JoinGameS2C.cs | 9 ++++++--- .../Net/Messages/S2C/Message07JoinedGameS2C.cs | 13 ++++++++----- .../Net/Inner/Objects/InnerPlayerInfo.cs | 4 +++- src/Impostor.Server/Net/State/Game.Outgoing.cs | 8 ++++---- src/Impostor.Server/Net/State/Game.cs | 4 ++-- 7 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/Impostor.Api/Net/IClient.cs b/src/Impostor.Api/Net/IClient.cs index 02cdee8..ba74bd4 100644 --- a/src/Impostor.Api/Net/IClient.cs +++ b/src/Impostor.Api/Net/IClient.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; using Impostor.Api.Innersloth; using Impostor.Api.Net.Messages; @@ -65,6 +65,8 @@ namespace Impostor.Api.Net /// IClientPlayer? Player { get; } + PlatformSpecificData PlatformSpecificData { get; } + ValueTask ReportCheatAsync(CheatContext context, string message); ValueTask HandleMessageAsync(IMessageReader message, MessageType messageType); diff --git a/src/Impostor.Api/Net/Inner/Objects/IInnerPlayerInfo.cs b/src/Impostor.Api/Net/Inner/Objects/IInnerPlayerInfo.cs index 6bf5c44..368f3a1 100644 --- a/src/Impostor.Api/Net/Inner/Objects/IInnerPlayerInfo.cs +++ b/src/Impostor.Api/Net/Inner/Objects/IInnerPlayerInfo.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Impostor.Api.Innersloth; using Impostor.Api.Innersloth.Customization; @@ -36,5 +36,7 @@ namespace Impostor.Api.Net.Inner.Objects IEnumerable Tasks { get; } DateTimeOffset LastMurder { get; } + + uint PlayerLevel { get; } } } diff --git a/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs index 74fdc40..6bd38c9 100644 --- a/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs +++ b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs @@ -1,11 +1,11 @@ -using System; +using System; using Impostor.Api.Innersloth; namespace Impostor.Api.Net.Messages.S2C { public class Message01JoinGameS2C { - public static void SerializeJoin(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId) + public static void SerializeJoin(IMessageWriter writer, bool clear, int gameCode, IClientPlayer player, int hostId) { if (clear) { @@ -14,8 +14,11 @@ namespace Impostor.Api.Net.Messages.S2C writer.StartMessage(MessageFlags.JoinGame); writer.Write(gameCode); - writer.Write(playerId); + writer.Write(player.Client.Id); writer.Write(hostId); + writer.Write(player.Client.Name); + player.Client.PlatformSpecificData.Serialize(writer); + writer.WritePacked(player.Character?.PlayerInfo.PlayerLevel ?? 1); writer.EndMessage(); } diff --git a/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs index 857fea1..151d945 100644 --- a/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs +++ b/src/Impostor.Api/Net/Messages/S2C/Message07JoinedGameS2C.cs @@ -1,10 +1,10 @@ -using System; +using System; namespace Impostor.Api.Net.Messages.S2C { public static class Message07JoinedGameS2C { - public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, int[] otherPlayerIds) + public static void Serialize(IMessageWriter writer, bool clear, int gameCode, int playerId, int hostId, IClientPlayer[] otherPlayers) { if (clear) { @@ -15,11 +15,14 @@ namespace Impostor.Api.Net.Messages.S2C writer.Write(gameCode); writer.Write(playerId); writer.Write(hostId); - writer.WritePacked(otherPlayerIds.Length); + writer.WritePacked(otherPlayers.Length); - foreach (var id in otherPlayerIds) + foreach (var ply in otherPlayers) { - writer.WritePacked(id); + writer.WritePacked(ply.Client.Id); + writer.Write(ply.Client.Name); + ply.Client.PlatformSpecificData.Serialize(writer); + writer.WritePacked(ply.Character?.PlayerInfo.PlayerLevel ?? 1); } writer.EndMessage(); diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerInfo.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerInfo.cs index 553ddda..7130f4b 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerInfo.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerInfo.cs @@ -44,6 +44,8 @@ namespace Impostor.Server.Net.Inner.Objects public DateTimeOffset LastMurder { get; set; } + public uint PlayerLevel { get; internal set; } + public bool CanMurder(IGame game, IDateTimeProvider dateTimeProvider) { if (!IsImpostor) @@ -70,7 +72,7 @@ namespace Impostor.Server.Net.Inner.Objects Outfits[key].Deserialize(reader); } - var PlayerLevel = reader.ReadPackedUInt32(); + PlayerLevel = reader.ReadPackedUInt32(); var flag = reader.ReadByte(); Disconnected = (flag & 1) != 0; diff --git a/src/Impostor.Server/Net/State/Game.Outgoing.cs b/src/Impostor.Server/Net/State/Game.Outgoing.cs index 30ebb72..8e5ab9b 100644 --- a/src/Impostor.Server/Net/State/Game.Outgoing.cs +++ b/src/Impostor.Server/Net/State/Game.Outgoing.cs @@ -1,4 +1,4 @@ -using System.Linq; +using System.Linq; using System.Threading.Tasks; using Impostor.Api.Innersloth; using Impostor.Api.Net; @@ -78,12 +78,12 @@ namespace Impostor.Server.Net.State private void WriteJoinedGameMessage(IMessageWriter message, bool clear, IClientPlayer player) { - var playerIds = _players + var players = _players .Where(x => x.Value != player) - .Select(x => x.Key) + .Select(x => x.Value) .ToArray(); - Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, playerIds); + Message07JoinedGameS2C.Serialize(message, clear, Code, player.Client.Id, HostId, players); } private void WriteAlterGameMessage(IMessageWriter message, bool clear, bool isPublic) diff --git a/src/Impostor.Server/Net/State/Game.cs b/src/Impostor.Server/Net/State/Game.cs index 2d28eea..3896b6a 100644 --- a/src/Impostor.Server/Net/State/Game.cs +++ b/src/Impostor.Server/Net/State/Game.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -114,7 +114,7 @@ namespace Impostor.Server.Net.State private ValueTask BroadcastJoinMessage(IMessageWriter message, bool clear, ClientPlayer player) { - Message01JoinGameS2C.SerializeJoin(message, clear, Code, player.Client.Id, HostId); + Message01JoinGameS2C.SerializeJoin(message, clear, Code, player, HostId); return SendToAllExceptAsync(message, player.Client.Id); } -- 2.39.5