mirror of
https://github.com/Nereziel/cs2-WeaponPaints.git
synced 2026-03-03 14:32:25 +00:00
test update
min CSShrap 155 globalshare not working db remake add option to not use ontick fix to cs2 weapon models !skins will save only changed weapon
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using Dapper;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Entities;
|
||||
using Dapper;
|
||||
using MySqlConnector;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -19,21 +21,64 @@ namespace WeaponPaints
|
||||
_globalShareApi = globalShareApi;
|
||||
_globalShareServerId = globalShareServerId;
|
||||
}
|
||||
|
||||
internal async Task GetKnifeFromDatabase(PlayerInfo player)
|
||||
internal async Task GetPlayerDatabaseIndex(PlayerInfo player)
|
||||
{
|
||||
if (!_config.Additional.KnifeEnabled) return;
|
||||
if (player.SteamId == null || player.Index == 0) return;
|
||||
|
||||
try
|
||||
{
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
|
||||
string query = "SELECT `id` FROM `wp_users` WHERE `steamid` = @steamid";
|
||||
int? databaseIndex = await connection.QueryFirstOrDefaultAsync<int?>(query, new { steamid = player.SteamId });
|
||||
if (databaseIndex != null)
|
||||
{
|
||||
WeaponPaints.g_playersDatabaseIndex[player.Index] = (int)databaseIndex;
|
||||
}
|
||||
else
|
||||
{
|
||||
string insertQuery = "INSERT INTO `wp_users` (`steamid`) VALUES (@steamid)";
|
||||
await connection.ExecuteAsync(insertQuery, new { steamid = player.SteamId });
|
||||
Console.WriteLine("SQL Insert Query: " + insertQuery);
|
||||
databaseIndex = await connection.QueryFirstOrDefaultAsync<int?>(query, new { steamid = player.SteamId });
|
||||
WeaponPaints.g_playersDatabaseIndex[(int)player.Index] = (int)databaseIndex;
|
||||
}
|
||||
await connection.CloseAsync();
|
||||
|
||||
if (databaseIndex != null)
|
||||
{
|
||||
if (_config.AdditionalSetting.SkinEnabled)
|
||||
await GetWeaponPaintsFromDatabase(player);
|
||||
if (_config.AdditionalSetting.KnifeEnabled)
|
||||
await GetKnifeFromDatabase(player);
|
||||
if (_config.AdditionalSetting.MusicKitEnabled)
|
||||
await GetMusicKitFromDatabase(player);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log("GetPlayerDatabaseIndex: " + e.Message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
internal async Task GetKnifeFromDatabase(PlayerInfo player)
|
||||
{
|
||||
if (!_config.AdditionalSetting.KnifeEnabled) return;
|
||||
if (player.SteamId == null || player.Index == 0) return;
|
||||
try
|
||||
{
|
||||
if (_config.GlobalShare)
|
||||
{
|
||||
var values = new Dictionary<string, string>
|
||||
{
|
||||
{ "server_id", _globalShareServerId.ToString() },
|
||||
{ "steamid", player.SteamId },
|
||||
{ "knife", "1" }
|
||||
};
|
||||
{
|
||||
{ "server_id", _globalShareServerId.ToString() },
|
||||
{ "steamid", player.SteamId.ToString()! },
|
||||
{ "knife", "1" }
|
||||
};
|
||||
|
||||
UriBuilder builder = new UriBuilder(_globalShareApi);
|
||||
builder.Query = string.Join("&", values.Select(p => $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"));
|
||||
@@ -64,13 +109,17 @@ namespace WeaponPaints
|
||||
return;
|
||||
}
|
||||
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
if (!WeaponPaints.g_playersDatabaseIndex.TryGetValue(player.Index, out _))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
string query = "SELECT `knife` FROM `wp_player_knife` WHERE `steamid` = @steamid";
|
||||
string? PlayerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { steamid = player.SteamId });
|
||||
|
||||
if (PlayerKnife != null)
|
||||
string query = "SELECT `knife` FROM `wp_users_knife` WHERE `user_id` = @userId";
|
||||
string? PlayerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Index] });
|
||||
if (PlayerKnife != null)
|
||||
{
|
||||
WeaponPaints.g_playersKnife[player.Index] = PlayerKnife;
|
||||
}
|
||||
@@ -83,30 +132,63 @@ namespace WeaponPaints
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log(e.Message);
|
||||
Utility.Log("GetKnifeFromDatabase: " + e.Message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
internal async Task GetMusicKitFromDatabase(PlayerInfo player)
|
||||
{
|
||||
if (!_config.AdditionalSetting.MusicKitEnabled) return;
|
||||
if (player.SteamId == null || player.Index == 0) return;
|
||||
if (!WeaponPaints.g_playersDatabaseIndex.TryGetValue(player.Index, out _))
|
||||
{
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
string query = "SELECT `music` FROM `wp_users_music` WHERE `user_id` = @userId";
|
||||
int? PlayerMusitKit = await connection.QueryFirstOrDefaultAsync<int?>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Index] });
|
||||
if (PlayerMusitKit != null)
|
||||
{
|
||||
WeaponPaints.g_playersMusicKit[player.Index] = PlayerMusitKit;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
await connection.CloseAsync();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log("GetMusicKitFromDatabase: " + e.Message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
||||
internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
|
||||
{
|
||||
if (!_config.Additional.SkinEnabled) return;
|
||||
if (!_config.AdditionalSetting.SkinEnabled) return;
|
||||
if (player.SteamId == null || player.Index == 0) return;
|
||||
|
||||
if (!WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Index, out _))
|
||||
{
|
||||
WeaponPaints.gPlayerWeaponsInfo[player.Index] = new ConcurrentDictionary<int, WeaponInfo>();
|
||||
}
|
||||
try
|
||||
if (!WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Index, out _))
|
||||
{
|
||||
WeaponPaints.gPlayerWeaponsInfo[player.Index] = new ConcurrentDictionary<ushort, WeaponInfo>();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (_config.GlobalShare)
|
||||
{
|
||||
var values = new Dictionary<string, string>
|
||||
{
|
||||
{ "server_id", _globalShareServerId.ToString() },
|
||||
{ "steamid", player.SteamId },
|
||||
{ "skins", "1" }
|
||||
};
|
||||
{
|
||||
{ "server_id", _globalShareServerId.ToString() },
|
||||
{ "steamid", player.SteamId.ToString()! },
|
||||
{ "skins", "1" }
|
||||
};
|
||||
UriBuilder builder = new UriBuilder(_globalShareApi);
|
||||
builder.Query = string.Join("&", values.Select(p => $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"));
|
||||
|
||||
@@ -124,19 +206,20 @@ namespace WeaponPaints
|
||||
{
|
||||
foreach (var weapon in jsonArray)
|
||||
{
|
||||
int? weaponDefIndex = weapon["weapon_defindex"]?.Value<int>();
|
||||
int? weaponPaintId = weapon["weapon_paint_id"]?.Value<int>();
|
||||
ushort? weaponDefIndex = weapon["weapon_defindex"]?.Value<ushort>();
|
||||
ushort? weaponPaintId = weapon["weapon_paint_id"]?.Value<ushort>();
|
||||
float? weaponWear = weapon["weapon_wear"]?.Value<float>();
|
||||
int? weaponSeed = weapon["weapon_seed"]?.Value<int>();
|
||||
ushort? weaponSeed = weapon["weapon_seed"]?.Value<ushort>();
|
||||
|
||||
if (weaponDefIndex != null && weaponPaintId != null && weaponWear != null && weaponSeed != null)
|
||||
if (weaponDefIndex != null && weaponPaintId != null && weaponWear != null && weaponSeed != null)
|
||||
{
|
||||
WeaponInfo weaponInfo = new WeaponInfo
|
||||
{
|
||||
Paint = weaponPaintId.Value,
|
||||
Seed = weaponSeed.Value,
|
||||
Wear = weaponWear.Value
|
||||
};
|
||||
Wear = weaponWear.Value,
|
||||
NameTag = null
|
||||
};
|
||||
WeaponPaints.gPlayerWeaponsInfo[player.Index][weaponDefIndex.Value] = weaponInfo;
|
||||
}
|
||||
}
|
||||
@@ -150,28 +233,33 @@ namespace WeaponPaints
|
||||
}
|
||||
}
|
||||
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
if (!WeaponPaints.g_playersDatabaseIndex.TryGetValue(player.Index, out _))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using (var connection = new MySqlConnection(_databaseConnectionString))
|
||||
{
|
||||
await connection.OpenAsync();
|
||||
|
||||
string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid";
|
||||
IEnumerable<dynamic> PlayerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId });
|
||||
|
||||
if (PlayerSkins != null && PlayerSkins.AsList().Count > 0)
|
||||
string query = "SELECT `weapon`, `paint`, `wear`, `seed`, `nametag` FROM `wp_users_items` WHERE `user_id` = @userId";
|
||||
IEnumerable<dynamic> PlayerSkins = await connection.QueryAsync<dynamic>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Index] });
|
||||
if (PlayerSkins != null && PlayerSkins.Any())
|
||||
{
|
||||
PlayerSkins.ToList().ForEach(row =>
|
||||
PlayerSkins.ToList().ForEach(row =>
|
||||
{
|
||||
int weaponDefIndex = row.weapon_defindex ?? default(int);
|
||||
int weaponPaintId = row.weapon_paint_id ?? default(int);
|
||||
float weaponWear = row.weapon_wear ?? default(float);
|
||||
int weaponSeed = row.weapon_seed ?? default(int);
|
||||
ushort weaponDefIndex = row.weapon ?? default(ushort);
|
||||
ushort weaponPaintId = row.paint ?? default(ushort);
|
||||
float weaponWear = row.wear ?? default(float);
|
||||
ushort weaponSeed = row.seed ?? default(ushort);
|
||||
string weaponNameTag = row.nametag;
|
||||
|
||||
WeaponInfo weaponInfo = new WeaponInfo
|
||||
WeaponInfo weaponInfo = new WeaponInfo
|
||||
{
|
||||
Paint = weaponPaintId,
|
||||
Seed = weaponSeed,
|
||||
Wear = weaponWear
|
||||
};
|
||||
Wear = weaponWear,
|
||||
NameTag = weaponNameTag
|
||||
};
|
||||
WeaponPaints.gPlayerWeaponsInfo[player.Index][weaponDefIndex] = weaponInfo;
|
||||
});
|
||||
}
|
||||
@@ -184,22 +272,24 @@ namespace WeaponPaints
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utility.Log(e.Message);
|
||||
Utility.Log("GetWeaponPaintsFromDatabase: " + e.Message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncKnifeToDatabase(PlayerInfo player, string knife)
|
||||
{
|
||||
if (!_config.Additional.KnifeEnabled) return;
|
||||
try
|
||||
if (!_config.AdditionalSetting.KnifeEnabled) return;
|
||||
if(player == null || player.Index <= 0) return;
|
||||
try
|
||||
{
|
||||
if (player.SteamId == null || player.Index == 0) return;
|
||||
if (!WeaponPaints.g_playersDatabaseIndex.TryGetValue(player.Index, out _))
|
||||
return;
|
||||
|
||||
using var connection = new MySqlConnection(_databaseConnectionString);
|
||||
using var connection = new MySqlConnection(_databaseConnectionString);
|
||||
await connection.OpenAsync();
|
||||
string query = "INSERT INTO `wp_player_knife` (`steamid`, `knife`) VALUES(@steamid, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife";
|
||||
await connection.ExecuteAsync(query, new { steamid = player.SteamId, newKnife = knife });
|
||||
string query = "INSERT INTO `wp_users_knife` (`user_id`, `knife`) VALUES(@userId, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife";
|
||||
await connection.ExecuteAsync(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Index], newKnife = knife });
|
||||
await connection.CloseAsync();
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -208,42 +298,34 @@ namespace WeaponPaints
|
||||
return;
|
||||
}
|
||||
}
|
||||
internal async Task SyncWeaponPaintsToDatabase(PlayerInfo player)
|
||||
internal async Task SyncWeaponPaintToDatabase(PlayerInfo player, ushort weaponDefIndex)
|
||||
{
|
||||
if (player == null || player.Index <= 0 || player.SteamId == null) return;
|
||||
if (!_config.AdditionalSetting.SkinEnabled) return;
|
||||
if (player == null || player.Index <= 0) return;
|
||||
|
||||
using var connection = new MySqlConnection(_databaseConnectionString);
|
||||
await connection.OpenAsync();
|
||||
if (!WeaponPaints.g_playersDatabaseIndex.TryGetValue(player.Index, out var playerDatabaseIndex))
|
||||
return;
|
||||
|
||||
if (!WeaponPaints.gPlayerWeaponsInfo.TryGetValue(player.Index, out var playerSavedWeapons))
|
||||
return;
|
||||
|
||||
if (!playerSavedWeapons.TryGetValue(weaponDefIndex, out var weaponInfo))
|
||||
return;
|
||||
|
||||
if (!WeaponPaints.gPlayerWeaponsInfo.ContainsKey(player.Index))
|
||||
return;
|
||||
|
||||
foreach (var weaponInfoPair in WeaponPaints.gPlayerWeaponsInfo[player.Index])
|
||||
{
|
||||
int weaponDefIndex = weaponInfoPair.Key;
|
||||
WeaponInfo weaponInfo = weaponInfoPair.Value;
|
||||
|
||||
int paintId = weaponInfo.Paint;
|
||||
float wear = weaponInfo.Wear;
|
||||
int seed = weaponInfo.Seed;
|
||||
|
||||
string updateSql = "UPDATE `wp_player_skins` SET `weapon_paint_id` = @paintId, " +
|
||||
"`weapon_wear` = @wear, `weapon_seed` = @seed WHERE `steamid` = @steamid " +
|
||||
"AND `weapon_defindex` = @weaponDefIndex";
|
||||
|
||||
var updateParams = new { paintId, wear, seed, steamid = player.SteamId, weaponDefIndex };
|
||||
int rowsAffected = await connection.ExecuteAsync(updateSql, updateParams);
|
||||
|
||||
if (rowsAffected == 0)
|
||||
{
|
||||
string insertSql = "INSERT INTO `wp_player_skins` (`steamid`, `weapon_defindex`, " +
|
||||
"`weapon_paint_id`, `weapon_wear`, `weapon_seed`) " +
|
||||
"VALUES (@steamid, @weaponDefIndex, @paintId, @wear, @seed)";
|
||||
|
||||
await connection.ExecuteAsync(insertSql, updateParams);
|
||||
}
|
||||
}
|
||||
await connection.CloseAsync();
|
||||
using var connection = new MySqlConnection(_databaseConnectionString);
|
||||
string querySql = @"
|
||||
INSERT INTO `wp_users_items`
|
||||
(`user_id`, `weapon`, `paint`, `wear`, `seed`)
|
||||
VALUES
|
||||
(@userId, @weaponDefIndex, @paintId, @wear, @seed)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
paint = @paintId,
|
||||
wear = @wear,
|
||||
seed = @seed";
|
||||
var queryParams = new { weaponDefIndex, userId = playerDatabaseIndex, paintId = weaponInfo.Paint, wear = weaponInfo.Wear, seed = weaponInfo.Seed };
|
||||
await connection.ExecuteAsync(querySql, queryParams);
|
||||
await connection.CloseAsync();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user