From: miniduikboot Date: Tue, 18 Aug 2026 18:39:50 +0000 (+0200) Subject: Add basic implementation of judge overruling X-Git-Tag: v1.10.8~10 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=a161aa70452e7a0df0160d37cc7ffa7f0eb121a7;p=rhonda%2Fimpostor.git Add basic implementation of judge overruling --- diff --git a/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json b/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json index 4b8ddba..1d4a76e 100644 --- a/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json +++ b/src/Impostor.Api/Innersloth/Data/enums/RpcCalls.json @@ -59,5 +59,6 @@ "CheckVanish": 62, "StartVanish": 63, "CheckAppear": 64, - "StartAppear": 65 -} \ No newline at end of file + "StartAppear": 65, + "QueueOverruleVotes": 66 +} diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs index 92e5793..515978d 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs @@ -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 _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 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); }