diff options
author | Mematoru <127750549+Mematoru23@users.noreply.github.com> | 2024-04-08 01:41:03 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-08 00:41:03 +0200 |
commit | 8daa3f735d84bf1ee44cab467b2bf736d14b38c3 (patch) | |
tree | 754c90468112c251819c2132d0ba99f34df9b4d8 | |
parent | 2c91742ad1f10c2a39a15c8192bdc6a35090f32a (diff) |
Scripts/Spells: Implemented Priest talent Unfurling Darkness (#29885)
Co-authored-by: Cristian Vintila <127750549+cristiv23@users.noreply.github.com>
Co-authored-by: Shauren <shauren.trinity@gmail.com>
-rw-r--r-- | sql/updates/world/master/2024_04_08_00_world.sql | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 57 |
2 files changed, 60 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_04_08_00_world.sql b/sql/updates/world/master/2024_04_08_00_world.sql new file mode 100644 index 00000000000..6be26574246 --- /dev/null +++ b/sql/updates/world/master/2024_04_08_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_unfurling_darkness'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(34914, 'spell_pri_unfurling_darkness'); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 66ca7a70e47..e7cbac400ce 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -191,6 +191,9 @@ enum PriestSpells SPELL_PRIEST_ULTIMATE_PENITENCE = 421453, SPELL_PRIEST_ULTIMATE_PENITENCE_DAMAGE = 421543, SPELL_PRIEST_ULTIMATE_PENITENCE_HEAL = 421544, + SPELL_PRIEST_UNFURLING_DARKNESS = 341273, + SPELL_PRIEST_UNFURLING_DARKNESS_AURA = 341282, + SPELL_PRIEST_UNFURLING_DARKNESS_DEBUFF = 341291, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL = 15290, SPELL_PRIEST_VAMPIRIC_TOUCH = 34914, SPELL_PRIEST_VOID_SHIELD = 199144, @@ -3235,6 +3238,59 @@ class spell_pri_twist_of_fate : public AuraScript } }; +// 341273 - Unfurling Darkness +// Triggered by 34914 - Vampiric Touch +class spell_pri_unfurling_darkness : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_UNFURLING_DARKNESS, SPELL_PRIEST_UNFURLING_DARKNESS_DEBUFF }) + && ValidateSpellEffect({ { SPELL_PRIEST_UNFURLING_DARKNESS_AURA, EFFECT_0 } }); + } + + void PreventDirectDamage(WorldObject*& target) const + { + bool canTriggerDirectDamage = [&] + { + if (!GetSpell()->m_originalCastId.IsEmpty()) + return false; // not when triggered by Shadow Crash (Whispering Shadows talent) + if (AuraEffect const* unfurlingDarkness = GetCaster()->GetAuraEffect(SPELL_PRIEST_UNFURLING_DARKNESS_AURA, EFFECT_0)) + if (GetSpell()->m_appliedMods.contains(unfurlingDarkness->GetBase())) + return true; + return false; + }(); + + if (!canTriggerDirectDamage) + target = nullptr; + } + + void TriggerUnfurlingDarkness() const + { + if (!GetSpell()->m_originalCastId.IsEmpty()) + return; // not when triggered by Shadow Crash (Whispering Shadows talent) + + Unit* caster = GetCaster(); + + if (AuraEffect const* unfurlingDarkness = GetCaster()->GetAuraEffect(SPELL_PRIEST_UNFURLING_DARKNESS_AURA, EFFECT_0)) + { + if (GetSpell()->m_appliedMods.contains(unfurlingDarkness->GetBase())) + { + unfurlingDarkness->GetBase()->Remove(); + return; + } + } + + if (!caster->HasAura(SPELL_PRIEST_UNFURLING_DARKNESS_DEBUFF)) + caster->CastSpell(caster, SPELL_PRIEST_UNFURLING_DARKNESS_AURA, true); + } + + void Register() override + { + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_unfurling_darkness::PreventDirectDamage, EFFECT_3, TARGET_UNIT_TARGET_ENEMY); + AfterCast += SpellCastFn(spell_pri_unfurling_darkness::TriggerUnfurlingDarkness); + } +}; + // 15286 - Vampiric Embrace class spell_pri_vampiric_embrace : public AuraScript { @@ -3468,6 +3524,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_t5_heal_2p_bonus); RegisterSpellScript(spell_pri_t10_heal_2p_bonus); RegisterSpellScript(spell_pri_twist_of_fate); + RegisterSpellScript(spell_pri_unfurling_darkness); RegisterSpellScript(spell_pri_vampiric_embrace); RegisterSpellScript(spell_pri_vampiric_embrace_target); RegisterSpellScript(spell_pri_vampiric_touch); |