diff --git a/Commands.cs b/Commands.cs index 1cb8fc26..23425387 100644 --- a/Commands.cs +++ b/Commands.cs @@ -147,8 +147,101 @@ 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 all - Refresh skins for all players"); + Console.WriteLine("[WeaponPaints] wp_refresh 76561198012345678 - Refresh skins by SteamID64"); + return; + } + + var targetPlayers = new List(); + + if (args.Equals("all", StringComparison.OrdinalIgnoreCase)) + { + 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.SteamID.ToString() == args); + + if (foundPlayer == null) + { + Console.WriteLine($"[WeaponPaints] Player with SteamID64 '{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) { if (player == null || !player.IsValid) return;