]> git.deb.at Git - rhonda/impostor.git/commitdiff
Allow multiple SetName commands per CheckName
authorminiduikboot <mini@duikbo.at>
Wed, 31 May 2023 20:13:29 +0000 (22:13 +0200)
committerminiduikboot <mini@duikbo.at>
Thu, 1 Jun 2023 17:39:46 +0000 (19:39 +0200)
Some mods use SetName to set player-specific names, for example to set
player-specific roles. When Anticheat is disabled, this should be
allowed for feature-parity with officials.

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

index b25f24456416822a53e743e91f4903d839f98a42..ed05367ab430dfe7846489a24ad666f288aa4392 100644 (file)
@@ -513,36 +513,40 @@ namespace Impostor.Server.Net.Inner.Objects
             }
             else
             {
-                if (!RequestedPlayerName.Any())
+                if (RequestedPlayerName.Any())
                 {
-                    _logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} for a player that didn't request it");
-                    return false;
-                }
+                    var expected = RequestedPlayerName.Dequeue();
 
-                var expected = RequestedPlayerName.Dequeue();
-
-                if (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.PlayerName == expected))
-                {
-                    var i = 1;
-                    while (true)
+                    if (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.PlayerName == expected))
                     {
-                        var text = expected + " " + i;
-
-                        if (Game.Players.All(x => x.Character == null || x.Character == this || x.Character.PlayerInfo.PlayerName != text))
+                        var i = 1;
+                        while (true)
                         {
-                            expected = text;
-                            break;
+                            var text = expected + " " + i;
+
+                            if (Game.Players.All(x => x.Character == null || x.Character == this || x.Character.PlayerInfo.PlayerName != text))
+                            {
+                                expected = text;
+                                break;
+                            }
+
+                            i++;
                         }
+                    }
 
-                        i++;
+                    if (name != expected)
+                    {
+                        _logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} with incorrect name");
+                        await SetNameAsync(expected);
+                        return false;
                     }
                 }
-
-                if (name != expected)
+                else
                 {
-                    _logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} with incorrect name");
-                    await SetNameAsync(expected);
-                    return false;
+                    if (await sender.Client.ReportCheatAsync(RpcCalls.SetName, $"Client sent {nameof(RpcCalls.SetName)} for a player that didn't request it"))
+                    {
+                        return false;
+                    }
                 }
             }