aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeleqraph <nyrdeveloper@gmail.com>2022-08-02 21:45:40 +0200
committerGitHub <noreply@github.com>2022-08-02 21:45:40 +0200
commit22625e82ba994ccf197592f71b877a14e2c53390 (patch)
tree94e8f48a74407d80ebec9f81a5af39e5d4119546
parent3a56b914c64dd44303f63fe8f6cb9ac4865e5a59 (diff)
Scripts/Spells: Priest - Power of the Dark Side fixed (#28118)
-rw-r--r--sql/updates/world/master/2022_08_02_02_world.sql10
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp119
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);