diff options
author | Teleqraph <nyrdeveloper@gmail.com> | 2022-08-02 21:45:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-02 21:45:40 +0200 |
commit | 22625e82ba994ccf197592f71b877a14e2c53390 (patch) | |
tree | 94e8f48a74407d80ebec9f81a5af39e5d4119546 | |
parent | 3a56b914c64dd44303f63fe8f6cb9ac4865e5a59 (diff) |
Scripts/Spells: Priest - Power of the Dark Side fixed (#28118)
-rw-r--r-- | sql/updates/world/master/2022_08_02_02_world.sql | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 119 |
2 files changed, 129 insertions, 0 deletions
diff --git a/sql/updates/world/master/2022_08_02_02_world.sql b/sql/updates/world/master/2022_08_02_02_world.sql new file mode 100644 index 00000000000..cd5d33f658f --- /dev/null +++ b/sql/updates/world/master/2022_08_02_02_world.sql @@ -0,0 +1,10 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_power_of_the_dark_side_damage_bonus'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_power_of_the_dark_side_healing_bonus'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_penance_channeled'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_power_of_the_dark_side'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(47666, 'spell_pri_power_of_the_dark_side_damage_bonus'), +(47750, 'spell_pri_power_of_the_dark_side_healing_bonus'), +(47758, 'spell_pri_penance_channeled'), +(47757, 'spell_pri_penance_channeled'), +(198069, 'spell_pri_power_of_the_dark_side'); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 662cf91e84f..3f66eacd761 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -65,6 +65,10 @@ enum PriestSpells SPELL_PRIEST_PENANCE = 47540, SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE = 47758, SPELL_PRIEST_PENANCE_CHANNEL_HEALING = 47757, + SPELL_PRIEST_PENANCE_DAMAGE = 47666, + SPELL_PRIEST_PENANCE_HEALING = 47750, + SPELL_PRIEST_POWER_OF_THE_DARK_SIDE = 198069, + SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT = 225795, SPELL_PRIEST_POWER_WORD_SHIELD = 17, SPELL_PRIEST_POWER_WORD_SOLACE_ENERGIZE = 129253, SPELL_PRIEST_PRAYER_OF_HEALING = 596, @@ -620,6 +624,117 @@ class spell_pri_penance : public SpellScript } }; +// 47758 - Penance (Channel Damage), 47757 - Penance (Channel Healing) +class spell_pri_penance_channeled : public AuraScript +{ + PrepareAuraScript(spell_pri_penance_channeled); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE }); + } + + void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->RemoveAura(SPELL_PRIEST_POWER_OF_THE_DARK_SIDE); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_pri_penance_channeled::HandleOnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 198069 - Power of the Dark Side +class spell_pri_power_of_the_dark_side : public AuraScript +{ + PrepareAuraScript(spell_pri_power_of_the_dark_side); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT }); + } + + void HandleOnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->CastSpell(caster, SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT, true); + } + + void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Unit* caster = GetCaster()) + caster->RemoveAura(SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_pri_power_of_the_dark_side::HandleOnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_pri_power_of_the_dark_side::HandleOnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 47666 - Penance (Damage) +class spell_pri_power_of_the_dark_side_damage_bonus : public SpellScript +{ + PrepareSpellScript(spell_pri_power_of_the_dark_side_damage_bonus); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE }); + } + + void HandleLaunchTarget(SpellEffIndex effIndex) + { + if (AuraEffect* powerOfTheDarkSide = GetCaster()->GetAuraEffect(SPELL_PRIEST_POWER_OF_THE_DARK_SIDE, EFFECT_0)) + { + PreventHitDefaultEffect(effIndex); + + float damageBonus = GetCaster()->SpellDamageBonusDone(GetHitUnit(), GetSpellInfo(), GetEffectValue(), SPELL_DIRECT_DAMAGE, GetEffectInfo()); + float value = damageBonus + damageBonus * GetEffectVariance(); + value *= 1.0f + (powerOfTheDarkSide->GetAmount() / 100.0f); + value = GetHitUnit()->SpellDamageBonusTaken(GetCaster(), GetSpellInfo(), value, SPELL_DIRECT_DAMAGE); + SetHitDamage(value); + } + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_pri_power_of_the_dark_side_damage_bonus::HandleLaunchTarget, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + +// 47750 - Penance (Healing) +class spell_pri_power_of_the_dark_side_healing_bonus : public SpellScript +{ + PrepareSpellScript(spell_pri_power_of_the_dark_side_healing_bonus); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_POWER_OF_THE_DARK_SIDE }); + } + + void HandleLaunchTarget(SpellEffIndex effIndex) + { + if (AuraEffect* powerOfTheDarkSide = GetCaster()->GetAuraEffect(SPELL_PRIEST_POWER_OF_THE_DARK_SIDE, EFFECT_0)) + { + PreventHitDefaultEffect(effIndex); + + float healingBonus = GetCaster()->SpellHealingBonusDone(GetHitUnit(), GetSpellInfo(), GetEffectValue(), HEAL, GetEffectInfo()); + float value = healingBonus + healingBonus * GetEffectVariance(); + value *= 1.0f + (powerOfTheDarkSide->GetAmount() / 100.0f); + value = GetHitUnit()->SpellHealingBonusTaken(GetCaster(), GetSpellInfo(), value, HEAL); + SetHitHeal(value); + } + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_pri_power_of_the_dark_side_healing_bonus::HandleLaunchTarget, EFFECT_0, SPELL_EFFECT_HEAL); + } +}; + // 194509 - Power Word: Radiance class spell_pri_power_word_radiance : public SpellScript { @@ -1387,6 +1502,10 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_levitate); RegisterSpellScript(spell_pri_mind_bomb); RegisterSpellScript(spell_pri_penance); + RegisterSpellScript(spell_pri_penance_channeled); + RegisterSpellScript(spell_pri_power_of_the_dark_side); + RegisterSpellScript(spell_pri_power_of_the_dark_side_damage_bonus); + RegisterSpellScript(spell_pri_power_of_the_dark_side_healing_bonus); RegisterSpellScript(spell_pri_power_word_radiance); RegisterSpellAndAuraScriptPair(spell_pri_power_word_shield, spell_pri_power_word_shield_aura); RegisterSpellScript(spell_pri_power_word_solace); |