diff options
| author | ShinDarth <borzifrancesco@gmail.com> | 2015-10-28 18:05:30 +0100 |
|---|---|---|
| committer | ShinDarth <borzifrancesco@gmail.com> | 2015-11-07 21:16:18 +0100 |
| commit | 3b1db7a514c1385aed5e472ef4c498803fae51c1 (patch) | |
| tree | be3ce7614661e56f8b85c44c6c07baf5d9e4f30e | |
| parent | b774aedd93a229fd3cbcd17a09ac195a9c0c47c6 (diff) | |
Scripts/DuelReset:
- do not reset when duel is fled
- minor improvement to SpellHistory::RestoreCooldonStateAfter duel method
| -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 |
