mirror of
https://github.com/Nereziel/cs2-WeaponPaints.git
synced 2026-03-11 16:59:58 +00:00
Compare commits
3 Commits
build-391
...
0b13f34ab6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b13f34ab6 | ||
|
|
5b6216669b | ||
|
|
f3bb6abd81 |
93
Commands.cs
93
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 <steamid64|all>");
|
||||
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<CCSPlayerController>();
|
||||
|
||||
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;
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace WeaponPaints
|
||||
|
||||
[GameEventHandler]
|
||||
public HookResult OnClientFullConnect(EventPlayerConnectFull @event, GameEventInfo info)
|
||||
{
|
||||
{
|
||||
CCSPlayerController? player = @event.Userid;
|
||||
|
||||
if (player is null || !player.IsValid || player.IsBot ||
|
||||
@@ -142,10 +142,7 @@ namespace WeaponPaints
|
||||
|
||||
GivePlayerMusicKit(player);
|
||||
GivePlayerAgent(player);
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
GivePlayerGloves(player);
|
||||
});
|
||||
GivePlayerGloves(player);
|
||||
GivePlayerPin(player);
|
||||
|
||||
return HookResult.Continue;
|
||||
|
||||
@@ -25,7 +25,7 @@ public partial class WeaponPaints
|
||||
{"weapon_g3sg1", "G3SG1"},
|
||||
{"weapon_galilar", "Galil AR"},
|
||||
{"weapon_m249", "M249"},
|
||||
{"weapon_m4a1", "M4A4"},
|
||||
{"weapon_m4a1", "M4A1"},
|
||||
{"weapon_mac10", "MAC-10"},
|
||||
{"weapon_p90", "P90"},
|
||||
{"weapon_mp5sd", "MP5-SD"},
|
||||
|
||||
@@ -37,9 +37,6 @@ namespace WeaponPaints
|
||||
|
||||
weapon.AttributeManager.Item.ItemDefinitionIndex = (ushort)newDefIndex.Key;
|
||||
weapon.AttributeManager.Item.EntityQuality = 3;
|
||||
|
||||
weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll();
|
||||
weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -99,8 +96,9 @@ namespace WeaponPaints
|
||||
weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll();
|
||||
weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
|
||||
UpdatePlayerEconItemId(weapon.AttributeManager.Item);
|
||||
|
||||
weapon.AttributeManager.Item.ItemID = 16384;
|
||||
weapon.AttributeManager.Item.ItemIDLow = 16384 & 0xFFFFFFFF;
|
||||
weapon.AttributeManager.Item.ItemIDHigh = weapon.AttributeManager.Item.ItemIDLow >> 32;
|
||||
weapon.AttributeManager.Item.CustomName = weaponInfo.Nametag;
|
||||
weapon.FallbackPaintKit = weaponInfo.Paint;
|
||||
|
||||
@@ -138,7 +136,7 @@ namespace WeaponPaints
|
||||
|
||||
UpdatePlayerWeaponMeshGroupMask(player, weapon, isLegacyModel);
|
||||
}
|
||||
|
||||
|
||||
// silly method to update sticker when call RefreshWeapons()
|
||||
private void IncrementWearForWeaponWithStickers(CCSPlayerController player, CBasePlayerWeapon weapon)
|
||||
{
|
||||
@@ -172,7 +170,7 @@ namespace WeaponPaints
|
||||
foreach (var sticker in weaponInfo.Stickers)
|
||||
{
|
||||
int stickerSlot = weaponInfo.Stickers.IndexOf(sticker);
|
||||
|
||||
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
|
||||
$"sticker slot {stickerSlot} id", ViewAsFloat(sticker.Id));
|
||||
if (sticker.OffsetX != 0 || sticker.OffsetY != 0)
|
||||
@@ -189,7 +187,7 @@ namespace WeaponPaints
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
|
||||
$"sticker slot {stickerSlot} rotation", sticker.Rotation);
|
||||
}
|
||||
|
||||
|
||||
if (_temporaryPlayerWeaponWear.TryGetValue(player.Slot, out var playerWear) &&
|
||||
playerWear.TryGetValue(weaponDefIndex, out float storedWear))
|
||||
{
|
||||
@@ -217,7 +215,7 @@ namespace WeaponPaints
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
|
||||
"keychain slot 0 offset z", keyChain.OffsetZ);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
|
||||
"keychain slot 0 seed", ViewAsFloat(keyChain.Seed));
|
||||
"keychain slot 0 seed", keyChain.Seed);
|
||||
}
|
||||
|
||||
private static void GiveKnifeToPlayer(CCSPlayerController? player)
|
||||
@@ -380,14 +378,9 @@ namespace WeaponPaints
|
||||
pawn.SetModel(model);
|
||||
}
|
||||
|
||||
CEconItemView item = pawn.EconGloves;
|
||||
|
||||
item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
item.AttributeList.Attributes.RemoveAll();
|
||||
|
||||
|
||||
Instance.AddTimer(0.08f, () =>
|
||||
{
|
||||
{
|
||||
CEconItemView item = pawn.EconGloves;
|
||||
try
|
||||
{
|
||||
if (!player.IsValid)
|
||||
@@ -403,19 +396,13 @@ namespace WeaponPaints
|
||||
return;
|
||||
|
||||
item.ItemDefinitionIndex = gloveId;
|
||||
|
||||
UpdatePlayerEconItemId(item);
|
||||
item.ItemIDLow = 16384 & 0xFFFFFFFF;
|
||||
item.ItemIDHigh = 16384;
|
||||
|
||||
item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture prefab", weaponInfo.Paint);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture seed", weaponInfo.Seed);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture wear", weaponInfo.Wear);
|
||||
|
||||
item.AttributeList.Attributes.RemoveAll();
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture prefab", weaponInfo.Paint);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture seed", weaponInfo.Seed);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture wear", weaponInfo.Wear);
|
||||
|
||||
item.Initialized = true;
|
||||
|
||||
SetBodygroup(pawn, "default_gloves", 1);
|
||||
|
||||
@@ -21,11 +21,11 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
|
||||
public override void Load(bool hotReload)
|
||||
{
|
||||
// Hardcoded hotfix needs to be changed later (Not needed 17.09.2025)
|
||||
//if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||
// Patch.PerformPatch("0F 85 ? ? ? ? 31 C0 B9 ? ? ? ? BA ? ? ? ? 66 0F EF C0 31 F6 31 FF 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 0F 29 45 ? 48 C7 45 ? ? ? ? ? C7 45 ? ? ? ? ? 66 89 45 ? E8 ? ? ? ? 41 89 C5 85 C0 0F 8E", "90 90 90 90 90 90");
|
||||
//else
|
||||
// Patch.PerformPatch("74 ? 48 8D 0D ? ? ? ? FF 15 ? ? ? ? EB ? BA", "EB");
|
||||
// Hardcoded hotfix needs to be changed later
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||
Patch.PerformPatch("0F 85 ? ? ? ? 31 C0 B9 ? ? ? ? BA ? ? ? ? 66 0F EF C0 31 F6 31 FF 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 0F 29 45 ? 48 C7 45 ? ? ? ? ? C7 45 ? ? ? ? ? 66 89 45 ? E8 ? ? ? ? 41 89 C5 85 C0 0F 8E", "90 90 90 90 90 90");
|
||||
else
|
||||
Patch.PerformPatch("74 ? 48 8D 0D ? ? ? ? FF 15 ? ? ? ? EB ? BA", "EB");
|
||||
|
||||
Instance = this;
|
||||
|
||||
@@ -140,4 +140,4 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user