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:
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);
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user