diff options
3 files changed, 134 insertions, 38 deletions
diff --git a/sql/updates/world/3.3.5/2025_07_28_00_world.sql b/sql/updates/world/3.3.5/2025_07_28_00_world.sql new file mode 100644 index 00000000000..2232a70a1d2 --- /dev/null +++ b/sql/updates/world/3.3.5/2025_07_28_00_world.sql @@ -0,0 +1,9 @@ +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_sunwell_plateau_cataclysm_breath', 'spell_arcatraz_chaos_breath', 'spell_arcatraz_death_count'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(46292, 'spell_sunwell_plateau_cataclysm_breath'), +(36677, 'spell_arcatraz_chaos_breath'), +(36660, 'spell_arcatraz_death_count'), +(38820, 'spell_arcatraz_death_count'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 20867 AND `source_type` = 0 AND `id` IN (8,9); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp index a583555a460..97d507884f9 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp @@ -15,51 +15,54 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -/* ScriptData -SDName: Sunwell_Plateau -SD%Complete: 0 -SDComment: Placeholder, Epilogue after Kil'jaeden, Captain Selana Gossips -EndScriptData */ - -/* ContentData -npc_prophet_velen -npc_captain_selana -EndContentData */ - #include "ScriptMgr.h" -#include "ScriptedCreature.h" +#include "Containers.h" +#include "SpellScript.h" +#include "Unit.h" #include "sunwell_plateau.h" -/*###### -## npc_prophet_velen -######*/ - -enum ProphetSpeeches +enum CataclysmBreath { - PROPHET_SAY1 = -1580099, - PROPHET_SAY2 = -1580100, - PROPHET_SAY3 = -1580101, - PROPHET_SAY4 = -1580102, - PROPHET_SAY5 = -1580103, - PROPHET_SAY6 = -1580104, - PROPHET_SAY7 = -1580105, - PROPHET_SAY8 = -1580106 + SPELL_CORROSIVE_POISON = 46293, + SPELL_FEVERED_FATIGUE = 46294, + SPELL_HEX = 46295, + SPELL_NECROTIC_POISON = 46296, + SPELL_PIERCING_SHADOW = 46297, + SPELL_SHRINK = 46298, + SPELL_WAVERING_WILL = 46299, + SPELL_WITHERED_TOUCH = 46300 }; -enum LiadrinnSpeeches +// 46292 - Cataclysm Breath +class spell_sunwell_plateau_cataclysm_breath : public SpellScript { - LIADRIN_SAY1 = -1580107, - LIADRIN_SAY2 = -1580108, - LIADRIN_SAY3 = -1580109 -}; + PrepareSpellScript(spell_sunwell_plateau_cataclysm_breath); + + static constexpr std::array<uint32, 8> PossibleSpells = { SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH }; -/*###### -## npc_captain_selana -######*/ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(PossibleSpells); + } -#define CS_GOSSIP1 "Give me a situation report, Captain." -#define CS_GOSSIP2 "What went wrong?" -#define CS_GOSSIP3 "Why did they stop?" -#define CS_GOSSIP4 "Your insight is appreciated." + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + std::array<uint32, 8> spellsToCast = PossibleSpells; -void AddSC_sunwell_plateau() { } + Trinity::Containers::RandomShuffle(spellsToCast); + + for (uint32 i = 0; i < 4; ++i) + caster->CastSpell(caster, spellsToCast[i]); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sunwell_plateau_cataclysm_breath::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +void AddSC_sunwell_plateau() +{ + RegisterSpellScript(spell_sunwell_plateau_cataclysm_breath); +} diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 4ec8b22c8a5..3da8b09b26c 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -21,10 +21,12 @@ #include "ScriptMgr.h" #include "arcatraz.h" +#include "Containers.h" #include "InstanceScript.h" #include "MotionMaster.h" #include "ScriptedCreature.h" #include "SpellInfo.h" +#include "SpellScript.h" enum MillhouseTexts { @@ -680,8 +682,90 @@ private: bool _inProgress; }; +enum ChaosBreath +{ + SPELL_NECROTIC_POISON = 36693, + SPELL_CORROSIVE_POISON = 36694, + SPELL_FEVERED_FATIGUE = 36695, + SPELL_WITHERED_TOUCH = 36696, + SPELL_SHRINK = 36697, + SPELL_PIERCING_SHADOW = 36698, + SPELL_WAVERING_WILL = 36699, + SPELL_HEX = 36700 +}; + +// 36677 - Chaos Breath +class spell_arcatraz_chaos_breath : public SpellScript +{ + PrepareSpellScript(spell_arcatraz_chaos_breath); + + static constexpr std::array<uint32, 8> PossibleSpells = { SPELL_NECROTIC_POISON, SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_WITHERED_TOUCH, SPELL_SHRINK, SPELL_PIERCING_SHADOW, SPELL_WAVERING_WILL, SPELL_HEX }; + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo(PossibleSpells); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + std::array<uint32, 8> spellsToCast = PossibleSpells; + + Trinity::Containers::RandomShuffle(spellsToCast); + + for (uint32 i = 0; i < 3; ++i) + caster->CastSpell(caster, spellsToCast[i]); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_arcatraz_chaos_breath::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +enum DeathCountRemover +{ + SPELL_DEATH_COUNT_DAMAGE = 36657, + SPELL_DEATH_COUNT_DAMAGE_H = 38818, + SPELL_DEATH_COUNT_REMOVER = 36660, + SPELL_DEATH_COUNT_REMOVER_H = 38820 +}; + +// 36660, 38820 - Death Count +class spell_arcatraz_death_count : public AuraScript +{ + PrepareAuraScript(spell_arcatraz_death_count); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_DEATH_COUNT_DAMAGE, SPELL_DEATH_COUNT_DAMAGE_H }); + } + + void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + switch (GetId()) + { + case SPELL_DEATH_COUNT_REMOVER: + GetTarget()->RemoveAurasDueToSpell(SPELL_DEATH_COUNT_DAMAGE); + break; + case SPELL_DEATH_COUNT_REMOVER_H: + GetTarget()->RemoveAurasDueToSpell(SPELL_DEATH_COUNT_DAMAGE_H); + break; + default: + break; + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_arcatraz_death_count::OnApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + void AddSC_arcatraz() { RegisterArcatrazCreatureAI(npc_millhouse_manastorm); RegisterArcatrazCreatureAI(npc_warden_mellichar); + RegisterSpellScript(spell_arcatraz_chaos_breath); + RegisterSpellScript(spell_arcatraz_death_count); } |