From 752ea0f8e9a04abd53a3b811de2fbb91b689e69f Mon Sep 17 00:00:00 2001 From: Gildor Date: Thu, 27 Jun 2024 20:12:16 +0200 Subject: Core/Players: Improve reset spell cooldowns when entering arenas (#30032) Co-authored-by: Shauren (cherry picked from commit 97b19a54457d6239a8e57f61281bda1cd16b8984) --- src/server/game/Entities/Player/Player.cpp | 7 +++++-- src/server/game/Spells/SpellHistory.h | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7ec14e6ac99..1ba57638285 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3493,8 +3493,11 @@ void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns) GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itr->first, DIFFICULTY_NONE); - return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS - && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS + SpellHistory::Duration cooldown = 0s; + SpellHistory::Duration categoryCooldown = 0s; + SpellHistory::GetCooldownDurations(spellInfo, itr->second.ItemId, &cooldown, nullptr, &categoryCooldown); + return cooldown < 10min + && categoryCooldown < 10min && !spellInfo->HasAttribute(SPELL_ATTR6_DO_NOT_RESET_COOLDOWN_IN_ARENA); }, true); diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index f46bbd0c941..25c8a53788e 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -178,6 +178,8 @@ public: void PauseCooldowns(); void ResumeCooldowns(); + static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, Duration* cooldown, uint32* categoryId, Duration* categoryCooldown); + void SaveCooldownStateBeforeDuel(); void RestoreCooldownStateAfterDuel(); @@ -195,8 +197,6 @@ private: void SendSetSpellCharges(uint32 chargeCategoryId, ChargeEntryCollection const& chargeCollection); - static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, Duration* cooldown, uint32* categoryId, Duration* categoryCooldown); - Unit* _owner; CooldownStorageType _spellCooldowns; CooldownStorageType _spellCooldownsBeforeDuel; -- cgit v1.2.3