diff options
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 114 |
1 files changed, 42 insertions, 72 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index e51d046a42d..f6fd56d1541 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -60,9 +60,9 @@ enum PriestSpells SPELL_PRIEST_MASTERY_GRACE = 271534, SPELL_PRIEST_MIND_BOMB_STUN = 226943, SPELL_PRIEST_ORACULAR_HEAL = 26170, - SPELL_PRIEST_PENANCE_R1 = 47540, - SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, - SPELL_PRIEST_PENANCE_R1_HEAL = 47757, + SPELL_PRIEST_PENANCE = 47540, + SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE = 47758, + SPELL_PRIEST_PENANCE_CHANNEL_HEALING = 47757, SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE = 129253, SPELL_PRIEST_PRAYER_OF_HEALING = 596, SPELL_PRIEST_RAPTURE = 47536, @@ -574,85 +574,55 @@ class spell_pri_mind_bomb : public AuraScript }; // 47540 - Penance -class spell_pri_penance : public SpellScriptLoader +class spell_pri_penance : public SpellScript { - public: - spell_pri_penance() : SpellScriptLoader("spell_pri_penance") { } - - class spell_pri_penance_SpellScript : public SpellScript - { - PrepareSpellScript(spell_pri_penance_SpellScript); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } + PrepareSpellScript(spell_pri_penance); - bool Validate(SpellInfo const* spellInfo) override - { - SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1, DIFFICULTY_NONE); - if (!firstRankSpellInfo) - return false; - - // can't use other spell than this penance due to spell_ranks dependency - if (!spellInfo->IsRankOf(firstRankSpellInfo)) - return false; - - uint8 rank = spellInfo->GetRank(); - if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank, true)) - return false; - if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank, true)) - return false; - - return true; - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo + ({ + SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, + SPELL_PRIEST_PENANCE_CHANNEL_HEALING + }); + } - void HandleDummy(SpellEffIndex /*effIndex*/) + SpellCastResult CheckCast() + { + Unit* caster = GetCaster(); + if (Unit* target = GetExplTargetUnit()) + { + if (!caster->IsFriendlyTo(target)) { - Unit* caster = GetCaster(); - if (Unit* target = GetHitUnit()) - { - if (!target->IsAlive()) - return; - - uint8 rank = GetSpellInfo()->GetRank(); + if (!caster->IsValidAttackTarget(target)) + return SPELL_FAILED_BAD_TARGETS; - if (caster->IsFriendlyTo(target)) - caster->CastSpell(target, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank), false); - else - caster->CastSpell(target, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank), false); - } + if (!caster->isInFront(target)) + return SPELL_FAILED_UNIT_NOT_INFRONT; } + } - SpellCastResult CheckCast() - { - Player* caster = GetCaster()->ToPlayer(); - if (Unit* target = GetExplTargetUnit()) - { - if (!caster->IsFriendlyTo(target)) - { - if (!caster->IsValidAttackTarget(target)) - return SPELL_FAILED_BAD_TARGETS; - - if (!caster->isInFront(target)) - return SPELL_FAILED_UNIT_NOT_INFRONT; - } - } - - return SPELL_CAST_OK; - } + return SPELL_CAST_OK; + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_pri_penance_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - OnCheckCast += SpellCheckCastFn(spell_pri_penance_SpellScript::CheckCast); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); - SpellScript* GetSpellScript() const override + if (Unit* target = GetHitUnit()) { - return new spell_pri_penance_SpellScript; + if (caster->IsFriendlyTo(target)) + caster->CastSpell(target, SPELL_PRIEST_PENANCE_CHANNEL_HEALING, CastSpellExtraArgs().SetTriggeringSpell(GetSpell())); + else + caster->CastSpell(target, SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, CastSpellExtraArgs().SetTriggeringSpell(GetSpell())); } + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_pri_penance::CheckCast); + OnEffectHitTarget += SpellEffectFn(spell_pri_penance::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 194509 - Power Word: Radiance @@ -1510,7 +1480,7 @@ void AddSC_priest_spell_scripts() new spell_pri_leap_of_faith_effect_trigger(); new spell_pri_levitate(); RegisterSpellScript(spell_pri_mind_bomb); - new spell_pri_penance(); + RegisterSpellScript(spell_pri_penance); RegisterSpellScript(spell_pri_power_word_radiance); RegisterSpellAndAuraScriptPair(spell_pri_power_word_shield, spell_pri_power_word_shield_aura); RegisterSpellScript(spell_pri_power_word_solace); |