From 01e9cccdf5ac974aca9427f15f0d76390e2ea267 Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Fri, 2 Aug 2024 11:25:52 +0200 Subject: [PATCH] Set PlayerLevel in PlayerInfo on RPC SetLevel Previously this used to be done by the host, but this is now the server's responsibility. --- .../Net/Inner/Objects/InnerPlayerControl.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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)) -- 2.39.5