diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 38 | ||||
-rwxr-xr-x | src/server/game/Spells/Spell.h | 1 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 3f5811fa86f..d62db4b4390 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3488,6 +3488,9 @@ void Spell::_handle_finish_phase() // Real add combo points from effects if (m_comboPointGain) m_caster->m_movedPlayer->GainSpellComboPoints(m_comboPointGain); + + if (m_spellInfo->PowerType == POWER_HOLY_POWER && m_caster->m_movedPlayer->getClass() == CLASS_PALADIN) + HandleHolyPower(m_caster->m_movedPlayer); } if (m_caster->m_extraAttacks && GetSpellInfo()->HasEffect(SPELL_EFFECT_ADD_EXTRA_ATTACKS)) @@ -4654,6 +4657,41 @@ void Spell::HandleThreatSpells() sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "Spell %u, added an additional %f threat for %s %u target(s)", m_spellInfo->Id, threat, m_spellInfo->_IsPositiveSpell() ? "assisting" : "harming", uint32(m_UniqueTargetInfo.size())); } +void Spell::HandleHolyPower(Player* caster) +{ + if (!caster) + return; + + bool hit = true; + Player* modOwner = caster->GetSpellModOwner(); + + m_powerCost = caster->GetPower(POWER_HOLY_POWER); // Always use all the holy power we have + + if (!m_powerCost || !modOwner) + return; + + if (uint64 targetGUID = m_targets.GetUnitTargetGUID()) + { + for (std::list<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end(); ++ihit) + { + if (ihit->targetGUID == targetGUID) + { + if (ihit->missCondition != SPELL_MISS_NONE && ihit->missCondition != SPELL_MISS_MISS) + hit = false; + + break; + } + } + + // The spell did hit the target, apply aura cost mods if there are any. + if (hit) + { + modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_COST, m_powerCost); + m_caster->ModifyPower(POWER_HOLY_POWER, -m_powerCost); + } + } +} + void Spell::HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGOTarget, uint32 i, SpellEffectHandleMode mode) { effectHandleMode = mode; diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index f43c13c8fae..9ea9fef9aaf 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -435,6 +435,7 @@ class Spell void SendChannelStart(uint32 duration); void SendResurrectRequest(Player* target); + void HandleHolyPower(Player* caster); void HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGOTarget, uint32 i, SpellEffectHandleMode mode); void HandleThreatSpells(); |