From f3bb6abd817090c160475212d34a92b942cb05bb Mon Sep 17 00:00:00 2001 From: prahzera Date: Sun, 17 Aug 2025 23:24:54 -0300 Subject: [PATCH 1/2] Added new command to refresh skins using RCON --- Commands.cs | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/Commands.cs b/Commands.cs index 1cb8fc26..f2b84339 100644 --- a/Commands.cs +++ b/Commands.cs @@ -147,6 +147,100 @@ public partial class WeaponPaints }); }); } + + AddCommand("wp_refresh", "Admin refresh player skins", (player, info) => + { + OnCommandSkinRefresh(player, info); + }); + } + + private void OnCommandSkinRefresh(CCSPlayerController? player, CommandInfo command) + { + if (!Config.Additional.CommandWpEnabled || !Config.Additional.SkinEnabled || !_gBCommandsAllowed) return; + + var args = command.GetArg(1); + + if (string.IsNullOrEmpty(args)) + { + Console.WriteLine("[WeaponPaints] Usage: wp_refresh "); + Console.WriteLine("[WeaponPaints] Examples:"); + Console.WriteLine("[WeaponPaints] wp_refresh - Refresh skins for all players"); + Console.WriteLine("[WeaponPaints] wp_refresh PlayerName - Refresh skins for a specific player"); + Console.WriteLine("[WeaponPaints] wp_refresh STEAM_1:0:123456789 - Refresh skins by SteamID"); + return; + } + + var targetPlayers = new List(); + + if (args.ToLower() == "") + { + targetPlayers = Utilities.GetPlayers().Where(p => + p != null && p.IsValid && !p.IsBot && p.UserId != null).ToList(); + + if (targetPlayers.Count == 0) + { + Console.WriteLine("[WeaponPaints] No players connected to refresh."); + return; + } + + Console.WriteLine($"[WeaponPaints] Refreshing skins for {targetPlayers.Count} players..."); + } + else + { + var foundPlayer = Utilities.GetPlayers().FirstOrDefault(p => + p != null && p.IsValid && !p.IsBot && p.UserId != null && + (p.PlayerName?.Contains(args, StringComparison.OrdinalIgnoreCase) == true || + p.SteamID.ToString() == args)); + + if (foundPlayer == null) + { + Console.WriteLine($"[WeaponPaints] Player '{args}' not found."); + return; + } + + targetPlayers.Add(foundPlayer); + Console.WriteLine($"[WeaponPaints] Refreshing skins for {foundPlayer.PlayerName}..."); + } + + foreach (var targetPlayer in targetPlayers) + { + try + { + PlayerInfo? playerInfo = new PlayerInfo + { + UserId = targetPlayer.UserId, + Slot = targetPlayer.Slot, + Index = (int)targetPlayer.Index, + SteamId = targetPlayer.SteamID.ToString(), + Name = targetPlayer.PlayerName, + IpAddress = targetPlayer.IpAddress?.Split(":")[0] + }; + + if (WeaponSync != null) + { + _ = Task.Run(async () => await WeaponSync.GetPlayerData(playerInfo)); + } + + GivePlayerGloves(targetPlayer); + RefreshWeapons(targetPlayer); + GivePlayerAgent(targetPlayer); + GivePlayerMusicKit(targetPlayer); + AddTimer(0.15f, () => GivePlayerPin(targetPlayer)); + + if (!string.IsNullOrEmpty(Localizer["wp_command_refresh_done"])) + { + targetPlayer.Print(Localizer["wp_command_refresh_done"]); + } + + Console.WriteLine($"[WeaponPaints] Skins refreshed for {targetPlayer.PlayerName}"); + } + catch (Exception ex) + { + Console.WriteLine($"[WeaponPaints] Error refreshing skins for {targetPlayer.PlayerName}: {ex.Message}"); + } + } + + Console.WriteLine("[WeaponPaints] Refresh process completed."); } private void OnCommandStattrak(CCSPlayerController? player, CommandInfo commandInfo) From 5b6216669bde6310d40ad5d3ad95e3f3dd3207eb Mon Sep 17 00:00:00 2001 From: prahzera Date: Sun, 17 Aug 2025 23:54:33 -0300 Subject: [PATCH 2/2] Removed the use of skin update using names due to vulnerability with the all command --- Commands.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Commands.cs b/Commands.cs index f2b84339..23425387 100644 --- a/Commands.cs +++ b/Commands.cs @@ -162,17 +162,16 @@ public partial class WeaponPaints if (string.IsNullOrEmpty(args)) { - Console.WriteLine("[WeaponPaints] Usage: wp_refresh "); + Console.WriteLine("[WeaponPaints] Usage: wp_refresh "); Console.WriteLine("[WeaponPaints] Examples:"); - Console.WriteLine("[WeaponPaints] wp_refresh - Refresh skins for all players"); - Console.WriteLine("[WeaponPaints] wp_refresh PlayerName - Refresh skins for a specific player"); - Console.WriteLine("[WeaponPaints] wp_refresh STEAM_1:0:123456789 - Refresh skins by SteamID"); + Console.WriteLine("[WeaponPaints] wp_refresh all - Refresh skins for all players"); + Console.WriteLine("[WeaponPaints] wp_refresh 76561198012345678 - Refresh skins by SteamID64"); return; } var targetPlayers = new List(); - if (args.ToLower() == "") + if (args.Equals("all", StringComparison.OrdinalIgnoreCase)) { targetPlayers = Utilities.GetPlayers().Where(p => p != null && p.IsValid && !p.IsBot && p.UserId != null).ToList(); @@ -189,12 +188,11 @@ public partial class WeaponPaints { var foundPlayer = Utilities.GetPlayers().FirstOrDefault(p => p != null && p.IsValid && !p.IsBot && p.UserId != null && - (p.PlayerName?.Contains(args, StringComparison.OrdinalIgnoreCase) == true || - p.SteamID.ToString() == args)); + p.SteamID.ToString() == args); if (foundPlayer == null) { - Console.WriteLine($"[WeaponPaints] Player '{args}' not found."); + Console.WriteLine($"[WeaponPaints] Player with SteamID64 '{args}' not found."); return; } @@ -243,6 +241,7 @@ public partial class WeaponPaints Console.WriteLine("[WeaponPaints] Refresh process completed."); } + private void OnCommandStattrak(CCSPlayerController? player, CommandInfo commandInfo) { if (player == null || !player.IsValid) return;