From: miniduikboot Date: Fri, 2 Aug 2024 09:25:52 +0000 (+0200) Subject: Set PlayerLevel in PlayerInfo on RPC SetLevel X-Git-Tag: v1.10.0~7^2~4 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=01e9cccdf5ac974aca9427f15f0d76390e2ea267;p=rhonda%2Fimpostor.git Set PlayerLevel in PlayerInfo on RPC SetLevel Previously this used to be done by the host, but this is now the server's responsibility. --- diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 113226d..b132b99 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -251,7 +251,7 @@ namespace Impostor.Server.Net.Inner.Objects } Rpc38SetLevel.Deserialize(reader, out var level); - return true; + return await HandleSetLevel(sender, level); } case RpcCalls.ReportDeadBody: @@ -834,6 +834,19 @@ namespace Impostor.Server.Net.Inner.Objects return true; } + private async ValueTask HandleSetLevel(ClientPlayer sender, uint level) + { + if (Game.GameState == GameStates.Started && + await sender.Client.ReportCheatAsync(RpcCalls.SetLevel, CheatCategory.GameFlow, "Client tried to set level while not in game")) + { + return false; + } + + PlayerInfo.PlayerLevel = level; + + return true; + } + private async ValueTask HandleCheckMurder(ClientPlayer sender, InnerPlayerControl? target) { if (!PlayerInfo.CanMurder(Game, _dateTimeProvider))