using System; using GTANetworkAPI; using ReallifeGamemode.Database.Entities; 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 : IUsableItem { public abstract int HpAmount { get; } public abstract int Id { get; } public abstract string Name { get; } public abstract string Description { get; } public abstract int Gewicht { get; } public abstract string Einheit { get; } public abstract uint Object { get; } public abstract int Price { get; } public abstract float Cooldown { get; } public abstract void Consume(UserItem uItem); public bool Use(UserItem uItem) { User user = uItem.GetUser(); if (user.Player == null || !user.Player.IsLoggedIn()) return false; if (InventoryManager.itemCooldown.ContainsKey(user.Player)) { 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."); return false; } PlayerTimer playerTimer = new PlayerTimer(user.Player, this, Cooldown); playerTimer.Elapsed += _CooldownElapse; InventoryManager.itemCooldown.Add(user.Player, playerTimer); Consume(uItem); return true; } private void _CooldownElapse(Player player, dynamic usableItem) { NAPI.Task.Run(() => { if (player == null || !player.IsLoggedIn()) return; if (!InventoryManager.itemCooldown.ContainsKey(player)) return; InventoryManager.itemCooldown[player].Stop(); InventoryManager.itemCooldown.Remove(player); }); } } }