mirror of
https://github.com/Nereziel/cs2-WeaponPaints.git
synced 2026-03-04 22:54:53 +00:00
New, new, new!
- Config changed - Multiple commands (as i remember, wp command fucked now) - Fixed tables - Remove expired users - CenterHtmlMenu - experimental - Knife from string to defindex
This commit is contained in:
@@ -18,19 +18,27 @@ internal class WeaponSynchronization
|
||||
internal async Task GetPlayerDatabaseIndex(PlayerInfo playerInfo)
|
||||
{
|
||||
if (playerInfo.SteamId == null || playerInfo.Slot == 0) return;
|
||||
Console.WriteLine("test");
|
||||
try
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
const string query = "SELECT `id` FROM `wp_users` WHERE `steamid` = @steamid";
|
||||
var query = "SELECT `id` FROM `wp_users` WHERE `steamid` = @steamid";
|
||||
var databaseIndex =
|
||||
await connection.QueryFirstOrDefaultAsync<int?>(query, new { steamid = playerInfo.SteamId });
|
||||
|
||||
if (databaseIndex != null)
|
||||
{
|
||||
WeaponPaints.g_playersDatabaseIndex[playerInfo.Slot] = (int)databaseIndex;
|
||||
query = "UPDATE `wp_users` SET `last_update` = @lastUpdate WHERE `id` = @databaseIndex";
|
||||
await connection.ExecuteAsync(query, new
|
||||
{
|
||||
lastUpdate = DateTime.Now,
|
||||
databaseIndex
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("test");
|
||||
const string insertQuery = "INSERT INTO `wp_users` (`steamid`) VALUES (@steamid)";
|
||||
await connection.ExecuteAsync(insertQuery, new { steamid = playerInfo.SteamId });
|
||||
Console.WriteLine("SQL Insert Query: " + insertQuery);
|
||||
@@ -39,7 +47,7 @@ internal class WeaponSynchronization
|
||||
WeaponPaints.g_playersDatabaseIndex[playerInfo.Slot] = (int)databaseIndex;
|
||||
}
|
||||
|
||||
await GetPlayerData(playerInfo, connection);
|
||||
await GetPlayerData(playerInfo);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -47,10 +55,12 @@ internal class WeaponSynchronization
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task GetPlayerData(PlayerInfo? player, MySqlConnection connection)
|
||||
internal async Task GetPlayerData(PlayerInfo? player)
|
||||
{
|
||||
try
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
|
||||
if (_config.Additional.KnifeEnabled)
|
||||
GetKnifeFromDatabase(player, connection);
|
||||
if (_config.Additional.GloveEnabled)
|
||||
@@ -76,11 +86,11 @@ internal class WeaponSynchronization
|
||||
if (!_config.Additional.KnifeEnabled || string.IsNullOrEmpty(player?.SteamId.ToString()))
|
||||
return;
|
||||
|
||||
const string query = "SELECT `knife` FROM `wp_users_knife` WHERE `user_id` = @userId";
|
||||
var playerKnife = connection.QueryFirstOrDefault<string>(query,
|
||||
const string query = "SELECT `knife` FROM `wp_users_knives` WHERE `user_id` = @userId";
|
||||
var playerKnife = connection.QueryFirstOrDefault<int>(query,
|
||||
new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot] });
|
||||
|
||||
if (!string.IsNullOrEmpty(playerKnife)) WeaponPaints.g_playersKnife[player.Slot] = playerKnife;
|
||||
WeaponPaints.g_playersKnife[player.Slot] = (ushort)playerKnife;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -95,7 +105,7 @@ internal class WeaponSynchronization
|
||||
if (!_config.Additional.GloveEnabled || string.IsNullOrEmpty(player?.SteamId.ToString()))
|
||||
return;
|
||||
|
||||
const string query = "SELECT `weapon_defindex` FROM `wp_users_gloves` WHERE `userId` = @userId";
|
||||
const string query = "SELECT `weapon_defindex` FROM `wp_users_gloves` WHERE `user_id` = @userId";
|
||||
var gloveData = connection.QueryFirstOrDefault<ushort?>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot] });
|
||||
|
||||
if (gloveData != null) WeaponPaints.g_playersGlove[player.Slot] = gloveData.Value;
|
||||
@@ -142,16 +152,16 @@ internal class WeaponSynchronization
|
||||
var weaponInfos = new ConcurrentDictionary<ushort, WeaponInfo>();
|
||||
|
||||
|
||||
const string query = "SELECT `weapon`, `paint`, `wear`, `seed`, `nametag` FROM `wp_users_items` WHERE `user_id` = @userId";
|
||||
var playerSkins = connection.Query<dynamic>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Index] });
|
||||
const string query = "SELECT `weapon`, `paint`, `wear`, `seed`, `nametag` FROM `wp_users_skins` WHERE `user_id` = @userId";
|
||||
var playerSkins = connection.Query<dynamic>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot] });
|
||||
|
||||
foreach (var row in playerSkins)
|
||||
{
|
||||
ushort weaponDefIndex = row?.weapon_defindex ?? 0;
|
||||
ushort weaponPaintId = row?.weapon_paint_id ?? 0;
|
||||
float weaponWear = row?.weapon_wear ?? 0f;
|
||||
ushort weaponSeed = row?.weapon_seed ?? 0;
|
||||
string weaponNameTag = row?.nametag ?? string.Empty;
|
||||
ushort weaponDefIndex = (ushort)(row.weapon ?? 0);
|
||||
ushort weaponPaintId = (ushort)(row.paint ?? 0);
|
||||
float weaponWear = row.wear ?? 0f;
|
||||
ushort weaponSeed = (ushort)(row.seed ?? 0);
|
||||
string weaponNameTag = row.nametag ?? string.Empty;
|
||||
|
||||
var weaponInfo = new WeaponInfo
|
||||
{
|
||||
@@ -179,7 +189,7 @@ internal class WeaponSynchronization
|
||||
if (!_config.Additional.MusicEnabled || string.IsNullOrEmpty(player?.SteamId.ToString()))
|
||||
return;
|
||||
|
||||
const string query = "SELECT `music` FROM `wp_users_music` WHERE `user_id` = @userId";
|
||||
const string query = "SELECT `music` FROM `wp_users_musics` WHERE `user_id` = @userId";
|
||||
var musicData = connection.QueryFirstOrDefault<ushort?>(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot] });
|
||||
|
||||
if (musicData != null) WeaponPaints.g_playersMusic[player.Slot] = musicData.Value;
|
||||
@@ -190,14 +200,60 @@ internal class WeaponSynchronization
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal async Task SyncKnifeToDatabase(PlayerInfo player, string knife)
|
||||
internal async Task PurgeExpiredUsers()
|
||||
{
|
||||
if (!_config.Additional.KnifeEnabled || string.IsNullOrEmpty(player.SteamId.ToString()) ||
|
||||
string.IsNullOrEmpty(knife)) return;
|
||||
try
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
await using var transaction = await connection.BeginTransactionAsync();
|
||||
|
||||
var userIds = await connection.QueryAsync<int>(
|
||||
$"SELECT id FROM wp_users WHERE last_update < NOW() - INTERVAL {_config.Additional.ExpireOlderThan} DAY",
|
||||
transaction: transaction
|
||||
);
|
||||
|
||||
var ids = string.Join(",", userIds);
|
||||
|
||||
string query;
|
||||
|
||||
if (userIds.AsList().Count > 0)
|
||||
{
|
||||
// Step 2: Delete related records in other tables using the retrieved IDs
|
||||
query = $"DELETE FROM wp_users_agents WHERE user_id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
query = $"DELETE FROM wp_users_gloves WHERE user_id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
query = $"DELETE FROM wp_users_skins WHERE user_id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
query = $"DELETE FROM wp_users_knives WHERE user_id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
query = $"DELETE FROM wp_users_musics WHERE user_id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
// Step 3: Delete users from wp_users
|
||||
query = $"DELETE FROM wp_users WHERE id IN ({ids})";
|
||||
await connection.ExecuteAsync(query, transaction: transaction);
|
||||
|
||||
// Commit transaction
|
||||
await transaction.CommitAsync();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Utility.Log($"An error occurred in GetMusicFromDatabase: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task SyncKnifeToDatabase(PlayerInfo player, ushort knife)
|
||||
{
|
||||
if (!_config.Additional.KnifeEnabled || string.IsNullOrEmpty(player.SteamId.ToString())) return;
|
||||
|
||||
const string query =
|
||||
"INSERT INTO `wp_users_knife` (`user_id`, `knife`) VALUES(@userId, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife";
|
||||
"INSERT INTO `wp_users_knives` (`user_id`, `knife`) VALUES(@userId, @newKnife) ON DUPLICATE KEY UPDATE `knife` = @newKnife";
|
||||
|
||||
try
|
||||
{
|
||||
@@ -272,7 +328,7 @@ internal class WeaponSynchronization
|
||||
var seed = weaponInfo.Seed;
|
||||
|
||||
const string queryCheckExistence =
|
||||
"SELECT COUNT(*) FROM `wp_users_items` WHERE `user_id` = @userId AND `weapon_defindex` = @weaponDefIndex";
|
||||
"SELECT COUNT(*) FROM `wp_users_skins` WHERE `user_id` = @userId AND `weapon` = @weaponDefIndex";
|
||||
|
||||
var existingRecordCount = await connection.ExecuteScalarAsync<int>(queryCheckExistence,
|
||||
new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot], weaponDefIndex });
|
||||
@@ -283,13 +339,13 @@ internal class WeaponSynchronization
|
||||
if (existingRecordCount > 0)
|
||||
{
|
||||
query =
|
||||
"UPDATE `wp_users_items` SET `weapon_paint_id` = @paintId, `weapon_wear` = @wear, `weapon_seed` = @seed WHERE `user_id` = @userId AND `weapon_defindex` = @weaponDefIndex";
|
||||
"UPDATE `wp_users_skins` SET `paint` = @paintId, `wear` = @wear, `seed` = @seed WHERE `user_id` = @userId AND `weapon` = @weaponDefIndex";
|
||||
parameters = new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot], weaponDefIndex, paintId, wear, seed };
|
||||
}
|
||||
else
|
||||
{
|
||||
query =
|
||||
"INSERT INTO `wp_users_items` (`user_id`, `weapon_defindex`, `weapon_paint_id`, `weapon_wear`, `weapon_seed`) " +
|
||||
"INSERT INTO `wp_users_skins` (`user_id`, `weapon`, `paint`, `wear`, `seed`) " +
|
||||
"VALUES (@userId, @weaponDefIndex, @paintId, @wear, @seed)";
|
||||
parameters = new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot], weaponDefIndex, paintId, wear, seed };
|
||||
}
|
||||
@@ -311,7 +367,7 @@ internal class WeaponSynchronization
|
||||
{
|
||||
await using var connection = await _database.GetConnectionAsync();
|
||||
const string query =
|
||||
"INSERT INTO `wp_users_music` (`user_id`, `music_id`) VALUES(@userId, @newMusic) ON DUPLICATE KEY UPDATE `music_id` = @newMusic";
|
||||
"INSERT INTO `wp_users_musics` (`user_id`, `music_id`) VALUES(@userId, @newMusic) ON DUPLICATE KEY UPDATE `music_id` = @newMusic";
|
||||
await connection.ExecuteAsync(query, new { userId = WeaponPaints.g_playersDatabaseIndex[player.Slot], newMusic = music });
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
Reference in New Issue
Block a user