diff --git a/Commands.cs b/Commands.cs index 2895a984..ed485b36 100644 --- a/Commands.cs +++ b/Commands.cs @@ -33,30 +33,22 @@ namespace WeaponPaints if (weaponSync != null) { - var weaponTasks = new List(); - - weaponTasks.Add(Task.Run(async () => + if (Config.Additional.SkinEnabled) { - await weaponSync.GetWeaponPaintsFromDatabase(playerInfo); - })); - - if (Config.Additional.GloveEnabled) - { - weaponTasks.Add(Task.Run(async () => - { - await weaponSync.GetGloveFromDatabase(playerInfo); - })); + _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); } - if (Config.Additional.KnifeEnabled) { - weaponTasks.Add(Task.Run(async () => - { - await weaponSync.GetKnifeFromDatabase(playerInfo); - })); + _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo)); + } + if (Config.Additional.GloveEnabled) + { + _ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo)); + } + if (Config.Additional.AgentEnabled) + { + _ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo)); } - - Task.WaitAll(weaponTasks.ToArray()); RefreshGloves(player); RefreshWeapons(player); @@ -175,7 +167,7 @@ namespace WeaponPaints RefreshWeapons(player); if (weaponSync != null) - Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey)); + _ = Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey)); } }; foreach (var knifePair in knivesOnly) @@ -288,7 +280,7 @@ namespace WeaponPaints try { - Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo)); + _ = Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo)); } catch (Exception ex) { @@ -409,7 +401,7 @@ namespace WeaponPaints if (weaponSync != null) { - Task.Run(async () => + _ = Task.Run(async () => { await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex); @@ -422,9 +414,9 @@ namespace WeaponPaints value.Paint = paint; value.Wear = 0.00f; value.Seed = 0; - }); - Task.Run(async () => await weaponSync.SyncWeaponPaintsToDatabase(playerInfo)); + await weaponSync.SyncWeaponPaintsToDatabase(playerInfo); + }); } RefreshGloves(player); @@ -516,7 +508,7 @@ namespace WeaponPaints if (weaponSync != null) { - Task.Run(async () => + _ = Task.Run(async () => { await weaponSync.SyncAgentToDatabase(playerInfo); }); diff --git a/Events.cs b/Events.cs index 59cf66df..8678a2b4 100644 --- a/Events.cs +++ b/Events.cs @@ -1,6 +1,7 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core.Attributes.Registration; +using CounterStrikeSharp.API.Modules.Entities; namespace WeaponPaints { @@ -26,34 +27,25 @@ namespace WeaponPaints try { - List tasks = new List(); - if (Config.Additional.SkinEnabled) { - tasks.Add(Task.Run(() => weaponSync.GetWeaponPaintsFromDatabase(playerInfo))); + _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); } if (Config.Additional.KnifeEnabled) { - tasks.Add(Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo))); + _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo)); } if (Config.Additional.GloveEnabled) { - tasks.Add(Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo))); + _ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo)); } if (Config.Additional.AgentEnabled) { - tasks.Add(Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo))); + _ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo)); } - - Task.WaitAll(tasks.ToArray()); } - catch (AggregateException ex) + catch (Exception) { - // Handle the exception - foreach (var innerException in ex.InnerExceptions) - { - Console.WriteLine($"An error occurred for player {player}: {innerException.Message}"); - } } return HookResult.Continue; @@ -160,7 +152,8 @@ namespace WeaponPaints return; } - if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefIndex)) return; + if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefIndex) || gPlayerWeaponsInfo[player.Slot][weaponDefIndex].Paint == 0) return; + WeaponInfo weaponInfo = gPlayerWeaponsInfo[player.Slot][weaponDefIndex]; //Log($"Apply on {weapon.DesignerName}({weapon.AttributeManager.Item.ItemDefinitionIndex}) paint {gPlayerWeaponPaints[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} seed {gPlayerWeaponSeed[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]} wear {gPlayerWeaponWear[steamId.SteamId64][weapon.AttributeManager.Item.ItemDefinitionIndex]}"); weapon.AttributeManager.Item.ItemID = 16384; @@ -266,7 +259,30 @@ namespace WeaponPaints var weapon = new CBasePlayerWeapon(entity.Handle); if (weapon == null || !weapon.IsValid || weapon.OwnerEntity.Value == null) return; - CCSPlayerController? player = Utilities.GetPlayerFromSteamId(weapon.OriginalOwnerXuidLow); + SteamID? _steamid = (SteamID)weapon.OriginalOwnerXuidLow; + CCSWeaponBaseGun gun = weapon.As(); + CCSPlayerController? player = null; + + try + { + + if (_steamid != null && _steamid.IsValid()) + { + player = Utilities.GetPlayers().Where(p => p is not null && p.IsValid && p.SteamID == _steamid.SteamId64).FirstOrDefault(); + + if (player == null) + player = Utilities.GetPlayerFromSteamId(weapon.OriginalOwnerXuidLow); + } + else + player = Utilities.GetPlayerFromIndex((int)weapon.OwnerEntity.Index) ?? Utilities.GetPlayerFromIndex((int)gun.OwnerEntity.Value!.Index); + + if (player == null || string.IsNullOrEmpty(player?.PlayerName)) return; + } + catch (Exception) + { + return; + } + if (player is null || !player.IsValid || !Utility.IsPlayerValid(player)) return; GivePlayerWeaponSkin(player, weapon); diff --git a/VERSION b/VERSION index 572c7afb..dc7cbd5e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2d \ No newline at end of file +2.2e \ No newline at end of file diff --git a/WeaponAction.cs b/WeaponAction.cs index 81e30672..12deedef 100644 --- a/WeaponAction.cs +++ b/WeaponAction.cs @@ -300,14 +300,17 @@ namespace WeaponPaints { if (!g_playersAgent.ContainsKey(player.Slot)) return; + string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T; + if (string.IsNullOrEmpty(model)) return; + + if (player.PlayerPawn.Value == null) + return; + try { Server.NextFrame(() => { - string? model = player.TeamNum == 3 ? g_playersAgent[player.Slot].CT : g_playersAgent[player.Slot].T; - if (string.IsNullOrEmpty(model)) return; - - player.PlayerPawn.Value!.SetModel( + player.PlayerPawn.Value.SetModel( $"characters/models/{model}.vmdl" ); }); diff --git a/WeaponPaints.cs b/WeaponPaints.cs index 62d62187..d21a2f7e 100644 --- a/WeaponPaints.cs +++ b/WeaponPaints.cs @@ -158,7 +158,7 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig "Nereziel & daffyy"; public override string ModuleDescription => "Skin, gloves, agents and knife selector, standalone and web-based"; public override string ModuleName => "WeaponPaints"; - public override string ModuleVersion => "2.2d"; + public override string ModuleVersion => "2.2e"; public static WeaponPaintsConfig GetWeaponPaintsConfig() { @@ -197,19 +197,19 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); + _ = Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); } if (Config.Additional.KnifeEnabled) { - Task.Run(() => weaponSync.GetKnifeFromDatabase(playerInfo)); + _ = Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo)); } if (Config.Additional.GloveEnabled) { - Task.Run(() => weaponSync.GetGloveFromDatabase(playerInfo)); + _ = Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo)); } if (Config.Additional.AgentEnabled) { - Task.Run(() => weaponSync.GetAgentFromDatabase(playerInfo)); + _ = Task.Run(async () => await weaponSync.GetAgentFromDatabase(playerInfo)); } } } diff --git a/WeaponSynchronization.cs b/WeaponSynchronization.cs index f7a2b718..27ec172f 100644 --- a/WeaponSynchronization.cs +++ b/WeaponSynchronization.cs @@ -14,7 +14,7 @@ namespace WeaponPaints _config = config; } - public async Task GetKnifeFromDatabase(PlayerInfo player) + internal async Task GetKnifeFromDatabase(PlayerInfo player) { try { @@ -36,7 +36,7 @@ namespace WeaponPaints } } - public async Task GetGloveFromDatabase(PlayerInfo player) + internal async Task GetGloveFromDatabase(PlayerInfo player) { try { @@ -58,7 +58,7 @@ namespace WeaponPaints } } - public async Task GetAgentFromDatabase(PlayerInfo player) + internal async Task GetAgentFromDatabase(PlayerInfo player) { try { @@ -89,7 +89,7 @@ namespace WeaponPaints } } - public async Task GetWeaponPaintsFromDatabase(PlayerInfo player) + internal async Task GetWeaponPaintsFromDatabase(PlayerInfo player) { try {