aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp23
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h1
-rwxr-xr-xsrc/server/game/Entities/Unit/StatSystem.cpp15
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);