aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_09_05_11_world_2022_06_22_00_world.sql37
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp22
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp54
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp74
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp30
-rw-r--r--src/server/scripts/Spells/spell_item.cpp57
-rw-r--r--src/server/scripts/Spells/spell_quest.cpp65
7 files changed, 330 insertions, 9 deletions
diff --git a/sql/updates/world/master/2022_09_05_11_world_2022_06_22_00_world.sql b/sql/updates/world/master/2022_09_05_11_world_2022_06_22_00_world.sql
new file mode 100644
index 00000000000..6cf67c2ba99
--- /dev/null
+++ b/sql/updates/world/master/2022_09_05_11_world_2022_06_22_00_world.sql
@@ -0,0 +1,37 @@
+--
+DELETE FROM `spell_scripts` WHERE `id` IN (23645,23725,24194,24195,38358,45185,47097,47958,57082,47703,47724,50252);
+
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN (
+'spell_item_hourglass_sand',
+'spell_item_lifegiving_gem',
+'spell_quest_uther_grom_tribute',
+'spell_fathomlord_karathress_tidal_surge',
+'spell_brutallus_stomp',
+'spell_dragonblight_surge_needle_teleporter',
+'spell_ormorok_summon_crystal_spikes',
+'spell_dragonblight_fill_blood_unholy_frost_gem');
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(23645,'spell_item_hourglass_sand'),
+(23725,'spell_item_lifegiving_gem'),
+(24194,'spell_quest_uther_grom_tribute'),
+(24195,'spell_quest_uther_grom_tribute'),
+(38358,'spell_fathomlord_karathress_tidal_surge'),
+(45185,'spell_brutallus_stomp'),
+(47097,'spell_dragonblight_surge_needle_teleporter'),
+(47958,'spell_ormorok_summon_crystal_spikes'),
+(57082,'spell_ormorok_summon_crystal_spikes'),
+(47703,'spell_dragonblight_fill_blood_unholy_frost_gem'),
+(47724,'spell_dragonblight_fill_blood_unholy_frost_gem'),
+(50252,'spell_dragonblight_fill_blood_unholy_frost_gem');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 17 AND `SourceEntry` IN
+(24101,24102,24103,24104,69530,24105,24106,24107,24108,69533,47324,47325);
+
+-- DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (47954,47955,47956,47957);
+-- INSERT INTO `spelldifficulty_dbc` (`id`, `spellid0`, `spellid1`, `spellid2`, `spellid3`) VALUES
+-- (47954,47954,57077,0,0),
+-- (47955,47955,57078,0,0),
+-- (47956,47956,57080,0,0),
+-- (47957,47957,57081,0,0);
+
+UPDATE `spell_script_names` SET `ScriptName` = 'spell_ormorok_crystal_spike' WHERE `ScriptName` = 'spell_crystal_spike';
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
index ee0104f9b0f..09aff3b741f 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp
@@ -362,8 +362,30 @@ class spell_brutallus_burn : public AuraScript
}
};
+// 45185 - Stomp
+class spell_brutallus_stomp : public SpellScript
+{
+ PrepareSpellScript(spell_brutallus_stomp);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BURN });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->RemoveAurasDueToSpell(SPELL_BURN);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_brutallus_stomp::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_boss_brutallus()
{
new boss_brutallus();
RegisterSpellScript(spell_brutallus_burn);
+ RegisterSpellScript(spell_brutallus_stomp);
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
index 8ee87833f93..fb3a8007270 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "GameObject.h"
+#include "Map.h"
#include "nexus.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
@@ -28,7 +29,18 @@ enum Spells
SPELL_FRENZY = 48017,
SPELL_SUMMON_CRYSTALLINE_TANGLER = 61564,
SPELL_CRYSTAL_SPIKES = 47958,
+
+ SPELL_SUMMON_CRYSTAL_SPIKE_1 = 47954,
+ SPELL_SUMMON_CRYSTAL_SPIKE_2 = 47955,
+ SPELL_SUMMON_CRYSTAL_SPIKE_3 = 47956,
+ SPELL_SUMMON_CRYSTAL_SPIKE_4 = 47957,
+
+ SPELL_SUMMON_CRYSTAL_SPIKE_1_H = 57077,
+ SPELL_SUMMON_CRYSTAL_SPIKE_2_H = 57078,
+ SPELL_SUMMON_CRYSTAL_SPIKE_3_H = 57080,
+ SPELL_SUMMON_CRYSTAL_SPIKE_4_H = 57081
};
+
enum Yells
{
SAY_AGGRO = 1,
@@ -243,10 +255,43 @@ private:
};
+std::array<uint32, 4> const SummonSpells =
+{
+ SPELL_SUMMON_CRYSTAL_SPIKE_1, SPELL_SUMMON_CRYSTAL_SPIKE_2, SPELL_SUMMON_CRYSTAL_SPIKE_3, SPELL_SUMMON_CRYSTAL_SPIKE_4
+};
+
+std::array<uint32, 4> const SummonSpellsHeroic =
+{
+ SPELL_SUMMON_CRYSTAL_SPIKE_1_H, SPELL_SUMMON_CRYSTAL_SPIKE_2_H, SPELL_SUMMON_CRYSTAL_SPIKE_3_H, SPELL_SUMMON_CRYSTAL_SPIKE_4_H
+};
+
+// 47958, 57082 - Crystal Spikes
+class spell_ormorok_summon_crystal_spikes : public SpellScript
+{
+ PrepareSpellScript(spell_ormorok_summon_crystal_spikes);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(SummonSpells) && ValidateSpellInfo(SummonSpellsHeroic);
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ for (uint32 spells : (caster->GetMap()->IsHeroic() ? SummonSpellsHeroic : SummonSpells))
+ caster->CastSpell(caster, spells);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_ormorok_summon_crystal_spikes::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
// 47941 - Crystal Spike
-class spell_crystal_spike : public AuraScript
+class spell_ormorok_crystal_spike : public AuraScript
{
- PrepareAuraScript(spell_crystal_spike);
+ PrepareAuraScript(spell_ormorok_crystal_spike);
void HandlePeriodic(AuraEffect const* /*aurEff*/)
{
@@ -262,7 +307,7 @@ class spell_crystal_spike : public AuraScript
void Register() override
{
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_crystal_spike::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_ormorok_crystal_spike::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
@@ -270,5 +315,6 @@ void AddSC_boss_ormorok()
{
RegisterNexusCreatureAI(boss_ormorok);
RegisterNexusCreatureAI(npc_crystal_spike_trigger);
- RegisterSpellScript(spell_crystal_spike);
+ RegisterSpellScript(spell_ormorok_summon_crystal_spikes);
+ RegisterSpellScript(spell_ormorok_crystal_spike);
}
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index 00645b16f8b..75689833ab1 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -879,6 +879,78 @@ class spell_dragonblight_bombard_the_ballistae_fx_master : public SpellScript
}
};
+/*######
+## Quest 12060, 12061: Projections and Plans
+######*/
+
+enum ProjectionsAndPlans
+{
+ SPELL_TELE_MOONREST_GARDENS = 47324,
+ SPELL_TELE_SURGE_NEEDLE = 47325,
+
+ AREA_SURGE_NEEDLE = 4156,
+ AREA_MOONREST_GARDENS = 4157
+};
+
+// 47097 - Surge Needle Teleporter
+class spell_dragonblight_surge_needle_teleporter : public SpellScript
+{
+ PrepareSpellScript(spell_dragonblight_surge_needle_teleporter);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TELE_MOONREST_GARDENS, SPELL_TELE_SURGE_NEEDLE });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ switch (caster->GetAreaId())
+ {
+ case AREA_SURGE_NEEDLE:
+ caster->CastSpell(caster, SPELL_TELE_MOONREST_GARDENS);
+ break;
+ case AREA_MOONREST_GARDENS:
+ caster->CastSpell(caster, SPELL_TELE_SURGE_NEEDLE);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_dragonblight_surge_needle_teleporter::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+/*######
+## Quest 12125, 12126, 12127: In Service of Blood & In Service of the Unholy & In Service of Frost
+######*/
+
+// 47703 - Unholy Union
+// 47724 - Frost Draw
+// 50252 - Blood Draw
+class spell_dragonblight_fill_blood_unholy_frost_gem : public SpellScript
+{
+ PrepareSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem);
+
+ bool Validate(SpellInfo const* spellInfo) override
+ {
+ return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->CastSpell(GetCaster(), uint32(GetEffectValue()));
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_dragonblight_fill_blood_unholy_frost_gem::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_dragonblight()
{
RegisterCreatureAI(npc_commander_eligor_dawnbringer);
@@ -894,4 +966,6 @@ void AddSC_dragonblight()
RegisterSpellScript(spell_dragonblight_scarlet_raven_priest_image_master);
RegisterSpellScript(spell_dragonblight_cancel_scarlet_raven_priest_image);
RegisterSpellScript(spell_dragonblight_bombard_the_ballistae_fx_master);
+ RegisterSpellScript(spell_dragonblight_surge_needle_teleporter);
+ RegisterSpellScript(spell_dragonblight_fill_blood_unholy_frost_gem);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
index d70b9ecb6ed..f7d921875f9 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp
@@ -27,6 +27,7 @@ EndScriptData */
#include "MotionMaster.h"
#include "ObjectAccessor.h"
#include "ScriptedCreature.h"
+#include "SpellScript.h"
#include "serpent_shrine.h"
#include "TemporarySummon.h"
@@ -69,7 +70,7 @@ enum FathomlordKarathress
//Caribdis Spells
SPELL_WATER_BOLT_VOLLEY = 38335,
SPELL_TIDAL_SURGE = 38358,
- SPELL_TIDAL_SURGE_FREEZE = 38357,
+ SPELL_TIDAL_SURGE_EFFECT = 38353,
SPELL_HEAL = 38330,
SPELL_SUMMON_CYCLONE = 38337,
SPELL_CYCLONE_CYCLONE = 29538,
@@ -648,10 +649,7 @@ public:
//TidalSurge_Timer
if (TidalSurge_Timer <= diff)
{
- DoCastVictim(SPELL_TIDAL_SURGE);
- // Hacky way to do it - won't trigger elseways
- if (me->GetVictim())
- me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_TIDAL_SURGE_FREEZE, true);
+ DoCastSelf(SPELL_TIDAL_SURGE);
TidalSurge_Timer = 15000 + rand32() % 5000;
} else TidalSurge_Timer -= diff;
@@ -714,10 +712,32 @@ public:
};
};
+// 38358 - Tidal Surge
+class spell_fathomlord_karathress_tidal_surge : public SpellScript
+{
+ PrepareSpellScript(spell_fathomlord_karathress_tidal_surge);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_TIDAL_SURGE_EFFECT });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ GetHitUnit()->CastSpell(GetHitUnit(), SPELL_TIDAL_SURGE_EFFECT, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_fathomlord_karathress_tidal_surge::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
void AddSC_boss_fathomlord_karathress()
{
new boss_fathomlord_karathress();
new boss_fathomguard_sharkkis();
new boss_fathomguard_tidalvess();
new boss_fathomguard_caribdis();
+ RegisterSpellScript(spell_fathomlord_karathress_tidal_surge);
}
diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp
index 5b5a7e1e9b3..6b555393878 100644
--- a/src/server/scripts/Spells/spell_item.cpp
+++ b/src/server/scripts/Spells/spell_item.cpp
@@ -1314,6 +1314,32 @@ class spell_item_heartpierce : public SpellScriptLoader
}
};
+enum HourglassSand
+{
+ SPELL_BROOD_AFFLICTION_BRONZE = 23170
+};
+
+// 23645 - Hourglass Sand
+class spell_item_hourglass_sand : public SpellScript
+{
+ PrepareSpellScript(spell_item_hourglass_sand);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_BROOD_AFFLICTION_BRONZE });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ GetCaster()->RemoveAurasDueToSpell(SPELL_BROOD_AFFLICTION_BRONZE);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_item_hourglass_sand::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
// 40971 - Bonus Healing (Crystal Spire of Karabor)
class spell_item_crystal_spire_of_karabor : public AuraScript
{
@@ -3016,6 +3042,35 @@ class spell_item_impale_leviroth : public SpellScript
}
};
+enum LifegivingGem
+{
+ SPELL_GIFT_OF_LIFE_1 = 23782,
+ SPELL_GIFT_OF_LIFE_2 = 23783
+};
+
+// 23725 - Gift of Life
+class spell_item_lifegiving_gem : public SpellScript
+{
+ PrepareSpellScript(spell_item_lifegiving_gem);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_GIFT_OF_LIFE_1, SPELL_GIFT_OF_LIFE_2 });
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ Unit* caster = GetCaster();
+ caster->CastSpell(caster, SPELL_GIFT_OF_LIFE_1, true);
+ caster->CastSpell(caster, SPELL_GIFT_OF_LIFE_2, true);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_item_lifegiving_gem::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+};
+
enum NitroBoosts
{
SPELL_NITRO_BOOSTS_SUCCESS = 54861,
@@ -4419,6 +4474,7 @@ void AddSC_item_spell_scripts()
RegisterSpellScript(spell_item_harm_prevention_belt);
new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY, SPELL_INVIGORATION_MANA, SPELL_INVIGORATION_RAGE, SPELL_INVIGORATION_RP>("spell_item_heartpierce");
new spell_item_heartpierce<SPELL_INVIGORATION_ENERGY_HERO, SPELL_INVIGORATION_MANA_HERO, SPELL_INVIGORATION_RAGE_HERO, SPELL_INVIGORATION_RP_HERO>("spell_item_heartpierce_hero");
+ RegisterSpellScript(spell_item_hourglass_sand);
RegisterSpellScript(spell_item_crystal_spire_of_karabor);
RegisterSpellScript(spell_item_make_a_wish);
RegisterSpellScript(spell_item_mark_of_conquest);
@@ -4463,6 +4519,7 @@ void AddSC_item_spell_scripts()
RegisterSpellScript(spell_item_demon_broiled_surprise);
RegisterSpellScript(spell_item_complete_raptor_capture);
RegisterSpellScript(spell_item_impale_leviroth);
+ RegisterSpellScript(spell_item_lifegiving_gem);
RegisterSpellScript(spell_item_nitro_boosts);
RegisterSpellScript(spell_item_nitro_boosts_backfire);
RegisterSpellScript(spell_item_rocket_boots);
diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp
index 454dc6bb33f..51baea50382 100644
--- a/src/server/scripts/Spells/spell_quest.cpp
+++ b/src/server/scripts/Spells/spell_quest.cpp
@@ -1911,6 +1911,70 @@ class spell_quest_portal_with_condition : public SpellScript
}
};
+enum TributeSpells
+{
+ SPELL_GROMS_TROLL_TRIBUTE = 24101,
+ SPELL_GROMS_TAUREN_TRIBUTE = 24102,
+ SPELL_GROMS_UNDEAD_TRIBUTE = 24103,
+ SPELL_GROMS_ORC_TRIBUTE = 24104,
+ SPELL_GROMS_BLOODELF_TRIBUTE = 69530,
+ SPELL_UTHERS_HUMAN_TRIBUTE = 24105,
+ SPELL_UTHERS_GNOME_TRIBUTE = 24106,
+ SPELL_UTHERS_DWARF_TRIBUTE = 24107,
+ SPELL_UTHERS_NIGHTELF_TRIBUTE = 24108,
+ SPELL_UTHERS_DRAENEI_TRIBUTE = 69533
+};
+
+// 24194 - Uther's Tribute
+// 24195 - Grom's Tribute
+class spell_quest_uther_grom_tribute : public SpellScript
+{
+ PrepareSpellScript(spell_quest_uther_grom_tribute);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo(
+ {
+ SPELL_GROMS_TROLL_TRIBUTE, SPELL_UTHERS_HUMAN_TRIBUTE,
+ SPELL_GROMS_TAUREN_TRIBUTE, SPELL_UTHERS_GNOME_TRIBUTE,
+ SPELL_GROMS_UNDEAD_TRIBUTE, SPELL_UTHERS_DWARF_TRIBUTE,
+ SPELL_GROMS_ORC_TRIBUTE, SPELL_UTHERS_NIGHTELF_TRIBUTE,
+ SPELL_GROMS_BLOODELF_TRIBUTE, SPELL_UTHERS_DRAENEI_TRIBUTE
+ });
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ if (!caster)
+ return;
+
+ uint32 spell = 0;
+ switch (caster->GetRace())
+ {
+ case RACE_TROLL: spell = SPELL_GROMS_TROLL_TRIBUTE; break;
+ case RACE_TAUREN: spell = SPELL_GROMS_TAUREN_TRIBUTE; break;
+ case RACE_UNDEAD_PLAYER: spell = SPELL_GROMS_UNDEAD_TRIBUTE; break;
+ case RACE_ORC: spell = SPELL_GROMS_ORC_TRIBUTE; break;
+ case RACE_BLOODELF: spell = SPELL_GROMS_BLOODELF_TRIBUTE; break;
+ case RACE_HUMAN: spell = SPELL_UTHERS_HUMAN_TRIBUTE; break;
+ case RACE_GNOME: spell = SPELL_UTHERS_GNOME_TRIBUTE; break;
+ case RACE_DWARF: spell = SPELL_UTHERS_DWARF_TRIBUTE; break;
+ case RACE_NIGHTELF: spell = SPELL_UTHERS_NIGHTELF_TRIBUTE; break;
+ case RACE_DRAENEI: spell = SPELL_UTHERS_DRAENEI_TRIBUTE; break;
+ default: break;
+ }
+
+ if (spell)
+ caster->CastSpell(caster, spell);
+ }
+
+ void Register() override
+ {
+ OnEffectHit += SpellEffectFn(spell_quest_uther_grom_tribute::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
/*######
## Quest 14386 Leader of the Pack
######*/
@@ -2005,5 +2069,6 @@ void AddSC_quest_spell_scripts()
RegisterSpellScript(spell_q11306_failed_mix_43378);
RegisterSpellScript(spell_quest_taming_the_beast);
RegisterSpellScript(spell_quest_portal_with_condition);
+ RegisterSpellScript(spell_quest_uther_grom_tribute);
RegisterSpellScript(spell_q14386_call_attack_mastiffs);
}