internal void HandleCooldown(SpellInfo spellInfo) { if (spellInfo.IsPassive) { return; } int cooldownLeft = spellInfo.CooldownTime; if (cooldownLeft <= 0) { return; } if (spellInfo.IsUsingCharges) { SpellChargeCooldown spellChargeCooldown = AddCharge(spellInfo.Id, cooldownLeft, cooldownLeft); if (caster is Player player && player.BoltEntity.Controller != null) { EventHandler.ExecuteEvent(GameEvents.ServerSpellCharge, player, spellChargeCooldown); } } else { SpellCooldown spellCooldown = AddCooldown(spellInfo.Id, cooldownLeft, cooldownLeft); if (caster is Player player && player.BoltEntity.Controller != null) { EventHandler.ExecuteEvent(GameEvents.ServerSpellCooldown, player, spellCooldown); } } }
private SpellCooldown AddCooldown(int spellId, int cooldownTime, int cooldownTimeLeft) { if (spellCooldownsById.TryGetValue(spellId, out SpellCooldown spellCooldown)) { spellCooldown.Cooldown = cooldownTime; spellCooldown.CooldownLeft = cooldownTimeLeft; spellCooldown.OnHold = false; return(spellCooldown); } var newCooldown = new SpellCooldown(cooldownTime, cooldownTimeLeft, spellId); spellCooldownsById[spellId] = newCooldown; spellCooldowns.Add(newCooldown); return(newCooldown); }
internal void StartCooldown(SpellInfo spellInfo) { if (spellInfo.IsPassive) { return; } int cooldownLeft = spellInfo.CooldownTime; if (cooldownLeft <= 0) { return; } SpellCooldown spellCooldown = AddCooldown(spellInfo.Id, cooldownLeft, cooldownLeft); if (caster is Player player && player.BoltEntity.Controller != null) { EventHandler.ExecuteEvent(EventHandler.GlobalDispatcher, GameEvents.ServerSpellCooldown, player, spellCooldown); } }
public bool HasCooldown(int spellInfoId, out SpellCooldown cooldown) => spellCooldownsById.TryGetValue(spellInfoId, out cooldown) && cooldown.CooldownLeft > 0;