aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeleqraph <nyrdeveloper@gmail.com>2023-08-06 19:21:04 +0200
committerGitHub <noreply@github.com>2023-08-06 19:21:04 +0200
commite71b2f62c1eac13d90840970b64a37b7cc40e915 (patch)
tree3c72fb59d47a6c6b374db9d6d3afff7d961bcd82
parenta3a31a9a6f7d0000b8fc3e1ca2e355664a7ed955 (diff)
Scripts/Spells: Implement Answered Prayers (#29030)
-rw-r--r--sql/updates/world/master/2023_08_06_00_world.sql7
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp54
2 files changed, 61 insertions, 0 deletions
diff --git a/sql/updates/world/master/2023_08_06_00_world.sql b/sql/updates/world/master/2023_08_06_00_world.sql
new file mode 100644
index 00000000000..88b98e218de
--- /dev/null
+++ b/sql/updates/world/master/2023_08_06_00_world.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_proc` WHERE `SpellId` IN (391387);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(391387,0x00,6,0x00000000,0x00000000,0x00000000,0x00200000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- Answered Prayers
+
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_answered_prayers';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(391387, 'spell_pri_answered_prayers');
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 36b6584076c..2eb0317f804 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -41,6 +41,8 @@ enum PriestSpells
{
SPELL_PRIEST_ANGELIC_FEATHER_AREATRIGGER = 158624,
SPELL_PRIEST_ANGELIC_FEATHER_AURA = 121557,
+ SPELL_PRIEST_ANSWERED_PRAYERS = 394289,
+ SPELL_PRIEST_APOTHEOSIS = 200183,
SPELL_PRIEST_ARMOR_OF_FAITH = 28810,
SPELL_PRIEST_ATONEMENT = 81749,
SPELL_PRIEST_ATONEMENT_HEAL = 81751,
@@ -216,6 +218,57 @@ struct areatrigger_pri_angelic_feather : AreaTriggerAI
}
};
+// 391387 - Answered Prayers
+class spell_pri_answered_prayers : public AuraScript
+{
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_ANSWERED_PRAYERS, SPELL_PRIEST_APOTHEOSIS })
+ && ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } });
+ }
+
+ void HandleOnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) const
+ {
+ Milliseconds extraDuration = 0ms;
+ if (AuraEffect const* durationEffect = GetEffect(EFFECT_1))
+ extraDuration = Seconds(durationEffect->GetAmount());
+
+ Unit* target = eventInfo.GetActor();
+
+ Aura* answeredPrayers = target->GetAura(SPELL_PRIEST_ANSWERED_PRAYERS);
+
+ // Note: if caster has no aura, we must cast it first.
+ if (!answeredPrayers)
+ target->CastSpell(target, SPELL_PRIEST_ANSWERED_PRAYERS, TRIGGERED_IGNORE_CAST_IN_PROGRESS);
+ else
+ {
+ // Note: there's no BaseValue dummy that we can use as reference, so we hardcode the increasing stack value.
+ answeredPrayers->ModStackAmount(1);
+
+ // Note: if current stacks match max. stacks, trigger Apotheosis.
+ if (answeredPrayers->GetStackAmount() != aurEff->GetAmount())
+ return;
+
+ answeredPrayers->Remove();
+
+ if (Aura* apotheosis = GetTarget()->GetAura(SPELL_PRIEST_APOTHEOSIS))
+ {
+ apotheosis->SetDuration(apotheosis->GetDuration() + extraDuration.count());
+ apotheosis->SetMaxDuration(apotheosis->GetMaxDuration() + extraDuration.count());
+ }
+ else
+ target->CastSpell(target, SPELL_PRIEST_APOTHEOSIS,
+ CastSpellExtraArgs(TRIGGERED_FULL_MASK & ~TRIGGERED_CAST_DIRECTLY)
+ .AddSpellMod(SPELLVALUE_DURATION, extraDuration.count()));
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectProc += AuraEffectProcFn(spell_pri_answered_prayers::HandleOnProc, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL);
+ }
+};
+
// 26169 - Oracle Healing Bonus
class spell_pri_aq_3p_bonus : public AuraScript
{
@@ -1979,6 +2032,7 @@ void AddSC_priest_spell_scripts()
{
RegisterSpellScript(spell_pri_angelic_feather_trigger);
RegisterAreaTriggerAI(areatrigger_pri_angelic_feather);
+ RegisterSpellScript(spell_pri_answered_prayers);
RegisterSpellScript(spell_pri_aq_3p_bonus);
RegisterSpellScript(spell_pri_atonement);
RegisterSpellScript(spell_pri_atonement_triggered);