diff --git a/Source/Scripts/Spells/DemonHunter.cs b/Source/Scripts/Spells/DemonHunter.cs index 6c17c8f9a..4d5d3c916 100644 --- a/Source/Scripts/Spells/DemonHunter.cs +++ b/Source/Scripts/Spells/DemonHunter.cs @@ -19,12 +19,20 @@ using Framework.Constants; using Game.Entities; using Game.Scripting; using Game.Spells; +using Game.AI; namespace Scripts.Spells.DemonHunter { struct SpellIds { public const uint ChaosStrikeEnergize = 193840; + public const uint SigilOfChainsGrip = 208674; + public const uint SigilOfChainsSlow = 204843; + public const uint SigilOfChainsTargetSelect = 204834; + public const uint SigilOfChainsVisual = 208673; + public const uint SigilOfFlameAoe = 204598; + public const uint SigilOfMiseryAoe = 207685; + public const uint SigilOfSilenceAoe = 204490; } [Script] // 197125 - Chaos Strike @@ -49,4 +57,82 @@ namespace Scripts.Spells.DemonHunter OnEffectProc.Add(new EffectProcHandler(HandleEffectProc, 0, AuraType.ProcTriggerSpell)); } } + + // 204596 - Sigil of Flame + // 207684 - Sigil of Misery + // 202137 - Sigil of Silence + [Script("areatrigger_dh_sigil_of_silence", SpellIds.SigilOfSilenceAoe)] + [Script("areatrigger_dh_sigil_of_misery", SpellIds.SigilOfMiseryAoe)] + [Script("areatrigger_dh_sigil_of_flame", SpellIds.SigilOfFlameAoe)] + class areatrigger_dh_generic_sigil : AreaTriggerEntityScript + { + uint _trigger; + + public areatrigger_dh_generic_sigil(string script, uint trigger) : base(script) + { + _trigger = trigger; + } + + class areatrigger_dh_generic_sigilAI : AreaTriggerAI + { + uint _trigger; + + public areatrigger_dh_generic_sigilAI(AreaTrigger at, uint trigger) : base(at) + { + _trigger = trigger; + } + + public override void OnRemove() + { + Unit caster = at.GetCaster(); + if (caster != null) + caster.CastSpell(at.GetPosition(), _trigger, new CastSpellExtraArgs()); + } + } + + public override AreaTriggerAI GetAI(AreaTrigger at) + { + return new areatrigger_dh_generic_sigilAI(at, _trigger); + } + } + + [Script] // 208673 - Sigil of Chains + class spell_dh_sigil_of_chains : SpellScript + { + public override bool Validate(SpellInfo spellInfo) + { + return ValidateSpellInfo(SpellIds.SigilOfChainsSlow, SpellIds.SigilOfChainsGrip); + } + + void HandleEffectHitTarget(uint effIndex) + { + WorldLocation loc = GetExplTargetDest(); + if (loc != null) + { + GetCaster().CastSpell(GetHitUnit(), SpellIds.SigilOfChainsSlow, new CastSpellExtraArgs(true)); + GetHitUnit().CastSpell(loc.GetPosition(), SpellIds.SigilOfChainsGrip, new CastSpellExtraArgs(true)); + } + } + + public override void Register() + { + OnEffectHitTarget.Add(new EffectHandler(HandleEffectHitTarget, 0, SpellEffectName.Dummy)); + } + } + + [Script] // 202138 - Sigil of Chains + class areatrigger_dh_sigil_of_chains : AreaTriggerAI + { + public areatrigger_dh_sigil_of_chains(AreaTrigger at) : base(at) { } + + public override void OnRemove() + { + Unit caster = at.GetCaster(); + if (caster != null) + { + caster.CastSpell(at.GetPosition(), SpellIds.SigilOfChainsVisual, new CastSpellExtraArgs()); + caster.CastSpell(at.GetPosition(), SpellIds.SigilOfChainsTargetSelect, new CastSpellExtraArgs()); + } + } + } } 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 000000000..10f87d9d7 --- /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');