aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2024_03_18_01_world.sql8
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp48
2 files changed, 56 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_03_18_01_world.sql b/sql/updates/world/master/2024_03_18_01_world.sql
new file mode 100644
index 00000000000..8ad962c34e1
--- /dev/null
+++ b/sql/updates/world/master/2024_03_18_01_world.sql
@@ -0,0 +1,8 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_rhapsody','spell_pri_rhapsody_proc');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(390622, 'spell_pri_rhapsody'),
+(390636, 'spell_pri_rhapsody_proc');
+
+DELETE FROM `spell_proc` WHERE `SpellId` IN (390636);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(390636,0x00,6,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0xA,0x0,0,0,0,1); -- Rhapsody
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index eefce2d3e82..419e9f51a8d 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -162,6 +162,7 @@ enum PriestSpells
SPELL_PRIEST_RENEWED_HOPE = 197469,
SPELL_PRIEST_RENEWED_HOPE_EFFECT = 197470,
SPELL_PRIEST_REVEL_IN_PURITY = 373003,
+ SPELL_PRIEST_RHAPSODY_PROC = 390636,
SPELL_PRIEST_SAY_YOUR_PRAYERS = 391186,
SPELL_PRIEST_SCHISM = 424509,
SPELL_PRIEST_SCHISM_AURA = 214621,
@@ -2642,6 +2643,51 @@ class spell_pri_purge_the_wicked_dummy : public SpellScript
}
};
+// 390622 - Rhapsody
+class spell_pri_rhapsody : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_RHAPSODY_PROC });
+ }
+
+ void HandlePeriodic(AuraEffect const* aurEff) const
+ {
+ Unit* target = GetTarget();
+ if (Aura* rhapsodyStack = target->GetAura(SPELL_PRIEST_RHAPSODY_PROC, GetCasterGUID()))
+ rhapsodyStack->ModStackAmount(1);
+ else
+ target->CastSpell(target, SPELL_PRIEST_RHAPSODY_PROC,
+ CastSpellExtraArgs(aurEff).SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR));
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_pri_rhapsody::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+};
+
+// 390636 - Rhapsody
+class spell_pri_rhapsody_proc : public AuraScript
+{
+ void PreventChargeDrop(ProcEventInfo const& /*eventInfo*/)
+ {
+ PreventDefaultAction();
+ }
+
+ void RemoveAura(ProcEventInfo const& /*eventInfo*/) const
+ {
+ // delay charge drop to allow spellmod to be applied to both damaging and healing spells
+ GetAura()->DropChargeDelayed(1);
+ }
+
+ void Register() override
+ {
+ DoPrepareProc += AuraProcFn(spell_pri_rhapsody_proc::PreventChargeDrop);
+ AfterProc += AuraProcFn(spell_pri_rhapsody_proc::RemoveAura);
+ }
+};
+
// 47536 - Rapture
class spell_pri_rapture : public SpellScript
{
@@ -3241,6 +3287,8 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_purge_the_wicked);
RegisterSpellScript(spell_pri_purge_the_wicked_dummy);
RegisterSpellScript(spell_pri_rapture);
+ RegisterSpellScript(spell_pri_rhapsody);
+ RegisterSpellScript(spell_pri_rhapsody_proc);
RegisterSpellScript(spell_pri_schism);
RegisterSpellScript(spell_pri_sins_of_the_many);
RegisterSpellScript(spell_pri_spirit_of_redemption);