Removed Timers for Cooldowns for Items.

This commit is contained in:
2021-04-22 19:51:52 +02:00
parent c77c078141
commit 3b04a0776e
3 changed files with 20 additions and 33 deletions

View File

@@ -28,33 +28,35 @@ namespace ReallifeGamemode.Server.Inventory.Items
if (user.Player == null || !user.Player.IsLoggedIn())
return false;
if (InventoryManager.itemCooldown.ContainsKey(user.Player))
if (!HasCooldownElapsed(user))
{
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.");
DateTime time = InventoryManager.itemCooldown[user];
int timeUntillNextUse = (int)(time - DateTime.Now).TotalSeconds;
uItem.GetUser().Player.TriggerEvent("Error", $"Versuche es nach {timeUntillNextUse} Sekunden erneut.");
return false;
}
PlayerTimer playerTimer = new PlayerTimer(user.Player, this, Cooldown);
playerTimer.Elapsed += _CooldownElapse;
InventoryManager.itemCooldown.Add(user.Player, playerTimer);
DateTime cooldown = DateTime.Now.AddMilliseconds(Cooldown);
InventoryManager.itemCooldown.Add(user, cooldown);
Consume(uItem);
return true;
}
private void _CooldownElapse(Player player, dynamic usableItem)
private bool HasCooldownElapsed(User user)
{
NAPI.Task.Run(() =>
{
if (player == null || !player.IsLoggedIn())
return;
if (user.Player == null || !user.Player.IsLoggedIn())
return false;
if (!InventoryManager.itemCooldown.ContainsKey(player))
return;
if (!InventoryManager.itemCooldown.ContainsKey(user))
return true;
InventoryManager.itemCooldown[player].Stop();
InventoryManager.itemCooldown.Remove(player);
});
int timeRemaining = (int)(InventoryManager.itemCooldown[user] - DateTime.Now).TotalSeconds;
if (timeRemaining <= 0)
InventoryManager.itemCooldown.Remove(user);
return timeRemaining <= 0;
}
}
}