From 97b19a54457d6239a8e57f61281bda1cd16b8984 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 --- src/server/game/Entities/Player/Player.cpp | 5 ++++- src/server/game/Spells/SpellHistory.h | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 8428886ee34..88bcafa8298 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3752,7 +3752,10 @@ void Player::RemoveArenaSpellCooldowns(bool removeActivePetCooldowns) GetSpellHistory()->ResetCooldowns([](SpellHistory::CooldownStorageType::iterator itr) -> bool { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itr->first); - return spellInfo->RecoveryTime < 10 * MINUTE * IN_MILLISECONDS && spellInfo->CategoryRecoveryTime < 10 * MINUTE * IN_MILLISECONDS; + int32 cooldown = -1; + int32 categoryCooldown = -1; + SpellHistory::GetCooldownDurations(spellInfo, itr->second.ItemId, &cooldown, nullptr, &categoryCooldown); + return cooldown < 10 * MINUTE * IN_MILLISECONDS && categoryCooldown < 10 * MINUTE * IN_MILLISECONDS; }, true); // pet cooldowns diff --git a/src/server/game/Spells/SpellHistory.h b/src/server/game/Spells/SpellHistory.h index 64ebf10dd16..8c3c033f1c5 100644 --- a/src/server/game/Spells/SpellHistory.h +++ b/src/server/game/Spells/SpellHistory.h @@ -130,6 +130,8 @@ public: void BuildCooldownPacket(WorldPacket& data, uint8 flags, uint32 spellId, uint32 cooldown) const; + static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown); + CooldownStorageType::size_type GetCooldownsSizeForPacket() const { return _spellCooldowns.size(); } void SaveCooldownStateBeforeDuel(); void RestoreCooldownStateAfterDuel(); @@ -146,8 +148,6 @@ private: typedef std::unordered_map PacketCooldowns; void BuildCooldownPacket(WorldPacket& data, uint8 flags, PacketCooldowns const& cooldowns) const; - static void GetCooldownDurations(SpellInfo const* spellInfo, uint32 itemId, int32* cooldown, uint32* categoryId, int32* categoryCooldown); - Unit* _owner; CooldownStorageType _spellCooldowns; CooldownStorageType _spellCooldownsBeforeDuel; -- cgit v1.2.3