using System; using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Inventory.Interfaces; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Inventory.Items { public abstract class ConsumableItem : UseItem { public abstract int HpAmount { get; } public override int Id { get; } public override string Name { get; } public override string Description { get; } public override int Gewicht { get; } public override string Einheit { get; } public override int Price { get; } public abstract float Cooldown { get; } public abstract override uint Object { get; } public override bool RemoveWhenUsed => true; public abstract void Consume(Player player, User user, DatabaseContext databaseContext); public override bool Use(Player player, User user, DatabaseContext databaseContext) { if (user.Player == null || !user.Player.IsLoggedIn()) return false; if (!HasCooldownElapsed(user) && Cooldown > 0) { DateTime time = InventoryManager.itemCooldown[user.Id]; int timeUntillNextUse = (int)(time - DateTime.Now).TotalSeconds; user.Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut."); return false; } DateTime cooldown = DateTime.Now.AddMilliseconds(Cooldown); InventoryManager.itemCooldown.Add(user.Id, cooldown); Consume(player, user, databaseContext); return true; } private bool HasCooldownElapsed(User user) { if (user.Player == null || !user.Player.IsLoggedIn()) return false; if (!InventoryManager.itemCooldown.ContainsKey(user.Id)) return true; int timeRemaining = (int)(InventoryManager.itemCooldown[user.Id] - DateTime.Now).TotalSeconds; if (timeRemaining <= 0) InventoryManager.itemCooldown.Remove(user.Id); return timeRemaining <= 0; } } }