diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 23 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 1 | ||||
-rwxr-xr-x | src/server/game/Entities/Unit/StatSystem.cpp | 15 |
3 files changed, 36 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e8333f8e2c2..ebaddea3b32 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -5915,6 +5915,8 @@ void Player::ApplyRatingMod(CombatRating cr, int32 value, bool apply) float RatingChange = value * GetRatingMultiplier(cr); ApplyAttackTimePercentMod(BASE_ATTACK, RatingChange, apply); ApplyAttackTimePercentMod(OFF_ATTACK, RatingChange, apply); + if (getClass() == CLASS_DEATH_KNIGHT) + UpdateAllRunesRegen(); break; } case CR_HASTE_RANGED: @@ -18781,7 +18783,7 @@ void Player::SaveToDB(bool create /*=false*/) { if (GetPowerIndexByClass(Powers(i), getClass()) != MAX_POWERS) { - stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER1 + storedPowers)); + stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER1 + storedPowers)); if (++storedPowers >= MAX_STORED_POWERS) break; } @@ -23788,6 +23790,7 @@ uint32 Player::GetRuneBaseCooldown(uint8 index) { uint8 rune = GetBaseRune(index); uint32 cooldown = RUNE_BASE_COOLDOWN; + float hastePct = 0.0f; AuraEffectList const& regenAura = GetAuraEffectsByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT); for (AuraEffectList::const_iterator i = regenAura.begin();i != regenAura.end(); ++i) @@ -23796,6 +23799,20 @@ uint32 Player::GetRuneBaseCooldown(uint8 index) cooldown = cooldown*(100-(*i)->GetAmount())/100; } + // Runes cooldown are now affected by player's haste from equipment ... + hastePct = GetRatingBonusValue(CR_HASTE_MELEE); + + // ... and some auras. + AuraEffectList const& meleeHasteAura = GetAuraEffectsByType(SPELL_AURA_MOD_MELEE_HASTE); + for (AuraEffectList::const_iterator i = meleeHasteAura.begin();i != meleeHasteAura.end(); ++i) + hastePct += (*i)->GetAmount(); + + AuraEffectList const& meleeHasteAura2 = GetAuraEffectsByType(SPELL_AURA_319); + for (AuraEffectList::const_iterator i = meleeHasteAura2.begin();i != meleeHasteAura2.end(); ++i) + hastePct += (*i)->GetAmount(); + + cooldown *= 1.0f - (hastePct / 100.0f); + return cooldown; } @@ -23888,8 +23905,8 @@ void Player::InitRunes() m_runes->SetRuneState(i); } - for (uint8 i = 0; i < NUM_RUNE_TYPES; ++i) - SetFloatValue(PLAYER_RUNE_REGEN_1 + i, 0.1f); + for (uint8 i = 0; i < MAX_RUNES; ++i) + SetFloatValue(PLAYER_RUNE_REGEN_1 + i, 0.1f); // set a base regen timer equal to 10 sec } bool Player::IsBaseRuneSlotsOnCooldown(RuneType runeType) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 70cf835531b..b0e2a008f3f 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1980,6 +1980,7 @@ class Player : public Unit, public GridObject<Player> void ApplyHealthRegenBonus(int32 amount, bool apply); void UpdateManaRegen(); void UpdateRuneRegen(RuneType rune); + void UpdateAllRunesRegen(); uint64 GetLootGUID() const { return m_lootGuid; } void SetLootGUID(uint64 guid) { m_lootGuid = guid; } diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 9021523db24..d44feeecd08 100755 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -789,6 +789,21 @@ void Player::UpdateRuneRegen(RuneType rune) SetFloatValue(PLAYER_RUNE_REGEN_1 + uint8(rune), regen); } +void Player::UpdateAllRunesRegen() +{ + uint32 cooldown = 0; + + for (uint8 i = 0; i < MAX_RUNES; ++i) + { + cooldown = GetRuneBaseCooldown(i); + if (cooldown) + { + float regen = float(1 * IN_MILLISECONDS) / float(cooldown); + SetFloatValue(PLAYER_RUNE_REGEN_1 + i, regen); + } + } +} + void Player::_ApplyAllStatBonuses() { SetCanModifyStats(false); |