]> git.deb.at Git - rhonda/impostor.git/commitdiff
Set PlayerLevel in PlayerInfo on RPC SetLevel
authorminiduikboot <mini@duikbo.at>
Fri, 2 Aug 2024 09:25:52 +0000 (11:25 +0200)
committerminiduikboot <mini@duikbo.at>
Tue, 20 Aug 2024 19:41:38 +0000 (21:41 +0200)
Previously this used to be done by the host, but this is now the
server's responsibility.

src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs

index 113226d6306038e4d7ac70eda4afc098bfd65ae4..b132b99dc166f9e7ef3c670025301f1a3302612d 100644 (file)
@@ -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<bool> 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<bool> HandleCheckMurder(ClientPlayer sender, InnerPlayerControl? target)
         {
             if (!PlayerInfo.CanMurder(Game, _dateTimeProvider))