Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cfb49e1498 | ||
|
|
bbdb4b82ce | ||
|
|
bfb7defcaa | ||
|
|
5626c32d30 | ||
|
|
a6575e9ab2 | ||
|
|
683efbd0ae | ||
|
|
3bc9123a71 | ||
|
|
f75ea76deb | ||
|
|
bf0deda5d7 | ||
|
|
548fdb642d | ||
|
|
8cb9563994 | ||
|
|
e45714cb9a | ||
|
|
97e73bfd53 | ||
|
|
6dc047477c | ||
|
|
ced010645d | ||
|
|
b030d5c7e1 | ||
|
|
90771f76c7 | ||
|
|
ad8e51a403 | ||
|
|
8c1edddd1e | ||
|
|
6f86cddd13 | ||
|
|
24801e814b | ||
|
|
77def8a305 | ||
|
|
651fae4d23 | ||
|
|
692c22f7d1 | ||
|
|
cf07106641 | ||
|
|
44177f18fe | ||
|
|
88274d78d8 | ||
|
|
5cef723674 | ||
|
|
5f83645867 | ||
|
|
89005fdd4b | ||
|
|
4f432cddf5 |
4
.github/workflows/build.yml
vendored
@@ -62,6 +62,10 @@ jobs:
|
||||
run: cp website/data/skins.json ${{ env.OUTPUT_PATH }}/skins.json
|
||||
- name: Copy gloves.json
|
||||
run: cp website/data/gloves.json ${{ env.OUTPUT_PATH }}/gloves.json
|
||||
- name: Copy agents.json
|
||||
run: cp website/data/agents.json ${{ env.OUTPUT_PATH }}/agents.json
|
||||
- name: Copy music.json
|
||||
run: cp website/data/music.json ${{ env.OUTPUT_PATH }}/music.json
|
||||
- name: Zip
|
||||
run: zip -r "${{ env.PROJECT_NAME }}.zip" "${{ env.OUTPUT_PATH }}" gamedata/
|
||||
- name: Clean files Website
|
||||
|
||||
302
Commands.cs
@@ -1,6 +1,7 @@
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Commands;
|
||||
using CounterStrikeSharp.API.Modules.Menu;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace WeaponPaints
|
||||
{
|
||||
@@ -32,30 +33,26 @@ namespace WeaponPaints
|
||||
|
||||
if (weaponSync != null)
|
||||
{
|
||||
var weaponTasks = new List<Task>();
|
||||
|
||||
weaponTasks.Add(Task.Run(async () =>
|
||||
if (Config.Additional.SkinEnabled)
|
||||
{
|
||||
await weaponSync.GetWeaponPaintsFromDatabase(playerInfo);
|
||||
}));
|
||||
|
||||
if (Config.Additional.GloveEnabled)
|
||||
{
|
||||
weaponTasks.Add(Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.GetGloveFromDatabase(playerInfo);
|
||||
}));
|
||||
_ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
|
||||
}
|
||||
|
||||
if (Config.Additional.KnifeEnabled)
|
||||
{
|
||||
weaponTasks.Add(Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.GetKnifeFromDatabase(playerInfo);
|
||||
}));
|
||||
_ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.GloveEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.AgentEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.MusicEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetMusicFromDatabase(playerInfo));
|
||||
}
|
||||
|
||||
Task.WaitAll(weaponTasks.ToArray());
|
||||
|
||||
RefreshGloves(player);
|
||||
RefreshWeapons(player);
|
||||
@@ -95,6 +92,18 @@ namespace WeaponPaints
|
||||
player!.Print(Localizer["wp_info_glove"]);
|
||||
}
|
||||
|
||||
if (Config.Additional.AgentEnabled)
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_info_agent"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_info_agent"]);
|
||||
}
|
||||
|
||||
if (Config.Additional.MusicEnabled)
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_info_music"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_info_music"]);
|
||||
}
|
||||
|
||||
if (Config.Additional.KnifeEnabled)
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_info_knife"]))
|
||||
{
|
||||
@@ -168,7 +177,7 @@ namespace WeaponPaints
|
||||
RefreshWeapons(player);
|
||||
|
||||
if (weaponSync != null)
|
||||
Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey));
|
||||
_ = Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey));
|
||||
}
|
||||
};
|
||||
foreach (var knifePair in knivesOnly)
|
||||
@@ -233,7 +242,6 @@ namespace WeaponPaints
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
string selectedSkin = opt.Text;
|
||||
string selectedPaintID = selectedSkin.Substring(selectedSkin.LastIndexOf('(') + 1).Trim(')');
|
||||
|
||||
@@ -282,7 +290,7 @@ namespace WeaponPaints
|
||||
|
||||
try
|
||||
{
|
||||
Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo));
|
||||
_ = Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -403,20 +411,24 @@ namespace WeaponPaints
|
||||
|
||||
if (weaponSync != null)
|
||||
{
|
||||
Task.Run(async () =>
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex);
|
||||
|
||||
if (!gPlayerWeaponsInfo[playerInfo.Slot].ContainsKey(weaponDefindex))
|
||||
if (!gPlayerWeaponsInfo[playerInfo.Slot].TryGetValue(weaponDefindex, out WeaponInfo? value))
|
||||
{
|
||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex] = new WeaponInfo();
|
||||
value = new WeaponInfo();
|
||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex] = value;
|
||||
}
|
||||
|
||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Paint = paint;
|
||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Wear = 0.00f;
|
||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Seed = 0;
|
||||
value.Paint = paint;
|
||||
value.Wear = 0.00f;
|
||||
value.Seed = 0;
|
||||
|
||||
await weaponSync.SyncWeaponPaintsToDatabase(playerInfo);
|
||||
});
|
||||
}
|
||||
|
||||
RefreshGloves(player);
|
||||
}
|
||||
};
|
||||
@@ -451,5 +463,239 @@ namespace WeaponPaints
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void SetupAgentsMenu()
|
||||
{
|
||||
var handleAgentSelection = (CCSPlayerController? player, ChatMenuOption option) =>
|
||||
{
|
||||
if (!Utility.IsPlayerValid(player) || player is null) return;
|
||||
|
||||
string selectedPaintName = option.Text;
|
||||
var selectedAgent = agentsList.FirstOrDefault(g =>
|
||||
g.ContainsKey("agent_name") &&
|
||||
g["agent_name"] != null && g["agent_name"]!.ToString() == selectedPaintName &&
|
||||
g["team"] != null && (int)(g["team"]!) == player.TeamNum);
|
||||
|
||||
if (selectedAgent == null) return;
|
||||
|
||||
if (
|
||||
selectedAgent != null &&
|
||||
selectedAgent.ContainsKey("model")
|
||||
)
|
||||
{
|
||||
PlayerInfo playerInfo = new PlayerInfo
|
||||
{
|
||||
UserId = player.UserId,
|
||||
Slot = player.Slot,
|
||||
Index = (int)player.Index,
|
||||
SteamId = player.SteamID.ToString(),
|
||||
Name = player.PlayerName,
|
||||
IpAddress = player.IpAddress?.Split(":")[0]
|
||||
};
|
||||
|
||||
if (Config.Additional.ShowSkinImage)
|
||||
{
|
||||
string image = selectedAgent["image"]?.ToString() ?? "";
|
||||
PlayerWeaponImage[player.Slot] = image;
|
||||
AddTimer(2.0f, () => PlayerWeaponImage.Remove(player.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_agent_menu_select"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_agent_menu_select", selectedPaintName]);
|
||||
}
|
||||
|
||||
if (player.TeamNum == 3)
|
||||
{
|
||||
g_playersAgent.AddOrUpdate(player.Slot,
|
||||
key => (selectedAgent["model"]!.ToString().Equals("null") ? null : selectedAgent["model"]!.ToString(), null),
|
||||
(key, oldValue) => (selectedAgent["model"]!.ToString().Equals("null") ? null : selectedAgent["model"]!.ToString(), oldValue.T));
|
||||
}
|
||||
else
|
||||
{
|
||||
g_playersAgent.AddOrUpdate(player.Slot,
|
||||
key => (null, selectedAgent["model"]!.ToString().Equals("null") ? null : selectedAgent["model"]!.ToString()),
|
||||
(key, oldValue) => (oldValue.CT, selectedAgent["model"]!.ToString().Equals("null") ? null : selectedAgent["model"]!.ToString())
|
||||
);
|
||||
}
|
||||
|
||||
if (weaponSync != null)
|
||||
{
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.SyncAgentToDatabase(playerInfo);
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Command to open the weapon selection menu for players
|
||||
AddCommand($"css_{Config.Additional.CommandAgent}", "Agents selection menu", (player, info) =>
|
||||
{
|
||||
if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
|
||||
|
||||
if (player == null || player.UserId == null) return;
|
||||
|
||||
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) ||
|
||||
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow))
|
||||
{
|
||||
var agentsSelectionMenu = new ChatMenu(Localizer["wp_agent_menu_title"]);
|
||||
agentsSelectionMenu.PostSelectAction = PostSelectAction.Close;
|
||||
|
||||
var filteredAgents = agentsList.Where(agentObject =>
|
||||
{
|
||||
if (agentObject["team"]?.Value<int>() is int teamNum)
|
||||
{
|
||||
return teamNum == player.TeamNum;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// Add weapon options to the weapon selection menu
|
||||
|
||||
foreach (var agentObject in filteredAgents)
|
||||
{
|
||||
string paintName = agentObject["agent_name"]?.ToString() ?? "";
|
||||
|
||||
if (paintName.Length > 0)
|
||||
agentsSelectionMenu.AddMenuOption(paintName, handleAgentSelection);
|
||||
}
|
||||
|
||||
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
|
||||
MenuManager.OpenChatMenu(player, agentsSelectionMenu);
|
||||
return;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_command_cooldown"]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void SetupMusicMenu()
|
||||
{
|
||||
var musicSelectionMenu = new ChatMenu(Localizer["wp_music_menu_title"]);
|
||||
musicSelectionMenu.PostSelectAction = PostSelectAction.Close;
|
||||
|
||||
var handleMusicSelection = (CCSPlayerController? player, ChatMenuOption option) =>
|
||||
{
|
||||
if (!Utility.IsPlayerValid(player) || player is null) return;
|
||||
|
||||
string selectedPaintName = option.Text;
|
||||
|
||||
var selectedMusic = musicList.FirstOrDefault(g => g.ContainsKey("name") && g["name"]?.ToString() == selectedPaintName);
|
||||
if (selectedMusic != null)
|
||||
{
|
||||
if (
|
||||
selectedMusic != null &&
|
||||
selectedMusic.ContainsKey("id") &&
|
||||
selectedMusic.ContainsKey("name") &&
|
||||
int.TryParse(selectedMusic["id"]?.ToString(), out int paint)
|
||||
)
|
||||
{
|
||||
if (Config.Additional.ShowSkinImage)
|
||||
{
|
||||
string image = selectedMusic["image"]?.ToString() ?? "";
|
||||
PlayerWeaponImage[player.Slot] = image;
|
||||
AddTimer(2.0f, () => PlayerWeaponImage.Remove(player.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
PlayerInfo playerInfo = new PlayerInfo
|
||||
{
|
||||
UserId = player.UserId,
|
||||
Slot = player.Slot,
|
||||
Index = (int)player.Index,
|
||||
SteamId = player.SteamID.ToString(),
|
||||
Name = player.PlayerName,
|
||||
IpAddress = player.IpAddress?.Split(":")[0]
|
||||
};
|
||||
|
||||
if (paint != 0)
|
||||
{
|
||||
g_playersMusic[player.Slot] = (ushort)paint;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_playersMusic[player.Slot] = 0;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_music_menu_select"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_music_menu_select", selectedPaintName]);
|
||||
}
|
||||
|
||||
if (weaponSync != null)
|
||||
{
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.SyncMusicToDatabase(playerInfo, (ushort)paint);
|
||||
});
|
||||
}
|
||||
|
||||
//RefreshGloves(player);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayerInfo playerInfo = new PlayerInfo
|
||||
{
|
||||
UserId = player.UserId,
|
||||
Slot = player.Slot,
|
||||
Index = (int)player.Index,
|
||||
SteamId = player.SteamID.ToString(),
|
||||
Name = player.PlayerName,
|
||||
IpAddress = player.IpAddress?.Split(":")[0]
|
||||
};
|
||||
|
||||
g_playersMusic[player.Slot] = 0;
|
||||
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_music_menu_select"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_music_menu_select", Localizer["None"]]);
|
||||
}
|
||||
|
||||
if (weaponSync != null)
|
||||
{
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
await weaponSync.SyncMusicToDatabase(playerInfo, 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
musicSelectionMenu.AddMenuOption(Localizer["None"], handleMusicSelection);
|
||||
// Add weapon options to the weapon selection menu
|
||||
foreach (var musicObject in musicList)
|
||||
{
|
||||
string paintName = musicObject["name"]?.ToString() ?? "";
|
||||
|
||||
if (paintName.Length > 0)
|
||||
musicSelectionMenu.AddMenuOption(paintName, handleMusicSelection);
|
||||
}
|
||||
|
||||
// Command to open the weapon selection menu for players
|
||||
AddCommand($"css_{Config.Additional.CommandMusic}", "Music selection menu", (player, info) =>
|
||||
{
|
||||
if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
|
||||
|
||||
if (player == null || player.UserId == null) return;
|
||||
|
||||
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) ||
|
||||
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow))
|
||||
{
|
||||
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
|
||||
MenuManager.OpenChatMenu(player, musicSelectionMenu);
|
||||
return;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
|
||||
{
|
||||
player!.Print(Localizer["wp_command_cooldown"]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
17
Config.cs
@@ -11,6 +11,12 @@ namespace WeaponPaints
|
||||
[JsonPropertyName("GloveEnabled")]
|
||||
public bool GloveEnabled { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("MusicEnabled")]
|
||||
public bool MusicEnabled { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("AgentEnabled")]
|
||||
public bool AgentEnabled { get; set; } = true;
|
||||
|
||||
[JsonPropertyName("SkinEnabled")]
|
||||
public bool SkinEnabled { get; set; } = true;
|
||||
|
||||
@@ -23,9 +29,15 @@ namespace WeaponPaints
|
||||
[JsonPropertyName("CommandKnife")]
|
||||
public string CommandKnife { get; set; } = "knife";
|
||||
|
||||
[JsonPropertyName("CommandMusic")]
|
||||
public string CommandMusic { get; set; } = "music";
|
||||
|
||||
[JsonPropertyName("CommandGlove")]
|
||||
public string CommandGlove { get; set; } = "gloves";
|
||||
|
||||
[JsonPropertyName("CommandAgent")]
|
||||
public string CommandAgent { get; set; } = "agents";
|
||||
|
||||
[JsonPropertyName("CommandSkin")]
|
||||
public string CommandSkin { get; set; } = "ws";
|
||||
|
||||
@@ -44,16 +56,13 @@ namespace WeaponPaints
|
||||
[JsonPropertyName("GiveRandomSkin")]
|
||||
public bool GiveRandomSkin { get; set; } = false;
|
||||
|
||||
[JsonPropertyName("GiveKnifeAfterRemove")]
|
||||
public bool GiveKnifeAfterRemove { get; set; } = false;
|
||||
|
||||
[JsonPropertyName("ShowSkinImage")]
|
||||
public bool ShowSkinImage { get; set; } = true;
|
||||
}
|
||||
|
||||
public class WeaponPaintsConfig : BasePluginConfig
|
||||
{
|
||||
public override int Version { get; set; } = 5;
|
||||
public override int Version { get; set; } = 6;
|
||||
|
||||
[JsonPropertyName("DatabaseHost")]
|
||||
public string DatabaseHost { get; set; } = "";
|
||||
|
||||
116
Events.cs
@@ -1,7 +1,7 @@
|
||||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Core.Attributes.Registration;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Entities;
|
||||
|
||||
namespace WeaponPaints
|
||||
{
|
||||
@@ -27,30 +27,29 @@ namespace WeaponPaints
|
||||
|
||||
try
|
||||
{
|
||||
List<Task> tasks = new List<Task>();
|
||||
|
||||
if (Config.Additional.SkinEnabled)
|
||||
{
|
||||
tasks.Add(Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo)));
|
||||
_ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.KnifeEnabled)
|
||||
{
|
||||
tasks.Add(Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo)));
|
||||
_ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.GloveEnabled)
|
||||
{
|
||||
tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)));
|
||||
_ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
|
||||
}
|
||||
|
||||
Task.WaitAll(tasks.ToArray());
|
||||
}
|
||||
catch (AggregateException ex)
|
||||
{
|
||||
// Handle the exception
|
||||
foreach (var innerException in ex.InnerExceptions)
|
||||
if (Config.Additional.AgentEnabled)
|
||||
{
|
||||
Console.WriteLine($"An error occurred for player {player}: {innerException.Message}");
|
||||
_ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.MusicEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetMusicFromDatabase(playerInfo));
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
|
||||
return HookResult.Continue;
|
||||
@@ -86,6 +85,14 @@ namespace WeaponPaints
|
||||
{
|
||||
g_playersGlove.TryRemove(player.Slot, out _);
|
||||
}
|
||||
if (Config.Additional.AgentEnabled)
|
||||
{
|
||||
g_playersAgent.TryRemove(player.Slot, out _);
|
||||
}
|
||||
if (Config.Additional.MusicEnabled)
|
||||
{
|
||||
g_playersMusic.TryRemove(player.Slot, out _);
|
||||
}
|
||||
|
||||
commandsCooldown.Remove(player.Slot);
|
||||
|
||||
@@ -95,9 +102,7 @@ namespace WeaponPaints
|
||||
private void GivePlayerWeaponSkin(CCSPlayerController player, CBasePlayerWeapon weapon)
|
||||
{
|
||||
if (!Config.Additional.SkinEnabled) return;
|
||||
|
||||
if (player is null || weapon is null || !weapon.IsValid || !Utility.IsPlayerValid(player)) return;
|
||||
|
||||
if (!gPlayerWeaponsInfo.ContainsKey(player.Slot)) return;
|
||||
|
||||
bool isKnife = weapon.DesignerName.Contains("knife") || weapon.DesignerName.Contains("bayonet");
|
||||
@@ -155,8 +160,9 @@ namespace WeaponPaints
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefIndex)) return;
|
||||
WeaponInfo weaponInfo = gPlayerWeaponsInfo[player.Slot][weaponDefIndex];
|
||||
if (!gPlayerWeaponsInfo[player.Slot].TryGetValue(weaponDefIndex, out WeaponInfo? value) || value.Paint == 0) return;
|
||||
|
||||
WeaponInfo weaponInfo = value;
|
||||
//Log($"Apply on {weapon.DesignerName}({weapon.AttributeManager.Item.ItemDefinitionIndex}) paint {gPlayerWeaponPaints[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} seed {gPlayerWeaponSeed[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} wear {gPlayerWeaponWear[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]}");
|
||||
weapon.AttributeManager.Item.ItemID = 16384;
|
||||
weapon.AttributeManager.Item.ItemIDLow = 16384 & 0xFFFFFFFF;
|
||||
@@ -190,19 +196,6 @@ namespace WeaponPaints
|
||||
|
||||
if (_database != null)
|
||||
weaponSync = new WeaponSynchronization(_database, Config);
|
||||
|
||||
|
||||
// needed for now
|
||||
/*
|
||||
AddTimer(2.0f, () =>
|
||||
{
|
||||
|
||||
NativeAPI.IssueServerCommand("mp_t_default_melee \"\"");
|
||||
NativeAPI.IssueServerCommand("mp_ct_default_melee \"\"");
|
||||
|
||||
//NativeAPI.IssueServerCommand("mp_equipment_reset_rounds 0");
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)
|
||||
@@ -219,9 +212,8 @@ namespace WeaponPaints
|
||||
|
||||
g_knifePickupCount[player.Slot] = 0;
|
||||
|
||||
//if (!PlayerHasKnife(player))
|
||||
//GiveKnifeToPlayer(player);
|
||||
|
||||
GivePlayerMusicKit(player);
|
||||
GivePlayerAgent(player);
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
RefreshGloves(player);
|
||||
@@ -249,6 +241,7 @@ namespace WeaponPaints
|
||||
return HookResult.Continue;
|
||||
}
|
||||
|
||||
/*
|
||||
public HookResult OnGiveNamedItemPost(DynamicHook hook)
|
||||
{
|
||||
var itemServices = hook.GetParam<CCSPlayer_ItemServices>(0);
|
||||
@@ -262,6 +255,7 @@ namespace WeaponPaints
|
||||
|
||||
return HookResult.Continue;
|
||||
}
|
||||
*/
|
||||
|
||||
public void OnEntitySpawned(CEntityInstance entity)
|
||||
{
|
||||
@@ -272,16 +266,59 @@ namespace WeaponPaints
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
var weapon = new CBasePlayerWeapon(entity.Handle);
|
||||
if (!weapon.IsValid) return;
|
||||
if (weapon == null || !weapon.IsValid || weapon.OwnerEntity.Value == null) return;
|
||||
|
||||
var player = Utilities.GetPlayerFromSteamId(weapon.OriginalOwnerXuidLow);
|
||||
if (player == null || !Utility.IsPlayerValid(player)) return;
|
||||
try
|
||||
{
|
||||
SteamID? _steamid = null;
|
||||
|
||||
GivePlayerWeaponSkin(player, weapon);
|
||||
if (weapon.OriginalOwnerXuidLow > 0)
|
||||
_steamid = new(weapon.OriginalOwnerXuidLow);
|
||||
|
||||
CCSPlayerController? player = null;
|
||||
|
||||
if (_steamid != null && _steamid.IsValid())
|
||||
{
|
||||
player = Utilities.GetPlayers().Where(p => p is not null && p.IsValid && p.SteamID == _steamid.SteamId64).FirstOrDefault();
|
||||
|
||||
if (player == null)
|
||||
player = Utilities.GetPlayerFromSteamId(weapon.OriginalOwnerXuidLow);
|
||||
}
|
||||
else
|
||||
{
|
||||
CCSWeaponBaseGun gun = weapon.As<CCSWeaponBaseGun>();
|
||||
player = Utilities.GetPlayerFromIndex((int)weapon.OwnerEntity.Index) ?? Utilities.GetPlayerFromIndex((int)gun.OwnerEntity.Value!.Index);
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(player?.PlayerName)) return;
|
||||
if (player is null || !Utility.IsPlayerValid(player)) return;
|
||||
|
||||
GivePlayerWeaponSkin(player, weapon);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTick()
|
||||
{
|
||||
foreach (var player in Utilities.GetPlayers().Where(p =>
|
||||
p is not null && p.IsValid && p.PlayerPawn != null && p.PlayerPawn.IsValid &&
|
||||
(LifeState_t)p.LifeState == LifeState_t.LIFE_ALIVE && p.SteamID.ToString().Length == 17
|
||||
&& !p.IsBot && !p.IsHLTV && p.Connected == PlayerConnectedState.PlayerConnected
|
||||
)
|
||||
)
|
||||
{
|
||||
if (Config.Additional.ShowSkinImage && PlayerWeaponImage.TryGetValue(player.Slot, out string? value) && !string.IsNullOrEmpty(value))
|
||||
{
|
||||
player.PrintToCenterHtml("<img src='{PATH}'</img>".Replace("{PATH}", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RegisterListeners()
|
||||
{
|
||||
RegisterListener<Listeners.OnMapStart>(OnMapStart);
|
||||
@@ -290,9 +327,8 @@ namespace WeaponPaints
|
||||
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
|
||||
RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
|
||||
RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned);
|
||||
RegisterListener<Listeners.OnTick>(OnTick);
|
||||
//VirtualFunctions.GiveNamedItemFunc.Hook(OnGiveNamedItemPost, HookMode.Post);
|
||||
|
||||
//HookEntityOutput("weapon_knife", "OnPlayerPickup", OnPickup);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,12 +9,14 @@ Unfinished, unoptimized and not fully functional ugly demo weapon paints plugin
|
||||
[](https://ko-fi.com/E1E2G0P2O) or [](https://steamcommunity.com/tradeoffer/new/?partner=41515647&token=gW2W-nXE)
|
||||
|
||||
## Features
|
||||
- Changes only paint, seed and wear on weapons and knives
|
||||
- Changes only paint, seed and wear on weapons, knives, gloves and agents
|
||||
- MySQL based
|
||||
- Data syncs on player connect
|
||||
- Added command **`!wp`** to refresh skins ***(with cooldown in seconds can be configured)***
|
||||
- Added command **`!ws`** to show website
|
||||
- Added command **`!knife`** to show menu with knives
|
||||
- Added command **`!gloves`** to show menu with gloves
|
||||
- Added command **`!agents`** to show menu with agents
|
||||
- Translations support, submit a PR if you want to share your translation
|
||||
|
||||
## CS2 Server
|
||||
@@ -89,11 +91,6 @@ Set FollowCSGOGuidelines to false in cssharp’s core.jcon config
|
||||
**Database error table does not exists:**
|
||||
Plugin is not loaded or configured with mysql credentials. Tables are auto-created by plugin.
|
||||
|
||||
**Knives are disappearing:**
|
||||
Set in config GiveKnifeAfterRemove to true
|
||||
|
||||
**Knives are not changing for players:**
|
||||
You can't change knife if you have your own equipped
|
||||
</details>
|
||||
|
||||
### Use this plugin at your own risk! Using this may lead to GSLT ban or something else Valve come with. [Valve Server guidelines](https://blog.counter-strike.net/index.php/server_guidelines/)
|
||||
|
||||
73
Utility.cs
@@ -44,22 +44,33 @@ namespace WeaponPaints
|
||||
string[] createTableQueries = new[]
|
||||
{
|
||||
@"CREATE TABLE IF NOT EXISTS `wp_player_skins` (
|
||||
`steamid` varchar(64) NOT NULL,
|
||||
`steamid` varchar(18) NOT NULL,
|
||||
`weapon_defindex` int(6) NOT NULL,
|
||||
`weapon_paint_id` int(6) NOT NULL,
|
||||
`weapon_wear` float NOT NULL DEFAULT 0.000001,
|
||||
`weapon_seed` int(16) NOT NULL DEFAULT 0
|
||||
) ENGINE=InnoDB",
|
||||
@"CREATE TABLE IF NOT EXISTS `wp_player_knife` (
|
||||
`steamid` varchar(64) NOT NULL,
|
||||
`steamid` varchar(18) NOT NULL,
|
||||
`knife` varchar(64) NOT NULL,
|
||||
UNIQUE (`steamid`)
|
||||
) ENGINE = InnoDB",
|
||||
@"CREATE TABLE IF NOT EXISTS `wp_player_gloves` (
|
||||
`steamid` varchar(64) NOT NULL,
|
||||
`steamid` varchar(18) NOT NULL,
|
||||
`weapon_defindex` int(11) NOT NULL,
|
||||
UNIQUE (`steamid`)
|
||||
) ENGINE=InnoDB"
|
||||
) ENGINE=InnoDB",
|
||||
@"CREATE TABLE IF NOT EXISTS `wp_player_agents` (
|
||||
`steamid` varchar(18) NOT NULL,
|
||||
`agent_ct` varchar(64) DEFAULT NULL,
|
||||
`agent_t` varchar(64) DEFAULT NULL,
|
||||
UNIQUE (`steamid`)
|
||||
) ENGINE=InnoDB",
|
||||
@"CREATE TABLE IF NOT EXISTS `wp_player_music` (
|
||||
`steamid` varchar(64) NOT NULL,
|
||||
`music_id` int(11) NOT NULL,
|
||||
UNIQUE (`steamid`)
|
||||
) ENGINE=InnoDB",
|
||||
};
|
||||
|
||||
foreach (var query in createTableQueries)
|
||||
@@ -83,10 +94,9 @@ namespace WeaponPaints
|
||||
|
||||
internal static bool IsPlayerValid(CCSPlayerController? player)
|
||||
{
|
||||
if (player is null) return false;
|
||||
if (player is null || WeaponPaints.weaponSync is null) return false;
|
||||
|
||||
return (player is not null && player.IsValid && !player.IsBot && !player.IsHLTV && player.UserId.HasValue
|
||||
&& WeaponPaints.weaponSync != null && player.Connected == PlayerConnectedState.PlayerConnected && player.SteamID.ToString().Length == 17);
|
||||
return (player.IsValid && !player.IsBot && !player.IsHLTV && player.UserId.HasValue);
|
||||
}
|
||||
|
||||
internal static void LoadSkinsFromFile(string filePath)
|
||||
@@ -117,6 +127,34 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
internal static void LoadAgentsFromFile(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(filePath);
|
||||
var deserializedSkins = JsonConvert.DeserializeObject<List<JObject>>(json);
|
||||
WeaponPaints.agentsList = deserializedSkins ?? new List<JObject>();
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
internal static void LoadMusicFromFile(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(filePath);
|
||||
var deserializedSkins = JsonConvert.DeserializeObject<List<JObject>>(json);
|
||||
WeaponPaints.musicList = deserializedSkins ?? new List<JObject>();
|
||||
}
|
||||
catch (FileNotFoundException)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
internal static void Log(string message)
|
||||
{
|
||||
Console.BackgroundColor = ConsoleColor.DarkGray;
|
||||
@@ -206,26 +244,5 @@ namespace WeaponPaints
|
||||
Console.WriteLine(" >> GitHub: https://github.com/Nereziel/cs2-WeaponPaints");
|
||||
Console.WriteLine(" ");
|
||||
}
|
||||
|
||||
/*(
|
||||
internal static void TestDatabaseConnection()
|
||||
{
|
||||
try
|
||||
{
|
||||
using var connection = new MySqlConnection(BuildDatabaseConnectionString());
|
||||
connection.Open();
|
||||
|
||||
if (connection.State != System.Data.ConnectionState.Open)
|
||||
{
|
||||
throw new Exception("[WeaponPaints] Unable connect to database!");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception("[WeaponPaints] Unknown mysql exception! " + ex.Message);
|
||||
}
|
||||
CheckDatabaseTables();
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
125
WeaponAction.cs
@@ -17,29 +17,6 @@ namespace WeaponPaints
|
||||
|
||||
if (PlayerHasKnife(player)) return;
|
||||
|
||||
//string knifeToGive;
|
||||
//if (g_playersKnife.TryGetValue(player.Slot, out var knife))
|
||||
//{
|
||||
// knifeToGive = knife;
|
||||
//}
|
||||
//else if (_config.Additional.GiveRandomKnife)
|
||||
//{
|
||||
// var knifeTypes = weaponList.Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet")).ToList();
|
||||
|
||||
// if (knifeTypes.Count == 0)
|
||||
// {
|
||||
// Utility.Log("No valid knife types found.");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// Random random = new();
|
||||
// int index = random.Next(knifeTypes.Count);
|
||||
// knifeToGive = knifeTypes[index].Key;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
//}
|
||||
|
||||
string knifeToGive = (CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife";
|
||||
player.GiveNamedItem(CsItem.Knife);
|
||||
}
|
||||
@@ -88,10 +65,8 @@ namespace WeaponPaints
|
||||
|
||||
int playerTeam = player.TeamNum;
|
||||
|
||||
//Dictionary<string, (int, int)> weaponsWithAmmo = new Dictionary<string, (int, int)>();
|
||||
Dictionary<string, List<(int, int)>> weaponsWithAmmo = new Dictionary<string, List<(int, int)>>();
|
||||
|
||||
// Iterate through each weapon
|
||||
foreach (var weapon in weapons)
|
||||
{
|
||||
if (weapon == null || !weapon.IsValid || weapon.Value == null ||
|
||||
@@ -124,12 +99,13 @@ namespace WeaponPaints
|
||||
int clip1 = weapon.Value.Clip1;
|
||||
int reservedAmmo = weapon.Value.ReserveAmmo[0];
|
||||
|
||||
if (!weaponsWithAmmo.ContainsKey(weaponByDefindex))
|
||||
if (!weaponsWithAmmo.TryGetValue(weaponByDefindex, out List<(int, int)>? value))
|
||||
{
|
||||
weaponsWithAmmo.Add(weaponByDefindex, new List<(int, int)>());
|
||||
value = new List<(int, int)>();
|
||||
weaponsWithAmmo.Add(weaponByDefindex, value);
|
||||
}
|
||||
|
||||
weaponsWithAmmo[weaponByDefindex].Add((clip1, reservedAmmo));
|
||||
value.Add((clip1, reservedAmmo));
|
||||
|
||||
if (gun == null || gun.VData == null) return;
|
||||
|
||||
@@ -208,63 +184,9 @@ namespace WeaponPaints
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}, TimerFlags.STOP_ON_MAPCHANGE);
|
||||
}
|
||||
|
||||
/*
|
||||
internal void RefreshKnife(CCSPlayerController? player)
|
||||
{
|
||||
return;
|
||||
if (player == null || !player.IsValid || player.PlayerPawn?.Value == null)
|
||||
return;
|
||||
|
||||
if (player.PlayerPawn.Value.WeaponServices == null)
|
||||
return;
|
||||
|
||||
var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons;
|
||||
if (weapons != null && weapons.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
player.ExecuteClientCommand("slot 3");
|
||||
player.ExecuteClientCommand("slot 3");
|
||||
|
||||
var weapon = player.PlayerPawn.Value.WeaponServices.ActiveWeapon;
|
||||
if (weapon is null || !weapon.IsValid || weapon.Value == null) return;
|
||||
CCSWeaponBaseVData? weaponData = weapon.Value.As<CCSWeaponBase>().VData;
|
||||
|
||||
if (weapon.Value.DesignerName.Contains("knife") || weaponData?.GearSlot == gear_slot_t.GEAR_SLOT_KNIFE)
|
||||
{
|
||||
AddTimer(0.2f, () =>
|
||||
{
|
||||
player.ExecuteClientCommand("slot 3");
|
||||
player.DropActiveWeapon();
|
||||
|
||||
AddTimer(0.6f, () =>
|
||||
{
|
||||
if (weapon.IsValid)
|
||||
weapon.Value.Remove();
|
||||
GiveKnifeToPlayer(player);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogWarning($"Cannot remove knife: {ex.Message}");
|
||||
}
|
||||
return;
|
||||
foreach (var weapon in weapons)
|
||||
{
|
||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && weapon.Index > 0)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
private static void RefreshGloves(CCSPlayerController player)
|
||||
{
|
||||
if (!Utility.IsPlayerValid(player) || (LifeState_t)player.LifeState != LifeState_t.LIFE_ALIVE) return;
|
||||
@@ -375,6 +297,40 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
public static void GivePlayerAgent(CCSPlayerController player)
|
||||
{
|
||||
if (!g_playersAgent.ContainsKey(player.Slot)) return;
|
||||
|
||||
string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T;
|
||||
if (string.IsNullOrEmpty(model)) return;
|
||||
|
||||
if (player.PlayerPawn.Value == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
player.PlayerPawn.Value.SetModel(
|
||||
$"characters/models/{model}.vmdl"
|
||||
);
|
||||
});
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static void GivePlayerMusicKit(CCSPlayerController player)
|
||||
{
|
||||
if (!g_playersMusic.ContainsKey(player.Slot)) return;
|
||||
if (player.InventoryServices == null) return;
|
||||
|
||||
Console.WriteLine(g_playersMusic[player.Slot]);
|
||||
|
||||
player.InventoryServices.MusicID = g_playersMusic[player.Slot];
|
||||
}
|
||||
|
||||
public static CCSPlayerController? GetPlayerFromItemServices(CCSPlayer_ItemServices itemServices)
|
||||
{
|
||||
var pawn = itemServices.Pawn.Value;
|
||||
@@ -384,11 +340,6 @@ namespace WeaponPaints
|
||||
return player;
|
||||
}
|
||||
|
||||
private static CSkeletonInstance GetSkeletonInstance(CGameSceneNode node)
|
||||
{
|
||||
Func<nint, nint> GetSkeletonInstance = VirtualFunction.Create<nint, nint>(node.Handle, 8);
|
||||
return new CSkeletonInstance(GetSkeletonInstance(node.Handle));
|
||||
}
|
||||
private static unsafe CBaseViewModel? GetPlayerViewModel(CCSPlayerController player)
|
||||
{
|
||||
if (player.PlayerPawn.Value == null || player.PlayerPawn.Value.ViewModelServices == null) return null;
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Collections.Concurrent;
|
||||
|
||||
namespace WeaponPaints;
|
||||
|
||||
[MinimumApiVersion(178)]
|
||||
[MinimumApiVersion(195)]
|
||||
public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
|
||||
{
|
||||
internal static WeaponPaints Instance { get; private set; } = new();
|
||||
@@ -75,19 +75,23 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
{ "weapon_knife_kukri", "Kukri Knife" }
|
||||
};
|
||||
|
||||
internal static WeaponPaintsConfig _config = new WeaponPaintsConfig();
|
||||
internal static WeaponPaintsConfig _config = new();
|
||||
internal static IStringLocalizer? _localizer;
|
||||
internal static Dictionary<int, int> g_knifePickupCount = new Dictionary<int, int>();
|
||||
internal static ConcurrentDictionary<int, string> g_playersKnife = new ConcurrentDictionary<int, string>();
|
||||
internal static ConcurrentDictionary<int, ushort> g_playersGlove = new ConcurrentDictionary<int, ushort>();
|
||||
internal static ConcurrentDictionary<int, ConcurrentDictionary<int, WeaponInfo>> gPlayerWeaponsInfo = new ConcurrentDictionary<int, ConcurrentDictionary<int, WeaponInfo>>();
|
||||
internal static List<JObject> skinsList = new List<JObject>();
|
||||
internal static List<JObject> glovesList = new List<JObject>();
|
||||
internal static Dictionary<int, int> g_knifePickupCount = new();
|
||||
internal static ConcurrentDictionary<int, string> g_playersKnife = new();
|
||||
internal static ConcurrentDictionary<int, ushort> g_playersGlove = new();
|
||||
internal static ConcurrentDictionary<int, ushort> g_playersMusic = new();
|
||||
internal static ConcurrentDictionary<int, (string? CT, string? T)> g_playersAgent = new();
|
||||
internal static ConcurrentDictionary<int, ConcurrentDictionary<int, WeaponInfo>> gPlayerWeaponsInfo = new();
|
||||
internal static List<JObject> skinsList = new();
|
||||
internal static List<JObject> glovesList = new();
|
||||
internal static List<JObject> agentsList = new();
|
||||
internal static List<JObject> musicList = new();
|
||||
internal static WeaponSynchronization? weaponSync;
|
||||
public static bool g_bCommandsAllowed = true;
|
||||
internal Dictionary<int, string> PlayerWeaponImage = new();
|
||||
|
||||
internal static Dictionary<int, DateTime> commandsCooldown = new Dictionary<int, DateTime>();
|
||||
internal static Dictionary<int, DateTime> commandsCooldown = new();
|
||||
internal static Database? _database;
|
||||
|
||||
internal static MemoryFunctionVoid<nint, string, float> CAttributeList_SetOrAddAttributeValueByName = new(GameData.GetSignature("CAttributeList_SetOrAddAttributeValueByName"));
|
||||
@@ -154,9 +158,9 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
|
||||
public WeaponPaintsConfig Config { get; set; } = new();
|
||||
public override string ModuleAuthor => "Nereziel & daffyy";
|
||||
public override string ModuleDescription => "Skin, gloves and knife selector, standalone and web-based";
|
||||
public override string ModuleDescription => "Skin, gloves, agents and knife selector, standalone and web-based";
|
||||
public override string ModuleName => "WeaponPaints";
|
||||
public override string ModuleVersion => "2.1a";
|
||||
public override string ModuleVersion => "2.3b";
|
||||
|
||||
public static WeaponPaintsConfig GetWeaponPaintsConfig()
|
||||
{
|
||||
@@ -173,19 +177,24 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
|
||||
foreach (var player in Utilities.GetPlayers())
|
||||
{
|
||||
if (weaponSync == null || player is null || !player.IsValid || player.SteamID.ToString().Length != 17 || !player.PawnIsAlive || player.IsBot ||
|
||||
if (weaponSync == null)
|
||||
break;
|
||||
|
||||
if (player is null || !player.IsValid || player.SteamID.ToString().Length != 17 || string.IsNullOrEmpty(player.IpAddress) || player.IsBot ||
|
||||
player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected)
|
||||
continue;
|
||||
|
||||
g_knifePickupCount[(int)player.Slot] = 0;
|
||||
gPlayerWeaponsInfo.TryRemove((int)player.Slot, out _);
|
||||
g_playersKnife.TryRemove((int)player.Slot, out _);
|
||||
g_knifePickupCount[player.Slot] = 0;
|
||||
gPlayerWeaponsInfo.TryRemove(player.Slot, out _);
|
||||
g_playersKnife.TryRemove(player.Slot, out _);
|
||||
g_playersGlove.TryRemove(player.Slot, out _);
|
||||
g_playersAgent.TryRemove(player.Slot, out _);
|
||||
|
||||
PlayerInfo playerInfo = new PlayerInfo
|
||||
{
|
||||
UserId = player.UserId,
|
||||
Slot = player.Slot,
|
||||
Index = (int)player.Slot,
|
||||
Index = (int)player.Index,
|
||||
SteamId = player?.SteamID.ToString(),
|
||||
Name = player?.PlayerName,
|
||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
||||
@@ -193,21 +202,31 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
|
||||
if (Config.Additional.SkinEnabled)
|
||||
{
|
||||
Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
|
||||
_ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.KnifeEnabled)
|
||||
{
|
||||
Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo));
|
||||
_ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.GloveEnabled)
|
||||
{
|
||||
Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo));
|
||||
_ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.AgentEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo));
|
||||
}
|
||||
if (Config.Additional.MusicEnabled)
|
||||
{
|
||||
_ = Task.Run(async () => await weaponSync.GetMusicFromDatabase(playerInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Utility.LoadSkinsFromFile(ModuleDirectory + "/skins.json");
|
||||
Utility.LoadGlovesFromFile(ModuleDirectory + "/gloves.json");
|
||||
Utility.LoadAgentsFromFile(ModuleDirectory + "/agents.json");
|
||||
Utility.LoadMusicFromFile(ModuleDirectory + "/music.json");
|
||||
|
||||
if (Config.Additional.KnifeEnabled)
|
||||
SetupKnifeMenu();
|
||||
@@ -215,6 +234,10 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
||||
SetupSkinsMenu();
|
||||
if (Config.Additional.GloveEnabled)
|
||||
SetupGlovesMenu();
|
||||
if (Config.Additional.AgentEnabled)
|
||||
SetupAgentsMenu();
|
||||
if (Config.Additional.MusicEnabled)
|
||||
SetupMusicMenu();
|
||||
|
||||
RegisterListeners();
|
||||
RegisterCommands();
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.179" />
|
||||
<PackageReference Include="Dapper" Version="2.1.28" />
|
||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.193" />
|
||||
<PackageReference Include="Dapper" Version="2.1.35" />
|
||||
<PackageReference Include="MySqlConnector" Version="2.3.5" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace WeaponPaints
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public async Task GetKnifeFromDatabase(PlayerInfo player)
|
||||
internal async Task GetKnifeFromDatabase(PlayerInfo player)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -36,7 +36,7 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
public async Task GetGloveFromDatabase(PlayerInfo player)
|
||||
internal async Task GetGloveFromDatabase(PlayerInfo player)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -58,21 +58,55 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
public async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
||||
internal async Task GetAgentFromDatabase(PlayerInfo player)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!_config.Additional.AgentEnabled || string.IsNullOrEmpty(player?.SteamId))
|
||||
return;
|
||||
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
string query = "SELECT `agent_ct`, `agent_t` FROM `wp_player_agents` WHERE `steamid` = @steamid";
|
||||
var agentData = await connection.QueryFirstOrDefaultAsync<(string, string)>(query, new { steamid = player.SteamId });
|
||||
|
||||
if (agentData != default)
|
||||
{
|
||||
string agentCT = agentData.Item1;
|
||||
string agentT = agentData.Item2;
|
||||
|
||||
if (!string.IsNullOrEmpty(agentCT) || !string.IsNullOrEmpty(agentT))
|
||||
{
|
||||
WeaponPaints.g_playersAgent[player.Slot] = (
|
||||
agentCT,
|
||||
agentT
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utility.Log($"An error occurred in GetGloveFromDatabase: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!_config.Additional.SkinEnabled || player == null || string.IsNullOrEmpty(player.SteamId))
|
||||
return;
|
||||
|
||||
var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>();
|
||||
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid";
|
||||
var playerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId });
|
||||
|
||||
if (playerSkins == null)
|
||||
{
|
||||
WeaponPaints.gPlayerWeaponsInfo[player.Slot] = weaponInfos;
|
||||
return;
|
||||
|
||||
var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>();
|
||||
}
|
||||
|
||||
foreach (var row in playerSkins)
|
||||
{
|
||||
@@ -99,6 +133,28 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task GetMusicFromDatabase(PlayerInfo player)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!_config.Additional.MusicEnabled || string.IsNullOrEmpty(player.SteamId))
|
||||
return;
|
||||
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
string query = "SELECT `music_id` FROM `wp_player_music` WHERE `steamid` = @steamid";
|
||||
ushort? musicData = await connection.QueryFirstOrDefaultAsync<ushort?>(query, new { steamid = player.SteamId });
|
||||
|
||||
if (musicData != null)
|
||||
{
|
||||
WeaponPaints.g_playersMusic[player.Slot] = musicData.Value;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utility.Log($"An error occurred in GetMusicFromDatabase: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncKnifeToDatabase(PlayerInfo player, string knife)
|
||||
{
|
||||
if (!_config.Additional.KnifeEnabled || player == null || string.IsNullOrEmpty(player.SteamId) || string.IsNullOrEmpty(knife)) return;
|
||||
@@ -131,6 +187,28 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncAgentToDatabase(PlayerInfo player)
|
||||
{
|
||||
if (!_config.Additional.AgentEnabled || player == null || string.IsNullOrEmpty(player.SteamId)) return;
|
||||
|
||||
try
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
string query = @"
|
||||
INSERT INTO `wp_player_agents` (`steamid`, `agent_ct`, `agent_t`)
|
||||
VALUES(@steamid, @agent_ct, @agent_t)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`agent_ct` = @agent_ct,
|
||||
`agent_t` = @agent_t";
|
||||
|
||||
await connection.ExecuteAsync(query, new { steamid = player.SteamId, agent_ct = WeaponPaints.g_playersAgent[player.Slot].CT, agent_t = WeaponPaints.g_playersAgent[player.Slot].T });
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log($"Error syncing agents to database: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncWeaponPaintsToDatabase(PlayerInfo player)
|
||||
{
|
||||
if (player == null || string.IsNullOrEmpty(player.SteamId) || !WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Slot, out var weaponsInfo))
|
||||
@@ -175,5 +253,21 @@ namespace WeaponPaints
|
||||
Utility.Log($"Error syncing weapon paints to database: {e.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncMusicToDatabase(PlayerInfo player, ushort music)
|
||||
{
|
||||
if (!_config.Additional.MusicEnabled || player == null || string.IsNullOrEmpty(player.SteamId)) return;
|
||||
|
||||
try
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
string query = "INSERT INTO `wp_player_music` (`steamid`, `music_id`) VALUES(@steamid, @newMusic) ON DUPLICATE KEY UPDATE `music_id` = @newMusic";
|
||||
await connection.ExecuteAsync(query, new { steamid = player.SteamId, newMusic = music });
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log($"Error syncing music kit to database: {e.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,23 @@
|
||||
{
|
||||
"ChangeSubclass": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x48\\x89\\x5C\\x24\\x08\\x57\\x48\\x83\\xEC\\x20\\x48\\x8B\\xDA\\x48\\x8B\\xF9\\xE8\\x2A\\x2A\\x2A\\x2A\\x84\\xC0\\x74\\x2A\\x41\\xB0\\x01",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x57\\x41\\x56\\x41\\x55\\x49\\x89\\xF5\\x41\\x54\\x49\\x89\\xFC\\x53\\x48\\x81\\xEC\\xA8\\x00\\x00\\x00"
|
||||
}
|
||||
},
|
||||
"CAttributeList_SetOrAddAttributeValueByName": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x40\\x53\\x41\\x56\\x41\\x57\\x48\\x81\\xEC\\x90\\x00\\x00\\x00\\x0F\\x29\\x74\\x24\\x70",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x57\\x41\\x56\\x49\\x89\\xFE\\x41\\x55\\x41\\x54\\x49\\x89\\xF4\\x53\\x48\\x83\\xEC\\x78"
|
||||
}
|
||||
},
|
||||
"CBaseModelEntity_SetBodygroup": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x48\\x89\\x5C\\x24\\x08\\x48\\x89\\x74\\x24\\x10\\x57\\x48\\x83\\xEC\\x20\\x41\\x8B\\xF8\\x48\\x8B\\xF2\\x48\\x8B\\xD9\\xE8\\x2A\\x2A\\x2A\\x2A",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x56\\x49\\x89\\xF6\\x41\\x55\\x41\\x89\\xD5\\x41\\x54\\x49\\x89\\xFC\\x48\\x83\\xEC\\x08"
|
||||
}
|
||||
}
|
||||
"ChangeSubclass": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x48\\x89\\x5C\\x24\\x08\\x57\\x48\\x83\\xEC\\x20\\x48\\x8B\\xDA\\x48\\x8B\\xF9\\xE8\\x2A\\x2A\\x2A\\x2A\\x84\\xC0\\x74\\x2A\\x41\\xB0\\x01",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x57\\x41\\x56\\x41\\x55\\x49\\x89\\xF5\\x41\\x54\\x49\\x89\\xFC\\x53\\x48\\x81\\xEC\\xA8\\x00\\x00\\x00"
|
||||
}
|
||||
},
|
||||
"CAttributeList_SetOrAddAttributeValueByName": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x40\\x53\\x41\\x56\\x41\\x57\\x48\\x81\\xEC\\x90\\x00\\x00\\x00\\x0F\\x29\\x74\\x24\\x70",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x57\\x41\\x56\\x49\\x89\\xFE\\x41\\x55\\x41\\x54\\x49\\x89\\xF4\\x53\\x48\\x83\\xEC\\x78"
|
||||
}
|
||||
},
|
||||
"CBaseModelEntity_SetBodygroup": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "\\x48\\x89\\x5C\\x24\\x08\\x48\\x89\\x74\\x24\\x10\\x57\\x48\\x83\\xEC\\x20\\x41\\x8B\\xF8\\x48\\x8B\\xF2\\x48\\x8B\\xD9\\xE8\\x2A\\x2A\\x2A\\x2A",
|
||||
"linux": "\\x55\\x48\\x89\\xE5\\x41\\x56\\x49\\x89\\xF6\\x41\\x55\\x41\\x89\\xD5\\x41\\x54\\x49\\x89\\xFC\\x48\\x83\\xEC\\x08"
|
||||
}
|
||||
}
|
||||
}
|
||||
10
lang/en.json
@@ -4,6 +4,8 @@
|
||||
"wp_info_refresh": "Type {lime}!wp{default} to synchronize chosen skins",
|
||||
"wp_info_knife": "Type {lime}!knife{default} to open knife menu",
|
||||
"wp_info_glove": "Type {lime}!gloves{default} to open gloves menu",
|
||||
"wp_info_agent": "Type {lime}!agents{default} to open agents menu",
|
||||
"wp_info_music": "Type {lime}!music{default} to open music menu",
|
||||
"wp_command_cooldown": "{lightred}You can't refresh weapon paints right now",
|
||||
"wp_command_refresh_done": "{lime}Refreshing weapon paints",
|
||||
"wp_knife_menu_select": "You have chosen {lime}{0}{default} as your knife",
|
||||
@@ -11,7 +13,13 @@
|
||||
"wp_knife_menu_title": "Knife Menu",
|
||||
"wp_glove_menu_select": "You have chosen {lime}{0}{default} as your glove",
|
||||
"wp_glove_menu_title": "Gloves Menu",
|
||||
"wp_agent_menu_select": "You have chosen {lime}{0}{default} as your agent",
|
||||
"wp_agent_menu_title": "Agents Menu",
|
||||
"wp_music_menu_title": "Music Menu",
|
||||
"wp_music_menu_select": "You have chosen {lime}{0}{default} as your music kit",
|
||||
"wp_skin_menu_weapon_title": "Weapon Menu",
|
||||
"wp_skin_menu_skin_title": "Select skin for {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "You have chosen {lime}{0}{default} as your skin"
|
||||
"wp_skin_menu_select": "You have chosen {lime}{0}{default} as your skin",
|
||||
|
||||
"None": "None"
|
||||
}
|
||||
22
lang/lv.json
@@ -1,17 +1,25 @@
|
||||
{
|
||||
"wp_prefix": "{lightblue}[WeaponPaints] {default}",
|
||||
"wp_info_website": "Apmeklējiet {lime}{0}{default}, kur varat mainīt ādas",
|
||||
"wp_info_website": "Apmeklē {lime}{0}{default}, kur varat mainīt ādas",
|
||||
"wp_info_refresh": "Ievadiet {lime}!wp{default}, lai sinhronizētu izvēlētās ādas",
|
||||
"wp_info_knife": "Ievadiet {lime}!knife{default}, lai atvērtu nazis izvēlni",
|
||||
"wp_info_glove": "Ievadiet {lime}!gloves{default}, lai atvērtu cimdi izvēlni",
|
||||
"wp_command_cooldown": "{lightred}Šobrīd jūs nevarat atjaunot ieroču ādas",
|
||||
"wp_command_refresh_done": "{lime}Atjauno ieroču ādas",
|
||||
"wp_info_agent": "Ievadiet {lime}!agents{default}, lai atvērtu aģentu izvēlni",
|
||||
"wp_info_music": "Ievadiet {lime}!music{default}, lai atvērtu mūzikas izvēlni",
|
||||
"wp_command_cooldown": "{lightred}Šobrīd nevarat atsvaidzināt ieroča krāsas",
|
||||
"wp_command_refresh_done": "{lime}Atsvaidzinot ieroča krāsas",
|
||||
"wp_knife_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu nazi",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Nazis Izvēlne",
|
||||
"wp_glove_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savus cimdus",
|
||||
"wp_knife_menu_title": "Nazi Izvēlne",
|
||||
"wp_glove_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu cimdu",
|
||||
"wp_glove_menu_title": "Cimdu Izvēlne",
|
||||
"wp_agent_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu aģentu",
|
||||
"wp_agent_menu_title": "Aģentu Izvēlne",
|
||||
"wp_music_menu_title": "Mūzikas Izvēlne",
|
||||
"wp_music_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu mūzikas komplektu",
|
||||
"wp_skin_menu_weapon_title": "Ieroču Izvēlne",
|
||||
"wp_skin_menu_skin_title": "Izvēlieties ādu {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu ādu"
|
||||
"wp_skin_menu_skin_title": "Izvēlieties ādu priekš {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu ādu",
|
||||
|
||||
"None": "Nav"
|
||||
}
|
||||
20
lang/pl.json
@@ -3,15 +3,23 @@
|
||||
"wp_info_website": "Odwiedź {lime}{0}{default}, gdzie możesz zmieniać skórki",
|
||||
"wp_info_refresh": "Wpisz {lime}!wp{default}, aby zsynchronizować wybrane skórki",
|
||||
"wp_info_knife": "Wpisz {lime}!knife{default}, aby otworzyć menu noży",
|
||||
"wp_info_glove": "Wpisz {lime}!gloves{default}, aby otworzyć menu rękawiczek",
|
||||
"wp_command_cooldown": "{lightred}Nie możesz teraz odświeżyć skórek broni",
|
||||
"wp_command_refresh_done": "{lime}Odświeżanie skórek broni",
|
||||
"wp_info_glove": "Wpisz {lime}!gloves{default}, aby otworzyć menu rękawic",
|
||||
"wp_info_agent": "Wpisz {lime}!agents{default}, aby otworzyć menu agentów",
|
||||
"wp_info_music": "Wpisz {lime}!music{default}, aby otworzyć menu muzyczne",
|
||||
"wp_command_cooldown": "{lightred}Nie możesz teraz odświeżyć kolorów broni",
|
||||
"wp_command_refresh_done": "{lime}Odświeżanie kolorów broni",
|
||||
"wp_knife_menu_select": "Wybrałeś {lime}{0}{default} jako swój nóż",
|
||||
"wp_knife_menu_kill": "{lime}Wybrane skiny będą ustawione dopiero po ponownym wejściu na serwer lub wpisaniu komendy {orange}!kill",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Menu Noży",
|
||||
"wp_glove_menu_select": "Wybrałeś {lime}{0}{default} jako swoje rękawiczki",
|
||||
"wp_glove_menu_select": "Wybrałeś {lime}{0}{default} jako swoją rękawiczkę",
|
||||
"wp_glove_menu_title": "Menu Rękawiczek",
|
||||
"wp_agent_menu_select": "Wybrałeś {lime}{0}{default} jako swojego agenta",
|
||||
"wp_agent_menu_title": "Menu Agentów",
|
||||
"wp_music_menu_title": "Menu Muzyczne",
|
||||
"wp_music_menu_select": "Wybrałeś {lime}{0}{default} jako swój zestaw muzyczny",
|
||||
"wp_skin_menu_weapon_title": "Menu Broni",
|
||||
"wp_skin_menu_skin_title": "Wybierz skórkę dla {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Wybrałeś {lime}{0}{default} jako swoją skórkę"
|
||||
"wp_skin_menu_select": "Wybrałeś {lime}{0}{default} jako swoją skórkę",
|
||||
|
||||
"None": "Brak"
|
||||
}
|
||||
@@ -1,17 +1,25 @@
|
||||
{
|
||||
"wp_prefix": "{lightblue}[WeaponPaints] {default}",
|
||||
"wp_info_website": "Visite {lime}{0}{default}, onde você pode alterar skins",
|
||||
"wp_info_refresh": "Digite {lime}!wp{default} para sincronizar as skins selecionadas",
|
||||
"wp_info_website": "Visite {lime}{0}{default}, onde você pode alterar as skins",
|
||||
"wp_info_refresh": "Digite {lime}!wp{default} para sincronizar as skins escolhidas",
|
||||
"wp_info_knife": "Digite {lime}!knife{default} para abrir o menu de facas",
|
||||
"wp_info_glove": "Digite {lime}!gloves{default} para abrir o menu de luvas",
|
||||
"wp_command_cooldown": "{lightred}Você não pode atualizar as skins de arma agora",
|
||||
"wp_command_refresh_done": "{lime}Atualizando as skins de arma",
|
||||
"wp_info_agent": "Digite {lime}!agents{default} para abrir o menu de agentes",
|
||||
"wp_info_music": "Digite {lime}!music{default} para abrir o menu de música",
|
||||
"wp_command_cooldown": "{lightred}Você não pode atualizar as skins de armas agora",
|
||||
"wp_command_refresh_done": "{lime}Atualizando as skins de armas",
|
||||
"wp_knife_menu_select": "Você escolheu {lime}{0}{default} como sua faca",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Menu de Facas",
|
||||
"wp_glove_menu_select": "Você escolheu {lime}{0}{default} como suas luvas",
|
||||
"wp_glove_menu_select": "Você escolheu {lime}{0}{default} como sua luva",
|
||||
"wp_glove_menu_title": "Menu de Luvas",
|
||||
"wp_agent_menu_select": "Você escolheu {lime}{0}{default} como seu agente",
|
||||
"wp_agent_menu_title": "Menu de Agentes",
|
||||
"wp_music_menu_title": "Menu de Música",
|
||||
"wp_music_menu_select": "Você escolheu {lime}{0}{default} como seu kit de música",
|
||||
"wp_skin_menu_weapon_title": "Menu de Armas",
|
||||
"wp_skin_menu_skin_title": "Selecione uma skin para {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Você escolheu {lime}{0}{default} como sua skin"
|
||||
"wp_skin_menu_skin_title": "Selecione a skin para {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Você escolheu {lime}{0}{default} como sua skin",
|
||||
|
||||
"None": "Nenhum"
|
||||
}
|
||||
@@ -1,17 +1,25 @@
|
||||
{
|
||||
"wp_prefix": "{lightblue}[WeaponPaints] {default}",
|
||||
"wp_info_website": "Visite {lime}{0}{default}, onde pode alterar skins",
|
||||
"wp_info_refresh": "Digite {lime}!wp{default} para sincronizar as skins selecionadas",
|
||||
"wp_info_website": "Visite {lime}{0}{default}, onde pode alterar as skins",
|
||||
"wp_info_refresh": "Digite {lime}!wp{default} para sincronizar as skins escolhidas",
|
||||
"wp_info_knife": "Digite {lime}!knife{default} para abrir o menu de facas",
|
||||
"wp_info_glove": "Digite {lime}!gloves{default} para abrir o menu de luvas",
|
||||
"wp_command_cooldown": "{lightred}Você não pode atualizar as skins de arma agora",
|
||||
"wp_command_refresh_done": "{lime}Atualizando as skins de arma",
|
||||
"wp_knife_menu_select": "Você escolheu {lime}{0}{default} como sua faca",
|
||||
"wp_info_agent": "Digite {lime}!agents{default} para abrir o menu de agentes",
|
||||
"wp_info_music": "Digite {lime}!music{default} para abrir o menu de música",
|
||||
"wp_command_cooldown": "{lightred}Não pode atualizar as skins de armas de momento",
|
||||
"wp_command_refresh_done": "{lime}Atualizando as skins de armas",
|
||||
"wp_knife_menu_select": "Escolheu {lime}{0}{default} como a sua faca",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Menu de Facas",
|
||||
"wp_glove_menu_select": "Você escolheu {lime}{0}{default} como suas luvas",
|
||||
"wp_glove_menu_select": "Escolheu {lime}{0}{default} como a sua luva",
|
||||
"wp_glove_menu_title": "Menu de Luvas",
|
||||
"wp_agent_menu_select": "Escolheu {lime}{0}{default} como o seu agente",
|
||||
"wp_agent_menu_title": "Menu de Agentes",
|
||||
"wp_music_menu_title": "Menu de Música",
|
||||
"wp_music_menu_select": "Escolheu {lime}{0}{default} como o seu kit de música",
|
||||
"wp_skin_menu_weapon_title": "Menu de Armas",
|
||||
"wp_skin_menu_skin_title": "Selecione uma skin para {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Você escolheu {lime}{0}{default} como sua skin"
|
||||
"wp_skin_menu_skin_title": "Selecione a skin para {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Escolheu {lime}{0}{default} como a sua skin",
|
||||
|
||||
"None": "Nenhum"
|
||||
}
|
||||
14
lang/ru.json
@@ -4,14 +4,22 @@
|
||||
"wp_info_refresh": "Введите {lime}!wp{default}, чтобы синхронизировать выбранные скины",
|
||||
"wp_info_knife": "Введите {lime}!knife{default}, чтобы открыть меню ножей",
|
||||
"wp_info_glove": "Введите {lime}!gloves{default}, чтобы открыть меню перчаток",
|
||||
"wp_command_cooldown": "{lightred}Вы не можете обновить скины оружия сейчас",
|
||||
"wp_command_refresh_done": "{lime}Обновление скинов оружия",
|
||||
"wp_info_agent": "Введите {lime}!agents{default}, чтобы открыть меню агентов",
|
||||
"wp_info_music": "Введите {lime}!music{default}, чтобы открыть меню музыки",
|
||||
"wp_command_cooldown": "{lightred}Вы не можете обновить раскраску оружия сейчас",
|
||||
"wp_command_refresh_done": "{lime}Обновление раскраски оружия",
|
||||
"wp_knife_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего ножа",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Меню Ножей",
|
||||
"wp_glove_menu_select": "Вы выбрали {lime}{0}{default} в качестве ваших перчаток",
|
||||
"wp_glove_menu_title": "Меню Перчаток",
|
||||
"wp_agent_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего агента",
|
||||
"wp_agent_menu_title": "Меню Агентов",
|
||||
"wp_music_menu_title": "Меню Музыки",
|
||||
"wp_music_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего музыкального набора",
|
||||
"wp_skin_menu_weapon_title": "Меню Оружия",
|
||||
"wp_skin_menu_skin_title": "Выберите скин для {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего скина"
|
||||
"wp_skin_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего скина",
|
||||
|
||||
"None": "Нет"
|
||||
}
|
||||
22
lang/tr.json
@@ -1,17 +1,25 @@
|
||||
{
|
||||
"wp_prefix": "{lightblue}[WeaponPaints] {default}",
|
||||
"wp_info_website": "Ziyaret edin {lime}{0}{default}, burada skinleri değiştirebilirsiniz",
|
||||
"wp_info_refresh": "Senkronize edilen skinleri görmek için {lime}!wp{default} yazın",
|
||||
"wp_info_website": "Ziyaret edin {lime}{0}{default}, nerede derileri değiştirebilirsiniz",
|
||||
"wp_info_refresh": "Senkronize etmek için {lime}!wp{default} yazın seçilen deriler",
|
||||
"wp_info_knife": "Bıçak menüsünü açmak için {lime}!knife{default} yazın",
|
||||
"wp_info_glove": "Eldiven menüsünü açmak için {lime}!gloves{default} yazın",
|
||||
"wp_command_cooldown": "{lightred}Şu anda silah skinlerini yenileyemezsiniz",
|
||||
"wp_command_refresh_done": "{lime}Silah skinleri yenileniyor",
|
||||
"wp_info_glove": "Handskar menüsünü açmak için {lime}!gloves{default} yazın",
|
||||
"wp_info_agent": "Ajan menüsünü açmak için {lime}!agents{default} yazın",
|
||||
"wp_info_music": "Müzik menüsünü açmak için {lime}!music{default} yazın",
|
||||
"wp_command_cooldown": "{lightred}Şu anda silah boyalarını yenileyemezsiniz",
|
||||
"wp_command_refresh_done": "{lime}Silah boyaları yenileniyor",
|
||||
"wp_knife_menu_select": "{lime}{0}{default} olarak bıçağınızı seçtiniz",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Bıçak Menüsü",
|
||||
"wp_glove_menu_select": "{lime}{0}{default} olarak eldiveninizi seçtiniz",
|
||||
"wp_glove_menu_title": "Eldiven Menüsü",
|
||||
"wp_agent_menu_select": "{lime}{0}{default} olarak ajanınızı seçtiniz",
|
||||
"wp_agent_menu_title": "Ajanlar Menüsü",
|
||||
"wp_music_menu_title": "Müzik Menüsü",
|
||||
"wp_music_menu_select": "{lime}{0}{default} olarak müzik setinizi seçtiniz",
|
||||
"wp_skin_menu_weapon_title": "Silah Menüsü",
|
||||
"wp_skin_menu_skin_title": "{lime}{0}{default} için bir skin seçin",
|
||||
"wp_skin_menu_select": "{lime}{0}{default} olarak bir skin seçtiniz"
|
||||
"wp_skin_menu_skin_title": "{lime}{0}{default} için cilt seçin",
|
||||
"wp_skin_menu_select": "{lime}{0}{default} olarak cildinizi seçtiniz",
|
||||
|
||||
"None": "Hiçbiri"
|
||||
}
|
||||
18
lang/ua.json
@@ -4,14 +4,22 @@
|
||||
"wp_info_refresh": "Введіть {lime}!wp{default}, щоб синхронізувати обрані шкури",
|
||||
"wp_info_knife": "Введіть {lime}!knife{default}, щоб відкрити меню ножів",
|
||||
"wp_info_glove": "Введіть {lime}!gloves{default}, щоб відкрити меню рукавичок",
|
||||
"wp_command_cooldown": "{lightred}Наразі ви не можете оновлювати шкіри зброї",
|
||||
"wp_command_refresh_done": "{lime}Оновлення шкірок зброї",
|
||||
"wp_knife_menu_select": "Ви вибрали {lime}{0}{default} як ваш ніж",
|
||||
"wp_info_agent": "Введіть {lime}!agents{default}, щоб відкрити меню агентів",
|
||||
"wp_info_music": "Введіть {lime}!music{default}, щоб відкрити меню музики",
|
||||
"wp_command_cooldown": "{lightred}Ви не можете оновити фарби зброї зараз",
|
||||
"wp_command_refresh_done": "{lime}Оновлення фарби зброї",
|
||||
"wp_knife_menu_select": "Ви обрали {lime}{0}{default} як свій ніж",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "Меню Ножів",
|
||||
"wp_glove_menu_select": "Ви вибрали {lime}{0}{default} як ваші рукавички",
|
||||
"wp_glove_menu_select": "Ви обрали {lime}{0}{default} як свої рукавички",
|
||||
"wp_glove_menu_title": "Меню Рукавичок",
|
||||
"wp_agent_menu_select": "Ви обрали {lime}{0}{default} як свого агента",
|
||||
"wp_agent_menu_title": "Меню Агентів",
|
||||
"wp_music_menu_title": "Меню Музики",
|
||||
"wp_music_menu_select": "Ви обрали {lime}{0}{default} як свій набір музики",
|
||||
"wp_skin_menu_weapon_title": "Меню Зброї",
|
||||
"wp_skin_menu_skin_title": "Виберіть шкіру для {lime}{0}{default}",
|
||||
"wp_skin_menu_select": "Ви вибрали {lime}{0}{default} як вашу шкіру"
|
||||
"wp_skin_menu_select": "Ви обрали {lime}{0}{default} як свою шкіру",
|
||||
|
||||
"None": "Немає"
|
||||
}
|
||||
@@ -1,17 +1,25 @@
|
||||
{
|
||||
"wp_prefix": "{lightblue}[WeaponPaints] {default}",
|
||||
"wp_info_website": "访问 {lime}{0}{default},您可以更改皮肤",
|
||||
"wp_info_refresh": "输入 {lime}!wp{default} 同步已选择的皮肤",
|
||||
"wp_info_refresh": "输入 {lime}!wp{default} 同步选择的皮肤",
|
||||
"wp_info_knife": "输入 {lime}!knife{default} 打开刀具菜单",
|
||||
"wp_info_glove": "输入 {lime}!gloves{default} 打开手套菜单",
|
||||
"wp_command_cooldown": "{lightred}您现在无法刷新武器皮肤",
|
||||
"wp_command_refresh_done": "{lime}刷新武器皮肤",
|
||||
"wp_knife_menu_select": "您已选择 {lime}{0}{default} 作为您的刀具",
|
||||
"wp_info_agent": "输入 {lime}!agents{default} 打开代理菜单",
|
||||
"wp_info_music": "输入 {lime}!music{default} 打开音乐菜单",
|
||||
"wp_command_cooldown": "{lightred}您现在无法刷新武器涂装",
|
||||
"wp_command_refresh_done": "{lime}正在刷新武器涂装",
|
||||
"wp_knife_menu_select": "您选择了 {lime}{0}{default} 作为您的刀具",
|
||||
"wp_knife_menu_kill": "",
|
||||
"wp_knife_menu_title": "刀具菜单",
|
||||
"wp_glove_menu_select": "您已选择 {lime}{0}{default} 作为您的手套",
|
||||
"wp_glove_menu_select": "您选择了 {lime}{0}{default} 作为您的手套",
|
||||
"wp_glove_menu_title": "手套菜单",
|
||||
"wp_agent_menu_select": "您选择了 {lime}{0}{default} 作为您的代理",
|
||||
"wp_agent_menu_title": "代理菜单",
|
||||
"wp_music_menu_title": "音乐菜单",
|
||||
"wp_music_menu_select": "您选择了 {lime}{0}{default} 作为您的音乐包",
|
||||
"wp_skin_menu_weapon_title": "武器菜单",
|
||||
"wp_skin_menu_skin_title": "为 {lime}{0}{default} 选择皮肤",
|
||||
"wp_skin_menu_select": "您已选择 {lime}{0}{default} 作为您的皮肤"
|
||||
"wp_skin_menu_skin_title": "选择 {lime}{0}{default} 的皮肤",
|
||||
"wp_skin_menu_select": "您选择了 {lime}{0}{default} 作为您的皮肤",
|
||||
|
||||
"None": "无"
|
||||
}
|
||||
386
website/data/agents.json
Normal file
@@ -0,0 +1,386 @@
|
||||
[
|
||||
{
|
||||
"team": 2,
|
||||
"image": "",
|
||||
"model": "null",
|
||||
"agent_name": "Agent | Default"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "",
|
||||
"model": "null",
|
||||
"agent_name": "Agent | Default"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4619.png",
|
||||
"model": "ctm_st6/ctm_st6_variantj",
|
||||
"agent_name": "'Blueberries' Buckshot | NSWC SEAL"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4680.png",
|
||||
"model": "ctm_st6/ctm_st6_variantl",
|
||||
"agent_name": "'Two Times' McCoy | TACP Cavalry"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4711.png",
|
||||
"model": "ctm_swat/ctm_swat_variante",
|
||||
"agent_name": "Cmdr. Mae 'Dead Cold' Jamison | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4712.png",
|
||||
"model": "ctm_swat/ctm_swat_variantf",
|
||||
"agent_name": "1st Lieutenant Farlow | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4713.png",
|
||||
"model": "ctm_swat/ctm_swat_variantg",
|
||||
"agent_name": "John 'Van Healen' Kask | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4714.png",
|
||||
"model": "ctm_swat/ctm_swat_varianth",
|
||||
"agent_name": "Bio-Haz Specialist | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4715.png",
|
||||
"model": "ctm_swat/ctm_swat_varianti",
|
||||
"agent_name": "Sergeant Bombson | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4716.png",
|
||||
"model": "ctm_swat/ctm_swat_variantj",
|
||||
"agent_name": "Chem-Haz Specialist | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4718.png",
|
||||
"model": "tm_balkan/tm_balkan_variantk",
|
||||
"agent_name": "Rezan the Redshirt | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4726.png",
|
||||
"model": "tm_professional/tm_professional_varf",
|
||||
"agent_name": "Sir Bloody Miami Darryl | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4727.png",
|
||||
"model": "tm_professional/tm_professional_varg",
|
||||
"agent_name": "Safecracker Voltzmann | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4728.png",
|
||||
"model": "tm_professional/tm_professional_varh",
|
||||
"agent_name": "Little Kev | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4730.png",
|
||||
"model": "tm_professional/tm_professional_varj",
|
||||
"agent_name": "Getaway Sally | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4732.png",
|
||||
"model": "tm_professional/tm_professional_vari",
|
||||
"agent_name": "Number K | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4733.png",
|
||||
"model": "tm_professional/tm_professional_varf1",
|
||||
"agent_name": "Sir Bloody Silent Darryl | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4734.png",
|
||||
"model": "tm_professional/tm_professional_varf2",
|
||||
"agent_name": "Sir Bloody Skullhead Darryl | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4735.png",
|
||||
"model": "tm_professional/tm_professional_varf3",
|
||||
"agent_name": "Sir Bloody Darryl Royale | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4736.png",
|
||||
"model": "tm_professional/tm_professional_varf4",
|
||||
"agent_name": "Sir Bloody Loudmouth Darryl | The Professionals"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4749.png",
|
||||
"model": "ctm_gendarmerie/ctm_gendarmerie_varianta",
|
||||
"agent_name": "Sous-Lieutenant Medic | Gendarmerie Nationale"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4750.png",
|
||||
"model": "ctm_gendarmerie/ctm_gendarmerie_variantb",
|
||||
"agent_name": "Chem-Haz Capitaine | Gendarmerie Nationale"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4751.png",
|
||||
"model": "ctm_gendarmerie/ctm_gendarmerie_variantc",
|
||||
"agent_name": "Chef d'Escadron Rouchard | Gendarmerie Nationale"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4752.png",
|
||||
"model": "ctm_gendarmerie/ctm_gendarmerie_variantd",
|
||||
"agent_name": "Aspirant | Gendarmerie Nationale"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4753.png",
|
||||
"model": "ctm_gendarmerie/ctm_gendarmerie_variante",
|
||||
"agent_name": "Officer Jacques Beltram | Gendarmerie Nationale"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4756.png",
|
||||
"model": "ctm_swat/ctm_swat_variantk",
|
||||
"agent_name": "Lieutenant 'Tree Hugger' Farlow | SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4757.png",
|
||||
"model": "ctm_diver/ctm_diver_varianta",
|
||||
"agent_name": "Cmdr. Davida 'Goggles' Fernandez | SEAL Frogman"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4771.png",
|
||||
"model": "ctm_diver/ctm_diver_variantb",
|
||||
"agent_name": "Cmdr. Frank 'Wet Sox' Baroud | SEAL Frogman"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4772.png",
|
||||
"model": "ctm_diver/ctm_diver_variantc",
|
||||
"agent_name": "Lieutenant Rex Krikey | SEAL Frogman"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4773.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_varianta",
|
||||
"agent_name": "Elite Trapper Solman | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4774.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantb",
|
||||
"agent_name": "Crasswater The Forgotten | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4775.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantc",
|
||||
"agent_name": "Arno The Overgrown | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4776.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantd",
|
||||
"agent_name": "Col. Mangos Dabisi | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4777.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variante",
|
||||
"agent_name": "Vypa Sista of the Revolution | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4778.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantf",
|
||||
"agent_name": "Trapper Aggressor | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4780.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantb2",
|
||||
"agent_name": "'Medium Rare' Crasswater | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-4781.png",
|
||||
"model": "tm_jungle_raider/tm_jungle_raider_variantf2",
|
||||
"agent_name": "Trapper | Guerrilla Warfare"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5105.png",
|
||||
"model": "tm_leet/tm_leet_variantg",
|
||||
"agent_name": "Ground Rebel | Elite Crew"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5106.png",
|
||||
"model": "tm_leet/tm_leet_varianth",
|
||||
"agent_name": "Osiris | Elite Crew"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5107.png",
|
||||
"model": "tm_leet/tm_leet_varianti",
|
||||
"agent_name": "Prof. Shahmat | Elite Crew"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5108.png",
|
||||
"model": "tm_leet/tm_leet_variantf",
|
||||
"agent_name": "The Elite Mr. Muhlik | Elite Crew"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5109.png",
|
||||
"model": "tm_leet/tm_leet_variantj",
|
||||
"agent_name": "Jungle Rebel | Elite Crew"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5205.png",
|
||||
"model": "tm_phoenix/tm_phoenix_varianth",
|
||||
"agent_name": "Soldier | Phoenix"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5206.png",
|
||||
"model": "tm_phoenix/tm_phoenix_variantf",
|
||||
"agent_name": "Enforcer | Phoenix"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5207.png",
|
||||
"model": "tm_phoenix/tm_phoenix_variantg",
|
||||
"agent_name": "Slingshot | Phoenix"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5208.png",
|
||||
"model": "tm_phoenix/tm_phoenix_varianti",
|
||||
"agent_name": "Street Soldier | Phoenix"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5305.png",
|
||||
"model": "ctm_fbi/ctm_fbi_variantf",
|
||||
"agent_name": "Operator | FBI SWAT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5306.png",
|
||||
"model": "ctm_fbi/ctm_fbi_variantg",
|
||||
"agent_name": "Markus Delrow | FBI HRT"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5307.png",
|
||||
"model": "ctm_fbi/ctm_fbi_varianth",
|
||||
"agent_name": "Michael Syfers | FBI Sniper"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5308.png",
|
||||
"model": "ctm_fbi/ctm_fbi_variantb",
|
||||
"agent_name": "Special Agent Ava | FBI"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5400.png",
|
||||
"model": "ctm_st6/ctm_st6_variantk",
|
||||
"agent_name": "3rd Commando Company | KSK"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5401.png",
|
||||
"model": "ctm_st6/ctm_st6_variante",
|
||||
"agent_name": "Seal Team 6 Soldier | NSWC SEAL"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5402.png",
|
||||
"model": "ctm_st6/ctm_st6_variantg",
|
||||
"agent_name": "Buckshot | NSWC SEAL"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5403.png",
|
||||
"model": "ctm_st6/ctm_st6_variantm",
|
||||
"agent_name": "'Two Times' McCoy | USAF TACP"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5404.png",
|
||||
"model": "ctm_st6/ctm_st6_varianti",
|
||||
"agent_name": "Lt. Commander Ricksaw | NSWC SEAL"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5405.png",
|
||||
"model": "ctm_st6/ctm_st6_variantn",
|
||||
"agent_name": "Primeiro Tenente | Brazilian 1st Battalion"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5500.png",
|
||||
"model": "tm_balkan/tm_balkan_variantf",
|
||||
"agent_name": "Dragomir | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5501.png",
|
||||
"model": "tm_balkan/tm_balkan_varianti",
|
||||
"agent_name": "Maximus | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5502.png",
|
||||
"model": "tm_balkan/tm_balkan_variantg",
|
||||
"agent_name": "Rezan The Ready | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5503.png",
|
||||
"model": "tm_balkan/tm_balkan_variantj",
|
||||
"agent_name": "Blackwolf | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5504.png",
|
||||
"model": "tm_balkan/tm_balkan_varianth",
|
||||
"agent_name": "'The Doctor' Romanov | Sabre"
|
||||
},
|
||||
{
|
||||
"team": 2,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5505.png",
|
||||
"model": "tm_balkan/tm_balkan_variantl",
|
||||
"agent_name": "Dragomir | Sabre Footsoldier"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5601.png",
|
||||
"model": "ctm_sas/ctm_sas_variantf",
|
||||
"agent_name": "B Squadron Officer | SAS"
|
||||
},
|
||||
{
|
||||
"team": 3,
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/agent-5602.png",
|
||||
"model": "ctm_sas/ctm_sas_variantg",
|
||||
"agent_name": "D Squadron Officer | NZSAS"
|
||||
}
|
||||
]
|
||||
@@ -1,4 +1,10 @@
|
||||
[
|
||||
{
|
||||
"weapon_defindex": 0,
|
||||
"paint": "0",
|
||||
"image": "",
|
||||
"paint_name": "Gloves | Default"
|
||||
},
|
||||
{
|
||||
"weapon_defindex": 4725,
|
||||
"paint": "10085",
|
||||
|
||||
367
website/data/music.json
Normal file
@@ -0,0 +1,367 @@
|
||||
[
|
||||
{
|
||||
"id": "3",
|
||||
"name": "Music Kit | Daniel Sadowski, Crimson Assault",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-3.png"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"name": "Music Kit | Noisia, Sharpened",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-4.png"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"name": "Music Kit | Robert Allaire, Insurgency",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-5.png"
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"name": "Music Kit | Sean Murray, A*D*8",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-6.png"
|
||||
},
|
||||
{
|
||||
"id": "7",
|
||||
"name": "Music Kit | Feed Me, High Noon",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-7.png"
|
||||
},
|
||||
{
|
||||
"id": "8",
|
||||
"name": "Music Kit | Dren, Death's Head Demolition",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-8.png"
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"name": "Music Kit | Austin Wintory, Desert Fire",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-9.png"
|
||||
},
|
||||
{
|
||||
"id": "10",
|
||||
"name": "Music Kit | Sasha, LNOE",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-10.png"
|
||||
},
|
||||
{
|
||||
"id": "11",
|
||||
"name": "Music Kit | Skog, Metal",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-11.png"
|
||||
},
|
||||
{
|
||||
"id": "12",
|
||||
"name": "Music Kit | Midnight Riders, All I Want for Christmas",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-12.png"
|
||||
},
|
||||
{
|
||||
"id": "13",
|
||||
"name": "Music Kit | Matt Lange, IsoRhythm",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-13.png"
|
||||
},
|
||||
{
|
||||
"id": "14",
|
||||
"name": "Music Kit | Mateo Messina, For No Mankind",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-14.png"
|
||||
},
|
||||
{
|
||||
"id": "15",
|
||||
"name": "Music Kit | Various Artists, Hotline Miami",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-15.png"
|
||||
},
|
||||
{
|
||||
"id": "16",
|
||||
"name": "Music Kit | Daniel Sadowski, Total Domination",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-16.png"
|
||||
},
|
||||
{
|
||||
"id": "17",
|
||||
"name": "Music Kit | Damjan Mravunac, The Talos Principle",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-17.png"
|
||||
},
|
||||
{
|
||||
"id": "18",
|
||||
"name": "Music Kit | Proxy, Battlepack",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-18.png"
|
||||
},
|
||||
{
|
||||
"id": "19",
|
||||
"name": "Music Kit | Ki:Theory, MOLOTOV",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-19.png"
|
||||
},
|
||||
{
|
||||
"id": "20",
|
||||
"name": "Music Kit | Troels Folmann, Uber Blasto Phone",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-20.png"
|
||||
},
|
||||
{
|
||||
"id": "21",
|
||||
"name": "Music Kit | Kelly Bailey, Hazardous Environments",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-21.png"
|
||||
},
|
||||
{
|
||||
"id": "22",
|
||||
"name": "Music Kit | Skog, II-Headshot",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-22.png"
|
||||
},
|
||||
{
|
||||
"id": "23",
|
||||
"name": "Music Kit | Daniel Sadowski, The 8-Bit Kit",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-23.png"
|
||||
},
|
||||
{
|
||||
"id": "24",
|
||||
"name": "Music Kit | AWOLNATION, I Am",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-24.png"
|
||||
},
|
||||
{
|
||||
"id": "25",
|
||||
"name": "Music Kit | Mord Fustang, Diamonds",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-25.png"
|
||||
},
|
||||
{
|
||||
"id": "26",
|
||||
"name": "Music Kit | Michael Bross, Invasion!",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-26.png"
|
||||
},
|
||||
{
|
||||
"id": "27",
|
||||
"name": "Music Kit | Ian Hultquist, Lion's Mouth",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-27.png"
|
||||
},
|
||||
{
|
||||
"id": "28",
|
||||
"name": "Music Kit | New Beat Fund, Sponge Fingerz",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-28.png"
|
||||
},
|
||||
{
|
||||
"id": "29",
|
||||
"name": "Music Kit | Beartooth, Disgusting",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-29.png"
|
||||
},
|
||||
{
|
||||
"id": "30",
|
||||
"name": "Music Kit | Lennie Moore, Java Havana Funkaloo",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-30.png"
|
||||
},
|
||||
{
|
||||
"id": "31",
|
||||
"name": "Music Kit | Darude, Moments CS:GO",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-31.png"
|
||||
},
|
||||
{
|
||||
"id": "32",
|
||||
"name": "Music Kit | Beartooth, Aggressive",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-32.png"
|
||||
},
|
||||
{
|
||||
"id": "33",
|
||||
"name": "Music Kit | Blitz Kids, The Good Youth",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-33.png"
|
||||
},
|
||||
{
|
||||
"id": "34",
|
||||
"name": "Music Kit | Hundredth, FREE",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-34.png"
|
||||
},
|
||||
{
|
||||
"id": "35",
|
||||
"name": "Music Kit | Neck Deep, Life's Not Out To Get You",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-35.png"
|
||||
},
|
||||
{
|
||||
"id": "36",
|
||||
"name": "Music Kit | Roam, Backbone",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-36.png"
|
||||
},
|
||||
{
|
||||
"id": "37",
|
||||
"name": "Music Kit | Twin Atlantic, GLA",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-37.png"
|
||||
},
|
||||
{
|
||||
"id": "38",
|
||||
"name": "Music Kit | Skog, III-Arena",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-38.png"
|
||||
},
|
||||
{
|
||||
"id": "39",
|
||||
"name": "Music Kit | The Verkkars, EZ4ENCE",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-39.png"
|
||||
},
|
||||
{
|
||||
"id": "40",
|
||||
"name": "Halo, The Master Chief Collection",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-40.png"
|
||||
},
|
||||
{
|
||||
"id": "41",
|
||||
"name": "Music Kit | Scarlxrd: King, Scar",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-41.png"
|
||||
},
|
||||
{
|
||||
"id": "42",
|
||||
"name": "Half-Life: Alyx, Anti-Citizen",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-42.png"
|
||||
},
|
||||
{
|
||||
"id": "43",
|
||||
"name": "Music Kit | Austin Wintory, Bachram",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-43.png"
|
||||
},
|
||||
{
|
||||
"id": "44",
|
||||
"name": "Music Kit | Dren, Gunman Taco Truck",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-44.png"
|
||||
},
|
||||
{
|
||||
"id": "45",
|
||||
"name": "Music Kit | Daniel Sadowski, Eye of the Dragon",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-45.png"
|
||||
},
|
||||
{
|
||||
"id": "46",
|
||||
"name": "Music Kit | Tree Adams and Ben Bromfield, M.U.D.D. FORCE",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-46.png"
|
||||
},
|
||||
{
|
||||
"id": "47",
|
||||
"name": "Music Kit | Tim Huling, Neo Noir",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-47.png"
|
||||
},
|
||||
{
|
||||
"id": "48",
|
||||
"name": "Music Kit | Sam Marshall, Bodacious",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-48.png"
|
||||
},
|
||||
{
|
||||
"id": "49",
|
||||
"name": "Music Kit | Matt Levine, Drifter",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-49.png"
|
||||
},
|
||||
{
|
||||
"id": "50",
|
||||
"name": "Music Kit | Amon Tobin, All for Dust",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-50.png"
|
||||
},
|
||||
{
|
||||
"id": "51",
|
||||
"name": "Darren Korb, Hades Music Kit",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-51.png"
|
||||
},
|
||||
{
|
||||
"id": "52",
|
||||
"name": "Music Kit | Neck Deep, The Lowlife Pack",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-52.png"
|
||||
},
|
||||
{
|
||||
"id": "53",
|
||||
"name": "Music Kit | Scarlxrd, CHAIN$AW.LXADXUT.",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-53.png"
|
||||
},
|
||||
{
|
||||
"id": "54",
|
||||
"name": "Music Kit | Austin Wintory, Mocha Petal",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-54.png"
|
||||
},
|
||||
{
|
||||
"id": "55",
|
||||
"name": "Music Kit | Chipzel, ~Yellow Magic~",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-55.png"
|
||||
},
|
||||
{
|
||||
"id": "56",
|
||||
"name": "Music Kit | Freaky DNA, Vici",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-56.png"
|
||||
},
|
||||
{
|
||||
"id": "57",
|
||||
"name": "Music Kit | Jesse Harlin, Astro Bellum",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-57.png"
|
||||
},
|
||||
{
|
||||
"id": "58",
|
||||
"name": "Music Kit | Laura Shigihara: Work Hard, Play Hard",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-58.png"
|
||||
},
|
||||
{
|
||||
"id": "59",
|
||||
"name": "Music Kit | Sarah Schachner, KOLIBRI",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-59.png"
|
||||
},
|
||||
{
|
||||
"id": "60",
|
||||
"name": "Music Kit | bbno$, u mad!",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-60.png"
|
||||
},
|
||||
{
|
||||
"id": "61",
|
||||
"name": "Music Kit | The Verkkars & n0thing, Flashbang Dance",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-61.png"
|
||||
},
|
||||
{
|
||||
"id": "62",
|
||||
"name": "Music Kit | 3kliksphilip, Heading for the Source",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-62.png"
|
||||
},
|
||||
{
|
||||
"id": "63",
|
||||
"name": "Music Kit | Humanity's Last Breath, Void",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-63.png"
|
||||
},
|
||||
{
|
||||
"id": "64",
|
||||
"name": "Music Kit | Juelz, Shooters",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-64.png"
|
||||
},
|
||||
{
|
||||
"id": "65",
|
||||
"name": "Music Kit | Knock2, dashstar*",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-65.png"
|
||||
},
|
||||
{
|
||||
"id": "66",
|
||||
"name": "Music Kit | Meechy Darko, Gothic Luxury",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-66.png"
|
||||
},
|
||||
{
|
||||
"id": "67",
|
||||
"name": "Music Kit | Sullivan King, Lock Me Up",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-67.png"
|
||||
},
|
||||
{
|
||||
"id": "68",
|
||||
"name": "Music Kit | Perfect World, 花脸 Hua Lian (Painted Face)",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-68.png"
|
||||
},
|
||||
{
|
||||
"id": "69",
|
||||
"name": "Music Kit | Denzel Curry, ULTIMATE",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-69.png"
|
||||
},
|
||||
{
|
||||
"id": "71",
|
||||
"name": "Music Kit | DRYDEN, Feel The Power",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-71.png"
|
||||
},
|
||||
{
|
||||
"id": "72",
|
||||
"name": "Music Kit | ISOxo, inhuman",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-72.png"
|
||||
},
|
||||
{
|
||||
"id": "73",
|
||||
"name": "Music Kit | KILL SCRIPT, All Night",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-73.png"
|
||||
},
|
||||
{
|
||||
"id": "74",
|
||||
"name": "Music Kit | Knock2, Make U SWEAT!",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-74.png"
|
||||
},
|
||||
{
|
||||
"id": "75",
|
||||
"name": "Music Kit | Rad Cat, Reason",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-75.png"
|
||||
},
|
||||
{
|
||||
"id": "76",
|
||||
"name": "Music Kit | TWERL, Ekko & Sidetrack, Under Bright Lights",
|
||||
"image": "https://raw.githubusercontent.com/daffyyyy/cs2-WeaponPaints/main/website/img/skins/music_kit-76.png"
|
||||
}
|
||||
]
|
||||
BIN
website/img/skins/agent-4613.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
website/img/skins/agent-4619.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
website/img/skins/agent-4680.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
website/img/skins/agent-4711.png
Normal file
|
After Width: | Height: | Size: 183 KiB |
BIN
website/img/skins/agent-4712.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
website/img/skins/agent-4713.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
website/img/skins/agent-4714.png
Normal file
|
After Width: | Height: | Size: 179 KiB |
BIN
website/img/skins/agent-4715.png
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
website/img/skins/agent-4716.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
website/img/skins/agent-4718.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
website/img/skins/agent-4726.png
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
website/img/skins/agent-4727.png
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
website/img/skins/agent-4728.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
website/img/skins/agent-4730.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
website/img/skins/agent-4732.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
website/img/skins/agent-4733.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
website/img/skins/agent-4734.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
website/img/skins/agent-4735.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
website/img/skins/agent-4736.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
website/img/skins/agent-4749.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
website/img/skins/agent-4750.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
website/img/skins/agent-4751.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
website/img/skins/agent-4752.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
website/img/skins/agent-4753.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
website/img/skins/agent-4756.png
Normal file
|
After Width: | Height: | Size: 217 KiB |
BIN
website/img/skins/agent-4757.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
website/img/skins/agent-4771.png
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
website/img/skins/agent-4772.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
website/img/skins/agent-4773.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
website/img/skins/agent-4774.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
website/img/skins/agent-4775.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
website/img/skins/agent-4776.png
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
website/img/skins/agent-4777.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
website/img/skins/agent-4778.png
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
website/img/skins/agent-4780.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
website/img/skins/agent-4781.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
website/img/skins/agent-5105.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
website/img/skins/agent-5106.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
website/img/skins/agent-5107.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
website/img/skins/agent-5108.png
Normal file
|
After Width: | Height: | Size: 179 KiB |
BIN
website/img/skins/agent-5109.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
website/img/skins/agent-5205.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
website/img/skins/agent-5206.png
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
website/img/skins/agent-5207.png
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
website/img/skins/agent-5208.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
website/img/skins/agent-5305.png
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
website/img/skins/agent-5306.png
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
website/img/skins/agent-5307.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
website/img/skins/agent-5308.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
website/img/skins/agent-5400.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
website/img/skins/agent-5401.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
website/img/skins/agent-5402.png
Normal file
|
After Width: | Height: | Size: 198 KiB |
BIN
website/img/skins/agent-5403.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
website/img/skins/agent-5404.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
website/img/skins/agent-5405.png
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
website/img/skins/agent-5500.png
Normal file
|
After Width: | Height: | Size: 187 KiB |
BIN
website/img/skins/agent-5501.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
website/img/skins/agent-5502.png
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
website/img/skins/agent-5503.png
Normal file
|
After Width: | Height: | Size: 171 KiB |
BIN
website/img/skins/agent-5504.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
website/img/skins/agent-5505.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
website/img/skins/agent-5601.png
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
website/img/skins/agent-5602.png
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
website/img/skins/music_kit-10.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
website/img/skins/music_kit-11.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
website/img/skins/music_kit-12.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
website/img/skins/music_kit-13.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
website/img/skins/music_kit-14.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
website/img/skins/music_kit-15.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
website/img/skins/music_kit-16.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
website/img/skins/music_kit-17.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
website/img/skins/music_kit-18.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
website/img/skins/music_kit-19.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
website/img/skins/music_kit-20.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
website/img/skins/music_kit-21.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
website/img/skins/music_kit-22.png
Normal file
|
After Width: | Height: | Size: 62 KiB |