aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Spells/Spell.h1
-rw-r--r--src/server/game/Spells/SpellEffects.cpp38
2 files changed, 38 insertions, 1 deletions
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index cf27e5a1ff2..aea53ad3a1f 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -426,6 +426,7 @@ class TC_GAME_API Spell
void EffectCreateTraitTreeConfig();
void EffectChangeActiveCombatTraitConfig();
void EffectTeleportGraveyard();
+ void EffectActivateRune();
typedef std::unordered_set<Aura*> UsedSpellMods;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 568b6c2d3d6..94be6998143 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -415,7 +415,7 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF
&Spell::EffectNULL, //327 SPELL_EFFECT_PULL
&Spell::EffectNULL, //328 SPELL_EFFECT_ADD_COMBO_POINTS
&Spell::EffectResurrectNew, //329 SPELL_EFFECT_RESURRECT_NEW
- &Spell::EffectNULL, //330 SPELL_EFFECT_ACTIVATE_RUNE
+ &Spell::EffectActivateRune, //330 SPELL_EFFECT_ACTIVATE_RUNE
};
void Spell::EffectNULL()
@@ -5950,3 +5950,39 @@ void Spell::EffectTeleportGraveyard()
target->RepopAtGraveyard();
}
+
+void Spell::EffectActivateRune()
+{
+ if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH)
+ return;
+
+ if (m_caster->GetTypeId() != TYPEID_PLAYER || !damage)
+ return;
+
+ Player* player = m_caster->ToPlayer();
+ if (player->GetClass() != CLASS_DEATH_KNIGHT)
+ return;
+
+ // needed later
+ m_runesState = player->GetRunesState();
+
+ uint32 count = damage;
+ int32 miscValue = (1 << effectInfo->MiscValue);
+
+ // Death Runes may also activate Blood Runes (Blood Tap)
+ if (miscValue & (1 << AsUnderlyingType(RuneType::Death)))
+ miscValue |= (1 << AsUnderlyingType(RuneType::Blood));
+
+ for (uint32 i = 0; i < MAX_RUNES && count > 0; ++i)
+ {
+ if ((1 << AsUnderlyingType(player->GetCurrentRune(i))) & miscValue && player->GetRuneCooldown(i))
+ {
+ player->SetRuneCooldown(i, 0);
+ --count;
+ }
+ }
+
+ // Send rune state diff
+ uint8 runesState = player->GetRunesState() & ~m_runesState;
+ player->AddRunePower(runesState);
+}