Scripts/Spells: Added proc requirements to a few auras that have SPELL_ATTR3_CAN_PROC_FROM_PROCS attribute

This commit is contained in:
Shauren
2023-05-24 22:10:04 +02:00
parent db55a034fd
commit 092119058b
7 changed files with 444 additions and 1 deletions
@@ -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');
+1 -1
View File
@@ -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);
}
+81
View File
@@ -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);
}