Removed Timers for Cooldowns for Items.
This commit is contained in:
@@ -28,33 +28,35 @@ namespace ReallifeGamemode.Server.Inventory.Items
|
|||||||
if (user.Player == null || !user.Player.IsLoggedIn())
|
if (user.Player == null || !user.Player.IsLoggedIn())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (InventoryManager.itemCooldown.ContainsKey(user.Player))
|
if (!HasCooldownElapsed(user))
|
||||||
{
|
{
|
||||||
PlayerTimer timer = InventoryManager.itemCooldown[user.Player];
|
DateTime time = InventoryManager.itemCooldown[user];
|
||||||
int timeToNextUse = (int)(timer.startTime - DateTime.Now).TotalSeconds;
|
int timeUntillNextUse = (int)(time - DateTime.Now).TotalSeconds;
|
||||||
uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeToNextUse} Sekunden erneut.");
|
uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PlayerTimer playerTimer = new PlayerTimer(user.Player, this, Cooldown);
|
|
||||||
playerTimer.Elapsed += _CooldownElapse;
|
DateTime cooldown = DateTime.Now.AddMilliseconds(Cooldown);
|
||||||
InventoryManager.itemCooldown.Add(user.Player, playerTimer);
|
InventoryManager.itemCooldown.Add(user, cooldown);
|
||||||
|
|
||||||
Consume(uItem);
|
Consume(uItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void _CooldownElapse(Player player, dynamic usableItem)
|
private bool HasCooldownElapsed(User user)
|
||||||
{
|
{
|
||||||
NAPI.Task.Run(() =>
|
if (user.Player == null || !user.Player.IsLoggedIn())
|
||||||
{
|
return false;
|
||||||
if (player == null || !player.IsLoggedIn())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!InventoryManager.itemCooldown.ContainsKey(player))
|
if (!InventoryManager.itemCooldown.ContainsKey(user))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
InventoryManager.itemCooldown[player].Stop();
|
int timeRemaining = (int)(InventoryManager.itemCooldown[user] - DateTime.Now).TotalSeconds;
|
||||||
InventoryManager.itemCooldown.Remove(player);
|
|
||||||
});
|
if (timeRemaining <= 0)
|
||||||
|
InventoryManager.itemCooldown.Remove(user);
|
||||||
|
|
||||||
|
return timeRemaining <= 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace ReallifeGamemode.Server.Managers
|
|||||||
public static Dictionary<Player, List<InventoryItem>> backpackItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
public static Dictionary<Player, List<InventoryItem>> backpackItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||||
public static Dictionary<Player, List<InventoryItem>> vehicleItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
public static Dictionary<Player, List<InventoryItem>> vehicleItems { get; set; } = new Dictionary<Player, List<InventoryItem>>();
|
||||||
|
|
||||||
public static Dictionary<Player, PlayerTimer> itemCooldown = new Dictionary<Player, PlayerTimer>();
|
public static Dictionary<User, DateTime> itemCooldown = new Dictionary<User, DateTime>();
|
||||||
|
|
||||||
public class InventoryItem
|
public class InventoryItem
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,9 +11,7 @@ namespace ReallifeGamemode.Server.Util
|
|||||||
{
|
{
|
||||||
private readonly Player player;
|
private readonly Player player;
|
||||||
private readonly Vehicle veh;
|
private readonly Vehicle veh;
|
||||||
private readonly IUsableItem usableItem;
|
|
||||||
private readonly Timer timer;
|
private readonly Timer timer;
|
||||||
public readonly DateTime startTime;
|
|
||||||
|
|
||||||
public delegate void PlayerTimerElapsed(Player player, dynamic dynamic);
|
public delegate void PlayerTimerElapsed(Player player, dynamic dynamic);
|
||||||
|
|
||||||
@@ -29,23 +27,10 @@ namespace ReallifeGamemode.Server.Util
|
|||||||
this.timer.Start();
|
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)
|
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
if (veh != null)
|
if (veh != null)
|
||||||
Elapsed?.Invoke(player, veh);
|
Elapsed?.Invoke(player, veh);
|
||||||
else
|
|
||||||
Elapsed?.Invoke(player, usableItem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
|
|||||||
Reference in New Issue
Block a user