diff --git a/ReallifeGamemode.Server/Inventory/Items/ConsumableItem.cs b/ReallifeGamemode.Server/Inventory/Items/ConsumableItem.cs index 26248d69..076b28cd 100644 --- a/ReallifeGamemode.Server/Inventory/Items/ConsumableItem.cs +++ b/ReallifeGamemode.Server/Inventory/Items/ConsumableItem.cs @@ -28,33 +28,35 @@ namespace ReallifeGamemode.Server.Inventory.Items if (user.Player == null || !user.Player.IsLoggedIn()) return false; - if (InventoryManager.itemCooldown.ContainsKey(user.Player)) + if (!HasCooldownElapsed(user)) { - PlayerTimer timer = InventoryManager.itemCooldown[user.Player]; - int timeToNextUse = (int)(timer.startTime - DateTime.Now).TotalSeconds; - uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeToNextUse} Sekunden erneut."); + DateTime time = InventoryManager.itemCooldown[user]; + int timeUntillNextUse = (int)(time - DateTime.Now).TotalSeconds; + uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut."); return false; } - PlayerTimer playerTimer = new PlayerTimer(user.Player, this, Cooldown); - playerTimer.Elapsed += _CooldownElapse; - InventoryManager.itemCooldown.Add(user.Player, playerTimer); + + DateTime cooldown = DateTime.Now.AddMilliseconds(Cooldown); + InventoryManager.itemCooldown.Add(user, cooldown); + Consume(uItem); return true; } - private void _CooldownElapse(Player player, dynamic usableItem) + private bool HasCooldownElapsed(User user) { - NAPI.Task.Run(() => - { - if (player == null || !player.IsLoggedIn()) - return; + if (user.Player == null || !user.Player.IsLoggedIn()) + return false; - if (!InventoryManager.itemCooldown.ContainsKey(player)) - return; + if (!InventoryManager.itemCooldown.ContainsKey(user)) + return true; - InventoryManager.itemCooldown[player].Stop(); - InventoryManager.itemCooldown.Remove(player); - }); + int timeRemaining = (int)(InventoryManager.itemCooldown[user] - DateTime.Now).TotalSeconds; + + if (timeRemaining <= 0) + InventoryManager.itemCooldown.Remove(user); + + return timeRemaining <= 0; } } } diff --git a/ReallifeGamemode.Server/Managers/InventoryManager.cs b/ReallifeGamemode.Server/Managers/InventoryManager.cs index d25d977a..42953d00 100644 --- a/ReallifeGamemode.Server/Managers/InventoryManager.cs +++ b/ReallifeGamemode.Server/Managers/InventoryManager.cs @@ -34,7 +34,7 @@ namespace ReallifeGamemode.Server.Managers public static Dictionary> backpackItems { get; set; } = new Dictionary>(); public static Dictionary> vehicleItems { get; set; } = new Dictionary>(); - public static Dictionary itemCooldown = new Dictionary(); + public static Dictionary itemCooldown = new Dictionary(); public class InventoryItem { diff --git a/ReallifeGamemode.Server/Util/PlayerTimer.cs b/ReallifeGamemode.Server/Util/PlayerTimer.cs index 3059cfee..f93a1227 100644 --- a/ReallifeGamemode.Server/Util/PlayerTimer.cs +++ b/ReallifeGamemode.Server/Util/PlayerTimer.cs @@ -11,9 +11,7 @@ namespace ReallifeGamemode.Server.Util { private readonly Player player; private readonly Vehicle veh; - private readonly IUsableItem usableItem; private readonly Timer timer; - public readonly DateTime startTime; public delegate void PlayerTimerElapsed(Player player, dynamic dynamic); @@ -29,23 +27,10 @@ namespace ReallifeGamemode.Server.Util this.timer.Start(); } - public PlayerTimer(Player player, IUsableItem usableItem, float milliseconds = 1000) - { - this.player = player; - this.usableItem = usableItem; - this.startTime = DateTime.Now.AddMilliseconds(milliseconds); - - this.timer = new Timer(milliseconds); - this.timer.Elapsed += Timer_Elapsed; - this.timer.Start(); - } - private void Timer_Elapsed(object sender, ElapsedEventArgs e) { if (veh != null) Elapsed?.Invoke(player, veh); - else - Elapsed?.Invoke(player, usableItem); } public void Stop()