- Some changes
This commit is contained in:
Dawid Bepierszcz
2024-02-25 12:55:44 +01:00
parent 25c205e53d
commit 34b086a140
13 changed files with 518 additions and 72 deletions

View File

@@ -164,7 +164,6 @@ namespace WeaponPaints
g_playersKnife[player.Slot] = knifeKey; g_playersKnife[player.Slot] = knifeKey;
if (g_bCommandsAllowed && (LifeState_t)player.LifeState == LifeState_t.LIFE_ALIVE) if (g_bCommandsAllowed && (LifeState_t)player.LifeState == LifeState_t.LIFE_ALIVE)
RefreshWeapons(player); RefreshWeapons(player);
@@ -225,7 +224,6 @@ namespace WeaponPaints
{ {
if (!Utility.IsPlayerValid(p)) return; if (!Utility.IsPlayerValid(p)) return;
string steamId = p.SteamID.ToString(); string steamId = p.SteamID.ToString();
var firstSkin = skinsList?.FirstOrDefault(skin => var firstSkin = skinsList?.FirstOrDefault(skin =>
{ {
@@ -393,7 +391,6 @@ namespace WeaponPaints
player!.Print(Localizer["wp_glove_menu_select", selectedPaintName]); player!.Print(Localizer["wp_glove_menu_select", selectedPaintName]);
} }
if (weaponSync != null) if (weaponSync != null)
{ {
Task.Run(async () => Task.Run(async () =>
@@ -408,7 +405,6 @@ namespace WeaponPaints
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Paint = paint; gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Paint = paint;
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Wear = 0.00f; gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Wear = 0.00f;
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Seed = 0; gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Seed = 0;
}); });
} }
RefreshGloves(player); RefreshGloves(player);

View File

@@ -26,22 +26,30 @@ namespace WeaponPaints
try try
{ {
List<Task> tasks = new List<Task>();
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
{ {
Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); tasks.Add(Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo)));
} }
if (Config.Additional.KnifeEnabled) if (Config.Additional.KnifeEnabled)
{ {
Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo)); tasks.Add(Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo)));
} }
if (Config.Additional.GloveEnabled) if (Config.Additional.GloveEnabled)
{ {
Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)); tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)));
} }
Task.WaitAll(tasks.ToArray());
} }
catch (Exception ex) catch (AggregateException ex)
{ {
Console.WriteLine($"An error occurred: {ex.Message}"); // Handle the exception
foreach (var innerException in ex.InnerExceptions)
{
Console.WriteLine($"An error occurred for player {player}: {innerException.Message}");
}
} }
return HookResult.Continue; return HookResult.Continue;
@@ -67,13 +75,17 @@ namespace WeaponPaints
if (weaponSync != null) if (weaponSync != null)
{ {
// Run weapon sync tasks asynchronously
Task.Run(async () => Task.Run(async () =>
{
try
{ {
await weaponSync.SyncWeaponPaintsToDatabase(playerInfo); await weaponSync.SyncWeaponPaintsToDatabase(playerInfo);
}); }
catch (Exception ex)
{
Utility.Log($"Error syncing weapon paints: {ex.Message}");
}
// Remove player data
if (Config.Additional.SkinEnabled) if (Config.Additional.SkinEnabled)
{ {
gPlayerWeaponsInfo.TryRemove(player.Slot, out _); gPlayerWeaponsInfo.TryRemove(player.Slot, out _);
@@ -86,6 +98,7 @@ namespace WeaponPaints
{ {
g_playersGlove.TryRemove(player.Slot, out _); g_playersGlove.TryRemove(player.Slot, out _);
} }
});
} }
// Remove player's command cooldown // Remove player's command cooldown
@@ -136,7 +149,7 @@ namespace WeaponPaints
CCSPlayerController? player = Utilities.GetEntityFromIndex<CCSPlayerPawn>((int)activator.Index).OriginalController.Value; CCSPlayerController? player = Utilities.GetEntityFromIndex<CCSPlayerPawn>((int)activator.Index).OriginalController.Value;
if (player == null || player.IsBot || player.IsHLTV || if (player == null || player.IsBot || player.PlayerPawn == null || !player.PlayerPawn.IsValid || !player.PawnIsAlive ||
player.SteamID.ToString().Length != 17 || !g_knifePickupCount.TryGetValue(player.Slot, out var pickupCount) || player.SteamID.ToString().Length != 17 || !g_knifePickupCount.TryGetValue(player.Slot, out var pickupCount) ||
!g_playersKnife.ContainsKey(player.Slot)) !g_playersKnife.ContainsKey(player.Slot))
{ {
@@ -190,6 +203,11 @@ namespace WeaponPaints
if (player is null || !player.IsValid || !Config.Additional.KnifeEnabled && !Config.Additional.GloveEnabled) if (player is null || !player.IsValid || !Config.Additional.KnifeEnabled && !Config.Additional.GloveEnabled)
return HookResult.Continue; return HookResult.Continue;
CCSPlayerPawn? pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid)
return HookResult.Continue;
g_knifePickupCount[player.Slot] = 0; g_knifePickupCount[player.Slot] = 0;
if (!PlayerHasKnife(player)) if (!PlayerHasKnife(player))
@@ -220,12 +238,13 @@ namespace WeaponPaints
return HookResult.Continue; return HookResult.Continue;
} }
private void OnTick() private void OnTick()
{ {
foreach (var player in Utilities.GetPlayers().Where(p => foreach (var player in Utilities.GetPlayers().Where(p =>
p is not null && p.IsValid && 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 (LifeState_t)p.LifeState == LifeState_t.LIFE_ALIVE && p.SteamID.ToString().Length == 17
&& !p.IsBot && !p.IsHLTV && p.Connected == PlayerConnectedState.PlayerConnected && p.Team != CounterStrikeSharp.API.Modules.Utils.CsTeam.None && !p.IsBot && !p.IsHLTV && p.Connected == PlayerConnectedState.PlayerConnected
) )
) )
{ {
@@ -297,7 +316,7 @@ namespace WeaponPaints
//RegisterListener<Listeners.OnClientPutInServer>(OnClientPutInServer); //RegisterListener<Listeners.OnClientPutInServer>(OnClientPutInServer);
//RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect); //RegisterListener<Listeners.OnClientDisconnect>(OnClientDisconnect);
RegisterListener<Listeners.OnMapStart>(OnMapStart); RegisterListener<Listeners.OnMapStart>(OnMapStart);
RegisterListener<Listeners.OnTick>(OnTick); //RegisterListener<Listeners.OnTick>(OnTick);
RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn); RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre); RegisterEventHandler<EventRoundStart>(OnRoundStart, HookMode.Pre);

View File

@@ -1 +1 @@
1.9b 1.9c

View File

@@ -142,8 +142,10 @@ namespace WeaponPaints
{ {
if (!_config.Additional.KnifeEnabled || player == null || !player.IsValid) return; if (!_config.Additional.KnifeEnabled || player == null || !player.IsValid) return;
WeaponPaints.Instance.AddTimer(1.0f, () => Instance.AddTimer(1.0f, () =>
{ {
if (PlayerHasKnife(player)) return;
string knifeToGive; string knifeToGive;
if (g_playersKnife.TryGetValue(player.Slot, out var knife)) if (g_playersKnife.TryGetValue(player.Slot, out var knife))
{ {
@@ -181,7 +183,7 @@ namespace WeaponPaints
return false; return false;
} }
if (player.PlayerPawn?.Value == null || player.PlayerPawn?.Value.WeaponServices == null || player.PlayerPawn?.Value.ItemServices == null) if (player.PlayerPawn.Value == null || player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null)
return false; return false;
var weapons = player.PlayerPawn.Value.WeaponServices?.MyWeapons; var weapons = player.PlayerPawn.Value.WeaponServices?.MyWeapons;
@@ -256,8 +258,6 @@ namespace WeaponPaints
weaponsWithAmmo[weaponByDefindex].Add((clip1, reservedAmmo)); weaponsWithAmmo[weaponByDefindex].Add((clip1, reservedAmmo));
} }
//player.RemoveItemByDesignerName(weapon.Value.DesignerName, false);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -271,18 +271,21 @@ namespace WeaponPaints
player.ExecuteClientCommand($"slot {i}"); player.ExecuteClientCommand($"slot {i}");
player.ExecuteClientCommand($"slot {i}"); player.ExecuteClientCommand($"slot {i}");
AddTimer(0.1f, () => AddTimer(0.2f, () =>
{ {
var weapon = player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value; var weapon = player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value;
CCSWeaponBaseGun? gun = weapon?.As<CCSWeaponBaseGun>();
if (weapon is null || !weapon.IsValid) return;
CCSWeaponBaseGun gun = weapon.As<CCSWeaponBaseGun>();
if (gun == null || gun.VData == null) return; if (gun == null || gun.VData == null) return;
if (gun?.VData?.GearSlot == gear_slot_t.GEAR_SLOT_C4 || gun?.VData?.GearSlot == gear_slot_t.GEAR_SLOT_GRENADES) return; if (gun.VData.GearSlot == gear_slot_t.GEAR_SLOT_C4 || gun.VData.GearSlot == gear_slot_t.GEAR_SLOT_GRENADES) return;
player.DropActiveWeapon(); player.DropActiveWeapon();
AddTimer(0.22f, () => AddTimer(0.25f, () =>
{ {
if (gun != null && gun.IsValid && gun.State == CSWeaponState_t.WEAPON_NOT_CARRIED) if (gun != null && gun.IsValid && gun.State == CSWeaponState_t.WEAPON_NOT_CARRIED)
{ {

View File

@@ -14,6 +14,7 @@ namespace WeaponPaints;
public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig> public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig>
{ {
internal static WeaponPaints Instance { get; private set; } = new(); internal static WeaponPaints Instance { get; private set; } = new();
internal static readonly Dictionary<string, string> weaponList = new() internal static readonly Dictionary<string, string> weaponList = new()
{ {
{"weapon_deagle", "Desert Eagle"}, {"weapon_deagle", "Desert Eagle"},
@@ -155,7 +156,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
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 and knife selector, standalone and web-based";
public override string ModuleName => "WeaponPaints"; public override string ModuleName => "WeaponPaints";
public override string ModuleVersion => "1.9b"; public override string ModuleVersion => "1.9c";
public static WeaponPaintsConfig GetWeaponPaintsConfig() public static WeaponPaintsConfig GetWeaponPaintsConfig()
{ {

View File

@@ -14,11 +14,13 @@ namespace WeaponPaints
_config = config; _config = config;
} }
internal async Task GetKnifeFromDatabase(PlayerInfo player) public async Task GetKnifeFromDatabase(PlayerInfo player)
{ {
if (!_config.Additional.KnifeEnabled) return;
try try
{ {
if (!_config.Additional.KnifeEnabled || string.IsNullOrEmpty(player?.SteamId))
return;
await using var connection = await _database.GetConnectionAsync(); await using var connection = await _database.GetConnectionAsync();
string query = "SELECT `knife` FROM `wp_player_knife` WHERE `steamid` = @steamid"; string query = "SELECT `knife` FROM `wp_player_knife` WHERE `steamid` = @steamid";
string? playerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { steamid = player.SteamId }); string? playerKnife = await connection.QueryFirstOrDefaultAsync<string>(query, new { steamid = player.SteamId });
@@ -28,53 +30,47 @@ namespace WeaponPaints
WeaponPaints.g_playersKnife[player.Slot] = playerKnife; WeaponPaints.g_playersKnife[player.Slot] = playerKnife;
} }
} }
catch (Exception e) catch (Exception ex)
{ {
Utility.Log(e.Message); Utility.Log($"An error occurred in GetKnifeFromDatabase: {ex.Message}");
return;
} }
} }
internal async Task GetGloveFromDatabase(PlayerInfo player) public async Task GetGloveFromDatabase(PlayerInfo player)
{ {
if (!_config.Additional.GloveEnabled) return;
try try
{ {
// Ensure proper disposal of resources using "using" statement if (!_config.Additional.GloveEnabled || string.IsNullOrEmpty(player?.SteamId))
return;
await using var connection = await _database.GetConnectionAsync(); await using var connection = await _database.GetConnectionAsync();
// Construct the SQL query with specific columns for better performance
string query = "SELECT `weapon_defindex` FROM `wp_player_gloves` WHERE `steamid` = @steamid"; string query = "SELECT `weapon_defindex` FROM `wp_player_gloves` WHERE `steamid` = @steamid";
// Execute the query and retrieve glove data
ushort? gloveData = await connection.QueryFirstOrDefaultAsync<ushort?>(query, new { steamid = player.SteamId }); ushort? gloveData = await connection.QueryFirstOrDefaultAsync<ushort?>(query, new { steamid = player.SteamId });
// Check if glove data is retrieved successfully
if (gloveData != null) if (gloveData != null)
{ {
// Update g_playersGlove dictionary with glove data
WeaponPaints.g_playersGlove[player.Slot] = gloveData.Value; WeaponPaints.g_playersGlove[player.Slot] = gloveData.Value;
} }
} }
catch (Exception e) catch (Exception ex)
{ {
// Log any exceptions occurred during database operation Utility.Log($"An error occurred in GetGloveFromDatabase: {ex.Message}");
Utility.Log("An error occurred while fetching glove data: " + e.Message);
} }
} }
internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player) public async Task GetWeaponPaintsFromDatabase(PlayerInfo player)
{ {
if (!_config.Additional.SkinEnabled || player == null || player.SteamId == null) return;
try try
{ {
if (!_config.Additional.SkinEnabled || player == null || string.IsNullOrEmpty(player.SteamId))
return;
await using var connection = await _database.GetConnectionAsync(); await using var connection = await _database.GetConnectionAsync();
string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid"; string query = "SELECT * FROM `wp_player_skins` WHERE `steamid` = @steamid";
var playerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId }); var playerSkins = await connection.QueryAsync<dynamic>(query, new { steamid = player.SteamId });
if (playerSkins == null) return; if (playerSkins == null)
return;
var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>(); var weaponInfos = new ConcurrentDictionary<int, WeaponInfo>();
@@ -97,9 +93,9 @@ namespace WeaponPaints
WeaponPaints.gPlayerWeaponsInfo[player.Slot] = weaponInfos; WeaponPaints.gPlayerWeaponsInfo[player.Slot] = weaponInfos;
} }
catch (Exception e) catch (Exception ex)
{ {
Utility.Log($"Database error occurred: {e.Message}"); Utility.Log($"An error occurred in GetWeaponPaintsFromDatabase: {ex.Message}");
} }
} }
@@ -119,7 +115,6 @@ namespace WeaponPaints
} }
} }
internal async Task SyncGloveToDatabase(PlayerInfo player, int defindex) internal async Task SyncGloveToDatabase(PlayerInfo player, int defindex)
{ {
if (!_config.Additional.GloveEnabled || player == null || string.IsNullOrEmpty(player.SteamId)) return; if (!_config.Additional.GloveEnabled || player == null || string.IsNullOrEmpty(player.SteamId)) return;
@@ -167,6 +162,5 @@ namespace WeaponPaints
Utility.Log($"Error syncing weapon paints to database: {e.Message}"); Utility.Log($"Error syncing weapon paints to database: {e.Message}");
} }
} }
} }
} }

File diff suppressed because one or more lines are too long