Core/Spells: Implement spell queue

Port From (https://github.com/TrinityCore/TrinityCore/commit/27019a62a4294f8dd48d975f85b1907c5adee0e3)
This commit is contained in:
hondacrx
2024-02-03 13:11:01 -05:00
parent 284cb628c9
commit a5b8efd032
10 changed files with 390 additions and 192 deletions
+15 -3
View File
@@ -537,7 +537,7 @@ namespace Game.Spells
}
if (cooldownEntry.CooldownEnd <= now)
{
{
_categoryCooldowns.Remove(cooldownEntry.CategoryId);
_spellCooldowns.Remove(cooldownEntry.SpellId);
}
@@ -697,7 +697,7 @@ namespace Game.Spells
{
return GetRemainingCategoryCooldown(spellInfo.GetCategory());
}
public void LockSpellSchool(SpellSchoolMask schoolMask, TimeSpan lockoutTime)
{
DateTime now = GameTime.GetSystemTime();
@@ -921,6 +921,18 @@ namespace Game.Spells
_globalCooldowns[spellInfo.StartRecoveryCategory] = new DateTime();
}
public TimeSpan GetRemainingGlobalCooldown(SpellInfo spellInfo)
{
if (!_globalCooldowns.TryGetValue(spellInfo.StartRecoveryCategory, out DateTime end))
return TimeSpan.Zero;
DateTime now = GameTime.GetDateAndTime();
if (end < now)
return TimeSpan.Zero;
return end - now;
}
public Player GetPlayerOwner()
{
return _owner.GetCharmerOrOwnerPlayerOrPlayerItself();
@@ -952,7 +964,7 @@ namespace Game.Spells
player.SendPacket(setSpellCharges);
}
}
void GetCooldownDurations(SpellInfo spellInfo, uint itemId, ref uint categoryId)
{
TimeSpan notUsed = TimeSpan.Zero;