aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_05_24_00_world.sql74
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
-rw-r--r--src/server/scripts/Shadowlands/Torghast/spell_torghast.cpp146
-rw-r--r--src/server/scripts/Shadowlands/shadowlands_script_loader.cpp26
-rw-r--r--src/server/scripts/Shadowlands/spell_covenant.cpp55
-rw-r--r--src/server/scripts/Spells/spell_azerite.cpp61
-rw-r--r--src/server/scripts/Spells/spell_item.cpp81
7 files changed, 444 insertions, 1 deletions
diff --git a/sql/updates/world/master/2023_05_24_00_world.sql b/sql/updates/world/master/2023_05_24_00_world.sql
new file mode 100644
index 00000000000..74b14748fe2
--- /dev/null
+++ b/sql/updates/world/master/2023_05_24_00_world.sql
@@ -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');
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 67c03d45b08..166172dd88a 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -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;
}
}
diff --git a/src/server/scripts/Shadowlands/Torghast/spell_torghast.cpp b/src/server/scripts/Shadowlands/Torghast/spell_torghast.cpp
new file mode 100644
index 00000000000..c9c7e681a77
--- /dev/null
+++ b/src/server/scripts/Shadowlands/Torghast/spell_torghast.cpp
@@ -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);
+}
diff --git a/src/server/scripts/Shadowlands/shadowlands_script_loader.cpp b/src/server/scripts/Shadowlands/shadowlands_script_loader.cpp
new file mode 100644
index 00000000000..c6452c75c37
--- /dev/null
+++ b/src/server/scripts/Shadowlands/shadowlands_script_loader.cpp
@@ -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();
+}
diff --git a/src/server/scripts/Shadowlands/spell_covenant.cpp b/src/server/scripts/Shadowlands/spell_covenant.cpp
new file mode 100644
index 00000000000..e0090db5903
--- /dev/null
+++ b/src/server/scripts/Shadowlands/spell_covenant.cpp
@@ -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);
+}
diff --git a/src/server/scripts/Spells/spell_azerite.cpp b/src/server/scripts/Spells/spell_azerite.cpp
index ffcbe6f1678..826ca9f3071 100644
--- a/src/server/scripts/Spells/spell_azerite.cpp
+++ b/src/server/scripts/Spells/spell_azerite.cpp
@@ -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);
}
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 9a360b6a152..6c16d72b086 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -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);
}