64 lines
2.0 KiB
C#
64 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|