fix: query command cleaning up

This commit is contained in:
Sachin 2025-07-15 12:52:22 +05:30
parent a758b9a7a7
commit 1118939e62
2 changed files with 63 additions and 82 deletions

View file

@ -11,9 +11,8 @@ using CounterStrikeSharp.API.Modules.Utils;
using CS2_SimpleAdmin.Managers; using CS2_SimpleAdmin.Managers;
using CS2_SimpleAdmin.Menus; using CS2_SimpleAdmin.Menus;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Globalization;
using System.Text; using System.Text;
using System.Text.Json;
namespace CS2_SimpleAdmin; namespace CS2_SimpleAdmin;
public partial class CS2_SimpleAdmin public partial class CS2_SimpleAdmin
@ -44,97 +43,79 @@ public partial class CS2_SimpleAdmin
public void OnQueryCommand(CCSPlayerController? caller, CommandInfo command) public void OnQueryCommand(CCSPlayerController? caller, CommandInfo command)
{ {
if (!Config.IsCSSPanel) return; if (!Config.IsCSSPanel) return;
List<CCSPlayerController> playersToTarget = Utilities.GetPlayers().Where(player => caller!.CanTarget(player) && !player.IsHLTV).ToList();
string Map = Server.MapName; var playersToTarget = Utilities.GetPlayers()
int Players = playersToTarget.Count; .Where(player => caller!.CanTarget(player) && !player.IsHLTV)
int MaxPlayers = Server.MaxPlayers; .ToList();
string[] Maps;
MaxPlayers = ConVar.Find("sv_visiblemaxplayers")?.GetPrimitiveValue<int>() ?? -1; string mapName = Server.MapName;
MaxPlayers = MaxPlayers <= -1 ? Server.MaxPlayers : MaxPlayers; int playersCount = playersToTarget.Count;
int maxPlayers = ConVar.Find("sv_visiblemaxplayers")?.GetPrimitiveValue<int>() is int value and > 0 ? value : Server.MaxPlayers;
string ServerName = ConVar.Find("hostname")?.StringValue ?? "Unknown"; string serverName = ConVar.Find("hostname")?.StringValue ?? "Unknown";
try // string[] maps;
{ // try
Maps = Server.GetMapList(); // {
} // maps = Server.GetMapList();
catch (Exception) // }
{ // catch (Exception)
Maps = Array.Empty<string>(); // return an empty array // {
} // maps = Array.Empty<string>();
// }
var server = new var server = new
{ {
map = Map, map = mapName,
hN = ServerName, hN = serverName,
p = Players, p = playersCount,
mP = MaxPlayers, mP = maxPlayers,
// maps = Maps, // maps = maps,
pr = ModuleVersion pr = ModuleVersion
}; };
List<Task<object>> playerTasks = playersToTarget
.FindAll(player => !player.IsBot && !player.IsHLTV && player.PlayerName != "")
.Select(player =>
{
string deaths = player.ActionTrackingServices!.MatchStats.Deaths.ToString();
string headshots = player.ActionTrackingServices!.MatchStats.HeadShotKills.ToString();
string assists = player.ActionTrackingServices!.MatchStats.Assists.ToString();
string damage = player.ActionTrackingServices!.MatchStats.Damage.ToString();
string kills = player.ActionTrackingServices!.MatchStats.Kills.ToString();
string time = player.ActionTrackingServices!.MatchStats.LiveTime.ToString();
var user = new
{
id = player.UserId,
// playerName = player.PlayerName,
// ipAddress = player.IpAddress?.Split(":")[0],
// accountId = player.AuthorizedSteamID?.AccountId.ToString(),
// steamId2 = player.AuthorizedSteamID?.SteamId2,
// steamId3 = player.AuthorizedSteamID?.SteamId3,
pn = player.PlayerName,
s64 = player.AuthorizedSteamID?.SteamId64.ToString(),
// ping = player.Ping,
t = player.Team,
// clanName = player.ClanName,
k = kills,
d = deaths,
// assists,
// headshots,
// damage,
s = player.Score,
// roundScore = player.RoundScore,
// roundsWon = player.RoundsWon,
// mvps = player.MVPs,
// time, // ? Fix this, it's not the time the player has been connected
// avatar = player.AuthorizedSteamID != null ? await GetProfilePictureAsync(player.AuthorizedSteamID.SteamId64.ToString(), true) : ""
};
return Task.FromResult((object)user);
}).ToList();
List<object> players = new List<object>();
try try
{ {
players = Task.WhenAll(playerTasks).Result.ToList(); var filteredPlayers = playersToTarget
.Where(player => !player.IsBot && !player.IsHLTV && !string.IsNullOrWhiteSpace(player.PlayerName));
var players = filteredPlayers.Select(player =>
{
var stats = player.ActionTrackingServices!.MatchStats;
return new
{
id = player.UserId,
// playerName = player.PlayerName,
// ipAddress = player.IpAddress?.Split(":")[0],
// accountId = player.AuthorizedSteamID?.AccountId.ToString() ?? "",
// steamId2 = player.AuthorizedSteamID?.SteamId2.ToString() ?? "",
// steamId3 = player.AuthorizedSteamID?.SteamId3.ToString() ?? "",
pn = player.PlayerName,
s64 = player.AuthorizedSteamID?.SteamId64.ToString() ?? "",
// ping = player.Ping,
t = player.Team,
// clanName = player.ClanName,
k = stats.Kills.ToString(),
d = stats.Deaths.ToString(),
// stats.Assists.ToString(),
// stats.HeadShotKills.ToString(),
// stats.Damage.ToString(),
s = player.Score,
// roundScore = player.RoundScore,
// roundsWon = player.RoundsWon,
// mvps = player.MVPs,
// stats.LiveTime.ToString(), // ? Fix this, it's not the time the player has been connected
// avatar = player.AuthorizedSteamID != null ? await GetProfilePictureAsync(player.AuthorizedSteamID.SteamId64.ToString(), true) : ""
};
}).ToList();
string jsonString = JsonSerializer.Serialize(new { server, players });
Server.PrintToConsole(jsonString);
} }
catch (AggregateException ex) catch (Exception ex)
{ {
foreach (var innerEx in ex.InnerExceptions) Logger.LogError(ex, "Unexpected error while query command");
{
Logger.LogError(innerEx, "Error while querying players");
}
} }
string jsonString = JsonConvert.SerializeObject(
new
{
server,
players
}
);
Server.PrintToConsole(jsonString);
} }
} }

View file

@ -169,9 +169,9 @@ public static class PlayerExtensions
) )
{ {
controller.PlayerPawn.Value.Teleport( controller.PlayerPawn.Value.Teleport(
target.PlayerPawn.Value.AbsOrigin, target.PlayerPawn.Value.AbsOrigin!.ToVector_t(),
target.PlayerPawn.Value.AbsRotation, target.PlayerPawn.Value.AbsRotation!.ToQAngle_t(),
target.PlayerPawn.Value.AbsVelocity target.PlayerPawn.Value.AbsVelocity.ToVector_t()
); );
} }
} }