Scripts/Spells: Added proc requirements to a few auras that have SPELL_ATTR3_CAN_PROC_FROM_PROCS attribute
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
DELETE FROM `spell_proc` WHERE `SpellId` IN (300771,300796,300805,300813,300913,301576,302696,302776,303358,303361,303892,303893,303919,304063,304471,304628,304640,304697,304711,304715,304992,304996,304998,305002,
|
||||
305004,305006,305054,305055,305271,305723,306563,306571,306573,306575,307443,308917,309563,309566,313568,315175,315184,316308,316799,316815,317257,318212,318214,318218,318220,320659,320660,320925,323916,325687,326376);
|
||||
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
|
||||
(300771,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Blade of the Lifetaker
|
||||
(300796,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x1,0x0,0x0,0x0,0,0,0,0), -- Touch of the Unseen
|
||||
(300805,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x3,0x0,0x0,0,0,0,0), -- Swirling Tides
|
||||
(300813,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Mystical Bulwark
|
||||
(300913,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Highborne Compendium of Storms
|
||||
(301576,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Shiver Venom
|
||||
(302696,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Void Negotiation
|
||||
(302776,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Luminous Algae
|
||||
(303358,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Venomous Bolt
|
||||
(303361,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Shivering Lance
|
||||
(303892,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0xC,0,0,0,0), -- Conflict (Azerite Essence), disabled proc, handled by linked aura 305723
|
||||
(303893,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x2,0x0,0x0,0,0,0,0), -- Carnivore of the Deep
|
||||
(303919,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Eel-ectrified Defenses
|
||||
(304063,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Conductive
|
||||
(304471,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Arcane Tempest
|
||||
(304628,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Waveblade Discipline
|
||||
(304640,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Frost Blast
|
||||
(304697,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Conch Strike
|
||||
(304711,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Sharp Fins
|
||||
(304715,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Tidal Droplet
|
||||
(304992,0x04,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Band of Deep Burns
|
||||
(304996,0x10,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Frostchipper
|
||||
(304998,0x08,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Stormcycle Peridot
|
||||
(305002,0x20,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Shadowed Iris
|
||||
(305004,0x02,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Words of Incomprehensible Glory
|
||||
(305006,0x40,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Scroll of Elchaver
|
||||
(305054,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Yel'Shir's Powerglove
|
||||
(305055,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Yel'Shir's Powerglove
|
||||
(305271,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Tidal Droplet
|
||||
(305723,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x5,0x2,0x1403,0x0,0x0,0,0,0,0), -- Strife (Azerite Essence)
|
||||
(306563,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Kyrian Blessing
|
||||
(306571,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Maldraxxian Repayment
|
||||
(306573,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Gift of Ardenweald
|
||||
(306575,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Venthyr's Gratitude
|
||||
(307443,0x00,3,0x30E21AF7,0x01008244,0x002860A5,0xA7A80041,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Radiant Spark (Kyrian)
|
||||
(308917,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0), -- Lei of the Lifegiver
|
||||
(309563,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Black Bruise
|
||||
(309566,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Necrotic Touch
|
||||
(313568,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Dragon's Flight - Cover
|
||||
(315175,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Grasping Tendrils
|
||||
(315184,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x403,0x0,0x0,0,0,0,0), -- Grand Delusions
|
||||
(316308,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x0,0x1000,0x0,0x0,0,0,0,0), -- Maddening Eruption
|
||||
(316799,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Ineffable Truth
|
||||
(316815,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Twisted Appendage
|
||||
(317257,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Infinite Stars
|
||||
(318212,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Surging Vitality
|
||||
(318214,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Honed Mind
|
||||
(318218,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x402,0x0,0x0,0,0,0,0), -- Deadly Momentum
|
||||
(318220,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Racing Pulse
|
||||
(320659,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x403,0x0,0x0,0,0,0,0), -- Niya's Tools: Burrs
|
||||
(320660,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x1000,0x0,0x0,0,0,0,0), -- Niya's Tools: Poison
|
||||
(320925,0x00,3,0x00010000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x4,0x2,0x0,0x0,0x0,0,0,0,0), -- Dimensional Blade
|
||||
(323916,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x0,0x3,0x0,0x0,0,0,0,0), -- Sulfuric Emission
|
||||
(325687,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x3,0x2,0x403,0x0,0x0,0,0,0,0), -- Primalist's Kelpling
|
||||
(326376,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x403,0x0,0x0,0,0,0,0); -- Rejuvenating Serum
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_torghast_blade_of_the_lifetaker','spell_torghast_touch_of_the_unseen','spell_item_shiver_venom_crossbow','spell_item_shiver_venom_lance',
|
||||
'spell_item_phial_of_the_arcane_tempest_damage','spell_item_phial_of_the_arcane_tempest_periodic','spell_item_conflict_rank3','spell_torghast_yelshirs_powerglove','spell_item_corruption_grasping_tendrils',
|
||||
'spell_torghast_dimensional_blade','spell_soulbind_sulfuric_emission');
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(300771,'spell_torghast_blade_of_the_lifetaker'),
|
||||
(300796,'spell_torghast_touch_of_the_unseen'),
|
||||
(303358,'spell_item_shiver_venom_crossbow'),
|
||||
(303361,'spell_item_shiver_venom_lance'),
|
||||
(302774,'spell_item_phial_of_the_arcane_tempest_damage'),
|
||||
(302769,'spell_item_phial_of_the_arcane_tempest_periodic'),
|
||||
(305723,'spell_item_conflict_rank3'),
|
||||
(305060,'spell_torghast_yelshirs_powerglove'),
|
||||
(315176,'spell_item_corruption_grasping_tendrils'),
|
||||
(321706,'spell_torghast_dimensional_blade'),
|
||||
(323916,'spell_soulbind_sulfuric_emission');
|
||||
@@ -1784,7 +1784,7 @@ void SpellMgr::LoadSpellProcs()
|
||||
if (spellEffectInfo.IsAura())
|
||||
{
|
||||
TC_LOG_ERROR("sql.sql", "Spell Id {} has DBC ProcFlags 0x{:X} 0x{:X}, but it's of non-proc aura type, it probably needs an entry in `spell_proc` table to be handled correctly.",
|
||||
spellInfo.Id, spellInfo.ProcFlags[0], spellInfo.ProcFlags[1]);
|
||||
spellInfo.Id, uint32(spellInfo.ProcFlags[0]), uint32(spellInfo.ProcFlags[1]));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellHistory.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "Unit.h"
|
||||
|
||||
// 300771 - Blade of the Lifetaker
|
||||
class spell_torghast_blade_of_the_lifetaker : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_torghast_blade_of_the_lifetaker);
|
||||
|
||||
void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
procInfo.GetActor()->CastSpell(procInfo.GetProcTarget(), aurEff->GetSpellEffectInfo().TriggerSpell, CastSpellExtraArgs(aurEff)
|
||||
.AddSpellMod(SPELLVALUE_BASE_POINT0, GetTarget()->CountPctFromMaxHealth(aurEff->GetAmount()))
|
||||
.SetTriggeringSpell(procInfo.GetProcSpell()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_torghast_blade_of_the_lifetaker::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
// 300796 - Touch of the Unseen
|
||||
class spell_torghast_touch_of_the_unseen : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_torghast_touch_of_the_unseen);
|
||||
|
||||
static constexpr uint32 SPELL_DOOR_OF_SHADOWS = 300728;
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_DOOR_OF_SHADOWS });
|
||||
}
|
||||
|
||||
bool CheckProc(ProcEventInfo& procInfo)
|
||||
{
|
||||
return procInfo.GetSpellInfo() && procInfo.GetSpellInfo()->Id == SPELL_DOOR_OF_SHADOWS;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
procInfo.GetActor()->CastSpell(procInfo.GetProcTarget(), aurEff->GetSpellEffectInfo().TriggerSpell, CastSpellExtraArgs(aurEff)
|
||||
.AddSpellMod(SPELLVALUE_BASE_POINT0, GetTarget()->CountPctFromMaxHealth(aurEff->GetAmount()))
|
||||
.SetTriggeringSpell(procInfo.GetProcSpell()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_torghast_touch_of_the_unseen::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_torghast_touch_of_the_unseen::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
// 305060 - Yel'Shir's Powerglove
|
||||
class spell_torghast_yelshirs_powerglove : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_torghast_yelshirs_powerglove);
|
||||
|
||||
void HandleEffect(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (SpellInfo const* triggeringSpell = GetTriggeringSpell())
|
||||
if (Aura const* triggerAura = GetCaster()->GetAura(triggeringSpell->Id))
|
||||
SetEffectValue(GetEffectValue() * triggerAura->GetStackAmount());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectLaunchTarget += SpellEffectFn(spell_torghast_yelshirs_powerglove::HandleEffect, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
// 321706 - Dimensional Blade
|
||||
class spell_torghast_dimensional_blade : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_torghast_dimensional_blade);
|
||||
|
||||
static constexpr uint32 SPELL_MAGE_BLINK = 1953;
|
||||
static constexpr uint32 SPELL_MAGE_SHIMMER = 212653;
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_MAGE_BLINK, SPELL_MAGE_SHIMMER });
|
||||
}
|
||||
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
if (!targets.empty())
|
||||
{
|
||||
GetCaster()->GetSpellHistory()->RestoreCharge(sSpellMgr->AssertSpellInfo(SPELL_MAGE_BLINK, DIFFICULTY_NONE)->ChargeCategoryId);
|
||||
GetCaster()->GetSpellHistory()->RestoreCharge(sSpellMgr->AssertSpellInfo(SPELL_MAGE_SHIMMER, DIFFICULTY_NONE)->ChargeCategoryId);
|
||||
}
|
||||
|
||||
// filter targets by entry here and not with conditions table because we need to know if any enemy was hit for charge restoration, not just mawrats
|
||||
targets.remove_if([](WorldObject const* target)
|
||||
{
|
||||
switch (target->GetEntry())
|
||||
{
|
||||
case 151353: // Mawrat
|
||||
case 179458: // Protective Mawrat
|
||||
case 154030: // Oddly Large Mawrat
|
||||
case 169871: // Hungry Mawrat
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_torghast_dimensional_blade::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_torghast_spell_scripts()
|
||||
{
|
||||
RegisterSpellScript(spell_torghast_blade_of_the_lifetaker);
|
||||
RegisterSpellScript(spell_torghast_touch_of_the_unseen);
|
||||
RegisterSpellScript(spell_torghast_yelshirs_powerglove);
|
||||
RegisterSpellScript(spell_torghast_dimensional_blade);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// This is where scripts' loading functions should be declared:
|
||||
void AddSC_covenant_spell_scripts();
|
||||
void AddSC_torghast_spell_scripts();
|
||||
|
||||
void AddShadowlandsScripts()
|
||||
{
|
||||
AddSC_covenant_spell_scripts();
|
||||
AddSC_torghast_spell_scripts();
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
#include "Unit.h"
|
||||
|
||||
// 323916 - Sulfuric Emission
|
||||
class spell_soulbind_sulfuric_emission : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_soulbind_sulfuric_emission);
|
||||
|
||||
static constexpr uint32 SPELL_SULFURIC_EMISSION_COOLDOWN_AURA = 347684;
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SULFURIC_EMISSION_COOLDOWN_AURA });
|
||||
}
|
||||
|
||||
bool CheckProc(AuraEffect const* aurEff, ProcEventInfo& procInfo)
|
||||
{
|
||||
if (!procInfo.GetProcTarget()->HealthBelowPct(aurEff->GetAmount()))
|
||||
return false;
|
||||
|
||||
if (procInfo.GetProcTarget()->HasAura(SPELL_SULFURIC_EMISSION_COOLDOWN_AURA))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckEffectProc += AuraCheckEffectProcFn(spell_soulbind_sulfuric_emission::CheckProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_covenant_spell_scripts()
|
||||
{
|
||||
RegisterSpellScript(spell_soulbind_sulfuric_emission);
|
||||
}
|
||||
@@ -534,6 +534,41 @@ class spell_item_conflict_wearer_on_stun_proc : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 305723 - Strife (Azerite Essence)
|
||||
class spell_item_conflict_rank3 : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_conflict_rank3);
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
if (eventInfo.GetHitMask() & (PROC_HIT_INTERRUPT | PROC_HIT_DISPEL))
|
||||
return true;
|
||||
|
||||
Spell const* procSpell = eventInfo.GetProcSpell();
|
||||
if (!procSpell)
|
||||
return false;
|
||||
|
||||
bool isCrowdControl = procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_CONFUSE)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_FEAR)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_PACIFY)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_SILENCE)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_PACIFY_SILENCE)
|
||||
|| procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT_2);
|
||||
|
||||
if (!isCrowdControl)
|
||||
return false;
|
||||
|
||||
return eventInfo.GetActionTarget()->HasAura([&](Aura const* aura) { return aura->GetCastId() == procSpell->m_castId; });
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_item_conflict_rank3::CheckProc);
|
||||
}
|
||||
};
|
||||
|
||||
// 277253 - Heart of Azeroth
|
||||
class spell_item_heart_of_azeroth : public AuraScript
|
||||
{
|
||||
@@ -568,6 +603,29 @@ class spell_item_heart_of_azeroth : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
// 315176 - Grasping Tendrils
|
||||
class spell_item_corruption_grasping_tendrils : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_corruption_grasping_tendrils);
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetUnitOwner()->IsPlayer();
|
||||
}
|
||||
|
||||
void CalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
|
||||
{
|
||||
Player* player = GetUnitOwner()->ToPlayer();
|
||||
amount = std::clamp(10.0f + player->GetRatingBonusValue(CR_CORRUPTION) - player->GetRatingBonusValue(CR_CORRUPTION_RESISTANCE), 0.0f, 99.0f);
|
||||
canBeRecalculated = false;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_corruption_grasping_tendrils::CalcAmount, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_azerite_item_spell_scripts()
|
||||
{
|
||||
RegisterSpellScript(spell_azerite_gen_aura_calc_from_2nd_effect_triggered_spell);
|
||||
@@ -588,6 +646,9 @@ void AddSC_azerite_item_spell_scripts()
|
||||
RegisterSpellScript(spell_item_echoing_blades_damage);
|
||||
RegisterSpellScript(spell_item_hour_of_reaping);
|
||||
RegisterSpellScript(spell_item_conflict_wearer_on_stun_proc);
|
||||
RegisterSpellScript(spell_item_conflict_rank3);
|
||||
|
||||
RegisterSpellScript(spell_item_heart_of_azeroth);
|
||||
|
||||
RegisterSpellScript(spell_item_corruption_grasping_tendrils);
|
||||
}
|
||||
|
||||
@@ -4763,6 +4763,83 @@ class spell_item_zanjir_scaleguard_greatcloak : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
enum ShiverVenomSpell : uint32
|
||||
{
|
||||
SPELL_SHIVER_VENOM = 301624,
|
||||
SPELL_SHIVERING_BOLT = 303559,
|
||||
SPELL_VENOMOUS_LANCE = 303562
|
||||
};
|
||||
|
||||
// 303358 Venomous Bolt
|
||||
// 303361 Shivering Lance
|
||||
class spell_item_shiver_venom_weapon_proc : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_shiver_venom_weapon_proc);
|
||||
|
||||
public:
|
||||
spell_item_shiver_venom_weapon_proc(ShiverVenomSpell additionalProcSpellId) : _additionalProcSpellId(additionalProcSpellId) { }
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SHIVER_VENOM, _additionalProcSpellId });
|
||||
}
|
||||
|
||||
void HandleAdditionalProc(AuraEffect* aurEff, ProcEventInfo& procInfo)
|
||||
{
|
||||
if (procInfo.GetProcTarget()->HasAura(SPELL_SHIVER_VENOM))
|
||||
procInfo.GetActor()->CastSpell(procInfo.GetProcTarget(), _additionalProcSpellId, CastSpellExtraArgs(aurEff)
|
||||
.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount())
|
||||
.SetTriggeringSpell(procInfo.GetProcSpell()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectProc += AuraEffectProcFn(spell_item_shiver_venom_weapon_proc::HandleAdditionalProc, EFFECT_1, SPELL_AURA_DUMMY);
|
||||
}
|
||||
|
||||
private:
|
||||
ShiverVenomSpell _additionalProcSpellId;
|
||||
};
|
||||
|
||||
// 302774 - Arcane Tempest
|
||||
class spell_item_phial_of_the_arcane_tempest_damage : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_item_phial_of_the_arcane_tempest_damage);
|
||||
|
||||
void ModifyStacks()
|
||||
{
|
||||
if (GetUnitTargetCountForEffect(EFFECT_0) != 1 || !GetTriggeringSpell())
|
||||
return;
|
||||
|
||||
if (AuraEffect* aurEff = GetCaster()->GetAuraEffect(GetTriggeringSpell()->Id, EFFECT_0))
|
||||
{
|
||||
aurEff->GetBase()->ModStackAmount(1, AURA_REMOVE_NONE, false);
|
||||
aurEff->CalculatePeriodic(GetCaster(), false);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterCast += SpellCastFn(spell_item_phial_of_the_arcane_tempest_damage::ModifyStacks);
|
||||
}
|
||||
};
|
||||
|
||||
// 302769 - Arcane Tempest
|
||||
class spell_item_phial_of_the_arcane_tempest_periodic : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_item_phial_of_the_arcane_tempest_periodic);
|
||||
|
||||
void CalculatePeriod(AuraEffect const* /*aurEff*/, bool& /*isPeriodic*/, int32& period)
|
||||
{
|
||||
period -= (GetStackAmount() - 1) * 300;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_item_phial_of_the_arcane_tempest_periodic::CalculatePeriod, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_item_spell_scripts()
|
||||
{
|
||||
// 23074 Arcanite Dragonling
|
||||
@@ -4913,4 +4990,8 @@ void AddSC_item_spell_scripts()
|
||||
RegisterSpellScript(spell_item_seeping_scourgewing_aoe_check);
|
||||
RegisterSpellScript(spell_item_grips_of_forsaken_sanity);
|
||||
RegisterSpellScript(spell_item_zanjir_scaleguard_greatcloak);
|
||||
RegisterSpellScriptWithArgs(spell_item_shiver_venom_weapon_proc, "spell_item_shiver_venom_crossbow", SPELL_SHIVERING_BOLT);
|
||||
RegisterSpellScriptWithArgs(spell_item_shiver_venom_weapon_proc, "spell_item_shiver_venom_lance", SPELL_VENOMOUS_LANCE);
|
||||
RegisterSpellScript(spell_item_phial_of_the_arcane_tempest_damage);
|
||||
RegisterSpellScript(spell_item_phial_of_the_arcane_tempest_periodic);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user