diff --git a/Commands.cs b/Commands.cs index cfc5a2da..647af546 100644 --- a/Commands.cs +++ b/Commands.cs @@ -32,13 +32,30 @@ namespace WeaponPaints if (weaponSync != null) { - Task.Run(async () => await weaponSync.GetWeaponPaintsFromDatabase(playerInfo)); + var weaponTasks = new List(); + + weaponTasks.Add(Task.Run(async () => + { + await weaponSync.GetWeaponPaintsFromDatabase(playerInfo); + })); if (Config.Additional.GloveEnabled) - Task.Run(async () => await weaponSync.GetGloveFromDatabase(playerInfo)); + { + weaponTasks.Add(Task.Run(async () => + { + await weaponSync.GetGloveFromDatabase(playerInfo); + })); + } if (Config.Additional.KnifeEnabled) - Task.Run(async () => await weaponSync.GetKnifeFromDatabase(playerInfo)); + { + weaponTasks.Add(Task.Run(async () => + { + await weaponSync.GetKnifeFromDatabase(playerInfo); + })); + } + + Task.WaitAll(weaponTasks.ToArray()); RefreshGloves(player); RefreshWeapons(player); diff --git a/Events.cs b/Events.cs index a978b4e6..107d159e 100644 --- a/Events.cs +++ b/Events.cs @@ -71,21 +71,21 @@ namespace WeaponPaints Task.Run(async () => { await weaponSync.SyncWeaponPaintsToDatabase(playerInfo); - - // Remove player data - if (Config.Additional.SkinEnabled) - { - gPlayerWeaponsInfo.TryRemove(player.Slot, out _); - } - if (Config.Additional.KnifeEnabled) - { - g_playersKnife.TryRemove(player.Slot, out _); - } - if (Config.Additional.GloveEnabled) - { - g_playersGlove.TryRemove(player.Slot, out _); - } }); + + // Remove player data + if (Config.Additional.SkinEnabled) + { + gPlayerWeaponsInfo.TryRemove(player.Slot, out _); + } + if (Config.Additional.KnifeEnabled) + { + g_playersKnife.TryRemove(player.Slot, out _); + } + if (Config.Additional.GloveEnabled) + { + g_playersGlove.TryRemove(player.Slot, out _); + } } // Remove player's command cooldown @@ -187,12 +187,11 @@ namespace WeaponPaints { CCSPlayerController? player = @event.Userid; - if (player is null || !player.IsValid || player.PlayerPawn == null || - !player.PlayerPawn.IsValid || player.IsHLTV - || !Config.Additional.KnifeEnabled && !Config.Additional.GloveEnabled) + if (player is null || !player.IsValid || !Config.Additional.KnifeEnabled && !Config.Additional.GloveEnabled) return HookResult.Continue; g_knifePickupCount[player.Slot] = 0; + if (!PlayerHasKnife(player)) GiveKnifeToPlayer(player); diff --git a/WeaponAction.cs b/WeaponAction.cs index 3f27e177..44ceb8de 100644 --- a/WeaponAction.cs +++ b/WeaponAction.cs @@ -142,38 +142,41 @@ namespace WeaponPaints { if (!_config.Additional.KnifeEnabled || player == null || !player.IsValid) return; - string knifeToGive; - if (g_playersKnife.TryGetValue(player.Slot, out var knife)) + WeaponPaints.Instance.AddTimer(1.0f, () => { - knifeToGive = knife; - } - else if (_config.Additional.GiveRandomKnife) - { - var knifeTypes = weaponList.Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet")).ToList(); - - if (knifeTypes.Count == 0) + string knifeToGive; + if (g_playersKnife.TryGetValue(player.Slot, out var knife)) { - Utility.Log("No valid knife types found."); - return; + knifeToGive = knife; + } + else if (_config.Additional.GiveRandomKnife) + { + var knifeTypes = weaponList.Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet")).ToList(); + + if (knifeTypes.Count == 0) + { + Utility.Log("No valid knife types found."); + return; + } + + Random random = new(); + int index = random.Next(knifeTypes.Count); + knifeToGive = knifeTypes[index].Key; + } + else + { + knifeToGive = (CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife"; } - Random random = new(); - int index = random.Next(knifeTypes.Count); - knifeToGive = knifeTypes[index].Key; - } - else - { - knifeToGive = (CsTeam)player.TeamNum == CsTeam.Terrorist ? "weapon_knife_t" : "weapon_knife"; - } - - player.GiveNamedItem(knifeToGive); + player.GiveNamedItem(knifeToGive); + }); } internal static bool PlayerHasKnife(CCSPlayerController? player) { if (!_config.Additional.KnifeEnabled) return false; - if (player == null || !player.IsValid || player.PlayerPawn == null || !player.PlayerPawn.IsValid || !player.PawnIsAlive) + if (player == null || !player.IsValid || player.PlayerPawn == null || !player.PlayerPawn.IsValid) { return false; } @@ -273,6 +276,8 @@ namespace WeaponPaints var weapon = player.PlayerPawn.Value.WeaponServices.ActiveWeapon.Value; CCSWeaponBaseGun? gun = weapon?.As(); + 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; player.DropActiveWeapon(); @@ -318,10 +323,10 @@ namespace WeaponPaints internal void RefreshKnife(CCSPlayerController? player) { - if (player == null || !player.IsValid || player.PlayerPawn?.Value == null || (LifeState_t)player.LifeState != LifeState_t.LIFE_ALIVE) + if (player == null || !player.IsValid || player.PlayerPawn?.Value == null) return; - if (player.PlayerPawn.Value.WeaponServices == null || player.PlayerPawn.Value.ItemServices == null) + if (player.PlayerPawn.Value.WeaponServices == null) return; var weapons = player.PlayerPawn.Value.WeaponServices.MyWeapons; @@ -337,8 +342,10 @@ namespace WeaponPaints if (weapon.Value.DesignerName.Contains("knife") || weaponData?.GearSlot == gear_slot_t.GEAR_SLOT_KNIFE) { - RefreshWeapons(player); - break; + player.ExecuteClientCommand("slot 3"); + + weapon.Value.Remove(); + GiveKnifeToPlayer(player); } } catch (Exception ex)