]> git.deb.at Git - rhonda/impostor.git/commitdiff
Add RPC's for CheckProtect and ProtectPlayer
authorminiduikboot <mini@duikbo.at>
Mon, 22 Nov 2021 22:04:56 +0000 (23:04 +0100)
committerminiduikboot <mini@duikbo.at>
Mon, 22 Nov 2021 22:04:56 +0000 (23:04 +0100)
src/Impostor.Api/Net/Messages/Rpcs/Rpc45ProtectPlayer.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc48CheckProtect.cs [new file with mode: 0644]
src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.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 (file)
index 0000000..91d3fd1
--- /dev/null
@@ -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<IInnerPlayerControl>(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 (file)
index 0000000..5b5408f
--- /dev/null
@@ -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<IInnerPlayerControl>(game);
+        }
+    }
+}
index bbea32446d186ed881097c5353024de1831ea45a..fba3441906df8e3547db7ecfd7d18cc39e3ef30f 100644 (file)
@@ -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);
             }