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:
Nereziel
2024-02-03 05:34:10 +01:00
parent 43e7a3183e
commit 56537971ad
10 changed files with 429 additions and 320 deletions

View File

@@ -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();
}
}
}