diff options
| -rw-r--r-- | sql/updates/world/master/2021_10_03_07_world_dh_sigils.sql | 16 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_dh.cpp | 84 |
2 files changed, 99 insertions, 1 deletions
diff --git a/sql/updates/world/master/2021_10_03_07_world_dh_sigils.sql b/sql/updates/world/master/2021_10_03_07_world_dh_sigils.sql new file mode 100644 index 00000000000..10f87d9d7d7 --- /dev/null +++ b/sql/updates/world/master/2021_10_03_07_world_dh_sigils.sql @@ -0,0 +1,16 @@ +-- +UPDATE `areatrigger_template` SET `ScriptName`='areatrigger_dh_sigil_of_silence', `VerifiedBuild`=40120 WHERE `Id`=10714; +UPDATE `areatrigger_template` SET `ScriptName`='areatrigger_dh_sigil_of_misery', `VerifiedBuild`=40120 WHERE `Id`=11023; +UPDATE `areatrigger_template` SET `ScriptName`='areatrigger_dh_sigil_of_flame', `VerifiedBuild`=40120 WHERE `Id`=10727; +UPDATE `areatrigger_template` SET `ScriptName`='areatrigger_dh_sigil_of_chains', `VerifiedBuild`=40120 WHERE `Id`=10718; + +DELETE FROM `areatrigger_create_properties` WHERE `Id` IN (6027,6351,6039,6031); +INSERT INTO `areatrigger_create_properties` (`Id`, `AreaTriggerId`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `TimeToTarget`, `TimeToTargetScale`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `VerifiedBuild`) VALUES +(6027, 10714, 0, 0, 0, 0, 0, 0, 0, 0, 2000, 0, 8, 8, 0, 0, 0, 0, 40120), -- SpellId : 202137 Sigil of Silence +(6351, 11023, 0, 0, 0, 0, 0, 0, 0, 0, 2000, 0, 8, 8, 0, 0, 0, 0, 40120), -- SpellId : 207684 Sigil of Misery +(6039, 10727, 0, 0, 0, 0, 0, 0, 0, 0, 2000, 0, 8, 8, 0, 0, 0, 0, 40120), -- SpellId : 204596 Sigil of Flame +(6031, 10718, 0, 0, 0, 0, 0, 0, 0, 0, 2000, 0, 8, 8, 0, 0, 0, 0, 40120); -- SpellId : 202138 Sigil of Chains + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dh_sigil_of_chains'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(204834, 'spell_dh_sigil_of_chains'); diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp index e76618661fc..924d067b8f6 100644 --- a/src/server/scripts/Spells/spell_dh.cpp +++ b/src/server/scripts/Spells/spell_dh.cpp @@ -22,6 +22,8 @@ */ #include "ScriptMgr.h" +#include "AreaTrigger.h" +#include "AreaTriggerAI.h" #include "SpellAuraEffects.h" #include "SpellMgr.h" #include "SpellScript.h" @@ -29,7 +31,14 @@ enum DemonHunterSpells { - SPELL_CHAOS_STRIKE_ENERGIZE = 193840, + SPELL_CHAOS_STRIKE_ENERGIZE = 193840, + SPELL_DH_SIGIL_OF_CHAINS_GRIP = 208674, + SPELL_DH_SIGIL_OF_CHAINS_SLOW = 204843, + SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT = 204834, + SPELL_DH_SIGIL_OF_CHAINS_VISUAL = 208673, + SPELL_DH_SIGIL_OF_FLAME_AOE = 204598, + SPELL_DH_SIGIL_OF_MISERY_AOE = 207685, + SPELL_DH_SIGIL_OF_SILENCE_AOE = 204490, }; // 197125 - Chaos Strike @@ -57,7 +66,80 @@ class spell_dh_chaos_strike : public AuraScript } }; +// 204596 - Sigil of Flame +// 207684 - Sigil of Misery +// 202137 - Sigil of Silence +template<uint32 TriggerSpellId> +class areatrigger_dh_generic_sigil : public AreaTriggerEntityScript +{ +public: + areatrigger_dh_generic_sigil(char const* script) : AreaTriggerEntityScript(script) { } + + template<uint32 Trigger> + struct areatrigger_dh_generic_sigilAI : AreaTriggerAI + { + areatrigger_dh_generic_sigilAI(AreaTrigger* at) : AreaTriggerAI(at) { } + + void OnRemove() override + { + if (Unit* caster = at->GetCaster()) + caster->CastSpell(at->GetPosition(), Trigger); + } + }; + + AreaTriggerAI* GetAI(AreaTrigger* at) const override + { + return new areatrigger_dh_generic_sigilAI<TriggerSpellId>(at); + } +}; + +// 208673 - Sigil of Chains +class spell_dh_sigil_of_chains : public SpellScript +{ + PrepareSpellScript(spell_dh_sigil_of_chains); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DH_SIGIL_OF_CHAINS_SLOW, SPELL_DH_SIGIL_OF_CHAINS_GRIP }); + } + + void HandleEffectHitTarget(SpellEffIndex /*effIndex*/) + { + if (WorldLocation const* loc = GetExplTargetDest()) + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_DH_SIGIL_OF_CHAINS_SLOW, true); + GetHitUnit()->CastSpell(loc->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_GRIP, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dh_sigil_of_chains::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 202138 - Sigil of Chains +struct areatrigger_dh_sigil_of_chains : AreaTriggerAI +{ + areatrigger_dh_sigil_of_chains(AreaTrigger* at) : AreaTriggerAI(at) { } + + void OnRemove() override + { + if (Unit* caster = at->GetCaster()) + { + caster->CastSpell(at->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_VISUAL); + caster->CastSpell(at->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT); + } + } +}; + void AddSC_demon_hunter_spell_scripts() { RegisterAuraScript(spell_dh_chaos_strike); + + new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_SILENCE_AOE>("areatrigger_dh_sigil_of_silence"); + new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_MISERY_AOE>("areatrigger_dh_sigil_of_misery"); + new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_FLAME_AOE>("areatrigger_dh_sigil_of_flame"); + RegisterAreaTriggerAI(areatrigger_dh_sigil_of_chains); + RegisterSpellScript(spell_dh_sigil_of_chains); } |
