From b6fe79cc8b3593912c71ab83945bad3cf5b5a32d Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Mon, 22 Nov 2021 23:04:56 +0100 Subject: [PATCH] Add RPC's for CheckProtect and ProtectPlayer --- .../Net/Messages/Rpcs/Rpc45ProtectPlayer.cs | 21 +++++++++++++++++ .../Net/Messages/Rpcs/Rpc48CheckProtect.cs | 18 +++++++++++++++ .../Net/Inner/Objects/InnerPlayerControl.cs | 23 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/Impostor.Api/Net/Messages/Rpcs/Rpc45ProtectPlayer.cs create mode 100644 src/Impostor.Api/Net/Messages/Rpcs/Rpc48CheckProtect.cs diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc45ProtectPlayer.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc45ProtectPlayer.cs new file mode 100644 index 0000000..91d3fd1 --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc45ProtectPlayer.cs @@ -0,0 +1,21 @@ +using Impostor.Api.Games; +using Impostor.Api.Innersloth.Customization; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc45ProtectPlayer + { + public static void Serialize(IMessageWriter writer, IInnerPlayerControl playerControl, ColorType color) + { + writer.Write(playerControl.NetId); + writer.Write((byte)color); + } + + public static void Deserialize(IMessageReader reader, IGame game, out IInnerPlayerControl? playerControl, out ColorType color) + { + playerControl = reader.ReadNetObject(game); + color = (ColorType)reader.ReadByte(); + } + } +} diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc48CheckProtect.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc48CheckProtect.cs new file mode 100644 index 0000000..5b5408f --- /dev/null +++ b/src/Impostor.Api/Net/Messages/Rpcs/Rpc48CheckProtect.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Games; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Net.Messages.Rpcs +{ + public static class Rpc48CheckProtect + { + public static void Serialize(IMessageWriter writer, IInnerPlayerControl playerControl) + { + writer.Write(playerControl.NetId); + } + + public static void Deserialize(IMessageReader reader, IGame game, out IInnerPlayerControl? playerControl) + { + playerControl = reader.ReadNetObject(game); + } + } +} diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index bbea324..fba3441 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -358,6 +358,17 @@ namespace Impostor.Server.Net.Inner.Objects break; } + case RpcCalls.ProtectPlayer: + { + if (!await ValidateHost(call, sender)) + { + return false; + } + + Rpc45ProtectPlayer.Deserialize(reader, Game, out _, out _); + break; + } + case RpcCalls.Shapeshift: { if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.Shapeshifter)) @@ -381,6 +392,18 @@ namespace Impostor.Server.Net.Inner.Objects return await HandleCheckMurder(sender, murdered); } + case RpcCalls.CheckProtect: + { + if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.GuardianAngel)) + { + return false; + } + + Rpc48CheckProtect.Deserialize(reader, Game, out _); + + break; + } + default: return await base.HandleRpcAsync(sender, target, call, reader); } -- 2.39.5