mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Scripts/Spells: Implement demon hunter talent Sigil of Spite (and the shadowlands covenant ability it was copypasted from - Elysian Decree) (#31394)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
19
sql/updates/world/master/2025_11_14_00_world.sql
Normal file
19
sql/updates/world/master/2025_11_14_00_world.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
DELETE FROM `areatrigger_create_properties` WHERE `Id` IN (18264,26752,26753) AND `IsCustom`=0;
|
||||
INSERT INTO `areatrigger_create_properties` (`Id`, `IsCustom`, `AreaTriggerId`, `IsAreatriggerCustom`, `Flags`, `MoveCurveId`, `ScaleCurveId`, `MorphCurveId`, `FacingCurveId`, `AnimId`, `AnimKitId`, `DecalPropertiesId`, `SpellForVisuals`, `TimeToTargetScale`, `Speed`, `Shape`, `ShapeData0`, `ShapeData1`, `ShapeData2`, `ShapeData3`, `ShapeData4`, `ShapeData5`, `ShapeData6`, `ShapeData7`, `ScriptName`, `VerifiedBuild`) VALUES
|
||||
(18264, 0, 22375, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 1000, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 'at_dh_elysian_decree', 63834), -- Spell: 306830 (Elysian Decree)
|
||||
(26752, 0, 30889, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 1000, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 'areatrigger_dh_sigil_of_spite', 63834), -- Spell: 390163 (Sigil of Spite)
|
||||
(26753, 0, 30889, 0, 0, 0, 0, 0, 0, -1, 0, 0, NULL, 1000, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 'areatrigger_dh_sigil_of_spite', 63834); -- Spell: 389858 (Sigil of Spite)
|
||||
|
||||
DELETE FROM `areatrigger_template` WHERE `Id` IN (22375,30889) AND `IsCustom`=0;
|
||||
INSERT INTO `areatrigger_template` (`Id`, `IsCustom`, `VerifiedBuild`) VALUES
|
||||
(22375, 0, 63834),
|
||||
(30889, 0, 63834);
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dh_repeat_decree_conduit';
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dh_elysian_decree';
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dh_sigil_of_spite';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(307046, 'spell_dh_repeat_decree_conduit'),
|
||||
(389860, 'spell_dh_repeat_decree_conduit'),
|
||||
(307046, 'spell_dh_elysian_decree'),
|
||||
(389860, 'spell_dh_sigil_of_spite');
|
||||
@@ -5458,6 +5458,18 @@ void SpellMgr::LoadSpellInfoTargetCaps()
|
||||
spellInfo->_LoadSqrtTargetLimit(5, 0, 190411, EFFECT_2, {}, {});
|
||||
});
|
||||
|
||||
// Elysian Decree (Kyrian)
|
||||
ApplySpellFix({ 307046 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->_LoadSqrtTargetLimit(5, 0, 306830, EFFECT_0, {}, {});
|
||||
});
|
||||
|
||||
// Sigil of Spite
|
||||
ApplySpellFix({ 389860 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->_LoadSqrtTargetLimit(5, 0, 390163, EFFECT_0, {}, {});
|
||||
});
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded SpellInfo target caps in {} ms", GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "AreaTrigger.h"
|
||||
#include "AreaTriggerAI.h"
|
||||
#include "Containers.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "PathGenerator.h"
|
||||
#include "Player.h"
|
||||
@@ -94,6 +95,8 @@ enum DemonHunterSpells
|
||||
SPELL_DH_DEMONIC_TRAMPLE_DMG = 208645,
|
||||
SPELL_DH_DEMONIC_TRAMPLE_STUN = 213491,
|
||||
SPELL_DH_DEMONS_BITE = 162243,
|
||||
SPELL_DH_ELYSIAN_DECREE = 306830,
|
||||
SPELL_DH_ELYSIAN_DECREE_AOE = 307046,
|
||||
SPELL_DH_ESSENCE_BREAK_DEBUFF = 320338,
|
||||
SPELL_DH_EYE_BEAM = 198013,
|
||||
SPELL_DH_EYE_BEAM_DAMAGE = 198030,
|
||||
@@ -170,6 +173,7 @@ enum DemonHunterSpells
|
||||
SPELL_DH_RAIN_OF_CHAOS = 205628,
|
||||
SPELL_DH_RAIN_OF_CHAOS_IMPACT = 232538,
|
||||
SPELL_DH_RAZOR_SPIKES = 210003,
|
||||
SPELL_DH_REPEAT_DECREE_CONDUIT = 339895,
|
||||
SPELL_DH_RESTLESS_HUNTER_TALENT = 390142,
|
||||
SPELL_DH_RESTLESS_HUNTER_BUFF = 390212,
|
||||
SPELL_DH_SEVER = 235964,
|
||||
@@ -177,8 +181,8 @@ enum DemonHunterSpells
|
||||
SPELL_DH_SHATTER_SOUL_1 = 209981,
|
||||
SPELL_DH_SHATTER_SOUL_2 = 210038,
|
||||
SPELL_DH_SHATTERED_SOUL = 226258,
|
||||
SPELL_DH_SHATTERED_SOUL_LESSER_SOUL_FRAGMENT_1 = 228533,
|
||||
SPELL_DH_SHATTERED_SOUL_LESSER_SOUL_FRAGMENT_2 = 237867,
|
||||
SPELL_DH_SHATTERED_SOUL_LESSER_RIGHT = 228533,
|
||||
SPELL_DH_SHATTERED_SOUL_LESSER_LEFT = 237867,
|
||||
SPELL_DH_SHEAR = 203782,
|
||||
SPELL_DH_SIGIL_OF_CHAINS_AREA_SELECTOR = 204834,
|
||||
SPELL_DH_SIGIL_OF_CHAINS_GRIP = 208674,
|
||||
@@ -195,6 +199,8 @@ enum DemonHunterSpells
|
||||
SPELL_DH_SIGIL_OF_MISERY_AOE = 207685,
|
||||
SPELL_DH_SIGIL_OF_SILENCE = 204490,
|
||||
SPELL_DH_SIGIL_OF_SILENCE_AOE = 204490,
|
||||
SPELL_DH_SIGIL_OF_SPITE = 390163,
|
||||
SPELL_DH_SIGIL_OF_SPITE_AOE = 389860,
|
||||
SPELL_DH_SOUL_BARRIER = 227225,
|
||||
SPELL_DH_SOUL_CLEAVE = 228477,
|
||||
SPELL_DH_SOUL_CLEAVE_DMG = 228478,
|
||||
@@ -844,6 +850,49 @@ class spell_dh_demon_spikes : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 307046 - Elysian Decree (Kyrian)
|
||||
// 389860 - Sigil of Spite
|
||||
class spell_dh_elysian_decree : public SpellScript
|
||||
{
|
||||
public:
|
||||
spell_dh_elysian_decree(uint32 primarySpellId) : _primarySpellId(primarySpellId) { }
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellEffect({ { _primarySpellId, EFFECT_2 } })
|
||||
&& sSpellMgr->AssertSpellInfo(_primarySpellId, DIFFICULTY_NONE)->GetEffect(EFFECT_2).IsEffect(SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
_maxFragmentsToCreate = sSpellMgr->AssertSpellInfo(_primarySpellId, GetCastDifficulty())->GetEffect(EFFECT_2).CalcValue(GetCaster());
|
||||
_fragmentsToCreate = _maxFragmentsToCreate;
|
||||
return true;
|
||||
}
|
||||
|
||||
void CreateLesserSoulFragments(SpellEffIndex effIndex)
|
||||
{
|
||||
// spawn more than 1 fragment per target if there are less than 3 total targets
|
||||
int32 fragments = 1 + std::max(int32(_maxFragmentsToCreate - GetUnitTargetCountForEffect(effIndex)), 0);
|
||||
fragments = std::min(fragments, _fragmentsToCreate);
|
||||
|
||||
for (int32 i = 0; i < fragments; ++i)
|
||||
GetHitUnit()->CastSpell(GetCaster(), Trinity::Containers::SelectRandomContainerElement(std::array{ SPELL_DH_SHATTERED_SOUL_LESSER_RIGHT, SPELL_DH_SHATTERED_SOUL_LESSER_LEFT }), TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
|
||||
_fragmentsToCreate -= fragments;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_dh_elysian_decree::CreateLesserSoulFragments, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32 _primarySpellId;
|
||||
int32 _maxFragmentsToCreate = 0;
|
||||
int32 _fragmentsToCreate = 0;
|
||||
};
|
||||
|
||||
// 258860 - Essence Break
|
||||
class spell_dh_essence_break : public SpellScript
|
||||
{
|
||||
@@ -1449,6 +1498,25 @@ class spell_dh_glide_timer : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 339895 - Repeat Decree (attached to 307046 - Elysian Decree and 389860 - Sigil of Spite)
|
||||
class spell_dh_repeat_decree_conduit : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_DH_REPEAT_DECREE_CONDUIT });
|
||||
}
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return !GetCaster()->HasAura(SPELL_DH_REPEAT_DECREE_CONDUIT);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunch += SpellEffectFn(spell_dh_repeat_decree_conduit::PreventHitDefaultEffect, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
// Called by 162264 - Metamorphosis
|
||||
class spell_dh_restless_hunter : public AuraScript
|
||||
{
|
||||
@@ -1578,6 +1646,7 @@ class spell_dh_soul_furnace_conduit : public AuraScript
|
||||
// 204596 - Sigil of Flame
|
||||
// 207684 - Sigil of Misery
|
||||
// 202137 - Sigil of Silence
|
||||
// 390163 - Sigil of Spite
|
||||
template<uint32 TriggerSpellId, uint32 TriggerSpellId2 = 0>
|
||||
struct areatrigger_dh_generic_sigil : AreaTriggerAI
|
||||
{
|
||||
@@ -1587,13 +1656,20 @@ struct areatrigger_dh_generic_sigil : AreaTriggerAI
|
||||
{
|
||||
if (Unit* caster = at->GetCaster())
|
||||
{
|
||||
caster->CastSpell(at->GetPosition(), TriggerSpellId);
|
||||
caster->CastSpell(at->GetPosition(), TriggerSpellId, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
if constexpr (TriggerSpellId2 != 0)
|
||||
caster->CastSpell(at->GetPosition(), TriggerSpellId2);
|
||||
caster->CastSpell(at->GetPosition(), TriggerSpellId2, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
using at_dh_elysian_decree = areatrigger_dh_generic_sigil<SPELL_DH_ELYSIAN_DECREE_AOE>;
|
||||
using areatrigger_dh_sigil_of_chains = areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT, SPELL_DH_SIGIL_OF_CHAINS_VISUAL>;
|
||||
using areatrigger_dh_sigil_of_flame = areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_FLAME_AOE, SPELL_DH_SIGIL_OF_FLAME_VISUAL>;
|
||||
using areatrigger_dh_sigil_of_silence = areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_SILENCE_AOE>;
|
||||
using areatrigger_dh_sigil_of_misery = areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_MISERY_AOE>;
|
||||
using areatrigger_dh_sigil_of_spite = areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_SPITE_AOE>;
|
||||
|
||||
// 208673 - Sigil of Chains
|
||||
class spell_dh_sigil_of_chains : public SpellScript
|
||||
{
|
||||
@@ -1755,6 +1831,8 @@ void AddSC_demon_hunter_spell_scripts()
|
||||
RegisterSpellScriptWithArgs(spell_dh_demonic, "spell_dh_demonic_havoc", SPELL_DH_METAMORPHOSIS_TRANSFORM);
|
||||
RegisterSpellScriptWithArgs(spell_dh_demonic, "spell_dh_demonic_vengeance", SPELL_DH_METAMORPHOSIS_VENGEANCE_TRANSFORM);
|
||||
RegisterSpellScript(spell_dh_demon_spikes);
|
||||
RegisterSpellScriptWithArgs(spell_dh_elysian_decree, "spell_dh_elysian_decree", SPELL_DH_ELYSIAN_DECREE);
|
||||
RegisterAreaTriggerAI(at_dh_elysian_decree);
|
||||
RegisterSpellScript(spell_dh_essence_break);
|
||||
RegisterSpellScript(spell_dh_eye_beam);
|
||||
RegisterSpellScript(spell_dh_feast_of_souls);
|
||||
@@ -1771,9 +1849,11 @@ void AddSC_demon_hunter_spell_scripts()
|
||||
RegisterSpellScript(spell_dh_know_your_enemy);
|
||||
RegisterSpellScript(spell_dh_last_resort);
|
||||
RegisterSpellScript(spell_dh_monster_rising);
|
||||
RegisterSpellScript(spell_dh_repeat_decree_conduit);
|
||||
RegisterSpellScript(spell_dh_restless_hunter);
|
||||
RegisterSpellScript(spell_dh_shattered_destiny);
|
||||
RegisterSpellScript(spell_dh_sigil_of_chains);
|
||||
RegisterSpellScriptWithArgs(spell_dh_elysian_decree, "spell_dh_sigil_of_spite", SPELL_DH_SIGIL_OF_SPITE);
|
||||
RegisterSpellScript(spell_dh_student_of_suffering);
|
||||
RegisterSpellScript(spell_dh_tactical_retreat);
|
||||
RegisterSpellScript(spell_dh_unhindered_assault);
|
||||
@@ -1781,10 +1861,11 @@ void AddSC_demon_hunter_spell_scripts()
|
||||
RegisterSpellScript(spell_dh_violent_transformation);
|
||||
|
||||
RegisterAreaTriggerAI(areatrigger_dh_darkness);
|
||||
new GenericAreaTriggerEntityScript<areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT, SPELL_DH_SIGIL_OF_CHAINS_VISUAL>>("areatrigger_dh_sigil_of_chains");
|
||||
new GenericAreaTriggerEntityScript<areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_FLAME_AOE, SPELL_DH_SIGIL_OF_FLAME_VISUAL>>("areatrigger_dh_sigil_of_flame");
|
||||
new GenericAreaTriggerEntityScript<areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_SILENCE_AOE>>("areatrigger_dh_sigil_of_silence");
|
||||
new GenericAreaTriggerEntityScript<areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_MISERY_AOE>>("areatrigger_dh_sigil_of_misery");
|
||||
RegisterAreaTriggerAI(areatrigger_dh_sigil_of_chains);
|
||||
RegisterAreaTriggerAI(areatrigger_dh_sigil_of_flame);
|
||||
RegisterAreaTriggerAI(areatrigger_dh_sigil_of_silence);
|
||||
RegisterAreaTriggerAI(areatrigger_dh_sigil_of_misery);
|
||||
RegisterAreaTriggerAI(areatrigger_dh_sigil_of_spite);
|
||||
|
||||
// Havoc
|
||||
|
||||
|
||||
Reference in New Issue
Block a user