Make PlayerInfo command use NetworkedPlayerInfo

This commit is contained in:
D1GQ committed 2026-08-28 17:48:35 -05:00
1 parent 48b50ba20a
commit 06ab2542c0
4 files changed
+91 -17

No files matched your search

-4
View File
@@ -36,8 +36,6 @@ internal sealed class PlayerArgument(BaseCommand command, string argInfo = "{pla
/// <summary>
/// Tries to parse the player argument and find the corresponding PlayerControl.
/// </summary>
/// <param name="result"></param>
/// <returns></returns>
internal override bool TryParse(out PlayerControl result)
{
foreach (var player in BAUPlugin.AllPlayerControls)
@@ -59,8 +57,6 @@ internal sealed class PlayerArgument(BaseCommand command, string argInfo = "{pla
/// <summary>
/// Checks if the given player info matches the argument value.
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
private bool IsMatchingPlayer(NetworkedPlayerInfo data)
{
return Arg.Equals(data.PlayerName.Replace(' ', '_'), StringComparison.OrdinalIgnoreCase)
@@ -0,0 +1,76 @@
using BetterAmongUs.Utilities;
namespace BetterAmongUs.Commands.Arguments;
/// <summary>
/// Represents a player command argument.
/// </summary>
/// <param name="command">The command this argument belongs to.</param>
/// <param name="argInfo">Information about the argument (default: "{player}").</param>
internal sealed class PlayerInfoArgument(BaseCommand command, string argInfo = "{player}") : BaseArgument<NetworkedPlayerInfo>(command, argInfo)
{
protected override string[] GetArgSuggestions()
{
List<string> suggestions = [];
var allPlayers = GameData.Instance.AllPlayers;
int count = allPlayers.Count;
for (int i = 0; i < count; i++)
{
var playerData = allPlayers[i];
if (playerData.IsLocalData())
{
int insertIndex = suggestions.Count;
if (!string.IsNullOrEmpty(playerData.PlayerName))
suggestions.Insert(insertIndex, playerData.PlayerName.Replace(' ', '_'));
if (!string.IsNullOrEmpty(playerData.FriendCode))
suggestions.Insert(insertIndex + 1, playerData.FriendCode);
suggestions.Insert(insertIndex + 2, $"ID{playerData.PlayerId}");
}
else
{
if (!string.IsNullOrEmpty(playerData.PlayerName))
suggestions.Add(playerData.PlayerName.Replace(' ', '_'));
if (!string.IsNullOrEmpty(playerData.FriendCode))
suggestions.Add(playerData.FriendCode);
suggestions.Add($"ID{playerData.PlayerId}");
}
}
return [.. suggestions];
}
/// <summary>
/// Tries to parse the player argument and find the corresponding PlayerControl.
/// </summary>
internal override bool TryParse(out NetworkedPlayerInfo result)
{
foreach (var playerData in GameData.Instance.AllPlayers)
{
if (IsMatchingPlayer(playerData))
{
result = playerData;
return true;
}
}
result = default!;
BaseCommand.CommandErrorText("Player not found!");
return false;
}
/// <summary>
/// Checks if the given player info matches the argument value.
/// </summary>
private bool IsMatchingPlayer(NetworkedPlayerInfo data)
{
return Arg.Equals(data.PlayerName.Replace(' ', '_'), StringComparison.OrdinalIgnoreCase)
|| Arg.Equals(data.FriendCode, StringComparison.OrdinalIgnoreCase)
|| Arg.Equals($"ID{data.PlayerId}", StringComparison.OrdinalIgnoreCase);
}
}
+14 -10
View File
@@ -13,29 +13,33 @@ internal sealed class PlayerInfoCommand : BaseCommand
public PlayerInfoCommand()
{
_playerArgument = new PlayerArgument(this);
_playerArgument = new PlayerInfoArgument(this);
Arguments = [_playerArgument];
}
private readonly PlayerArgument _playerArgument;
private readonly PlayerInfoArgument _playerArgument;
internal override void Run()
{
if (!_playerArgument.TryParse(out var player))
if (!_playerArgument.TryParse(out var playerData))
return;
if (player.Data == null)
if (playerData == null)
return;
StringBuilder sb = new();
var hexColor = Utils.Color32ToHex(Palette.PlayerColors[player.CurrentOutfit.ColorId]);
var hexColor = Utils.Color32ToHex(Palette.PlayerColors[playerData.DefaultOutfit.ColorId]);
var format1 = "┌ •";
var format2 = "├ •";
var format3 = "└ •";
sb.Append($"<size=150%><color={hexColor}><b>{player.Data.PlayerName}</color> Info:</b></size>\n");
sb.Append($"{format1} <color=#c1c1c1>ID: {player.Data.PlayerId}</color>\n");
sb.Append($"{format2} <color=#c1c1c1>HashPUID: {Utils.GetHashStr($"{player.Data.Puid}")}</color>\n");
sb.Append($"{format2} <color=#c1c1c1>Platform: {Utils.GetPlatformName(player)}</color>\n");
sb.Append($"{format3} <color=#c1c1c1>FriendCode: {player.Data.FriendCode}</color>");
sb.Append($"<size=150%><color={hexColor}><b>{playerData.PlayerName}</color> Info:</b></size>\n");
sb.Append($"{format1} <color=#c1c1c1>ID: {playerData.PlayerId}</color>\n");
sb.Append($"{format2} <color=#c1c1c1>HashPUID: {Utils.GetHashStr($"{playerData.Puid}")}</color>\n");
var client = Utils.ClientFromClientId(playerData.ClientId);
if (client != null)
{
sb.Append($"{format2} <color=#c1c1c1>Platform: {Utils.GetPlatformName(client.PlatformData.Platform)}</color>\n");
}
sb.Append($"{format3} <color=#c1c1c1>FriendCode: {playerData.FriendCode}</color>");
CommandResultText(sb.ToString());
}
}
+1 -3
View File
@@ -16,9 +16,7 @@ internal sealed class RemovePlayerCommand : BaseCommand
_identifierArgument = new StringArgument(this, "{identifier}")
{
ArgSuggestions = () =>
BetterDataManager.Files.BetterDataFile.AllCheatData
.SelectMany(info => new[] { info.HashPuid.Replace(' ', '_'), info.FriendCode.Replace(' ', '_'), info.PlayerName.Replace(' ', '_') })
.ToArray()
[.. BetterDataManager.Files.BetterDataFile.AllCheatData.SelectMany(info => new[] { info.HashPuid.Replace(' ', '_'), info.FriendCode.Replace(' ', '_'), info.PlayerName.Replace(' ', '_') })]
};
Arguments = [_identifierArgument];
}