aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraquadeus <efectokoleos13@gmail.com>2024-12-20 21:35:32 +0100
committerShauren <shauren.trinity@gmail.com>2024-12-20 21:35:32 +0100
commit07bf6bff8946d24b202b20a846cbb9d7267abde5 (patch)
tree60da3de9d2254a3a636d8d0081fbfd3a875d495e
parent92260903567c51e9df11c48655e771a10c66b63f (diff)
Scripts/Spells: Fix demon hunter talent "Collective Anguish"
Closes #30503
-rw-r--r--sql/updates/world/master/2024_12_20_04_world.sql5
-rw-r--r--src/server/game/Spells/SpellMgr.cpp6
-rw-r--r--src/server/scripts/Spells/spell_dh.cpp67
3 files changed, 78 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_12_20_04_world.sql b/sql/updates/world/master/2024_12_20_04_world.sql
new file mode 100644
index 00000000000..d387da6e079
--- /dev/null
+++ b/sql/updates/world/master/2024_12_20_04_world.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dh_collective_anguish', 'spell_dh_collective_anguish_eye_beam');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(212084, 'spell_dh_collective_anguish'),
+(198013, 'spell_dh_collective_anguish'),
+(391057, 'spell_dh_collective_anguish_eye_beam');
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 817dc049f91..657f32df739 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -5071,6 +5071,12 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->_LoadSqrtTargetLimit(5, 0, {}, {});
});
+ // Collective Anguish channel hack (triggered by another channel)
+ ApplySpellFix({ 391057, 393831 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->AttributesEx &= ~SPELL_ATTR1_IS_CHANNELLED;
+ });
+
for (SpellInfo const& s : mSpellInfoMap)
{
SpellInfo* spellInfo = &const_cast<SpellInfo&>(s);
diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp
index eb5d5a6882a..e9dc3f5c2c0 100644
--- a/src/server/scripts/Spells/spell_dh.cpp
+++ b/src/server/scripts/Spells/spell_dh.cpp
@@ -58,6 +58,10 @@ enum DemonHunterSpells
SPELL_DH_CHAOS_STRIKE_OH = 199547,
SPELL_DH_CHAOTIC_TRANSFORMATION = 388112,
SPELL_DH_CHARRED_WARBLADES_HEAL = 213011,
+ SPELL_DH_COLLECTIVE_ANGUISH = 390152,
+ SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM = 391057,
+ SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM_DAMAGE = 391058,
+ SPELL_DH_COLLECTIVE_ANGUISH_FEL_DEVASTATION = 393831,
SPELL_DH_CONSUME_SOUL_HAVOC = 228542,
SPELL_DH_CONSUME_SOUL_HAVOC_DEMON = 228556,
SPELL_DH_CONSUME_SOUL_HAVOC_SHATTERED = 228540,
@@ -285,6 +289,67 @@ private:
uint32 _healAmount = 0;
};
+// Called by 212084 - Fel Devastation and 198013 - Eye Beam
+class spell_dh_collective_anguish : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DH_COLLECTIVE_ANGUISH, SPELL_DH_FEL_DEVASTATION, SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM, SPELL_DH_COLLECTIVE_ANGUISH_FEL_DEVASTATION });
+ }
+
+ bool Load() override
+ {
+ return GetCaster()->HasAura(SPELL_DH_COLLECTIVE_ANGUISH);
+ }
+
+ void HandleEyeBeam() const
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+
+ void HandleFelDevastation() const
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_DH_COLLECTIVE_ANGUISH_FEL_DEVASTATION, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringSpell = GetSpell()
+ });
+ }
+
+ void Register() override
+ {
+ if (m_scriptSpellId == SPELL_DH_FEL_DEVASTATION)
+ AfterCast += SpellCastFn(spell_dh_collective_anguish::HandleEyeBeam);
+ else
+ AfterCast += SpellCastFn(spell_dh_collective_anguish::HandleFelDevastation);
+ }
+};
+
+// 391057 - Eye Beam
+class spell_dh_collective_anguish_eye_beam : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM_DAMAGE });
+ }
+
+ void HandleEffectPeriodic(AuraEffect const* aurEff) const
+ {
+ if (Unit* caster = GetCaster())
+ caster->CastSpell(nullptr, SPELL_DH_COLLECTIVE_ANGUISH_EYE_BEAM_DAMAGE, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
+ .TriggeringAura = aurEff
+ });
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_dh_collective_anguish_eye_beam::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
+ }
+};
+
// Called by 212084 - Fel Devastation
class spell_dh_darkglare_boon : public AuraScript
{
@@ -900,6 +965,8 @@ void AddSC_demon_hunter_spell_scripts()
RegisterSpellScript(spell_dh_chaos_strike);
RegisterSpellScript(spell_dh_chaotic_transformation);
RegisterSpellScript(spell_dh_charred_warblades);
+ RegisterSpellScript(spell_dh_collective_anguish);
+ RegisterSpellScript(spell_dh_collective_anguish_eye_beam);
RegisterSpellScript(spell_dh_darkglare_boon);
RegisterSpellScript(spell_dh_darkness);
RegisterSpellScript(spell_dh_eye_beam);