aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-09-30 05:10:08 -0700
committerNay <dnpd.dd@gmail.com>2012-09-30 05:10:08 -0700
commit35412ddc3c5bb08f8640aa429fc4e1e4791fe2fd (patch)
tree1a9e4bd571b36c2b56ad78aaf16e2822ee89e87b /src
parent460fd87eeffe99dde995bcf1968f3652639e4b71 (diff)
parenteee2a4bd9c1e7a930a3b175c12aec5ee8f73cca2 (diff)
Merge pull request #7892 from Tuxity/holyPower434
[434] Holy power handler
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp38
-rwxr-xr-xsrc/server/game/Spells/Spell.h1
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();