aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/3.3.5/2025_07_28_00_world.sql9
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.cpp79
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp84
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);
}