aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2025-11-04 23:37:06 +0200
committerGitHub <noreply@github.com>2025-11-04 22:37:06 +0100
commitd1a2f20b56aebc220b48560dfcd0e6bb72e90f7e (patch)
tree1492bf52e03333d62853dcd41970cd4595fad6f9
parent899ac9e04e84192297fdd06278a8a0643f70b47d (diff)
Scripts/Spells: Migrate some spell linked spells to spell scripts (#31279)
-rw-r--r--sql/updates/world/3.3.5/2025_11_04_00_world.sql150
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp28
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp30
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp27
-rw-r--r--src/server/scripts/Events/midsummer.cpp86
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp44
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_eck.cpp27
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp31
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp31
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp84
-rw-r--r--src/server/scripts/Northrend/zone_icecrown.cpp77
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp29
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp31
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp29
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp35
-rw-r--r--src/server/scripts/Spells/spell_item.cpp142
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp58
17 files changed, 915 insertions, 24 deletions
diff --git a/sql/updates/world/3.3.5/2025_11_04_00_world.sql b/sql/updates/world/3.3.5/2025_11_04_00_world.sql
new file mode 100644
index 00000000000..a2095658886
--- /dev/null
+++ b/sql/updates/world/3.3.5/2025_11_04_00_world.sql
@@ -0,0 +1,150 @@
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 70653;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_dragonblight_lich_king_zap_player';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(70653, 'spell_dragonblight_lich_king_zap_player');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (69377,69378,69381);
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_item_runescroll_of_fortitude',
+'spell_item_drums_of_forgotten_kings',
+'spell_item_drums_of_the_wild');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(69377, 'spell_item_runescroll_of_fortitude'),
+(69378, 'spell_item_drums_of_forgotten_kings'),
+(69381, 'spell_item_drums_of_the_wild');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 61613;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_grizzly_hills_ganjo_ressurection';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(61613, 'spell_grizzly_hills_ganjo_ressurection');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 45661;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_felmyst_encapsulate';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(45661, 'spell_felmyst_encapsulate');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (32096,32098);
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_item_thrallmar_and_honor_hold_favor';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(32096, 'spell_item_thrallmar_and_honor_hold_favor'),
+(32098, 'spell_item_thrallmar_and_honor_hold_favor');
+
+-- Creature 11350
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 24071;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_zulgurub_axe_flurry';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(24019, 'spell_zulgurub_axe_flurry');
+
+-- Creature 15547
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 29320;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_karazhan_charge';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(29320, 'spell_karazhan_charge');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 39835;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_najentus_needle_spine_explosion';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(39835, 'spell_najentus_needle_spine_explosion');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 45980;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_borean_tundra_re_cursive_transmatter_injection';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(45980, 'spell_borean_tundra_re_cursive_transmatter_injection');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 47585;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_pri_dispersion';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(47585, 'spell_pri_dispersion');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 49039;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_dk_lichborne';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(49039, 'spell_dk_lichborne');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (15237,15430,15431,25331,27799,27800,27801,48077,48078);
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_pri_holy_nova';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(-15237, 'spell_pri_holy_nova');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (45719,46651);
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_midsummer_remove_torches';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(46074, 'spell_midsummer_remove_torches');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (45716,46630,-45716,-46630);
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_midsummer_torch_tossing_training_practice';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(45716, 'spell_midsummer_torch_tossing_training_practice'),
+(46630, 'spell_midsummer_torch_tossing_training_practice');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (65684,67176,67177,67178,65686,67222,67223,67224);
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_twin_valkyr_dark_essence',
+'spell_twin_valkyr_light_essence');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(65684, 'spell_twin_valkyr_dark_essence'),
+(67176, 'spell_twin_valkyr_dark_essence'),
+(67177, 'spell_twin_valkyr_dark_essence'),
+(67178, 'spell_twin_valkyr_dark_essence'),
+(65686, 'spell_twin_valkyr_light_essence'),
+(67222, 'spell_twin_valkyr_light_essence'),
+(67223, 'spell_twin_valkyr_light_essence'),
+(67224, 'spell_twin_valkyr_light_essence');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 55814;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_eck_spit';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(55814, 'spell_eck_spit');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (53288,53311);
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_grizzly_hills_flight_onequah_to_lights_breach',
+'spell_grizzly_hills_flight_westfall_to_lights_breach');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(53288, 'spell_grizzly_hills_flight_onequah_to_lights_breach'),
+(53311, 'spell_grizzly_hills_flight_westfall_to_lights_breach');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN (55428,55480,55500,55501,55502,55503);
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 57387;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_icecrown_argent_cannon_assault';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(57387, 'spell_icecrown_argent_cannon_assault');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = 57787;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_icecrown_forcecast_bridenbrad_ascension';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(57787, 'spell_icecrown_forcecast_bridenbrad_ascension');
+
+UPDATE `creature_template` SET `AIName` = '' WHERE `entry` = 30562;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 30562 AND `source_type` = 0;
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = -57350;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_item_darkmoon_card_illusion';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(57350, 'spell_item_darkmoon_card_illusion');
+
+--
+DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = -38708;
+DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_hellfire_peninsula_demonaic_visitation';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(38708, 'spell_hellfire_peninsula_demonaic_visitation');
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index ce27b13e9e3..7ee741d72db 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -37,6 +37,7 @@ EndContentData */
#include "Player.h"
#include "ScriptedEscortAI.h"
#include "ScriptedGossip.h"
+#include "SpellScript.h"
#include "TemporarySummon.h"
enum Spells
@@ -619,8 +620,35 @@ public:
};
};
+enum KarazhanCharge
+{
+ SPELL_FEAR = 29321
+};
+
+// 29320 - Charge
+class spell_karazhan_charge : public SpellScript
+{
+ PrepareSpellScript(spell_karazhan_charge);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FEAR });
+ }
+
+ void HandleAfterHit()
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_FEAR);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_karazhan_charge::HandleAfterHit);
+ }
+};
+
void AddSC_karazhan()
{
new npc_barnes();
new npc_image_of_medivh();
+ RegisterSpellScript(spell_karazhan_charge);
}
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
index ef93b2d9dad..17842585a0f 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp
@@ -27,6 +27,7 @@ EndScriptData */
#include "ObjectAccessor.h"
#include "ScriptedCreature.h"
#include "SpellInfo.h"
+#include "SpellScript.h"
#include "sunwell_plateau.h"
#include "TemporarySummon.h"
@@ -52,8 +53,6 @@ enum Spells
SPELL_CORROSION = 45866,
SPELL_GAS_NOVA = 45855,
SPELL_ENCAPSULATE_CHANNEL = 45661,
- // SPELL_ENCAPSULATE_EFFECT = 45665,
- // SPELL_ENCAPSULATE_AOE = 45662,
//Flight phase
SPELL_VAPOR_SELECT = 45391, // fel to player, force cast 45392, 50000y selete target
@@ -82,7 +81,10 @@ enum Spells
//Other
SPELL_BERSERK = 45078,
SPELL_CLOUD_VISUAL = 45212,
- SPELL_CLOUD_SUMMON = 45884
+ SPELL_CLOUD_SUMMON = 45884,
+
+ // Scripts
+ SPELL_ENCAPSULATE_EFFECT = 45665
};
enum PhaseFelmyst
@@ -544,9 +546,31 @@ struct npc_felmyst_trail : public ScriptedAI
void UpdateAI(uint32 /*diff*/) override { }
};
+// 45661 - Encapsulate
+class spell_felmyst_encapsulate : public SpellScript
+{
+ PrepareSpellScript(spell_felmyst_encapsulate);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_ENCAPSULATE_EFFECT });
+ }
+
+ void HandleAfterHit()
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_ENCAPSULATE_EFFECT, true);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_felmyst_encapsulate::HandleAfterHit);
+ }
+};
+
void AddSC_boss_felmyst()
{
RegisterSunwellPlateauCreatureAI(boss_felmyst);
RegisterSunwellPlateauCreatureAI(npc_felmyst_vapor);
RegisterSunwellPlateauCreatureAI(npc_felmyst_trail);
+ RegisterSpellScript(spell_felmyst_encapsulate);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
index 940e7981c1d..87e6e4c46b1 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.cpp
@@ -102,8 +102,35 @@ class spell_zulgurub_poisonous_blood : public SpellScript
}
};
+enum AxeFlurry
+{
+ SPELL_AXE_FLURRY = 24020
+};
+
+// 24019 - Axe Flurry
+class spell_zulgurub_axe_flurry : public SpellScript
+{
+ PrepareSpellScript(spell_zulgurub_axe_flurry);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_AXE_FLURRY });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_AXE_FLURRY, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_zulgurub_axe_flurry::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
void AddSC_zulgurub()
{
new go_brazier_of_madness();
RegisterSpellScript(spell_zulgurub_poisonous_blood);
+ RegisterSpellScript(spell_zulgurub_axe_flurry);
}
diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp
index b36fd1a04b6..d0bc05365ae 100644
--- a/src/server/scripts/Events/midsummer.cpp
+++ b/src/server/scripts/Events/midsummer.cpp
@@ -25,11 +25,13 @@ enum TorchSpells
{
SPELL_TORCH_TOSSING_TRAINING = 45716,
SPELL_TORCH_TOSSING_PRACTICE = 46630,
- SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE = 45719,
- SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE = 46651,
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1 = 45719,
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2 = 46651,
+ SPELL_REMOVE_TORCHES = 46074,
SPELL_TARGET_INDICATOR_COSMETIC = 46901,
SPELL_TARGET_INDICATOR = 45723,
- SPELL_BRAZIERS_HIT = 45724
+ SPELL_BRAZIERS_HIT = 45724,
+ SPELL_TARGET_DETECT_INVISIBILITY = 45725
};
// 45724 - Braziers Hit!
@@ -43,24 +45,21 @@ class spell_midsummer_braziers_hit : public AuraScript
{
SPELL_TORCH_TOSSING_TRAINING,
SPELL_TORCH_TOSSING_PRACTICE,
- SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE,
- SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1,
+ SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2,
+ SPELL_REMOVE_TORCHES
});
}
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
- Player* player = GetTarget()->ToPlayer();
- if (!player)
- return;
+ Unit* target = GetTarget();
- if ((player->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (player->HasAura(SPELL_TORCH_TOSSING_PRACTICE) && GetStackAmount() == 20))
+ if ((target->HasAura(SPELL_TORCH_TOSSING_TRAINING) && GetStackAmount() == 8) || (target->HasAura(SPELL_TORCH_TOSSING_PRACTICE) && GetStackAmount() == 20))
{
- if (player->GetTeam() == ALLIANCE)
- player->CastSpell(player, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_ALLIANCE, true);
- else if (player->GetTeam() == HORDE)
- player->CastSpell(player, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_HORDE, true);
- Remove();
+ target->CastSpell(target, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_1, true);
+ target->CastSpell(target, SPELL_TORCH_TOSSING_TRAINING_SUCCESS_2, true);
+ target->CastSpell(target, SPELL_REMOVE_TORCHES, true);
}
}
@@ -70,6 +69,63 @@ class spell_midsummer_braziers_hit : public AuraScript
}
};
+// 46074 - Remove Torches
+class spell_midsummer_remove_torches : public SpellScript
+{
+ PrepareSpellScript(spell_midsummer_remove_torches);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TORCH_TOSSING_TRAINING, SPELL_TORCH_TOSSING_PRACTICE, SPELL_BRAZIERS_HIT });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* target = GetHitUnit();
+ target->RemoveAurasDueToSpell(SPELL_TORCH_TOSSING_TRAINING);
+ target->RemoveAurasDueToSpell(SPELL_TORCH_TOSSING_PRACTICE);
+ target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_midsummer_remove_torches::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
+// 45716 - Torch Tossing Training
+// 46630 - Torch Tossing Practice
+class spell_midsummer_torch_tossing_training_practice : public AuraScript
+{
+ PrepareAuraScript(spell_midsummer_torch_tossing_training_practice);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BRAZIERS_HIT, SPELL_TARGET_DETECT_INVISIBILITY });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ // Is this spell really used? Not shown in sniffs
+ target->CastSpell(target, SPELL_TARGET_DETECT_INVISIBILITY, true);
+ target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT);
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->RemoveAurasDueToSpell(SPELL_TARGET_DETECT_INVISIBILITY);
+ target->RemoveAurasDueToSpell(SPELL_BRAZIERS_HIT);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_midsummer_torch_tossing_training_practice::AfterApply, EFFECT_0, SPELL_AURA_DETECT_AMORE, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_midsummer_torch_tossing_training_practice::AfterRemove, EFFECT_0, SPELL_AURA_DETECT_AMORE, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
// 45907 - Torch Target Picker
class spell_midsummer_torch_target_picker : public SpellScript
{
@@ -544,6 +600,8 @@ class spell_midsummer_stamp_out_bonfire_event : public SpellScript
void AddSC_event_midsummer()
{
RegisterSpellScript(spell_midsummer_braziers_hit);
+ RegisterSpellScript(spell_midsummer_remove_torches);
+ RegisterSpellScript(spell_midsummer_torch_tossing_training_practice);
RegisterSpellScript(spell_midsummer_torch_target_picker);
RegisterSpellScript(spell_midsummer_torch_toss_land);
RegisterSpellScript(spell_midsummer_test_ribbon_pole_channel);
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index a16ba46f84d..4812a7c1d69 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -723,6 +723,48 @@ class spell_powering_up : public SpellScript
};
// 65684, 67176, 67177, 67178 - Dark Essence
+class spell_twin_valkyr_dark_essence : public AuraScript
+{
+ PrepareAuraScript(spell_twin_valkyr_dark_essence);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_LIGHT_ESSENCE });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHT_ESSENCE, GetTarget()));
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_twin_valkyr_dark_essence::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+// 65686, 67222, 67223, 67224 - Light Essence
+class spell_twin_valkyr_light_essence : public AuraScript
+{
+ PrepareAuraScript(spell_twin_valkyr_light_essence);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DARK_ESSENCE });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_DARK_ESSENCE, GetTarget()));
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_twin_valkyr_light_essence::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+// 65684, 67176, 67177, 67178 - Dark Essence
// 65686, 67222, 67223, 67224 - Light Essence
class spell_valkyr_essences : public AuraScript
{
@@ -860,6 +902,8 @@ void AddSC_boss_twin_valkyr()
RegisterSpellScript(spell_bullet_controller);
RegisterSpellScript(spell_powering_up);
+ RegisterSpellScript(spell_twin_valkyr_dark_essence);
+ RegisterSpellScript(spell_twin_valkyr_light_essence);
RegisterSpellScript(spell_valkyr_essences);
RegisterSpellScript(spell_power_of_the_twins);
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
index 650704cb64d..1374f164eb3 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
#include "gundrak.h"
enum Texts
@@ -30,7 +31,9 @@ enum Spells
SPELL_ECK_BITE = 55813, // Eck bites down hard, inflicting 150% of his normal damage to an enemy.
SPELL_ECK_SPIT = 55814, // Eck spits toxic bile at enemies in a cone in front of him, inflicting 2970 Nature damage and draining 220 mana every 1 sec for 3 sec.
SPELL_ECK_SPRING_1 = 55815, // Eck leaps at a distant target. --> Drops aggro and charges a random player. Tank can simply taunt him back.
- SPELL_ECK_SPRING_2 = 55837 // Eck leaps at a distant target.
+ SPELL_ECK_SPRING_2 = 55837, // Eck leaps at a distant target.
+
+ SPELL_ECK_RESIDUE = 55817
};
enum Events
@@ -108,7 +111,29 @@ private:
bool _berserk;
};
+// 55814 - Eck Spit
+class spell_eck_spit : public AuraScript
+{
+ PrepareAuraScript(spell_eck_spit);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_ECK_RESIDUE });
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_ECK_RESIDUE, true);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_eck_spit::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
void AddSC_boss_eck()
{
RegisterGundrakCreatureAI(boss_eck);
+ RegisterSpellScript(spell_eck_spit);
}
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 838baad156b..2142d6b8577 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -2009,6 +2009,36 @@ class spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield : public AuraS
}
};
+/*######
+## Quest 11712: Re-Cursive
+######*/
+
+enum ReCursive
+{
+ SPELL_SUMMON_FIZZCRANK_SURVIVOR = 46022
+};
+
+// 45980 - Re-Cursive Transmatter Injection
+class spell_borean_tundra_re_cursive_transmatter_injection : public SpellScript
+{
+ PrepareSpellScript(spell_borean_tundra_re_cursive_transmatter_injection);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SUMMON_FIZZCRANK_SURVIVOR });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_FIZZCRANK_SURVIVOR);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_borean_tundra_re_cursive_transmatter_injection::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
void AddSC_borean_tundra()
{
RegisterCreatureAI(npc_beryl_sorcerer);
@@ -2044,4 +2074,5 @@ void AddSC_borean_tundra()
RegisterSpellScript(spell_borean_tundra_land_mine_barrier);
RegisterSpellScript(spell_borean_tundra_taxi_amber_ledge_to_beryl_point_platform);
RegisterSpellScript(spell_borean_tundra_taxi_coldarra_ledge_to_transitus_shield);
+ RegisterSpellScript(spell_borean_tundra_re_cursive_transmatter_injection);
}
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index fec320bea96..c33babd7ea4 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -1095,6 +1095,36 @@ class spell_dragonblight_toaluus_spiritual_incense : public AuraScript
}
};
+/*######
+## Quest 24545: The Sacred and the Corrupt
+######*/
+
+enum TheSacredAndTheCorrupt
+{
+ SPELL_KNOCKDOWN = 13360
+};
+
+// 70653 - Lich King Zap Player
+class spell_dragonblight_lich_king_zap_player : public SpellScript
+{
+ PrepareSpellScript(spell_dragonblight_lich_king_zap_player);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_KNOCKDOWN });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_KNOCKDOWN, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_dragonblight_lich_king_zap_player::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_dragonblight()
{
RegisterCreatureAI(npc_commander_eligor_dawnbringer);
@@ -1118,4 +1148,5 @@ void AddSC_dragonblight()
RegisterSpellScript(spell_dragonblight_atop_the_woodlands_quest_completion_script);
RegisterSpellScript(spell_dragonblight_end_of_the_line_quest_completion_script);
RegisterSpellScript(spell_dragonblight_toaluus_spiritual_incense);
+ RegisterSpellScript(spell_dragonblight_lich_king_zap_player);
}
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index 32017d9f486..05b106d8027 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -1099,6 +1099,87 @@ class spell_grizzly_hills_rage_of_jinarrak : public AuraScript
}
};
+// 61613 - Gan'jo Ressurection
+class spell_grizzly_hills_ganjo_ressurection : public SpellScript
+{
+ PrepareSpellScript(spell_grizzly_hills_ganjo_ressurection);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_ON_THE_OTHER_SIDE });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->RemoveAurasDueToSpell(SPELL_ON_THE_OTHER_SIDE);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_grizzly_hills_ganjo_ressurection::HandleScript, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
+ }
+};
+
+/*######
+## Creature 26853 (Makki Wintergale) (if quest 'Shifting Priorities' (12763) is completed)
+######*/
+
+enum MakkiWintergale
+{
+ SPELL_FLIGHT_ONEQUAH_TO_LIGHTS_BREACH = 53289
+};
+
+// 53288 - Flight - Onequah to Light's Breach
+class spell_grizzly_hills_flight_onequah_to_lights_breach : public AuraScript
+{
+ PrepareAuraScript(spell_grizzly_hills_flight_onequah_to_lights_breach);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FLIGHT_ONEQUAH_TO_LIGHTS_BREACH });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_FLIGHT_ONEQUAH_TO_LIGHTS_BREACH);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_grizzly_hills_flight_onequah_to_lights_breach::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+/*######
+## Creature 26876 (Samuel Clearbook) (if quest 'Reallocating Resources' (12770) is completed)
+######*/
+
+enum SamuelClearbook
+{
+ SPELL_FLIGHT_WESTFALL_TO_LIGHTS_BREACH = 53310
+};
+
+// 53311 - Flight - Westfall to Light's Breach
+class spell_grizzly_hills_flight_westfall_to_lights_breach : public AuraScript
+{
+ PrepareAuraScript(spell_grizzly_hills_flight_westfall_to_lights_breach);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FLIGHT_WESTFALL_TO_LIGHTS_BREACH });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_FLIGHT_WESTFALL_TO_LIGHTS_BREACH);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_grizzly_hills_flight_westfall_to_lights_breach::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
void AddSC_grizzly_hills()
{
RegisterCreatureAI(npc_emily);
@@ -1125,4 +1206,7 @@ void AddSC_grizzly_hills()
RegisterSpellScript(spell_grizzly_hills_escape_from_silverbrook_summon_worgen);
RegisterSpellScript(spell_grizzly_hills_hand_over_reins);
RegisterSpellScript(spell_grizzly_hills_rage_of_jinarrak);
+ RegisterSpellScript(spell_grizzly_hills_ganjo_ressurection);
+ RegisterSpellScript(spell_grizzly_hills_flight_onequah_to_lights_breach);
+ RegisterSpellScript(spell_grizzly_hills_flight_westfall_to_lights_breach);
}
diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp
index 006d9e31a7e..4c44123a173 100644
--- a/src/server/scripts/Northrend/zone_icecrown.cpp
+++ b/src/server/scripts/Northrend/zone_icecrown.cpp
@@ -1189,6 +1189,32 @@ class spell_icecrown_summon_soul_moveto_bunny : public SpellScript
## Quest 13086: The Last Line Of Defense
######*/
+enum TheLastLineOfDefense
+{
+ SPELL_POWERING_UP_THE_CORE = 57608
+};
+
+// 57387 - Argent Cannon Assault
+class spell_icecrown_argent_cannon_assault : public SpellScript
+{
+ PrepareSpellScript(spell_icecrown_argent_cannon_assault);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_POWERING_UP_THE_CORE });
+ }
+
+ void HandleAfterCast()
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_POWERING_UP_THE_CORE, true);
+ }
+
+ void Register() override
+ {
+ AfterCast += SpellCastFn(spell_icecrown_argent_cannon_assault::HandleAfterCast);
+ }
+};
+
// 57385 - Argent Cannon
// 57412 - Reckoning Bomb
class spell_icecrown_cannons_target : public SpellScript
@@ -1495,6 +1521,55 @@ class spell_icecrown_burst_at_the_seams_52510 : public SpellScript
}
};
+/*######
+## Quest 13082: The Boon of A'dal
+######*/
+
+enum TheBoonOfAdal
+{
+ SPELL_SUMMON_SPIRIT_OF_BRIDENBRAD = 57747,
+ SPELL_SEE_QUEST_INVISIBILITY_1 = 57745,
+ SPELL_SUMMON_ADAL = 57746,
+ SPELL_SUMMON_MORI = 57782,
+ SPELL_SUMMON_KURI = 57786,
+ SPELL_SUMMON_LIGHT_BUNNY = 57773
+};
+
+// 57787 - Forcecast Bridenbrad Ascension
+class spell_icecrown_forcecast_bridenbrad_ascension : public SpellScript
+{
+ PrepareSpellScript(spell_icecrown_forcecast_bridenbrad_ascension);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_SUMMON_SPIRIT_OF_BRIDENBRAD,
+ SPELL_SEE_QUEST_INVISIBILITY_1,
+ SPELL_SUMMON_ADAL,
+ SPELL_SUMMON_MORI,
+ SPELL_SUMMON_KURI,
+ SPELL_SUMMON_LIGHT_BUNNY
+ });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* target = GetHitUnit();
+ target->CastSpell(target, SPELL_SUMMON_SPIRIT_OF_BRIDENBRAD);
+ target->RemoveAurasDueToSpell(SPELL_SEE_QUEST_INVISIBILITY_1);
+ target->CastSpell(target, SPELL_SUMMON_ADAL);
+ target->CastSpell(target, SPELL_SUMMON_MORI);
+ target->CastSpell(target, SPELL_SUMMON_KURI);
+ target->CastSpell(target, SPELL_SUMMON_LIGHT_BUNNY);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_icecrown_forcecast_bridenbrad_ascension::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_icecrown()
{
RegisterCreatureAI(npc_argent_valiant);
@@ -1518,6 +1593,7 @@ void AddSC_icecrown()
RegisterSpellScript(spell_icecrown_grab_fake_soldier);
RegisterSpellScript(spell_icecrown_summon_frost_wyrm);
RegisterSpellScript(spell_icecrown_summon_soul_moveto_bunny);
+ RegisterSpellScript(spell_icecrown_argent_cannon_assault);
RegisterSpellScript(spell_icecrown_cannons_target);
RegisterSpellScript(spell_icecrown_bested_trigger);
RegisterSpellScript(spell_icecrown_burst_at_the_seams_59576);
@@ -1526,4 +1602,5 @@ void AddSC_icecrown()
RegisterSpellScript(spell_icecrown_area_restrict_abom);
RegisterSpellScript(spell_icecrown_assign_credit_to_master);
RegisterSpellScript(spell_icecrown_burst_at_the_seams_52510);
+ RegisterSpellScript(spell_icecrown_forcecast_bridenbrad_ascension);
}
diff --git a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
index 67a3cecfd94..b0c0ecd4b04 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_warlord_najentus.cpp
@@ -39,13 +39,16 @@ enum NajentusTexts
enum NajentusSpells
{
SPELL_NEEDLE_SPINE_TARGETING = 39992,
- SPELL_NEEDLE_SPINE = 39835,
SPELL_TIDAL_BURST = 39878,
SPELL_TIDAL_SHIELD = 39872,
SPELL_IMPALING_SPINE = 39837,
SPELL_CREATE_NAJENTUS_SPINE = 39956,
SPELL_HURL_SPINE = 39948,
- SPELL_BERSERK = 26662
+ SPELL_BERSERK = 26662,
+
+ // Scripts
+ SPELL_NEEDLE_SPINE = 39835,
+ SPELL_NEEDLE_SPINE_EXPLOSION = 39968
};
enum NajentusEvents
@@ -228,9 +231,31 @@ class spell_najentus_needle_spine : public SpellScript
}
};
+// 39835 - Needle Spine
+class spell_najentus_needle_spine_explosion : public SpellScript
+{
+ PrepareSpellScript(spell_najentus_needle_spine_explosion);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_NEEDLE_SPINE_EXPLOSION });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_NEEDLE_SPINE_EXPLOSION, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_najentus_needle_spine_explosion::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_boss_najentus()
{
RegisterBlackTempleCreatureAI(boss_najentus);
RegisterGameObjectAI(go_najentus_spine);
RegisterSpellScript(spell_najentus_needle_spine);
+ RegisterSpellScript(spell_najentus_needle_spine_explosion);
}
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 320fb13f989..e387477f185 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -954,6 +954,36 @@ class spell_hellfire_peninsula_absorb_eye_of_grillok : public AuraScript
}
};
+/*######
+## Quest 10838: The Demoniac Scryer
+######*/
+
+enum TheDemoniacScryer
+{
+ SPELL_SUMMON_DEMONAIC_VISITATION = 38991
+};
+
+// 38708 - Demonaic Visitation
+class spell_hellfire_peninsula_demonaic_visitation : public AuraScript
+{
+ PrepareAuraScript(spell_hellfire_peninsula_demonaic_visitation);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_SUMMON_DEMONAIC_VISITATION });
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_SUMMON_DEMONAIC_VISITATION, true);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_hellfire_peninsula_demonaic_visitation::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
void AddSC_hellfire_peninsula()
{
new npc_colonel_jules();
@@ -968,4 +998,5 @@ void AddSC_hellfire_peninsula()
RegisterSpellScriptWithArgs(spell_hellfire_peninsula_translocation_falcon_watch, "spell_hellfire_peninsula_translocation_falcon_watch_tower_up", SPELL_TRANSLOCATION_FALCON_WATCH_TOWER_UP);
RegisterSpellScript(spell_hellfire_peninsula_purify_helboar_meat);
RegisterSpellScript(spell_hellfire_peninsula_absorb_eye_of_grillok);
+ RegisterSpellScript(spell_hellfire_peninsula_demonaic_visitation);
}
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index a3f06959d5b..bf023b9b6a6 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -74,6 +74,7 @@ enum DeathKnightSpells
SPELL_DK_IMPROVED_UNHOLY_PRESENCE_TRIGGERED = 63622,
SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962,
SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736,
+ SPELL_DK_LICHBORNE = 50397,
SPELL_DK_MASTER_OF_GHOULS = 52143,
SPELL_DK_BLOOD_PLAGUE = 55078,
SPELL_DK_RAISE_DEAD_USE_REAGENT = 48289,
@@ -1299,6 +1300,33 @@ class spell_dk_improved_unholy_presence : public AuraScript
}
};
+// 49039 - Lichborne
+class spell_dk_lichborne : public AuraScript
+{
+ PrepareAuraScript(spell_dk_lichborne);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DK_LICHBORNE });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_DK_LICHBORNE, true);
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_DK_LICHBORNE);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_dk_lichborne::AfterApply, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_dk_lichborne::AfterRemove, EFFECT_0, SPELL_AURA_MECHANIC_IMMUNITY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
// 61257 - Runic Power Back on Snare/Root
class spell_dk_pvp_4p_bonus : public AuraScript
{
@@ -2751,6 +2779,7 @@ void AddSC_deathknight_spell_scripts()
RegisterSpellScript(spell_dk_improved_blood_presence_triggered);
RegisterSpellScript(spell_dk_improved_frost_presence);
RegisterSpellScript(spell_dk_improved_unholy_presence);
+ RegisterSpellScript(spell_dk_lichborne);
RegisterSpellScript(spell_dk_pvp_4p_bonus);
RegisterSpellScript(spell_dk_mark_of_blood);
RegisterSpellScript(spell_dk_necrosis);
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 006ccf2fb4c..213c847f063 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -2194,9 +2194,36 @@ private:
}
};
-class spell_gen_lifeblood : public AuraScript
+enum GenericLifeblood
{
- PrepareAuraScript(spell_gen_lifeblood);
+ SPELL_GROW_FLOWER_PATCH = 55475
+};
+
+// -55428 - Lifeblood
+class spell_gen_lifeblood : public SpellScript
+{
+ PrepareSpellScript(spell_gen_lifeblood);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_GROW_FLOWER_PATCH });
+ }
+
+ void HandleAfterCast()
+ {
+ GetCaster()->CastSpell(GetCaster(), SPELL_GROW_FLOWER_PATCH, true);
+ }
+
+ void Register() override
+ {
+ AfterCast += SpellCastFn(spell_gen_lifeblood::HandleAfterCast);
+ }
+};
+
+// -55428 - Lifeblood
+class spell_gen_lifeblood_aura : public AuraScript
+{
+ PrepareAuraScript(spell_gen_lifeblood_aura);
void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/)
{
@@ -2209,7 +2236,7 @@ class spell_gen_lifeblood : public AuraScript
void Register() override
{
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
+ DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_lifeblood_aura::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
@@ -4778,7 +4805,7 @@ void AddSC_generic_spell_scripts()
RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_100", 100); // 10101
RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_50", 50); // 18670, 18945
RegisterSpellScriptWithArgs(spell_gen_knock_away_threat_reduction, "spell_gen_knock_away_threat_reduction_25", 25); // 18813, 25778
- RegisterSpellScript(spell_gen_lifeblood);
+ RegisterSpellAndAuraScriptPair(spell_gen_lifeblood, spell_gen_lifeblood_aura);
RegisterSpellScriptWithArgs(spell_gen_lifebloom, "spell_hexlord_lifebloom", SPELL_HEXLORD_MALACRASS_LIFEBLOOM_FINAL_HEAL);
RegisterSpellScriptWithArgs(spell_gen_lifebloom, "spell_tur_ragepaw_lifebloom", SPELL_TUR_RAGEPAW_LIFEBLOOM_FINAL_HEAL);
RegisterSpellScriptWithArgs(spell_gen_lifebloom, "spell_cenarion_scout_lifebloom", SPELL_CENARION_SCOUT_LIFEBLOOM_FINAL_HEAL);
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index ed6ab9f3c60..27eee95782b 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -4230,6 +4230,143 @@ class spell_item_titanium_seal_of_dalaran_catch : public SpellScript
}
};
+enum RunescrollOfFortitude
+{
+ SPELL_FORTITUDE = 72590
+};
+
+// 69377 - Fortitude
+class spell_item_runescroll_of_fortitude : public SpellScript
+{
+ PrepareSpellScript(spell_item_runescroll_of_fortitude);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_FORTITUDE });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_FORTITUDE, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_item_runescroll_of_fortitude::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+enum DrumsOfForgottenKings
+{
+ SPELL_BLESSING_OF_FORGOTTEN_KINGS = 72586
+};
+
+// 69378 - Blessing of Forgotten Kings
+class spell_item_drums_of_forgotten_kings : public SpellScript
+{
+ PrepareSpellScript(spell_item_drums_of_forgotten_kings);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BLESSING_OF_FORGOTTEN_KINGS });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_BLESSING_OF_FORGOTTEN_KINGS, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_item_drums_of_forgotten_kings::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+enum DrumsOfTheWild
+{
+ SPELL_GIFT_OF_THE_WILD = 72588
+};
+
+// 69381 - Gift of the Wild
+class spell_item_drums_of_the_wild : public SpellScript
+{
+ PrepareSpellScript(spell_item_drums_of_the_wild);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_GIFT_OF_THE_WILD });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetHitUnit(), SPELL_GIFT_OF_THE_WILD, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_item_drums_of_the_wild::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+enum ThrallmarAndHonorHoldFavor
+{
+ SPELL_BUFFBOT_BUFF_EFFECT = 32172
+};
+
+// 32096 - Thrallmar's Favor
+// 32098 - Honor Hold's Favor
+class spell_item_thrallmar_and_honor_hold_favor : public AuraScript
+{
+ PrepareAuraScript(spell_item_thrallmar_and_honor_hold_favor);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BUFFBOT_BUFF_EFFECT });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_BUFFBOT_BUFF_EFFECT);
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_BUFFBOT_BUFF_EFFECT);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_item_thrallmar_and_honor_hold_favor::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_item_thrallmar_and_honor_hold_favor::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+enum DarkmoonCardIllusion
+{
+ SPELL_DARKMOON_CARD_ILLUSION = 60242
+};
+
+// 57350 - Illusionary Barrier
+class spell_item_darkmoon_card_illusion : public AuraScript
+{
+ PrepareAuraScript(spell_item_darkmoon_card_illusion);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DARKMOON_CARD_ILLUSION });
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_DARKMOON_CARD_ILLUSION, true);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_item_darkmoon_card_illusion::AfterRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
void AddSC_item_spell_scripts()
{
// 23074 Arcanite Dragonling
@@ -4364,4 +4501,9 @@ void AddSC_item_spell_scripts()
RegisterSpellScript(spell_item_eggnog);
RegisterSpellScript(spell_item_titanium_seal_of_dalaran_toss);
RegisterSpellScript(spell_item_titanium_seal_of_dalaran_catch);
+ RegisterSpellScript(spell_item_runescroll_of_fortitude);
+ RegisterSpellScript(spell_item_drums_of_forgotten_kings);
+ RegisterSpellScript(spell_item_drums_of_the_wild);
+ RegisterSpellScript(spell_item_thrallmar_and_honor_hold_favor);
+ RegisterSpellScript(spell_item_darkmoon_card_illusion);
}
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 781bbe1cda7..b73cbe8ad17 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -37,12 +37,15 @@
enum PriestSpells
{
SPELL_PRIEST_BLESSED_RECOVERY_R1 = 27813,
+ SPELL_PRIEST_DISPERSION_IMMUNITY = 63230,
+ SPELL_PRIEST_DISPERSION_MOD_POWER = 60069,
SPELL_PRIEST_DIVINE_AEGIS = 47753,
SPELL_PRIEST_EMPOWERED_RENEW = 63544,
SPELL_PRIEST_GLYPH_OF_CIRCLE_OF_HEALING = 55675,
SPELL_PRIEST_GLYPH_OF_LIGHTWELL = 55673,
SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL = 56161,
SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153,
+ SPELL_PRIEST_HOLY_NOVA_HEAL_R1 = 23455,
SPELL_PRIEST_ITEM_EFFICIENCY = 37595,
SPELL_PRIEST_LIGHTWELL_CHARGES = 59907,
SPELL_PRIEST_MANA_LEECH_PROC = 34650,
@@ -292,6 +295,37 @@ class spell_pri_circle_of_healing : public SpellScript
}
};
+// 47585 - Dispersion
+class spell_pri_dispersion : public AuraScript
+{
+ PrepareAuraScript(spell_pri_dispersion);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_DISPERSION_MOD_POWER, SPELL_PRIEST_DISPERSION_IMMUNITY });
+ }
+
+ void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_PRIEST_DISPERSION_MOD_POWER, true);
+ target->CastSpell(target, SPELL_PRIEST_DISPERSION_IMMUNITY, true);
+ }
+
+ void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ Unit* target = GetTarget();
+ target->RemoveAurasDueToSpell(SPELL_PRIEST_DISPERSION_MOD_POWER);
+ target->RemoveAurasDueToSpell(SPELL_PRIEST_DISPERSION_IMMUNITY);
+ }
+
+ void Register() override
+ {
+ AfterEffectApply += AuraEffectApplyFn(spell_pri_dispersion::AfterApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_pri_dispersion::AfterRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
// -47509 - Divine Aegis
class spell_pri_divine_aegis : public AuraScript
{
@@ -472,6 +506,28 @@ class spell_pri_guardian_spirit : public AuraScript
}
};
+// -15237 - Holy Nova
+class spell_pri_holy_nova : public SpellScript
+{
+ PrepareSpellScript(spell_pri_holy_nova);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_HOLY_NOVA_HEAL_R1 });
+ }
+
+ void HandleAfterCast()
+ {
+ uint32 triggerSpellId = sSpellMgr->GetSpellWithRank(SPELL_PRIEST_HOLY_NOVA_HEAL_R1, GetSpellInfo()->GetRank());
+ GetCaster()->CastSpell(GetCaster(), triggerSpellId, true);
+ }
+
+ void Register() override
+ {
+ AfterCast += SpellCastFn(spell_pri_holy_nova::HandleAfterCast);
+ }
+};
+
// 64904 - Hymn of Hope
class spell_pri_hymn_of_hope : public SpellScript
{
@@ -1308,11 +1364,13 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_blessed_recovery);
RegisterSpellScript(spell_pri_body_and_soul);
RegisterSpellScript(spell_pri_circle_of_healing);
+ RegisterSpellScript(spell_pri_dispersion);
RegisterSpellScript(spell_pri_divine_aegis);
RegisterSpellScript(spell_pri_divine_hymn);
RegisterSpellScript(spell_pri_glyph_of_dispel_magic);
RegisterSpellScript(spell_pri_glyph_of_prayer_of_healing);
RegisterSpellScript(spell_pri_guardian_spirit);
+ RegisterSpellScript(spell_pri_holy_nova);
RegisterSpellScript(spell_pri_hymn_of_hope);
RegisterSpellScript(spell_pri_imp_shadowform);
RegisterSpellScript(spell_pri_improved_spirit_tap);