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()) 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;
} }
} }
} }

View File

@@ -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
{ {

View File

@@ -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()