diff options
-rw-r--r-- | sql/updates/world/3.3.5/2025_08_17_00_world.sql | 17 | ||||
-rw-r--r-- | src/server/scripts/Outland/zone_hellfire_peninsula.cpp | 73 | ||||
-rw-r--r-- | src/server/scripts/Outland/zone_netherstorm.cpp | 56 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 112 |
4 files changed, 141 insertions, 117 deletions
diff --git a/sql/updates/world/3.3.5/2025_08_17_00_world.sql b/sql/updates/world/3.3.5/2025_08_17_00_world.sql new file mode 100644 index 00000000000..1c281a51d19 --- /dev/null +++ b/sql/updates/world/3.3.5/2025_08_17_00_world.sql @@ -0,0 +1,17 @@ +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_netherstorm_detonate_teleporter' WHERE `ScriptName` = 'spell_detonate_teleporter'; + +-- Shouldn't be used for teleport, only to trigger events +DELETE FROM `areatrigger_teleport` WHERE `ID` = 4523; + +DELETE FROM `gameobject` WHERE `guid` = 91320 AND `id` = 184606; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `StringId`, `VerifiedBuild`) VALUES +(91320,184606,530,0,0,1,1,4799.248,3779.397,211.75,0,0,0,0,1,300,0,1,'',NULL,0); + +UPDATE `spell_script_names` SET `ScriptName` = 'spell_netherstorm_socrethars_stone' WHERE `ScriptName` = 'spell_item_socrethars_stone'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_hellfire_peninsula_purify_helboar_meat' WHERE `ScriptName` = 'spell_item_purify_helboar_meat'; + +-- +UPDATE `spell_script_names` SET `ScriptName` = 'spell_hellfire_peninsula_absorb_eye_of_grillok' WHERE `ScriptName` = 'spell_item_absorb_eye_of_grillok'; diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 5e080361e20..320fb13f989 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -883,6 +883,77 @@ public: explicit spell_hellfire_peninsula_translocation_falcon_watch(Translocation triggeredSpellId) : _triggeredSpellId(triggeredSpellId) { } }; +/*###### +## Quest 9361: Helboar, the Other White Meat +######*/ + +enum HelboarTheOtherWhiteMeat +{ + SPELL_SUMMON_PURIFIED_HELBOAR_MEAT = 29277, + SPELL_SUMMON_TOXIC_HELBOAR_MEAT = 29278 +}; + +// 29200 - Purify Helboar Meat +class spell_hellfire_peninsula_purify_helboar_meat : public SpellScript +{ + PrepareSpellScript(spell_hellfire_peninsula_purify_helboar_meat); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_PURIFIED_HELBOAR_MEAT, SPELL_SUMMON_TOXIC_HELBOAR_MEAT }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_hellfire_peninsula_purify_helboar_meat::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +/*###### +## Quest 10813: The Eyes of Grillok +######*/ + +enum TheEyesOfGrillok +{ + SPELL_EYE_OF_GRILLOK = 38495 +}; + +// 38554 - Absorb Eye of Grillok +class spell_hellfire_peninsula_absorb_eye_of_grillok : public AuraScript +{ + PrepareAuraScript(spell_hellfire_peninsula_absorb_eye_of_grillok); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_EYE_OF_GRILLOK }); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + PreventDefaultAction(); + + if (Unit* caster = GetCaster()) + GetTarget()->CastSpell(caster, SPELL_EYE_OF_GRILLOK, aurEff); + + if (Creature* target = GetTarget()->ToCreature()) + { + /// @todo: This is a hack, in flight missiles of spells of despawned creatures get cancelled - delay despawning by the duration of SPELL_EYE_OF_GRILLOK aura + target->SetVisible(false); + target->DespawnOrUnsummon(5s); + } + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_hellfire_peninsula_absorb_eye_of_grillok::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); + } +}; + void AddSC_hellfire_peninsula() { new npc_colonel_jules(); @@ -895,4 +966,6 @@ void AddSC_hellfire_peninsula() RegisterSpellScript(spell_hellfire_peninsula_send_vengeance_to_player); RegisterSpellScriptWithArgs(spell_hellfire_peninsula_translocation_falcon_watch, "spell_hellfire_peninsula_translocation_falcon_watch_tower_down", SPELL_TRANSLOCATION_FALCON_WATCH_TOWER_DOWN); 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); } diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index c0f9081764b..b8b1df1d382 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -464,7 +464,7 @@ public: ## Quest 10857: Teleport This! ######*/ -enum DetonateTeleporter +enum TeleportThis { SPELL_TELEPORTER_KILL_CREDIT_1 = 38982, // 22348 SPELL_TELEPORTER_KILL_CREDIT_2 = 38983, // 22351 @@ -475,9 +475,9 @@ enum DetonateTeleporter }; // 38920 - Detonate Teleporter -class spell_detonate_teleporter : public SpellScript +class spell_netherstorm_detonate_teleporter : public SpellScript { - PrepareSpellScript(spell_detonate_teleporter); + PrepareSpellScript(spell_netherstorm_detonate_teleporter); bool Load() override { @@ -527,7 +527,52 @@ class spell_detonate_teleporter : public SpellScript void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_detonate_teleporter::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + OnEffectHitTarget += SpellEffectFn(spell_netherstorm_detonate_teleporter::HandleScript, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +/*###### +## Quest 10409: Deathblow to the Legion +######*/ + +enum DeathblowToTheLegion +{ + SPELL_SOCRETHAR_TO_SEAT = 35743, + SPELL_SOCRETHAR_FROM_SEAT = 35744, + + AREA_INVASION_POINT_OVERLORD = 3900, + AREA_SOCRETHARS_SEAT = 3742 +}; + +// 35745 - Socrethar's Stone +class spell_netherstorm_socrethars_stone : public SpellScript +{ + PrepareSpellScript(spell_netherstorm_socrethars_stone); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_SOCRETHAR_TO_SEAT, SPELL_SOCRETHAR_FROM_SEAT }); + } + + void HandleDummy(SpellEffIndex /* effIndex */) + { + Unit* caster = GetCaster(); + switch (caster->GetAreaId()) + { + case AREA_INVASION_POINT_OVERLORD: + caster->CastSpell(caster, SPELL_SOCRETHAR_TO_SEAT); + break; + case AREA_SOCRETHARS_SEAT: + caster->CastSpell(caster, SPELL_SOCRETHAR_FROM_SEAT); + break; + default: + return; + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_netherstorm_socrethars_stone::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -536,5 +581,6 @@ void AddSC_netherstorm() new npc_commander_dawnforge(); new at_commander_dawnforge(); new npc_phase_hunter(); - RegisterSpellScript(spell_detonate_teleporter); + RegisterSpellScript(spell_netherstorm_detonate_teleporter); + RegisterSpellScript(spell_netherstorm_socrethars_stone); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index b57a3f4b262..ed6ab9f3c60 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -116,38 +116,6 @@ class spell_item_aegis_of_preservation : public AuraScript } }; -enum ZezzaksShard -{ - SPELL_EYE_OF_GRILLOK = 38495 -}; - -// 38554 - Absorb Eye of Grillok (31463: Zezzak's Shard) -class spell_item_absorb_eye_of_grillok : public AuraScript -{ - PrepareAuraScript(spell_item_absorb_eye_of_grillok); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_EYE_OF_GRILLOK }); - } - - void PeriodicTick(AuraEffect const* aurEff) - { - PreventDefaultAction(); - - if (!GetCaster() || GetTarget()->GetTypeId() != TYPEID_UNIT) - return; - - GetCaster()->CastSpell(GetCaster(), SPELL_EYE_OF_GRILLOK, aurEff); - GetTarget()->ToCreature()->DespawnOrUnsummon(); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_item_absorb_eye_of_grillok::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } -}; - enum AlchemistStone { SPELL_ALCHEMISTS_STONE_EXTRA_HEAL = 21399, @@ -2809,42 +2777,6 @@ class spell_magic_eater_food : public AuraScript } }; -enum PurifyHelboarMeat -{ - SPELL_SUMMON_PURIFIED_HELBOAR_MEAT = 29277, - SPELL_SUMMON_TOXIC_HELBOAR_MEAT = 29278, -}; - -class spell_item_purify_helboar_meat : public SpellScript -{ - PrepareSpellScript(spell_item_purify_helboar_meat); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo( - { - SPELL_SUMMON_PURIFIED_HELBOAR_MEAT, - SPELL_SUMMON_TOXIC_HELBOAR_MEAT - }); - } - - void HandleDummy(SpellEffIndex /* effIndex */) - { - Unit* caster = GetCaster(); - caster->CastSpell(caster, roll_chance_i(50) ? SPELL_SUMMON_PURIFIED_HELBOAR_MEAT : SPELL_SUMMON_TOXIC_HELBOAR_MEAT, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_item_purify_helboar_meat::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - enum NighInvulnerability { SPELL_NIGH_INVULNERABILITY = 30456, @@ -2905,47 +2837,6 @@ class spell_item_poultryizer : public SpellScript } }; -enum SocretharsStone -{ - SPELL_SOCRETHAR_TO_SEAT = 35743, - SPELL_SOCRETHAR_FROM_SEAT = 35744, -}; - -class spell_item_socrethars_stone : public SpellScript -{ - PrepareSpellScript(spell_item_socrethars_stone); - - bool Load() override - { - return (GetCaster()->GetAreaId() == 3900 || GetCaster()->GetAreaId() == 3742); - } - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_SOCRETHAR_TO_SEAT, SPELL_SOCRETHAR_FROM_SEAT }); - } - - void HandleDummy(SpellEffIndex /* effIndex */) - { - Unit* caster = GetCaster(); - switch (caster->GetAreaId()) - { - case 3900: - caster->CastSpell(caster, SPELL_SOCRETHAR_TO_SEAT, true); - break; - case 3742: - caster->CastSpell(caster, SPELL_SOCRETHAR_FROM_SEAT, true); - break; - default: - return; - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_item_socrethars_stone::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } -}; - enum DemonBroiledSurprise { QUEST_SUPER_HOT_STEW = 11379, @@ -4351,7 +4242,6 @@ void AddSC_item_spell_scripts() new spell_item_trigger_spell("spell_item_mithril_mechanical_dragonling", SPELL_MITHRIL_MECHANICAL_DRAGONLING); RegisterSpellScript(spell_item_aegis_of_preservation); - RegisterSpellScript(spell_item_absorb_eye_of_grillok); RegisterSpellScript(spell_item_alchemists_stone); new spell_item_anger_capacitor<8>("spell_item_tiny_abomination_in_a_jar"); new spell_item_anger_capacitor<7>("spell_item_tiny_abomination_in_a_jar_hero"); @@ -4429,10 +4319,8 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_ashbringer); RegisterSpellScript(spell_magic_eater_food); - RegisterSpellScript(spell_item_purify_helboar_meat); RegisterSpellScript(spell_item_nigh_invulnerability); RegisterSpellScript(spell_item_poultryizer); - RegisterSpellScript(spell_item_socrethars_stone); RegisterSpellScript(spell_item_demon_broiled_surprise); RegisterSpellScript(spell_item_complete_raptor_capture); RegisterSpellScript(spell_item_impale_leviroth); |