mirror of
https://github.com/Impostor/Impostor.git
synced 2026-10-20 01:46:11 +00:00
Allow multiple SetName commands per CheckName
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.
This commit is contained in:
1 parent
1f98102e5a
commit
a519c0daed
1 file changed
+26
-22
@@ -513,36 +513,40 @@ namespace Impostor.Server.Net.Inner.Objects
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!RequestedPlayerName.Any())
|
if (RequestedPlayerName.Any())
|
||||||
{
|
{
|
||||||
_logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} for a player that didn't request it");
|
var expected = RequestedPlayerName.Dequeue();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var expected = RequestedPlayerName.Dequeue();
|
if (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.PlayerName == expected))
|
||||||
|
|
||||||
if (Game.Players.Any(x => x.Character != null && x.Character != this && x.Character.PlayerInfo.PlayerName == expected))
|
|
||||||
{
|
|
||||||
var i = 1;
|
|
||||||
while (true)
|
|
||||||
{
|
{
|
||||||
var text = expected + " " + i;
|
var i = 1;
|
||||||
|
while (true)
|
||||||
if (Game.Players.All(x => x.Character == null || x.Character == this || x.Character.PlayerInfo.PlayerName != text))
|
|
||||||
{
|
{
|
||||||
expected = text;
|
var text = expected + " " + i;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
i++;
|
if (Game.Players.All(x => x.Character == null || x.Character == this || x.Character.PlayerInfo.PlayerName != text))
|
||||||
|
{
|
||||||
|
expected = text;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name != expected)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} with incorrect name");
|
||||||
|
await SetNameAsync(expected);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (name != expected)
|
|
||||||
{
|
{
|
||||||
_logger.LogWarning($"Client sent {nameof(RpcCalls.SetName)} with incorrect name");
|
if (await sender.Client.ReportCheatAsync(RpcCalls.SetName, $"Client sent {nameof(RpcCalls.SetName)} for a player that didn't request it"))
|
||||||
await SetNameAsync(expected);
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user