From: miniduikboot Date: Sat, 16 Mar 2024 19:31:17 +0000 (+0100) Subject: Don't dequeue a color when none are available X-Git-Tag: v1.9.2~7^2~1 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=bdd65e9e9f2541572a577a9df8c3b153047911ae;p=rhonda%2Fimpostor.git Don't dequeue a color when none are available --- 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; } }