Core/Spells:

* moved Shadowflame to spellscript
* fixed Bane of Havoc
* Backdraft will now fire on cast instead of on hit
This commit is contained in:
Ovahlord committed 2023-06-12 17:11:18 +02:00
1 parent 06d79464d3
commit 322743f5f7
2 files changed
+135

No files matched your search

@@ -0,0 +1,20 @@
-- Shadowflame
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`= 47897;
DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_warl_shadowflame';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(47897, 'spell_warl_shadowflame');
-- Backdraft
UPDATE `spell_proc` SET `SpellPhaseMask`= 0x1, `SpellTypeMask`= 0x1 WHERE `SpellId`= -47258;
-- Bane of Havoc
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_warl_bane_of_havoc',
'spell_warl_bane_of_havoc_tracking_aura');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(80240, 'spell_warl_bane_of_havoc'),
(85466, 'spell_warl_bane_of_havoc_tracking_aura');
DELETE FROM `spell_proc` WHERE `SpellId`= 85466;
INSERT INTO `spell_proc` (`SpellId`, `SpellTypeMask`, `SpellPhaseMask`) VALUES
(85466, 0x1, 0x2);
+115
View File
@@ -37,6 +37,9 @@ enum WarlockSpells
{
SPELL_WARLOCK_AFTERMATH_STUN = 85387,
SPELL_WARLOCK_BANE_OF_DOOM_EFFECT = 18662,
SPELL_WARLOCK_BANE_OF_HAVOC = 80240,
SPELL_WARLOCK_BANE_OF_HAVOC_TRACKING_AURA = 85466,
SPELL_WARLOCK_BANE_OF_HAVOC_DAMAGE = 85455,
SPELL_WARLOCK_BURNING_EMBERS_DAMAGE = 85421,
SPELL_WARLOCK_CREATE_HEALTHSTONE = 34130,
SPELL_WARLOCK_CORRUPTION_TRIGGERED = 87389,
@@ -93,6 +96,7 @@ enum WarlockSpells
SPELL_WARLOCK_SEED_OF_CORRUPTION_VISUAL = 37826,
SPELL_WARLOCK_SIPHON_LIFE_HEAL = 63106,
SPELL_WARLOCK_SHADOW_WARD = 6229,
SPELL_WARLOCK_SHADOWFLAME_PERIODIC = 47960,
SPELL_WARLOCK_SOULBURN_HEALTHSTONE = 79437,
SPELL_WARLOCK_SOULBURN_DEMONIC_CIRCLE = 79438,
SPELL_WARLOCK_SOULBURN_SEARING_PAIN = 79440,
@@ -1696,9 +1700,119 @@ class spell_warl_glyph_of_fear : public AuraScript
}
};
// 47897 - Shadowflame
class spell_warl_shadowflame : public SpellScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_WARLOCK_SHADOWFLAME_PERIODIC });
}
void HandlePeriodicDamageEffect(SpellEffIndex /*effIndex*/)
{
if (Unit* caster = GetCaster())
caster->CastSpell(GetHitUnit(), SPELL_WARLOCK_SHADOWFLAME_PERIODIC, true);
}
void Register() override
{
OnEffectHitTarget.Register(&spell_warl_shadowflame::HandlePeriodicDamageEffect, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
}
};
// 80240 - Bane of Havoc
class spell_warl_bane_of_havoc : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_WARLOCK_BANE_OF_HAVOC_TRACKING_AURA });
}
void ApplyTrackingAura(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
caster->CastSpell(nullptr, SPELL_WARLOCK_BANE_OF_HAVOC_TRACKING_AURA, CastSpellExtraArgs(TRIGGERED_FULL_MASK));
}
void Register() override
{
AfterEffectApply.Register(&spell_warl_bane_of_havoc::ApplyTrackingAura, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
// 85466 - Bane of Havoc
class spell_warl_bane_of_havoc_tracking_aura : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_WARLOCK_BANE_OF_HAVOC_DAMAGE, SPELL_WARLOCK_BANE_OF_HAVOC });
}
void StoreTrackingAuraTargetGuid(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
for (Aura const* aura : GetTarget()->GetSingleCastAuras())
if (aura->GetId() == SPELL_WARLOCK_BANE_OF_HAVOC && aura->GetCasterGUID() == GetTarget()->GetGUID())
if (Unit const* owner = aura->GetUnitOwner())
_trackedTargetGUID = owner->GetGUID();
}
bool CheckProc(ProcEventInfo& eventInfo)
{
// Nothing to track
if (_trackedTargetGUID.IsEmpty() || !eventInfo.GetProcTarget() || eventInfo.GetProcTarget()->GetGUID() == _trackedTargetGUID)
return false;
// No damage to share
if (!eventInfo.GetDamageInfo() || eventInfo.GetDamageInfo()->GetDamage() == 0)
return false;
if (!PrepareProc(eventInfo))
{
_trackedTargetGUID = ObjectGuid::Empty;
_trackedTarget = nullptr;
_trackedDamage = 0;
return false;
}
return true;
}
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
{
GetTarget()->CastSpell(_trackedTarget, SPELL_WARLOCK_BANE_OF_HAVOC_DAMAGE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(_trackedDamage));
}
void Register() override
{
AfterEffectApply.Register(&spell_warl_bane_of_havoc_tracking_aura::StoreTrackingAuraTargetGuid, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
DoCheckProc.Register(&spell_warl_bane_of_havoc_tracking_aura::CheckProc);
OnEffectProc.Register(&spell_warl_bane_of_havoc_tracking_aura::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
}
private:
ObjectGuid _trackedTargetGUID;
Unit* _trackedTarget = nullptr;
int32 _trackedDamage = 0;
bool PrepareProc(ProcEventInfo const& eventInfo)
{
_trackedTarget = ObjectAccessor::GetUnit(*GetTarget(), _trackedTargetGUID);
if (!_trackedTarget)
return false;
AuraEffect const* baneEffect = _trackedTarget->GetAuraEffect(SPELL_WARLOCK_BANE_OF_HAVOC, EFFECT_0, GetCasterGUID());
if (!baneEffect)
return false;
_trackedDamage = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), baneEffect->GetAmount());
return true;
}
};
void AddSC_warlock_spell_scripts()
{
RegisterSpellScript(spell_warl_aftermath);
RegisterSpellScript(spell_warl_bane_of_havoc);
RegisterSpellScript(spell_warl_bane_of_havoc_tracking_aura);
RegisterSpellScript(spell_warl_bane_of_doom);
RegisterSpellScript(spell_warl_banish);
RegisterSpellScript(spell_warl_burning_embers);
@@ -1735,6 +1849,7 @@ void AddSC_warlock_spell_scripts()
RegisterSpellScript(spell_warl_seed_of_corruption_aoe);
RegisterSpellScript(spell_warl_shadow_trance_proc);
RegisterSpellScript(spell_warl_shadow_ward);
RegisterSpellScript(spell_warl_shadowflame);
RegisterSpellScript(spell_warl_soulburn);
RegisterSpellScript(spell_warl_soul_harvest);
RegisterSpellScript(spell_warl_soul_leech);