aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_05_07_07_world.sql7
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp38
2 files changed, 45 insertions, 0 deletions
diff --git a/sql/updates/world/master/2023_05_07_07_world.sql b/sql/updates/world/master/2023_05_07_07_world.sql
new file mode 100644
index 00000000000..755642c5719
--- /dev/null
+++ b/sql/updates/world/master/2023_05_07_07_world.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_painful_punishment';
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(390686,'spell_pri_painful_punishment');
+
+DELETE FROM `spell_proc` WHERE `SpellId` IN (390686);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(390686,0x00,6,0x00000000,0x00008000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0); -- Painful Punishment
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index ee7a9c39814..bc2966279e0 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -102,6 +102,7 @@ enum PriestSpells
SPELL_PRIEST_REVEL_IN_PURITY = 373003,
SPELL_PRIEST_SHADOW_MEND_DAMAGE = 186439,
SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY = 187464,
+ SPELL_PRIEST_SHADOW_WORD_PAIN = 589,
SPELL_PRIEST_SHIELD_DISCIPLINE_ENERGIZE = 47755,
SPELL_PRIEST_SHIELD_DISCIPLINE_PASSIVE = 197045,
SPELL_PRIEST_SINS_OF_THE_MANY = 280398,
@@ -757,6 +758,42 @@ class spell_pri_mind_bomb : public AuraScript
}
};
+// 390686 - Painful Punishment
+class spell_pri_painful_punishment : public AuraScript
+{
+ PrepareAuraScript(spell_pri_painful_punishment);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo
+ ({
+ SPELL_PRIEST_SHADOW_WORD_PAIN,
+ SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC
+ });
+ }
+
+ void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
+ {
+ Unit* caster = eventInfo.GetActor();
+ Unit* target = eventInfo.GetActionTarget();
+ if (!caster || !target)
+ return;
+
+ int32 additionalDuration = aurEff->GetAmount();
+
+ if (Aura* shadowWordPain = target->GetOwnedAura(SPELL_PRIEST_SHADOW_WORD_PAIN, caster->GetGUID()))
+ shadowWordPain->SetDuration(shadowWordPain->GetDuration() + additionalDuration);
+
+ if (Aura* purgeTheWicked = target->GetOwnedAura(SPELL_PRIEST_PURGE_THE_WICKED_PERIODIC, caster->GetGUID()))
+ purgeTheWicked->SetDuration(purgeTheWicked->GetDuration() + additionalDuration);
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_pri_painful_punishment::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY);
+ }
+};
+
// 47540 - Penance
// 400169 - Dark Reprimand
class spell_pri_penance : public SpellScript
@@ -1802,6 +1839,7 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_leap_of_faith_effect_trigger);
RegisterSpellScript(spell_pri_levitate);
RegisterSpellScript(spell_pri_mind_bomb);
+ RegisterSpellScript(spell_pri_painful_punishment);
RegisterSpellScriptWithArgs(spell_pri_penance, "spell_pri_penance", SPELL_PRIEST_PENANCE_CHANNEL_DAMAGE, SPELL_PRIEST_PENANCE_CHANNEL_HEALING);
RegisterSpellScriptWithArgs(spell_pri_penance, "spell_pri_dark_reprimand", SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_DAMAGE, SPELL_PRIEST_DARK_REPRIMAND_CHANNEL_HEALING);
RegisterSpellScript(spell_pri_penance_or_dark_reprimand_channeled);