aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp21
-rw-r--r--src/server/game/Entities/Player/Player.h9
-rw-r--r--src/server/game/Spells/SpellEffects.cpp5
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp2
4 files changed, 28 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index cd601d51c98..d43ba20eb74 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -25306,13 +25306,26 @@ Powers Player::GetPowerTypeForBaseRune(uint8 index) const
}
}
-bool Player::IsRuneFullyDepleted(RuneType runeType) const
+bool Player::IsRuneFullyDepleted(uint8 index) const
{
+ return G3D::fuzzyEq(GetRuneCooldown(index), RUNE_BASE_COOLDOWN);
+}
+
+bool Player::HasFullyDepletedRune(RuneType runeType) const
+{
+ if (!m_runes)
+ return false;
+
for (uint8 i = 0; i < MAX_RUNES; ++i)
- if (GetBaseRune(i) == runeType && G3D::fuzzyEq(GetRuneCooldown(i), 0.0f))
- return false;
+ {
+ if (GetBaseRune(i) != runeType)
+ continue;
- return true;
+ if (IsRuneFullyDepleted(i))
+ return true;
+ }
+
+ return false;
}
void Player::SetRuneConvertAura(uint8 index, AuraEffect const* aura, AuraType auraType, SpellInfo const* spellInfo)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 359748161da..78d10b2dc13 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -412,6 +412,8 @@ struct RuneInfo
AuraEffect const* ConvertAura;
AuraType ConvertAuraType;
SpellInfo const* ConvertAuraInfo;
+
+ bool IsFullyDepleted() const;
};
struct Runes
@@ -2604,12 +2606,13 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
RuneType GetCurrentRune(uint8 index) const { return RuneType(m_runes->_Runes[index].CurrentRune); }
Powers GetPowerTypeForBaseRune(uint8 index) const;
float GetRuneCooldown(uint8 index) const { return m_runes->_Runes[index].Cooldown; }
+ bool IsRuneFullyDepleted(uint8 index) const;
/// <summary>
- /// Iterates over all player runes and checks if all base runes of the specified type are on cooldown.
+ /// Checks if there is a fully depleted rune. A rune is considered fully depleted when it's on cooldown and isn't recovering yet ('waiting' for another rune to finish regenerating)
/// </summary>
/// <param name="runeType">The kind of base rune that is being checked (Blood, Unholy, Frost). Death Runes are no base rune and can't be checked with this method. Use the underlying base rune instead.</param>
- /// <returns>true when all base runes of the specified type are on cooldown</returns>
- bool IsRuneFullyDepleted(RuneType runeType) const;
+ /// <returns>true when there is a fully depleted rune</returns>
+ bool HasFullyDepletedRune(RuneType runeType) const;
RuneType GetLastUsedRune() { return m_runes->LastUsedRune; }
uint8 GetLastUsedRuneMask() { return m_runes->LastUsedRuneMask; }
void ClearLastUsedRuneMask() { m_runes->LastUsedRuneMask = 0; }
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 2512ff80dd1..7278e30d21d 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5946,7 +5946,10 @@ void Spell::EffectActivateRune()
for (uint32 i = 0; i < MAX_RUNES && count > 0; ++i)
{
// We will check for base and current rune because some spell effects also activate Death Runes while specifying Blood Runes in their misc value
- if ((player->GetBaseRune(i) == runeType || player->GetCurrentRune(i) == runeType) && G3D::fuzzyNe(player->GetRuneCooldown(i), 0.0f))
+ if (player->GetBaseRune(i) != runeType && player->GetCurrentRune(i) != runeType)
+ continue;
+
+ if (player->IsRuneFullyDepleted(i))
{
player->SetRuneCooldown(i, 0.0f);
--count;
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index aba933d31a9..558e402ec7d 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -128,7 +128,7 @@ class spell_dk_runic_empowerment : public AuraScript
for (RuneType runeType : { RuneType::Blood, RuneType::Unholy, RuneType::Frost })
{
- if (player->IsRuneFullyDepleted(runeType))
+ if (player->HasFullyDepletedRune(runeType))
{
switch (runeType)
{