mirror of
https://github.com/Nereziel/cs2-WeaponPaints.git
synced 2026-02-17 18:39:07 +00:00
2.2a
- Updated languages - Added agents - Minor changes - Updated readme - Gloves small fix - Fixed showimage
This commit is contained in:
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@@ -62,6 +62,8 @@ jobs:
|
|||||||
run: cp website/data/skins.json ${{ env.OUTPUT_PATH }}/skins.json
|
run: cp website/data/skins.json ${{ env.OUTPUT_PATH }}/skins.json
|
||||||
- name: Copy gloves.json
|
- name: Copy gloves.json
|
||||||
run: cp website/data/gloves.json ${{ env.OUTPUT_PATH }}/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: Zip
|
- name: Zip
|
||||||
run: zip -r "${{ env.PROJECT_NAME }}.zip" "${{ env.OUTPUT_PATH }}" gamedata/
|
run: zip -r "${{ env.PROJECT_NAME }}.zip" "${{ env.OUTPUT_PATH }}" gamedata/
|
||||||
- name: Clean files Website
|
- name: Clean files Website
|
||||||
|
|||||||
124
Commands.cs
124
Commands.cs
@@ -1,6 +1,7 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
using CounterStrikeSharp.API.Modules.Menu;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace WeaponPaints
|
namespace WeaponPaints
|
||||||
{
|
{
|
||||||
@@ -407,16 +408,20 @@ namespace WeaponPaints
|
|||||||
{
|
{
|
||||||
await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex);
|
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;
|
value.Paint = paint;
|
||||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Wear = 0.00f;
|
value.Wear = 0.00f;
|
||||||
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Seed = 0;
|
value.Seed = 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
RefreshGloves(player);
|
RefreshGloves(player);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -451,5 +456,114 @@ 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"]?.ToString() == selectedPaintName);
|
||||||
|
if (selectedAgent != null)
|
||||||
|
{
|
||||||
|
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"]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,8 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
[JsonPropertyName("GloveEnabled")]
|
[JsonPropertyName("GloveEnabled")]
|
||||||
public bool GloveEnabled { get; set; } = true;
|
public bool GloveEnabled { get; set; } = true;
|
||||||
|
[JsonPropertyName("AgentEnabled")]
|
||||||
|
public bool AgentEnabled { get; set; } = true;
|
||||||
|
|
||||||
[JsonPropertyName("SkinEnabled")]
|
[JsonPropertyName("SkinEnabled")]
|
||||||
public bool SkinEnabled { get; set; } = true;
|
public bool SkinEnabled { get; set; } = true;
|
||||||
@@ -25,6 +27,8 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
[JsonPropertyName("CommandGlove")]
|
[JsonPropertyName("CommandGlove")]
|
||||||
public string CommandGlove { get; set; } = "gloves";
|
public string CommandGlove { get; set; } = "gloves";
|
||||||
|
[JsonPropertyName("CommandAgent")]
|
||||||
|
public string CommandAgent { get; set; } = "agents";
|
||||||
|
|
||||||
[JsonPropertyName("CommandSkin")]
|
[JsonPropertyName("CommandSkin")]
|
||||||
public string CommandSkin { get; set; } = "ws";
|
public string CommandSkin { get; set; } = "ws";
|
||||||
@@ -44,16 +48,13 @@ namespace WeaponPaints
|
|||||||
[JsonPropertyName("GiveRandomSkin")]
|
[JsonPropertyName("GiveRandomSkin")]
|
||||||
public bool GiveRandomSkin { get; set; } = false;
|
public bool GiveRandomSkin { get; set; } = false;
|
||||||
|
|
||||||
[JsonPropertyName("GiveKnifeAfterRemove")]
|
|
||||||
public bool GiveKnifeAfterRemove { get; set; } = false;
|
|
||||||
|
|
||||||
[JsonPropertyName("ShowSkinImage")]
|
[JsonPropertyName("ShowSkinImage")]
|
||||||
public bool ShowSkinImage { get; set; } = true;
|
public bool ShowSkinImage { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WeaponPaintsConfig : BasePluginConfig
|
public class WeaponPaintsConfig : BasePluginConfig
|
||||||
{
|
{
|
||||||
public override int Version { get; set; } = 5;
|
public override int Version { get; set; } = 6;
|
||||||
|
|
||||||
[JsonPropertyName("DatabaseHost")]
|
[JsonPropertyName("DatabaseHost")]
|
||||||
public string DatabaseHost { get; set; } = "";
|
public string DatabaseHost { get; set; } = "";
|
||||||
|
|||||||
45
Events.cs
45
Events.cs
@@ -41,6 +41,10 @@ namespace WeaponPaints
|
|||||||
{
|
{
|
||||||
tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)));
|
tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)));
|
||||||
}
|
}
|
||||||
|
if (Config.Additional.AgentEnabled)
|
||||||
|
{
|
||||||
|
tasks.Add(Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo)));
|
||||||
|
}
|
||||||
|
|
||||||
Task.WaitAll(tasks.ToArray());
|
Task.WaitAll(tasks.ToArray());
|
||||||
}
|
}
|
||||||
@@ -86,6 +90,10 @@ namespace WeaponPaints
|
|||||||
{
|
{
|
||||||
g_playersGlove.TryRemove(player.Slot, out _);
|
g_playersGlove.TryRemove(player.Slot, out _);
|
||||||
}
|
}
|
||||||
|
if (Config.Additional.AgentEnabled)
|
||||||
|
{
|
||||||
|
g_playersAgent.TryRemove(player.Slot, out _);
|
||||||
|
}
|
||||||
|
|
||||||
commandsCooldown.Remove(player.Slot);
|
commandsCooldown.Remove(player.Slot);
|
||||||
|
|
||||||
@@ -190,19 +198,6 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
if (_database != null)
|
if (_database != null)
|
||||||
weaponSync = new WeaponSynchronization(_database, Config);
|
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)
|
private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)
|
||||||
@@ -219,9 +214,7 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
g_knifePickupCount[player.Slot] = 0;
|
g_knifePickupCount[player.Slot] = 0;
|
||||||
|
|
||||||
//if (!PlayerHasKnife(player))
|
GivePlayerAgent(player);
|
||||||
//GiveKnifeToPlayer(player);
|
|
||||||
|
|
||||||
Server.NextFrame(() =>
|
Server.NextFrame(() =>
|
||||||
{
|
{
|
||||||
RefreshGloves(player);
|
RefreshGloves(player);
|
||||||
@@ -282,6 +275,23 @@ namespace WeaponPaints
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
private void RegisterListeners()
|
||||||
{
|
{
|
||||||
RegisterListener<Listeners.OnMapStart>(OnMapStart);
|
RegisterListener<Listeners.OnMapStart>(OnMapStart);
|
||||||
@@ -290,9 +300,8 @@ namespace WeaponPaints
|
|||||||
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
|
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);
|
||||||
RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
|
RegisterEventHandler<EventRoundEnd>(OnRoundEnd);
|
||||||
RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned);
|
RegisterListener<Listeners.OnEntitySpawned>(OnEntitySpawned);
|
||||||
|
RegisterListener<Listeners.OnTick>(OnTick);
|
||||||
//VirtualFunctions.GiveNamedItemFunc.Hook(OnGiveNamedItemPost, HookMode.Post);
|
//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)
|
[](https://ko-fi.com/E1E2G0P2O) or [](https://steamcommunity.com/tradeoffer/new/?partner=41515647&token=gW2W-nXE)
|
||||||
|
|
||||||
## Features
|
## 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
|
- MySQL based
|
||||||
- Data syncs on player connect
|
- Data syncs on player connect
|
||||||
- Added command **`!wp`** to refresh skins ***(with cooldown in seconds can be configured)***
|
- Added command **`!wp`** to refresh skins ***(with cooldown in seconds can be configured)***
|
||||||
- Added command **`!ws`** to show website
|
- Added command **`!ws`** to show website
|
||||||
- Added command **`!knife`** to show menu with knives
|
- 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
|
- Translations support, submit a PR if you want to share your translation
|
||||||
|
|
||||||
## CS2 Server
|
## CS2 Server
|
||||||
@@ -89,11 +91,6 @@ Set FollowCSGOGuidelines to false in cssharp’s core.jcon config
|
|||||||
**Database error table does not exists:**
|
**Database error table does not exists:**
|
||||||
Plugin is not loaded or configured with mysql credentials. Tables are auto-created by plugin.
|
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>
|
</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/)
|
### 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/)
|
||||||
|
|||||||
35
Utility.cs
35
Utility.cs
@@ -117,6 +117,20 @@ 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 Log(string message)
|
internal static void Log(string message)
|
||||||
{
|
{
|
||||||
Console.BackgroundColor = ConsoleColor.DarkGray;
|
Console.BackgroundColor = ConsoleColor.DarkGray;
|
||||||
@@ -206,26 +220,5 @@ namespace WeaponPaints
|
|||||||
Console.WriteLine(" >> GitHub: https://github.com/Nereziel/cs2-WeaponPaints");
|
Console.WriteLine(" >> GitHub: https://github.com/Nereziel/cs2-WeaponPaints");
|
||||||
Console.WriteLine(" ");
|
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();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
102
WeaponAction.cs
102
WeaponAction.cs
@@ -17,29 +17,6 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
if (PlayerHasKnife(player)) return;
|
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";
|
string knifeToGive = (CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife";
|
||||||
player.GiveNamedItem(CsItem.Knife);
|
player.GiveNamedItem(CsItem.Knife);
|
||||||
}
|
}
|
||||||
@@ -88,10 +65,8 @@ namespace WeaponPaints
|
|||||||
|
|
||||||
int playerTeam = player.TeamNum;
|
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)>>();
|
Dictionary<string, List<(int, int)>> weaponsWithAmmo = new Dictionary<string, List<(int, int)>>();
|
||||||
|
|
||||||
// Iterate through each weapon
|
|
||||||
foreach (var weapon in weapons)
|
foreach (var weapon in weapons)
|
||||||
{
|
{
|
||||||
if (weapon == null || !weapon.IsValid || weapon.Value == null ||
|
if (weapon == null || !weapon.IsValid || weapon.Value == null ||
|
||||||
@@ -212,59 +187,6 @@ namespace WeaponPaints
|
|||||||
}, TimerFlags.STOP_ON_MAPCHANGE);
|
}, 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)
|
private static void RefreshGloves(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (!Utility.IsPlayerValid(player) || (LifeState_t)player.LifeState != LifeState_t.LIFE_ALIVE) return;
|
if (!Utility.IsPlayerValid(player) || (LifeState_t)player.LifeState != LifeState_t.LIFE_ALIVE) return;
|
||||||
@@ -375,6 +297,25 @@ namespace WeaponPaints
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GivePlayerAgent(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Server.NextFrame(() =>
|
||||||
|
{
|
||||||
|
string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T;
|
||||||
|
if (model == null) return;
|
||||||
|
|
||||||
|
player.PlayerPawn.Value!.SetModel(
|
||||||
|
$"characters/models/{model}.vmdl"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static CCSPlayerController? GetPlayerFromItemServices(CCSPlayer_ItemServices itemServices)
|
public static CCSPlayerController? GetPlayerFromItemServices(CCSPlayer_ItemServices itemServices)
|
||||||
{
|
{
|
||||||
var pawn = itemServices.Pawn.Value;
|
var pawn = itemServices.Pawn.Value;
|
||||||
@@ -384,11 +325,6 @@ namespace WeaponPaints
|
|||||||
return player;
|
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)
|
private static unsafe CBaseViewModel? GetPlayerViewModel(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (player.PlayerPawn.Value == null || player.PlayerPawn.Value.ViewModelServices == null) return null;
|
if (player.PlayerPawn.Value == null || player.PlayerPawn.Value.ViewModelServices == null) return null;
|
||||||
|
|||||||
@@ -80,9 +80,11 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
|||||||
internal static Dictionary<int, int> g_knifePickupCount = new Dictionary<int, int>();
|
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, string> g_playersKnife = new ConcurrentDictionary<int, string>();
|
||||||
internal static ConcurrentDictionary<int, ushort> g_playersGlove = new ConcurrentDictionary<int, ushort>();
|
internal static ConcurrentDictionary<int, ushort> g_playersGlove = new ConcurrentDictionary<int, ushort>();
|
||||||
|
internal static ConcurrentDictionary<int, (string? CT, string? T)> g_playersAgent = new ConcurrentDictionary<int, (string?, string?)>();
|
||||||
internal static ConcurrentDictionary<int, ConcurrentDictionary<int, WeaponInfo>> gPlayerWeaponsInfo = new ConcurrentDictionary<int, ConcurrentDictionary<int, WeaponInfo>>();
|
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> skinsList = new List<JObject>();
|
||||||
internal static List<JObject> glovesList = new List<JObject>();
|
internal static List<JObject> glovesList = new List<JObject>();
|
||||||
|
internal static List<JObject> agentsList = new List<JObject>();
|
||||||
internal static WeaponSynchronization? weaponSync;
|
internal static WeaponSynchronization? weaponSync;
|
||||||
public static bool g_bCommandsAllowed = true;
|
public static bool g_bCommandsAllowed = true;
|
||||||
internal Dictionary<int, string> PlayerWeaponImage = new();
|
internal Dictionary<int, string> PlayerWeaponImage = new();
|
||||||
@@ -154,9 +156,9 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
|||||||
|
|
||||||
public WeaponPaintsConfig Config { get; set; } = new();
|
public WeaponPaintsConfig Config { get; set; } = new();
|
||||||
public override string ModuleAuthor => "Nereziel & daffyy";
|
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 ModuleName => "WeaponPaints";
|
||||||
public override string ModuleVersion => "2.1a";
|
public override string ModuleVersion => "2.2a";
|
||||||
|
|
||||||
public static WeaponPaintsConfig GetWeaponPaintsConfig()
|
public static WeaponPaintsConfig GetWeaponPaintsConfig()
|
||||||
{
|
{
|
||||||
@@ -177,15 +179,15 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
|||||||
player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected)
|
player.IsHLTV || player.Connected != PlayerConnectedState.PlayerConnected)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
g_knifePickupCount[(int)player.Slot] = 0;
|
g_knifePickupCount[player.Slot] = 0;
|
||||||
gPlayerWeaponsInfo.TryRemove((int)player.Slot, out _);
|
gPlayerWeaponsInfo.TryRemove(player.Slot, out _);
|
||||||
g_playersKnife.TryRemove((int)player.Slot, out _);
|
g_playersKnife.TryRemove(player.Slot, out _);
|
||||||
|
|
||||||
PlayerInfo playerInfo = new PlayerInfo
|
PlayerInfo playerInfo = new PlayerInfo
|
||||||
{
|
{
|
||||||
UserId = player.UserId,
|
UserId = player.UserId,
|
||||||
Slot = player.Slot,
|
Slot = player.Slot,
|
||||||
Index = (int)player.Slot,
|
Index = (int)player.Index,
|
||||||
SteamId = player?.SteamID.ToString(),
|
SteamId = player?.SteamID.ToString(),
|
||||||
Name = player?.PlayerName,
|
Name = player?.PlayerName,
|
||||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
IpAddress = player?.IpAddress?.Split(":")[0]
|
||||||
@@ -203,11 +205,16 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
|||||||
{
|
{
|
||||||
Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo));
|
Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo));
|
||||||
}
|
}
|
||||||
|
if (Config.Additional.AgentEnabled)
|
||||||
|
{
|
||||||
|
Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Utility.LoadSkinsFromFile(ModuleDirectory + "/skins.json");
|
Utility.LoadSkinsFromFile(ModuleDirectory + "/skins.json");
|
||||||
Utility.LoadGlovesFromFile(ModuleDirectory + "/gloves.json");
|
Utility.LoadGlovesFromFile(ModuleDirectory + "/gloves.json");
|
||||||
|
Utility.LoadAgentsFromFile(ModuleDirectory + "/agents.json");
|
||||||
|
|
||||||
if (Config.Additional.KnifeEnabled)
|
if (Config.Additional.KnifeEnabled)
|
||||||
SetupKnifeMenu();
|
SetupKnifeMenu();
|
||||||
@@ -215,6 +222,8 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
|
|||||||
SetupSkinsMenu();
|
SetupSkinsMenu();
|
||||||
if (Config.Additional.GloveEnabled)
|
if (Config.Additional.GloveEnabled)
|
||||||
SetupGlovesMenu();
|
SetupGlovesMenu();
|
||||||
|
if (Config.Additional.AgentEnabled)
|
||||||
|
SetupAgentsMenu();
|
||||||
|
|
||||||
RegisterListeners();
|
RegisterListeners();
|
||||||
RegisterCommands();
|
RegisterCommands();
|
||||||
|
|||||||
@@ -58,6 +58,37 @@ namespace WeaponPaints
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public 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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
public async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -131,6 +162,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)
|
internal async Task SyncWeaponPaintsToDatabase(PlayerInfo player)
|
||||||
{
|
{
|
||||||
if (player == null || string.IsNullOrEmpty(player.SteamId) || !WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Slot, out var weaponsInfo))
|
if (player == null || string.IsNullOrEmpty(player.SteamId) || !WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Slot, out var weaponsInfo))
|
||||||
|
|||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Knife Menu",
|
"wp_knife_menu_title": "Knife Menu",
|
||||||
"wp_glove_menu_select": "You have chosen {lime}{0}{default} as your glove",
|
"wp_glove_menu_select": "You have chosen {lime}{0}{default} as your glove",
|
||||||
"wp_glove_menu_title": "Gloves Menu",
|
"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_skin_menu_weapon_title": "Weapon Menu",
|
"wp_skin_menu_weapon_title": "Weapon Menu",
|
||||||
"wp_skin_menu_skin_title": "Select skin for {lime}{0}{default}",
|
"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"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Nazis Izvēlne",
|
"wp_knife_menu_title": "Nazis Izvēlne",
|
||||||
"wp_glove_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savus cimdus",
|
"wp_glove_menu_select": "Jūs esat izvēlējies {lime}{0}{default} kā savus cimdus",
|
||||||
"wp_glove_menu_title": "Cimdu Izvēlne",
|
"wp_glove_menu_title": "Cimdu Izvēlne",
|
||||||
|
"wp_agent_menu_select": "Jūs esat izvēlējušies {lime}{0}{default} kā savu aģentu",
|
||||||
|
"wp_agent_menu_title": "Aģentu izvēlnes",
|
||||||
"wp_skin_menu_weapon_title": "Ieroču Izvēlne",
|
"wp_skin_menu_weapon_title": "Ieroču Izvēlne",
|
||||||
"wp_skin_menu_skin_title": "Izvēlieties ādu {lime}{0}{default}",
|
"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_select": "Jūs esat izvēlējies {lime}{0}{default} kā savu ādu",
|
||||||
|
|
||||||
|
"None": "Nav"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Menu Noży",
|
"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 swoje rękawiczki",
|
||||||
"wp_glove_menu_title": "Menu Rękawiczek",
|
"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_skin_menu_weapon_title": "Menu Broni",
|
"wp_skin_menu_weapon_title": "Menu Broni",
|
||||||
"wp_skin_menu_skin_title": "Wybierz skórkę dla {lime}{0}{default}",
|
"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"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Menu de Facas",
|
"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 suas luvas",
|
||||||
"wp_glove_menu_title": "Menu de Luvas",
|
"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_skin_menu_weapon_title": "Menu de Armas",
|
"wp_skin_menu_weapon_title": "Menu de Armas",
|
||||||
"wp_skin_menu_skin_title": "Selecione uma skin para {lime}{0}{default}",
|
"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_select": "Você escolheu {lime}{0}{default} como sua skin",
|
||||||
|
|
||||||
|
"None": "Nenhum"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Menu de Facas",
|
"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 suas luvas",
|
||||||
"wp_glove_menu_title": "Menu de Luvas",
|
"wp_glove_menu_title": "Menu de Luvas",
|
||||||
|
"wp_agent_menu_select": "Escolheste {lime}{0}{default} como teu agente",
|
||||||
|
"wp_agent_menu_title": "Menu de Agentes",
|
||||||
"wp_skin_menu_weapon_title": "Menu de Armas",
|
"wp_skin_menu_weapon_title": "Menu de Armas",
|
||||||
"wp_skin_menu_skin_title": "Selecione uma skin para {lime}{0}{default}",
|
"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_select": "Você escolheu {lime}{0}{default} como sua skin",
|
||||||
|
|
||||||
|
"None": "Nenhum"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Меню Ножей",
|
"wp_knife_menu_title": "Меню Ножей",
|
||||||
"wp_glove_menu_select": "Вы выбрали {lime}{0}{default} в качестве ваших перчаток",
|
"wp_glove_menu_select": "Вы выбрали {lime}{0}{default} в качестве ваших перчаток",
|
||||||
"wp_glove_menu_title": "Меню Перчаток",
|
"wp_glove_menu_title": "Меню Перчаток",
|
||||||
|
"wp_agent_menu_select": "Вы выбрали {lime}{0}{default} в качестве своего агента",
|
||||||
|
"wp_agent_menu_title": "Меню агентов",
|
||||||
"wp_skin_menu_weapon_title": "Меню Оружия",
|
"wp_skin_menu_weapon_title": "Меню Оружия",
|
||||||
"wp_skin_menu_skin_title": "Выберите скин для {lime}{0}{default}",
|
"wp_skin_menu_skin_title": "Выберите скин для {lime}{0}{default}",
|
||||||
"wp_skin_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего скина"
|
"wp_skin_menu_select": "Вы выбрали {lime}{0}{default} в качестве вашего скина",
|
||||||
|
|
||||||
|
"None": "Нет"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Bıçak Menüsü",
|
"wp_knife_menu_title": "Bıçak Menüsü",
|
||||||
"wp_glove_menu_select": "{lime}{0}{default} olarak eldiveninizi seçtiniz",
|
"wp_glove_menu_select": "{lime}{0}{default} olarak eldiveninizi seçtiniz",
|
||||||
"wp_glove_menu_title": "Eldiven Menüsü",
|
"wp_glove_menu_title": "Eldiven Menüsü",
|
||||||
|
"wp_agent_menu_select": "Ajanınız olarak {lime}{0}{default} seçtiniz",
|
||||||
|
"wp_agent_menu_title": "Ajan Menüsü",
|
||||||
"wp_skin_menu_weapon_title": "Silah Menüsü",
|
"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_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_select": "{lime}{0}{default} olarak bir skin seçtiniz",
|
||||||
|
|
||||||
|
"None": "Hiçbiri"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "Меню Ножів",
|
"wp_knife_menu_title": "Меню Ножів",
|
||||||
"wp_glove_menu_select": "Ви вибрали {lime}{0}{default} як ваші рукавички",
|
"wp_glove_menu_select": "Ви вибрали {lime}{0}{default} як ваші рукавички",
|
||||||
"wp_glove_menu_title": "Меню Рукавичок",
|
"wp_glove_menu_title": "Меню Рукавичок",
|
||||||
|
"wp_agent_menu_select": "Ви обрали {lime}{0}{default} як вашого агента",
|
||||||
|
"wp_agent_menu_title": "Меню агентів",
|
||||||
"wp_skin_menu_weapon_title": "Меню Зброї",
|
"wp_skin_menu_weapon_title": "Меню Зброї",
|
||||||
"wp_skin_menu_skin_title": "Виберіть шкіру для {lime}{0}{default}",
|
"wp_skin_menu_skin_title": "Виберіть шкіру для {lime}{0}{default}",
|
||||||
"wp_skin_menu_select": "Ви вибрали {lime}{0}{default} як вашу шкіру"
|
"wp_skin_menu_select": "Ви вибрали {lime}{0}{default} як вашу шкіру",
|
||||||
|
|
||||||
|
"None": "Немає"
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,11 @@
|
|||||||
"wp_knife_menu_title": "刀具菜单",
|
"wp_knife_menu_title": "刀具菜单",
|
||||||
"wp_glove_menu_select": "您已选择 {lime}{0}{default} 作为您的手套",
|
"wp_glove_menu_select": "您已选择 {lime}{0}{default} 作为您的手套",
|
||||||
"wp_glove_menu_title": "手套菜单",
|
"wp_glove_menu_title": "手套菜单",
|
||||||
|
"wp_agent_menu_select": "您选择了{lime}{0}{default}作为您的代理",
|
||||||
|
"wp_agent_menu_title": "代理菜单",
|
||||||
"wp_skin_menu_weapon_title": "武器菜单",
|
"wp_skin_menu_weapon_title": "武器菜单",
|
||||||
"wp_skin_menu_skin_title": "为 {lime}{0}{default} 选择皮肤",
|
"wp_skin_menu_skin_title": "为 {lime}{0}{default} 选择皮肤",
|
||||||
"wp_skin_menu_select": "您已选择 {lime}{0}{default} 作为您的皮肤"
|
"wp_skin_menu_select": "您已选择 {lime}{0}{default} 作为您的皮肤",
|
||||||
|
|
||||||
|
"None": "无"
|
||||||
}
|
}
|
||||||
386
website/data/agents.json
Normal file
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,
|
"weapon_defindex": 4725,
|
||||||
"paint": "10085",
|
"paint": "10085",
|
||||||
|
|||||||
Reference in New Issue
Block a user