Scripts/Spells: Fix demon hunter talent "Collective Anguish"

Closes #30503
This commit is contained in:
aquadeus
2024-12-20 21:35:32 +01:00
committed by Shauren
parent 9226090356
commit 07bf6bff89
3 changed files with 78 additions and 0 deletions

View File

@@ -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');

View File

@@ -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);

View File

@@ -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);