diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellHistory.cpp | 12 | ||||
-rw-r--r-- | src/server/scripts/World/duel_reset.cpp | 6 |
3 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1eda4dc636f..46222daf869 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1946,7 +1946,7 @@ class Player : public Unit, public GridObject<Player> uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const; void SetHonorPoints(uint32 value); void SetArenaPoints(uint32 value); - + // duel health and mana reset methods void SaveHealthBeforeDuel() { healthBeforeDuel = GetHealth(); } void SaveManaBeforeDuel() { manaBeforeDuel = GetPower(POWER_MANA); } diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index c76c4545643..c822e8961b5 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -652,15 +652,17 @@ void SpellHistory::RestoreCooldownStateAfterDuel() SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(itr->first); if (spellInfo->RecoveryTime > 10 * MINUTE * IN_MILLISECONDS || - spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) + spellInfo->CategoryRecoveryTime > 10 * MINUTE * IN_MILLISECONDS) _spellCooldownsBeforeDuel[itr->first] = _spellCooldowns[itr->first]; } - //check for spell with onHold active before and during the duel + + // check for spell with onHold active before and during the duel for (auto itr = _spellCooldownsBeforeDuel.begin(); itr != _spellCooldownsBeforeDuel.end(); ++itr) { - if (!itr->second.OnHold) - if (!_spellCooldowns[itr->first].OnHold) - _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; + if (!itr->second.OnHold && + _spellCooldowns.find(itr->first) != _spellCooldowns.end() && + !_spellCooldowns[itr->first].OnHold) + _spellCooldowns[itr->first] = _spellCooldownsBeforeDuel[itr->first]; } // update the client: restore old cooldowns diff --git a/src/server/scripts/World/duel_reset.cpp b/src/server/scripts/World/duel_reset.cpp index 593906074c5..ae98c0eb4ab 100644 --- a/src/server/scripts/World/duel_reset.cpp +++ b/src/server/scripts/World/duel_reset.cpp @@ -66,8 +66,8 @@ class DuelResetScript : public PlayerScript // Called when a duel ends void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type) override { - // do not reset anything if DUEL_INTERRUPTED - if (type != DUEL_INTERRUPTED) + // do not reset anything if DUEL_INTERRUPTED or DUEL_FLED + if (type == DUEL_WON) { // Cooldown restore if (sWorld->getBoolConfig(CONFIG_RESET_DUEL_COOLDOWNS)) @@ -96,7 +96,7 @@ class DuelResetScript : public PlayerScript } } } - + void ResetSpellCooldowns(Player* player, bool removeActivePetCooldowns) { // remove cooldowns on spells that have < 10 min CD and has no onHold |