diff options
author | Nay <dnpd.dd@gmail.com> | 2012-09-30 05:10:08 -0700 |
---|---|---|
committer | Nay <dnpd.dd@gmail.com> | 2012-09-30 05:10:08 -0700 |
commit | 35412ddc3c5bb08f8640aa429fc4e1e4791fe2fd (patch) | |
tree | 1a9e4bd571b36c2b56ad78aaf16e2822ee89e87b | |
parent | 460fd87eeffe99dde995bcf1968f3652639e4b71 (diff) | |
parent | eee2a4bd9c1e7a930a3b175c12aec5ee8f73cca2 (diff) |
Merge pull request #7892 from Tuxity/holyPower434
[434] Holy power handler
-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(); |