From bdd65e9e9f2541572a577a9df8c3b153047911ae Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Sat, 16 Mar 2024 20:31:17 +0100 Subject: [PATCH] Don't dequeue a color when none are available --- .../Net/Inner/Objects/InnerPlayerControl.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index cd9af28..5a7fbac 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -713,26 +713,28 @@ namespace Impostor.Server.Net.Inner.Objects } else { - if (!RequestedColorId.Any()) + if (RequestedColorId.Any()) { - if (await sender.Client.ReportCheatAsync(RpcCalls.SetColor, CheatCategory.GameFlow, "Client sent SetColor for a player that didn't request it")) + var expected = RequestedColorId.Dequeue(); + + while (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.CurrentOutfit.Color == expected)) { - return false; + expected = (ColorType)(((byte)expected + 1) % ColorsCount); } - } - var expected = RequestedColorId.Dequeue(); - - while (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.CurrentOutfit.Color == expected)) - { - expected = (ColorType)(((byte)expected + 1) % ColorsCount); + if (color != expected) + { + if (await sender.Client.ReportCheatAsync(RpcCalls.SetColor, CheatCategory.GameFlow, "Client sent SetColor with incorrect color")) + { + await SetColorAsync(expected); + return false; + } + } } - - if (color != expected) + else { - if (await sender.Client.ReportCheatAsync(RpcCalls.SetColor, CheatCategory.GameFlow, "Client sent SetColor with incorrect color")) + if (await sender.Client.ReportCheatAsync(RpcCalls.SetColor, CheatCategory.GameFlow, "Client sent SetColor for a player that didn't request it")) { - await SetColorAsync(expected); return false; } } -- 2.39.5