61 lines
1.9 KiB
C#
61 lines
1.9 KiB
C#
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);
|
|
});
|
|
}
|
|
}
|
|
}
|