mirror of
https://github.com/D1GQ/BetterAmongUs.git
synced 2026-10-19 15:51:52 +00:00
Make PlayerInfo command use NetworkedPlayerInfo
This commit is contained in:
1 parent
48b50ba20a
commit
06ab2542c0
4 files changed
+91
-17
No files matched your search
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user