aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeleqraph <nyrdeveloper@gmail.com>2022-02-15 22:15:29 +0100
committerGitHub <noreply@github.com>2022-02-15 22:15:29 +0100
commitc0748d4285e3f868e9331df45dd13828381d590d (patch)
tree31a6b1341655034a3791beec61f2b5da600258ba
parent11aafe53b10dc858d7f66696bb189dcca2de53c9 (diff)
Scripts/Spells: updated Penance (#27737)
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp114
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);