aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.h3
-rw-r--r--src/server/game/Spells/Spell.cpp12
2 files changed, 10 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 302c80bf757..87b66c3922d 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -410,8 +410,7 @@ struct Areas
enum RuneCooldowns
{
- RUNE_BASE_COOLDOWN = 10000,
- RUNE_MISS_COOLDOWN = 1500 // cooldown applied on runes when the spell misses
+ RUNE_BASE_COOLDOWN = 10000
};
struct Runes
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 300a3155fff..eb43009aa1f 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4909,8 +4909,11 @@ void Spell::SendSpellGo()
&& HasPowerTypeCost(POWER_RUNES)
&& !(_triggeredCastFlags & TRIGGERED_IGNORE_POWER_COST))
{
- castFlags |= CAST_FLAG_NO_GCD; // not needed, but Blizzard sends it
- castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list
+ castFlags |= CAST_FLAG_NO_GCD; // not needed, but it's being sent according to sniffs
+
+ // Only send rune cooldowns when there has been a change
+ if (m_runesState != m_caster->ToPlayer()->GetRunesState())
+ castFlags |= CAST_FLAG_RUNE_LIST; // rune cooldowns list
}
if (m_targets.HasTraj())
@@ -5677,6 +5680,9 @@ void Spell::TakeRunePower(bool didHit)
Player* player = m_caster->ToPlayer();
m_runesState = player->GetRunesState(); // store previous state
+ if (!didHit)
+ return;
+
int32 runeCost = std::accumulate(m_powerCost.begin(), m_powerCost.end(), 0, [](int32 totalCost, SpellPowerCost const& cost)
{
return totalCost + (cost.Power == POWER_RUNES ? cost.Amount : 0);
@@ -5686,7 +5692,7 @@ void Spell::TakeRunePower(bool didHit)
{
if (!player->GetRuneCooldown(i) && runeCost > 0)
{
- player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown() : uint32(RUNE_MISS_COOLDOWN));
+ player->SetRuneCooldown(i, player->GetRuneBaseCooldown());
--runeCost;
}
}