]> git.deb.at Git - rhonda/impostor.git/commitdiff
Add basic implementation of judge overruling
authorminiduikboot <mini@duikbo.at>
Tue, 18 Aug 2026 18:39:50 +0000 (20:39 +0200)
committerminiduikboot <mini@duikbo.at>
Sun, 30 Aug 2026 16:48:37 +0000 (18:48 +0200)
src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json
src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs

index 4b8ddba520d9d044f0855c391741262432841830..1d4a76ef7153166d7c75278d070d54e0d8fdb6ec 100644 (file)
@@ -59,5 +59,6 @@
   "CheckVanish": 62,
   "StartVanish": 63,
   "CheckAppear": 64,
-  "StartAppear": 65
-}
\ No newline at end of file
+  "StartAppear": 65,
+  "QueueOverruleVotes": 66
+}
index 92e579357b9519de35248a35e52e82c9c2f1f900..515978d57f704951cec8a37fda780c3a159f1b15 100644 (file)
@@ -22,6 +22,8 @@ namespace Impostor.Server.Net.Inner.Objects
 {
     internal partial class InnerMeetingHud : InnerNetObject
     {
+        private static readonly GameVersion JudgeMinVersion = new GameVersion(2026, 7, 15); // 18.0
+
         private readonly ILogger<InnerMeetingHud> _logger;
         private readonly IEventManager _eventManager;
 
@@ -108,6 +110,17 @@ namespace Impostor.Server.Net.Inner.Objects
                     }
                 }
             }
+
+            if (sender.Client.GameVersion >= JudgeMinVersion)
+            {
+                var overruleQueueListLength = reader.ReadPackedInt32();
+                for (var i = 0; i < overruleQueueListLength; i++)
+                {
+                    var msg = reader.ReadMessage();
+
+                    // TODO parse and handle JudgeOverrule
+                }
+            }
         }
 
         public override async ValueTask<bool> HandleRpcAsync(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
@@ -161,6 +174,22 @@ namespace Impostor.Server.Net.Inner.Objects
                     break;
                 }
 
+                case RpcCalls.QueueOverruleVotes:
+                {
+                    if (!await ValidateRole(call, sender, sender.Character!.PlayerInfo, RoleTypes.Judge) ||
+                        !await ValidateTarget(call, sender, target) ||
+                        !await ValidateHost(call, target!))
+                    {
+                        return false;
+                    }
+
+                    var judgePlayerId = reader.ReadByte();
+                    var targetPlayerId = reader.ReadByte();
+                    var overruleNonce = reader.ReadUInt16();
+
+                    break;
+                }
+
                 default:
                     return await base.HandleRpcAsync(sender, target, call, reader);
             }