]> git.deb.at Git - rhonda/impostor.git/commitdiff
Implement fungle rpcs
authorjs6pak <me@6pak.dev>
Tue, 21 Nov 2023 16:15:52 +0000 (17:15 +0100)
committerjs6pak <me@6pak.dev>
Sat, 16 Dec 2023 22:55:58 +0000 (23:55 +0100)
src/Impostor.Api/Net/Messages/Rpcs/Rpc51CheckZipline.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc52UseZipline.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc53TriggerSpores.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc54CheckSpore.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc55CheckShapeshift.cs [new file with mode: 0644]
src/Impostor.Api/Net/Messages/Rpcs/Rpc56RejectShapeshift.cs [new file with mode: 0644]
src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs

diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc51CheckZipline.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc51CheckZipline.cs
new file mode 100644 (file)
index 0000000..b94a2fe
--- /dev/null
@@ -0,0 +1,15 @@
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc51CheckZipline
+    {
+        public static void Serialize(IMessageWriter writer, bool fromTop)
+        {
+            writer.Write(fromTop);
+        }
+
+        public static void Deserialize(IMessageReader reader, out bool fromTop)
+        {
+            fromTop = reader.ReadBoolean();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc52UseZipline.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc52UseZipline.cs
new file mode 100644 (file)
index 0000000..3a973f8
--- /dev/null
@@ -0,0 +1,15 @@
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc52UseZipline
+    {
+        public static void Serialize(IMessageWriter writer, bool fromTop)
+        {
+            writer.Write(fromTop);
+        }
+
+        public static void Deserialize(IMessageReader reader, out bool fromTop)
+        {
+            fromTop = reader.ReadBoolean();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc53TriggerSpores.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc53TriggerSpores.cs
new file mode 100644 (file)
index 0000000..1b24b3e
--- /dev/null
@@ -0,0 +1,15 @@
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc53TriggerSpores
+    {
+        public static void Serialize(IMessageWriter writer, int mushroomId)
+        {
+            writer.WritePacked(mushroomId);
+        }
+
+        public static void Deserialize(IMessageReader reader, out int mushroomId)
+        {
+            mushroomId = reader.ReadPackedInt32();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc54CheckSpore.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc54CheckSpore.cs
new file mode 100644 (file)
index 0000000..1ddbf8f
--- /dev/null
@@ -0,0 +1,15 @@
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc54CheckSpore
+    {
+        public static void Serialize(IMessageWriter writer, int mushroomId)
+        {
+            writer.WritePacked(mushroomId);
+        }
+
+        public static void Deserialize(IMessageReader reader, out int mushroomId)
+        {
+            mushroomId = reader.ReadPackedInt32();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc55CheckShapeshift.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc55CheckShapeshift.cs
new file mode 100644 (file)
index 0000000..ef150c9
--- /dev/null
@@ -0,0 +1,20 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc55CheckShapeshift
+    {
+        public static void Serialize(IMessageWriter writer, IInnerPlayerControl playerControl, bool shouldAnimate)
+        {
+            writer.Write(playerControl);
+            writer.Write(shouldAnimate);
+        }
+
+        public static void Deserialize(IMessageReader reader, IGame game, out IInnerPlayerControl? playerControl, out bool shouldAnimate)
+        {
+            playerControl = reader.ReadNetObject<IInnerPlayerControl>(game);
+            shouldAnimate = reader.ReadBoolean();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Net/Messages/Rpcs/Rpc56RejectShapeshift.cs b/src/Impostor.Api/Net/Messages/Rpcs/Rpc56RejectShapeshift.cs
new file mode 100644 (file)
index 0000000..0479a68
--- /dev/null
@@ -0,0 +1,13 @@
+namespace Impostor.Api.Net.Messages.Rpcs
+{
+    public static class Rpc56RejectShapeshift
+    {
+        public static void Serialize(IMessageWriter writer)
+        {
+        }
+
+        public static void Deserialize(IMessageReader reader)
+        {
+        }
+    }
+}
index 50a0874bf7b7daac3416570c27db26c0cbd1f293..d693dcb22358c43b1d301afe4fe3f315dde70189 100644 (file)
@@ -398,6 +398,11 @@ namespace Impostor.Server.Net.Inner.Objects
 
                 case RpcCalls.Shapeshift:
                 {
+                    if (!await ValidateHost(call, sender))
+                    {
+                        return false;
+                    }
+
                     if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.Shapeshifter))
                     {
                         return false;
@@ -410,6 +415,11 @@ namespace Impostor.Server.Net.Inner.Objects
 
                 case RpcCalls.CheckMurder:
                 {
+                    if (!await ValidateOwnership(call, sender))
+                    {
+                        return false;
+                    }
+
                     if (!await ValidateImpostor(call, sender, PlayerInfo))
                     {
                         return false;
@@ -421,6 +431,11 @@ namespace Impostor.Server.Net.Inner.Objects
 
                 case RpcCalls.CheckProtect:
                 {
+                    if (!await ValidateOwnership(call, sender))
+                    {
+                        return false;
+                    }
+
                     if (!await ValidateRole(call, sender, PlayerInfo, RoleTypes.GuardianAngel))
                     {
                         return false;
@@ -430,6 +445,72 @@ namespace Impostor.Server.Net.Inner.Objects
                     break;
                 }
 
+                case RpcCalls.CheckZipline:
+                {
+                    if (!await ValidateOwnership(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc51CheckZipline.Deserialize(reader, out var fromTop);
+                    break;
+                }
+
+                case RpcCalls.UseZipline:
+                {
+                    if (!await ValidateHost(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc52UseZipline.Deserialize(reader, out var fromTop);
+                    break;
+                }
+
+                case RpcCalls.TriggerSpores:
+                {
+                    if (!await ValidateHost(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc53TriggerSpores.Deserialize(reader, out var mushroomId);
+                    break;
+                }
+
+                case RpcCalls.CheckSpore:
+                {
+                    if (!await ValidateOwnership(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc54CheckSpore.Deserialize(reader, out var mushroomId);
+                    break;
+                }
+
+                case RpcCalls.CheckShapeshift:
+                {
+                    if (!await ValidateOwnership(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc46Shapeshift.Deserialize(reader, Game, out var playerControl, out var shouldAnimate);
+                    break;
+                }
+
+                case RpcCalls.RejectShapeshift:
+                {
+                    if (!await ValidateHost(call, sender))
+                    {
+                        return false;
+                    }
+
+                    Rpc56RejectShapeshift.Deserialize(reader);
+                    break;
+                }
+
                 default:
                     return await base.HandleRpcAsync(sender, target, call, reader);
             }