From 0d7f4c43e83e9058c95eb913b69d56eaab836ba3 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sat, 29 Jun 2024 11:06:38 +0200 Subject: [PATCH] refactor(Scripts/SunwellPlateau): Spell Scripts registry macros (#19223) --- .../rev_1719387072847374776.sql | 11 + .../SunwellPlateau/boss_brutallus.cpp | 144 +++---- .../SunwellPlateau/boss_eredar_twins.cpp | 164 ++++---- .../SunwellPlateau/boss_felmyst.cpp | 111 +++--- .../SunwellPlateau/boss_kalecgos.cpp | 194 ++++----- .../SunwellPlateau/boss_kiljaeden.cpp | 371 +++++++----------- .../SunwellPlateau/boss_muru.cpp | 247 +++++------- .../instance_sunwell_plateau.cpp | 36 +- 8 files changed, 532 insertions(+), 746 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1719387072847374776.sql diff --git a/data/sql/updates/pending_db_world/rev_1719387072847374776.sql b/data/sql/updates/pending_db_world/rev_1719387072847374776.sql new file mode 100644 index 000000000..80d32b9b0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1719387072847374776.sql @@ -0,0 +1,11 @@ +-- +UPDATE `spell_script_names` SET `ScriptName`='spell_kiljaeden_shadow_spike_aura' WHERE `spell_id`=46680; +UPDATE `spell_script_names` SET `ScriptName`='spell_kiljaeden_darkness_aura' WHERE `spell_id`=46605; +UPDATE `spell_script_names` SET `ScriptName`='spell_kiljaeden_vengeance_of_the_blue_flight_aura' WHERE `spell_id`=45839; +UPDATE `spell_script_names` SET `ScriptName`='spell_kiljaeden_armageddon_periodic_aura' WHERE `spell_id`=45921; +UPDATE `spell_script_names` SET `ScriptName`='spell_muru_summon_blood_elves_periodic_aura' WHERE `spell_id`=46041; +UPDATE `spell_script_names` SET `ScriptName`='spell_muru_darkness_aura' WHERE `spell_id`=45996; +UPDATE `spell_script_names` SET `ScriptName`='spell_entropius_void_zone_visual_aura' WHERE `spell_id`=46265; +UPDATE `spell_script_names` SET `ScriptName`='spell_kalecgos_curse_of_boundless_agony_aura' WHERE `spell_id`=45032; +UPDATE `spell_script_names` SET `ScriptName`='spell_kalecgos_spectral_realm_aura' WHERE `spell_id`=46021; +UPDATE `spell_script_names` SET `ScriptName`='spell_felmyst_fog_of_corruption_charm_aura' WHERE `spell_id`=45717; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index c368be3e5..93e69d5b7 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -406,118 +406,90 @@ public: } }; -class spell_madrigosa_activate_barrier : public SpellScriptLoader +class spell_madrigosa_activate_barrier : public SpellScript { -public: - spell_madrigosa_activate_barrier() : SpellScriptLoader("spell_madrigosa_activate_barrier") { } + PrepareSpellScript(spell_madrigosa_activate_barrier); - class spell_madrigosa_activate_barrier_SpellScript : public SpellScript + void HandleActivateObject(SpellEffIndex effIndex) { - PrepareSpellScript(spell_madrigosa_activate_barrier_SpellScript); - - void HandleActivateObject(SpellEffIndex effIndex) + PreventHitDefaultEffect(effIndex); + if (GameObject* go = GetHitGObj()) { - PreventHitDefaultEffect(effIndex); - if (GameObject* go = GetHitGObj()) + go->SetGoState(GO_STATE_READY); + if (Map* map = go->GetMap()) { - go->SetGoState(GO_STATE_READY); - if (Map* map = go->GetMap()) - { - Map::PlayerList const& PlayerList = map->GetPlayers(); - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - if (i->GetSource()) - { - UpdateData data; - WorldPacket pkt; - go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource()); - data.BuildPacket(pkt); - i->GetSource()->GetSession()->SendPacket(&pkt); - } - } + Map::PlayerList const& PlayerList = map->GetPlayers(); + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + if (i->GetSource()) + { + UpdateData data; + WorldPacket pkt; + go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource()); + data.BuildPacket(pkt); + i->GetSource()->GetSession()->SendPacket(&pkt); + } } } + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_madrigosa_activate_barrier_SpellScript::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_madrigosa_activate_barrier_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_madrigosa_activate_barrier::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT); } }; -class spell_madrigosa_deactivate_barrier : public SpellScriptLoader +class spell_madrigosa_deactivate_barrier : public SpellScript { -public: - spell_madrigosa_deactivate_barrier() : SpellScriptLoader("spell_madrigosa_deactivate_barrier") { } + PrepareSpellScript(spell_madrigosa_deactivate_barrier); - class spell_madrigosa_deactivate_barrier_SpellScript : public SpellScript + void HandleActivateObject(SpellEffIndex effIndex) { - PrepareSpellScript(spell_madrigosa_deactivate_barrier_SpellScript); - - void HandleActivateObject(SpellEffIndex effIndex) + PreventHitDefaultEffect(effIndex); + if (GameObject* go = GetHitGObj()) { - PreventHitDefaultEffect(effIndex); - if (GameObject* go = GetHitGObj()) + go->SetGoState(GO_STATE_ACTIVE); + if (Map* map = go->GetMap()) { - go->SetGoState(GO_STATE_ACTIVE); - if (Map* map = go->GetMap()) - { - Map::PlayerList const& PlayerList = map->GetPlayers(); - for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) - if (i->GetSource()) - { - UpdateData data; - WorldPacket pkt; - go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource()); - data.BuildPacket(pkt); - i->GetSource()->GetSession()->SendPacket(&pkt); - } - } + Map::PlayerList const& PlayerList = map->GetPlayers(); + for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i) + if (i->GetSource()) + { + UpdateData data; + WorldPacket pkt; + go->BuildValuesUpdateBlockForPlayer(&data, i->GetSource()); + data.BuildPacket(pkt); + i->GetSource()->GetSession()->SendPacket(&pkt); + } } } + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_madrigosa_deactivate_barrier_SpellScript::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_madrigosa_deactivate_barrier_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_madrigosa_deactivate_barrier::HandleActivateObject, EFFECT_0, SPELL_EFFECT_ACTIVATE_OBJECT); } }; -class spell_brutallus_burn : public SpellScriptLoader +class spell_brutallus_burn : public SpellScript { -public: - spell_brutallus_burn() : SpellScriptLoader("spell_brutallus_burn") { } + PrepareSpellScript(spell_brutallus_burn); - class spell_brutallus_burn_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_brutallus_burn_SpellScript); + return ValidateSpellInfo({ SPELL_BURN_DAMAGE }); + } - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - if (!target->HasAura(SPELL_BURN_DAMAGE)) - target->CastSpell(target, SPELL_BURN_DAMAGE, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_brutallus_burn_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void HandleScriptEffect(SpellEffIndex effIndex) { - return new spell_brutallus_burn_SpellScript(); + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + if (!target->HasAura(SPELL_BURN_DAMAGE)) + target->CastSpell(target, SPELL_BURN_DAMAGE, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_brutallus_burn::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; @@ -545,9 +517,9 @@ void AddSC_boss_brutallus() { new boss_brutallus(); new npc_madrigosa(); - new spell_madrigosa_activate_barrier(); - new spell_madrigosa_deactivate_barrier(); - new spell_brutallus_burn(); + RegisterSpellScript(spell_madrigosa_activate_barrier); + RegisterSpellScript(spell_madrigosa_deactivate_barrier); + RegisterSpellScript(spell_brutallus_burn); new AreaTrigger_at_sunwell_madrigosa(); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index 63e0f862b..046eba5c7 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -366,132 +366,108 @@ public: }; }; -class spell_eredar_twins_apply_dark_touched : public SpellScriptLoader +class spell_eredar_twins_apply_dark_touched : public SpellScript { -public: - spell_eredar_twins_apply_dark_touched() : SpellScriptLoader("spell_eredar_twins_apply_dark_touched") { } + PrepareSpellScript(spell_eredar_twins_apply_dark_touched); - class spell_eredar_twins_apply_dark_touched_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_eredar_twins_apply_dark_touched_SpellScript); + return ValidateSpellInfo({ SPELL_DARK_TOUCHED }); + } - void HandleApplyTouch() - { - if (Player* target = GetHitPlayer()) - target->CastSpell(target, SPELL_DARK_TOUCHED, true); - } - - void Register() override - { - AfterHit += SpellHitFn(spell_eredar_twins_apply_dark_touched_SpellScript::HandleApplyTouch); - } - }; - - SpellScript* GetSpellScript() const override + void HandleApplyTouch() { - return new spell_eredar_twins_apply_dark_touched_SpellScript(); + if (Player* target = GetHitPlayer()) + target->CastSpell(target, SPELL_DARK_TOUCHED, true); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_eredar_twins_apply_dark_touched::HandleApplyTouch); } }; -class spell_eredar_twins_apply_flame_touched : public SpellScriptLoader +class spell_eredar_twins_apply_flame_touched : public SpellScript { -public: - spell_eredar_twins_apply_flame_touched() : SpellScriptLoader("spell_eredar_twins_apply_flame_touched") { } + PrepareSpellScript(spell_eredar_twins_apply_flame_touched); - class spell_eredar_twins_apply_flame_touched_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_eredar_twins_apply_flame_touched_SpellScript); + return ValidateSpellInfo({ SPELL_FLAME_TOUCHED }); + } - void HandleApplyTouch() - { - if (Player* target = GetHitPlayer()) - target->CastSpell(target, SPELL_FLAME_TOUCHED, true); - } - - void Register() override - { - AfterHit += SpellHitFn(spell_eredar_twins_apply_flame_touched_SpellScript::HandleApplyTouch); - } - }; - - SpellScript* GetSpellScript() const override + void HandleApplyTouch() { - return new spell_eredar_twins_apply_flame_touched_SpellScript(); + if (Player* target = GetHitPlayer()) + target->CastSpell(target, SPELL_FLAME_TOUCHED, true); + } + + void Register() override + { + AfterHit += SpellHitFn(spell_eredar_twins_apply_flame_touched::HandleApplyTouch); } }; -class spell_eredar_twins_handle_touch : public SpellScriptLoader +class spell_eredar_twins_handle_touch : public SpellScript { -public: - spell_eredar_twins_handle_touch() : SpellScriptLoader("spell_eredar_twins_handle_touch") { } + PrepareSpellScript(spell_eredar_twins_handle_touch); - class spell_eredar_twins_handle_touch_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_eredar_twins_handle_touch_SpellScript); + return ValidateSpellInfo({ SPELL_DARK_FLAME, SPELL_FLAME_TOUCHED, SPELL_DARK_TOUCHED }); + } - SpellCastResult CheckCast() + SpellCastResult CheckCast() + { + if (GetCaster()->HasAura(SPELL_DARK_FLAME)) + return SPELL_FAILED_DONT_REPORT; + + if (GetSpellInfo()->Id == SPELL_DARK_TOUCHED) { - if (GetCaster()->HasAura(SPELL_DARK_FLAME)) + if (GetCaster()->HasAura(SPELL_FLAME_TOUCHED)) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); + GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true); return SPELL_FAILED_DONT_REPORT; - - if (GetSpellInfo()->Id == SPELL_DARK_TOUCHED) - { - if (GetCaster()->HasAura(SPELL_FLAME_TOUCHED)) - { - GetCaster()->RemoveAurasDueToSpell(SPELL_FLAME_TOUCHED); - GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true); - return SPELL_FAILED_DONT_REPORT; - } } - else // if (m_spellInfo->Id == SPELL_FLAME_TOUCHED) - { - if (GetCaster()->HasAura(SPELL_DARK_TOUCHED)) - { - GetCaster()->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); - GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true); - return SPELL_FAILED_DONT_REPORT; - } - } - return SPELL_CAST_OK; } - - void Register() override + else // if (m_spellInfo->Id == SPELL_FLAME_TOUCHED) { - OnCheckCast += SpellCheckCastFn(spell_eredar_twins_handle_touch_SpellScript::CheckCast); + if (GetCaster()->HasAura(SPELL_DARK_TOUCHED)) + { + GetCaster()->RemoveAurasDueToSpell(SPELL_DARK_TOUCHED); + GetCaster()->CastSpell(GetCaster(), SPELL_DARK_FLAME, true); + return SPELL_FAILED_DONT_REPORT; + } } - }; + return SPELL_CAST_OK; + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_eredar_twins_handle_touch_SpellScript(); + OnCheckCast += SpellCheckCastFn(spell_eredar_twins_handle_touch::CheckCast); } }; -class spell_eredar_twins_blaze : public SpellScriptLoader +class spell_eredar_twins_blaze : public SpellScript { -public: - spell_eredar_twins_blaze() : SpellScriptLoader("spell_eredar_twins_blaze") { } + PrepareSpellScript(spell_eredar_twins_blaze); - class spell_eredar_twins_blaze_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_eredar_twins_blaze_SpellScript); + return ValidateSpellInfo({ SPELL_BLAZE_SUMMON }); + } - void HandleScript(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - target->CastSpell(target, SPELL_BLAZE_SUMMON, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_eredar_twins_blaze_SpellScript::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void HandleScript(SpellEffIndex effIndex) { - return new spell_eredar_twins_blaze_SpellScript(); + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + target->CastSpell(target, SPELL_BLAZE_SUMMON, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_eredar_twins_blaze::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; @@ -520,10 +496,10 @@ void AddSC_boss_eredar_twins() { new boss_sacrolash(); new boss_alythess(); - new spell_eredar_twins_apply_dark_touched(); - new spell_eredar_twins_apply_flame_touched(); - new spell_eredar_twins_handle_touch(); - new spell_eredar_twins_blaze(); + RegisterSpellScript(spell_eredar_twins_apply_dark_touched); + RegisterSpellScript(spell_eredar_twins_apply_flame_touched); + RegisterSpellScript(spell_eredar_twins_handle_touch); + RegisterSpellScript(spell_eredar_twins_blaze); new AreaTrigger_at_sunwell_eredar_twins(); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index a3fb4fe85..eb0ef5752 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -476,65 +476,53 @@ public: }; }; -class spell_felmyst_fog_of_corruption : public SpellScriptLoader +class spell_felmyst_fog_of_corruption : public SpellScript { -public: - spell_felmyst_fog_of_corruption() : SpellScriptLoader("spell_felmyst_fog_of_corruption") { } + PrepareSpellScript(spell_felmyst_fog_of_corruption); - class spell_felmyst_fog_of_corruption_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_felmyst_fog_of_corruption_SpellScript); + return ValidateSpellInfo({ SPELL_FOG_OF_CORRUPTION_CHARM }); + } - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - target->CastSpell(GetCaster(), SPELL_FOG_OF_CORRUPTION_CHARM, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_felmyst_fog_of_corruption_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void HandleScriptEffect(SpellEffIndex effIndex) { - return new spell_felmyst_fog_of_corruption_SpellScript(); + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + target->CastSpell(GetCaster(), SPELL_FOG_OF_CORRUPTION_CHARM, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_felmyst_fog_of_corruption::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_felmyst_fog_of_corruption_charm : public SpellScriptLoader +class spell_felmyst_fog_of_corruption_charm_aura : public AuraScript { -public: - spell_felmyst_fog_of_corruption_charm() : SpellScriptLoader("spell_felmyst_fog_of_corruption_charm") { } + PrepareAuraScript(spell_felmyst_fog_of_corruption_charm_aura); - class spell_felmyst_fog_of_corruption_charm_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_felmyst_fog_of_corruption_charm_AuraScript); + return ValidateSpellInfo({ SPELL_FOG_OF_CORRUPTION_CHARM2, SPELL_FOG_OF_CORRUPTION_CHARM }); + } - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->CastSpell(GetTarget(), SPELL_FOG_OF_CORRUPTION_CHARM2, true); - } - - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM); - GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM2); - Unit::Kill(GetCaster(), GetTarget(), false); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_felmyst_fog_of_corruption_charm_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_felmyst_fog_of_corruption_charm_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_felmyst_fog_of_corruption_charm_AuraScript(); + GetTarget()->CastSpell(GetTarget(), SPELL_FOG_OF_CORRUPTION_CHARM2, true); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM); + GetTarget()->RemoveAurasDueToSpell(SPELL_FOG_OF_CORRUPTION_CHARM2); + Unit::Kill(GetCaster(), GetTarget(), false); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_felmyst_fog_of_corruption_charm_aura::HandleApply, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_felmyst_fog_of_corruption_charm_aura::HandleRemove, EFFECT_0, SPELL_AURA_AOE_CHARM, AURA_EFFECT_HANDLE_REAL); } }; @@ -551,29 +539,18 @@ public: } }; -class spell_felmyst_open_brutallus_back_doors : public SpellScriptLoader +class spell_felmyst_open_brutallus_back_doors : public SpellScript { -public: - spell_felmyst_open_brutallus_back_doors() : SpellScriptLoader("spell_felmyst_open_brutallus_back_doors") { } + PrepareSpellScript(spell_felmyst_open_brutallus_back_doors); - class spell_felmyst_open_brutallus_back_doors_SpellScript : public SpellScript + void FilterTargets(std::list& unitList) { - PrepareSpellScript(spell_felmyst_open_brutallus_back_doors_SpellScript); + unitList.remove_if(DoorsGuidCheck()); + } - void FilterTargets(std::list& unitList) - { - unitList.remove_if(DoorsGuidCheck()); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_felmyst_open_brutallus_back_doors_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_felmyst_open_brutallus_back_doors_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_felmyst_open_brutallus_back_doors::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); } }; @@ -582,8 +559,8 @@ void AddSC_boss_felmyst() new boss_felmyst(); new npc_demonic_vapor(); new npc_demonic_vapor_trail(); - new spell_felmyst_fog_of_corruption(); - new spell_felmyst_fog_of_corruption_charm(); - new spell_felmyst_open_brutallus_back_doors(); + RegisterSpellScript(spell_felmyst_fog_of_corruption); + RegisterSpellScript(spell_felmyst_fog_of_corruption_charm_aura); + RegisterSpellScript(spell_felmyst_open_brutallus_back_doors); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 8ba9ecc2e..bc7bbd98a 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -633,140 +633,116 @@ private: Unit* _victim; }; -class spell_kalecgos_spectral_blast_dummy : public SpellScriptLoader +class spell_kalecgos_spectral_blast_dummy : public SpellScript { -public: - spell_kalecgos_spectral_blast_dummy() : SpellScriptLoader("spell_kalecgos_spectral_blast_dummy") { } + PrepareSpellScript(spell_kalecgos_spectral_blast_dummy); - class spell_kalecgos_spectral_blast_dummy_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_kalecgos_spectral_blast_dummy_SpellScript); + return ValidateSpellInfo({ SPELL_SPECTRAL_BLAST_PORTAL, SPELL_SPECTRAL_BLAST_AA, SPELL_TELEPORT_SPECTRAL }); + } - void FilterTargets(std::list& targets) - { - targets.remove_if(SpectralBlastCheck(GetCaster()->GetVictim())); - Acore::Containers::RandomResize(targets, 1); - } - - void HandleDummy(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - { - target->CastSpell(target, SPELL_SPECTRAL_BLAST_PORTAL, true); - target->CastSpell(target, SPELL_SPECTRAL_BLAST_AA, true); - target->CastSpell(target, SPELL_TELEPORT_SPECTRAL, true); - } - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kalecgos_spectral_blast_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_blast_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override + void FilterTargets(std::list& targets) { - return new spell_kalecgos_spectral_blast_dummy_SpellScript(); + targets.remove_if(SpectralBlastCheck(GetCaster()->GetVictim())); + Acore::Containers::RandomResize(targets, 1); + } + + void HandleDummy(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + { + target->CastSpell(target, SPELL_SPECTRAL_BLAST_PORTAL, true); + target->CastSpell(target, SPELL_SPECTRAL_BLAST_AA, true); + target->CastSpell(target, SPELL_TELEPORT_SPECTRAL, true); + } + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kalecgos_spectral_blast_dummy::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_blast_dummy::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; -class spell_kalecgos_curse_of_boundless_agony : public SpellScriptLoader +class spell_kalecgos_curse_of_boundless_agony_aura : public AuraScript { -public: - spell_kalecgos_curse_of_boundless_agony() : SpellScriptLoader("spell_kalecgos_curse_of_boundless_agony") { } + PrepareAuraScript(spell_kalecgos_curse_of_boundless_agony_aura); - class spell_kalecgos_curse_of_boundless_agony_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_kalecgos_curse_of_boundless_agony_AuraScript); + return ValidateSpellInfo({ SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR }); + } - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript()) - if (instance->IsEncounterInProgress()) - GetUnitOwner()->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR, SPELLVALUE_MAX_TARGETS, 1, GetUnitOwner(), true); - } - - void OnPeriodic(AuraEffect const* aurEff) - { - if (aurEff->GetTickNumber() > 1 && aurEff->GetTickNumber() % 5 == 1) - GetAura()->GetEffect(aurEff->GetEffIndex())->SetAmount(aurEff->GetAmount() * 2); - } - - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_kalecgos_curse_of_boundless_agony_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); - OnEffectPeriodic += AuraEffectPeriodicFn(spell_kalecgos_curse_of_boundless_agony_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - } - }; - - AuraScript* GetAuraScript() const override + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_kalecgos_curse_of_boundless_agony_AuraScript(); + if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript()) + if (instance->IsEncounterInProgress()) + GetUnitOwner()->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR, SPELLVALUE_MAX_TARGETS, 1, GetUnitOwner(), true); + } + + void OnPeriodic(AuraEffect const* aurEff) + { + if (aurEff->GetTickNumber() > 1 && aurEff->GetTickNumber() % 5 == 1) + GetAura()->GetEffect(aurEff->GetEffIndex())->SetAmount(aurEff->GetAmount() * 2); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_kalecgos_curse_of_boundless_agony_aura::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_kalecgos_curse_of_boundless_agony_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } }; -class spell_kalecgos_spectral_realm_dummy : public SpellScriptLoader +class spell_kalecgos_spectral_realm_dummy : public SpellScript { -public: - spell_kalecgos_spectral_realm_dummy() : SpellScriptLoader("spell_kalecgos_spectral_realm_dummy") { } + PrepareSpellScript(spell_kalecgos_spectral_realm_dummy); - class spell_kalecgos_spectral_realm_dummy_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_kalecgos_spectral_realm_dummy_SpellScript); + return ValidateSpellInfo({ SPELL_SPECTRAL_EXHAUSTION, SPELL_TELEPORT_SPECTRAL }); + } - SpellCastResult CheckCast() - { - if (GetCaster()->HasAura(SPELL_SPECTRAL_EXHAUSTION)) - return SPELL_FAILED_CASTER_AURASTATE; - - return SPELL_CAST_OK; - } - - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetCaster()->CastSpell(GetCaster(), SPELL_TELEPORT_SPECTRAL, true); - } - - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_kalecgos_spectral_realm_dummy_SpellScript::CheckCast); - OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_realm_dummy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + SpellCastResult CheckCast() { - return new spell_kalecgos_spectral_realm_dummy_SpellScript(); + if (GetCaster()->HasAura(SPELL_SPECTRAL_EXHAUSTION)) + return SPELL_FAILED_CASTER_AURASTATE; + + return SPELL_CAST_OK; + } + + void HandleScriptEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetCaster(), SPELL_TELEPORT_SPECTRAL, true); + } + + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_kalecgos_spectral_realm_dummy::CheckCast); + OnEffectHitTarget += SpellEffectFn(spell_kalecgos_spectral_realm_dummy::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_kalecgos_spectral_realm : public SpellScriptLoader +class spell_kalecgos_spectral_realm_aura : public AuraScript { -public: - spell_kalecgos_spectral_realm() : SpellScriptLoader("spell_kalecgos_spectral_realm") { } + PrepareAuraScript(spell_kalecgos_spectral_realm_aura); - class spell_kalecgos_spectral_realm_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_kalecgos_spectral_realm_AuraScript); + return ValidateSpellInfo({ SPELL_SPECTRAL_EXHAUSTION, SPELL_TELEPORT_NORMAL_REALM }); + } - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SPECTRAL_EXHAUSTION, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_TELEPORT_NORMAL_REALM, true); - } - - void Register() override - { - OnEffectRemove += AuraEffectRemoveFn(spell_kalecgos_spectral_realm_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_INVISIBILITY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_kalecgos_spectral_realm_AuraScript(); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SPECTRAL_EXHAUSTION, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_TELEPORT_NORMAL_REALM, true); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_kalecgos_spectral_realm_aura::OnRemove, EFFECT_1, SPELL_AURA_MOD_INVISIBILITY, AURA_EFFECT_HANDLE_REAL); } }; @@ -775,9 +751,9 @@ void AddSC_boss_kalecgos() new boss_kalecgos(); new boss_sathrovarr(); new boss_kalec(); - new spell_kalecgos_spectral_blast_dummy(); - new spell_kalecgos_curse_of_boundless_agony(); - new spell_kalecgos_spectral_realm_dummy(); - new spell_kalecgos_spectral_realm(); + RegisterSpellScript(spell_kalecgos_spectral_blast_dummy); + RegisterSpellScript(spell_kalecgos_curse_of_boundless_agony_aura); + RegisterSpellScript(spell_kalecgos_spectral_realm_dummy); + RegisterSpellScript(spell_kalecgos_spectral_realm_aura); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 954ff836d..d3618e091 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -1027,304 +1027,219 @@ public: }; }; -class spell_kiljaeden_shadow_spike : public SpellScriptLoader +class spell_kiljaeden_shadow_spike_aura : public AuraScript { -public: - spell_kiljaeden_shadow_spike() : SpellScriptLoader("spell_kiljaeden_shadow_spike") { } + PrepareAuraScript(spell_kiljaeden_shadow_spike_aura); - class spell_kiljaeden_shadow_spike_AuraScript : public AuraScript + void HandlePeriodic(AuraEffect const* aurEff) { - PrepareAuraScript(spell_kiljaeden_shadow_spike_AuraScript); + PreventDefaultAction(); + if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) + GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); + } - void HandlePeriodic(AuraEffect const* aurEff) - { - PreventDefaultAction(); - if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) - GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_shadow_spike_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_kiljaeden_shadow_spike_AuraScript(); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_shadow_spike_aura::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; -class spell_kiljaeden_sinister_reflection : public SpellScriptLoader +class spell_kiljaeden_sinister_reflection : public SpellScript { -public: - spell_kiljaeden_sinister_reflection() : SpellScriptLoader("spell_kiljaeden_sinister_reflection") { } + PrepareSpellScript(spell_kiljaeden_sinister_reflection); - class spell_kiljaeden_sinister_reflection_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_kiljaeden_sinister_reflection_SpellScript); + return ValidateSpellInfo({ SPELL_SINISTER_REFLECTION_SUMMON, SPELL_SINISTER_REFLECTION_CLONE }); + } - void FilterTargets(std::list& targets) - { - targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT)); - } - - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - { - target->CastSpell(target, SPELL_SINISTER_REFLECTION_SUMMON, true); - //target->CastSpell(target, SPELL_SINISTER_REFLECTION_CLONE, true); - } - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_sinister_reflection_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void FilterTargets(std::list& targets) { - return new spell_kiljaeden_sinister_reflection_SpellScript(); + targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT)); + } + + void HandleScriptEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + { + target->CastSpell(target, SPELL_SINISTER_REFLECTION_SUMMON, true); + //target->CastSpell(target, SPELL_SINISTER_REFLECTION_CLONE, true); + } + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_sinister_reflection::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_kiljaeden_sinister_reflection_clone : public SpellScriptLoader +class spell_kiljaeden_sinister_reflection_clone : public SpellScript { -public: - spell_kiljaeden_sinister_reflection_clone() : SpellScriptLoader("spell_kiljaeden_sinister_reflection_clone") { } + PrepareSpellScript(spell_kiljaeden_sinister_reflection_clone); - class spell_kiljaeden_sinister_reflection_clone_SpellScript : public SpellScript + void FilterTargets(std::list& targets) { - PrepareSpellScript(spell_kiljaeden_sinister_reflection_clone_SpellScript); + targets.sort(Acore::ObjectDistanceOrderPred(GetCaster())); + WorldObject* target = targets.front(); - void FilterTargets(std::list& targets) + targets.clear(); + if (target && target->GetTypeId() == TYPEID_UNIT) { - targets.sort(Acore::ObjectDistanceOrderPred(GetCaster())); - WorldObject* target = targets.front(); - - targets.clear(); - if (target && target->GetTypeId() == TYPEID_UNIT) - { - target->ToCreature()->AI()->SetData(1, GetCaster()->getClass()); - targets.push_back(target); - } + target->ToCreature()->AI()->SetData(1, GetCaster()->getClass()); + targets.push_back(target); } + } - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_clone_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_kiljaeden_sinister_reflection_clone_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_sinister_reflection_clone::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY); } }; -class spell_kiljaeden_flame_dart : public SpellScriptLoader +class spell_kiljaeden_flame_dart : public SpellScript { -public: - spell_kiljaeden_flame_dart() : SpellScriptLoader("spell_kiljaeden_flame_dart") { } + PrepareSpellScript(spell_kiljaeden_flame_dart); - class spell_kiljaeden_flame_dart_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_kiljaeden_flame_dart_SpellScript); + return ValidateSpellInfo({ SPELL_FLAME_DART_EXPLOSION }); + } - void HandleSchoolDamage(SpellEffIndex /*effIndex*/) - { - if (Unit* target = GetHitUnit()) - target->CastSpell(target, SPELL_FLAME_DART_EXPLOSION, true); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_flame_dart_SpellScript::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - } - }; - - SpellScript* GetSpellScript() const override + void HandleSchoolDamage(SpellEffIndex /*effIndex*/) { - return new spell_kiljaeden_flame_dart_SpellScript(); + if (Unit* target = GetHitUnit()) + target->CastSpell(target, SPELL_FLAME_DART_EXPLOSION, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_flame_dart::HandleSchoolDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; -class spell_kiljaeden_darkness : public SpellScriptLoader +class spell_kiljaeden_darkness_aura : public AuraScript { -public: - spell_kiljaeden_darkness() : SpellScriptLoader("spell_kiljaeden_darkness") { } + PrepareAuraScript(spell_kiljaeden_darkness_aura); - class spell_kiljaeden_darkness_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_kiljaeden_darkness_AuraScript); + return ValidateSpellInfo({ SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE }); + } - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (GetUnitOwner()->GetTypeId() == TYPEID_UNIT) - GetUnitOwner()->ToCreature()->AI()->DoAction(ACTION_NO_KILL_TALK); - - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE, true); - } - - void Register() override - { - OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_darkness_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_kiljaeden_darkness_AuraScript(); + if (GetUnitOwner()->GetTypeId() == TYPEID_UNIT) + GetUnitOwner()->ToCreature()->AI()->DoAction(ACTION_NO_KILL_TALK); + + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_DARKNESS_OF_A_THOUSAND_SOULS_DAMAGE, true); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_darkness_aura::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; -class spell_kiljaeden_power_of_the_blue_flight : public SpellScriptLoader +class spell_kiljaeden_power_of_the_blue_flight : public SpellScript { -public: - spell_kiljaeden_power_of_the_blue_flight() : SpellScriptLoader("spell_kiljaeden_power_of_the_blue_flight") { } + PrepareSpellScript(spell_kiljaeden_power_of_the_blue_flight); - class spell_kiljaeden_power_of_the_blue_flight_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_kiljaeden_power_of_the_blue_flight_SpellScript); + return ValidateSpellInfo({ SPELL_SUMMON_BLUE_DRAKE, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT }); + } - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Player* player = GetHitPlayer()) - { - player->CastSpell(player, SPELL_SUMMON_BLUE_DRAKE, true); - player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, true); - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_power_of_the_blue_flight_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void HandleScriptEffect(SpellEffIndex effIndex) { - return new spell_kiljaeden_power_of_the_blue_flight_SpellScript(); + PreventHitDefaultEffect(effIndex); + if (Player* player = GetHitPlayer()) + { + player->CastSpell(player, SPELL_SUMMON_BLUE_DRAKE, true); + player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_kiljaeden_power_of_the_blue_flight::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_kiljaeden_vengeance_of_the_blue_flight : public SpellScriptLoader +class spell_kiljaeden_vengeance_of_the_blue_flight_aura : public AuraScript { -public: - spell_kiljaeden_vengeance_of_the_blue_flight() : SpellScriptLoader("spell_kiljaeden_vengeance_of_the_blue_flight") { } + PrepareAuraScript(spell_kiljaeden_vengeance_of_the_blue_flight_aura); - class spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript); + return ValidateSpellInfo({ SPELL_POSSESS_DRAKE_IMMUNITY }); + } - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_POSSESS_DRAKE_IMMUNITY, true); - } - - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetUnitOwner()->RemoveAurasDueToSpell(SPELL_POSSESS_DRAKE_IMMUNITY); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL); - OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleApply, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript::HandleRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_kiljaeden_vengeance_of_the_blue_flight_AuraScript(); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_POSSESS_DRAKE_IMMUNITY, true); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetUnitOwner()->RemoveAurasDueToSpell(SPELL_POSSESS_DRAKE_IMMUNITY); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleApply, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL); + OnEffectApply += AuraEffectApplyFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleApply, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleRemove, EFFECT_0, SPELL_AURA_MOD_POSSESS, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_kiljaeden_vengeance_of_the_blue_flight_aura::HandleRemove, EFFECT_2, SPELL_AURA_MOD_PACIFY_SILENCE, AURA_EFFECT_HANDLE_REAL); } }; -class spell_kiljaeden_armageddon_periodic : public SpellScriptLoader +class spell_kiljaeden_armageddon_periodic_aura : public AuraScript { -public: - spell_kiljaeden_armageddon_periodic() : SpellScriptLoader("spell_kiljaeden_armageddon_periodic") { } + PrepareAuraScript(spell_kiljaeden_armageddon_periodic_aura); - class spell_kiljaeden_armageddon_periodic_AuraScript : public AuraScript + void HandlePeriodic(AuraEffect const* aurEff) { - PrepareAuraScript(spell_kiljaeden_armageddon_periodic_AuraScript); + PreventDefaultAction(); + if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) + GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); + } - void HandlePeriodic(AuraEffect const* aurEff) - { - PreventDefaultAction(); - if (Unit* target = GetUnitOwner()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) - GetUnitOwner()->CastSpell(target, GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell, true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_armageddon_periodic_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_kiljaeden_armageddon_periodic_AuraScript(); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_kiljaeden_armageddon_periodic_aura::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } }; -class spell_kiljaeden_armageddon_missile : public SpellScriptLoader +class spell_kiljaeden_armageddon_missile : public SpellScript { -public: - spell_kiljaeden_armageddon_missile() : SpellScriptLoader("spell_kiljaeden_armageddon_missile") { } + PrepareSpellScript(spell_kiljaeden_armageddon_missile); - class spell_kiljaeden_armageddon_missile_SpellScript : public SpellScript + void SetDest(SpellDestination& dest) { - PrepareSpellScript(spell_kiljaeden_armageddon_missile_SpellScript); + Position const offset = { 0.0f, 0.0f, -20.0f, 0.0f }; + dest.RelocateOffset(offset); + } - void SetDest(SpellDestination& dest) - { - Position const offset = { 0.0f, 0.0f, -20.0f, 0.0f }; - dest.RelocateOffset(offset); - } - - void Register() override - { - OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_kiljaeden_armageddon_missile_SpellScript::SetDest, EFFECT_0, TARGET_DEST_CASTER); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_kiljaeden_armageddon_missile_SpellScript(); + OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_kiljaeden_armageddon_missile::SetDest, EFFECT_0, TARGET_DEST_CASTER); } }; -class spell_kiljaeden_dragon_breath : public SpellScriptLoader +class spell_kiljaeden_dragon_breath : public SpellScript { -public: - spell_kiljaeden_dragon_breath() : SpellScriptLoader("spell_kiljaeden_dragon_breath") { } + PrepareSpellScript(spell_kiljaeden_dragon_breath); - class spell_kiljaeden_dragon_breath_SpellScript : public SpellScript + void FilterTargets(std::list& targets) { - PrepareSpellScript(spell_kiljaeden_dragon_breath_SpellScript); + targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT)); + } - void FilterTargets(std::list& targets) - { - targets.remove_if(Acore::UnitAuraCheck(true, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT)); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_dragon_breath_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_CONE_ALLY); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_kiljaeden_dragon_breath_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kiljaeden_dragon_breath::FilterTargets, EFFECT_ALL, TARGET_UNIT_CONE_ALLY); } }; @@ -1333,15 +1248,15 @@ void AddSC_boss_kiljaeden() new npc_kiljaeden_controller(); new boss_kiljaeden(); new npc_kalecgos_kj(); - new spell_kiljaeden_shadow_spike(); - new spell_kiljaeden_sinister_reflection(); - new spell_kiljaeden_sinister_reflection_clone(); - new spell_kiljaeden_flame_dart(); - new spell_kiljaeden_darkness(); - new spell_kiljaeden_power_of_the_blue_flight(); - new spell_kiljaeden_vengeance_of_the_blue_flight(); - new spell_kiljaeden_armageddon_periodic(); - new spell_kiljaeden_armageddon_missile(); - new spell_kiljaeden_dragon_breath(); + RegisterSpellScript(spell_kiljaeden_shadow_spike_aura); + RegisterSpellScript(spell_kiljaeden_sinister_reflection); + RegisterSpellScript(spell_kiljaeden_sinister_reflection_clone); + RegisterSpellScript(spell_kiljaeden_flame_dart); + RegisterSpellScript(spell_kiljaeden_darkness_aura); + RegisterSpellScript(spell_kiljaeden_power_of_the_blue_flight); + RegisterSpellScript(spell_kiljaeden_vengeance_of_the_blue_flight_aura); + RegisterSpellScript(spell_kiljaeden_armageddon_periodic_aura); + RegisterSpellScript(spell_kiljaeden_armageddon_missile); + RegisterSpellScript(spell_kiljaeden_dragon_breath); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 46293dbd1..4a317f7cb 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -326,183 +326,148 @@ public: }; }; -class spell_muru_summon_blood_elves_periodic : public SpellScriptLoader +class spell_muru_summon_blood_elves_periodic_aura : public AuraScript { -public: - spell_muru_summon_blood_elves_periodic() : SpellScriptLoader("spell_muru_summon_blood_elves_periodic") { } + PrepareAuraScript(spell_muru_summon_blood_elves_periodic_aura); - class spell_muru_summon_blood_elves_periodic_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_muru_summon_blood_elves_periodic_AuraScript); + return ValidateSpellInfo({ SPELL_SUMMON_FURY_MAGE1, SPELL_SUMMON_FURY_MAGE2, SPELL_SUMMON_BERSERKER1, SPELL_SUMMON_BERSERKER2 }); + } - void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - // first tick after 10 seconds - GetAura()->GetEffect(aurEff->GetEffIndex())->SetPeriodicTimer(10000); - } - - void OnPeriodic(AuraEffect const* /*aurEff*/) - { - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE1, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE2, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true); - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_muru_summon_blood_elves_periodic_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_summon_blood_elves_periodic_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override + void HandleApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { - return new spell_muru_summon_blood_elves_periodic_AuraScript(); + // first tick after 10 seconds + GetAura()->GetEffect(aurEff->GetEffIndex())->SetPeriodicTimer(10000); + } + + void OnPeriodic(AuraEffect const* /*aurEff*/) + { + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE1, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_FURY_MAGE2, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER1, true); + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_BERSERKER2, true); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_muru_summon_blood_elves_periodic_aura::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_summon_blood_elves_periodic_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); } }; -class spell_muru_darkness : public SpellScriptLoader +class spell_muru_darkness_aura : public AuraScript { -public: - spell_muru_darkness() : SpellScriptLoader("spell_muru_darkness") { } + PrepareAuraScript(spell_muru_darkness_aura); - class spell_muru_darkness_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_muru_darkness_AuraScript); + return ValidateSpellInfo({ SPELL_SUMMON_DARK_FIEND }); + } - void OnPeriodic(AuraEffect const* aurEff) - { - if (aurEff->GetTickNumber() == 3) - for (uint8 i = 0; i < 8; ++i) - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND + i, true); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_darkness_AuraScript::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override + void OnPeriodic(AuraEffect const* aurEff) { - return new spell_muru_darkness_AuraScript(); + if (aurEff->GetTickNumber() == 3) + for (uint8 i = 0; i < 8; ++i) + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND + i, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_muru_darkness_aura::OnPeriodic, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); } }; -class spell_entropius_negative_energy : public SpellScriptLoader +class spell_entropius_negative_energy : public SpellScript { -public: - spell_entropius_negative_energy() : SpellScriptLoader("spell_entropius_negative_energy") { } + PrepareSpellScript(spell_entropius_negative_energy); - class spell_entropius_negative_energy_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_entropius_negative_energy_SpellScript); + return ValidateSpellInfo({ SPELL_NEGATIVE_ENERGY_CHAIN }); + } - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_UNIT; - } - - void FilterTargets(std::list& targets) - { - Acore::Containers::RandomResize(targets, GetCaster()->GetAI()->GetData(DATA_NEGATIVE_ENERGY_TARGETS)); - } - - void HandleScriptEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - GetCaster()->CastSpell(target, SPELL_NEGATIVE_ENERGY_CHAIN, true); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_entropius_negative_energy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_entropius_negative_energy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + bool Load() override { - return new spell_entropius_negative_energy_SpellScript(); + return GetCaster()->GetTypeId() == TYPEID_UNIT; + } + + void FilterTargets(std::list& targets) + { + Acore::Containers::RandomResize(targets, GetCaster()->GetAI()->GetData(DATA_NEGATIVE_ENERGY_TARGETS)); + } + + void HandleScriptEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + GetCaster()->CastSpell(target, SPELL_NEGATIVE_ENERGY_CHAIN, true); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_entropius_negative_energy::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_entropius_negative_energy::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_entropius_void_zone_visual : public SpellScriptLoader +class spell_entropius_void_zone_visual_aura : public AuraScript { -public: - spell_entropius_void_zone_visual() : SpellScriptLoader("spell_entropius_void_zone_visual") { } + PrepareAuraScript(spell_entropius_void_zone_visual_aura); - class spell_entropius_void_zone_visual_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_entropius_void_zone_visual_AuraScript); + return ValidateSpellInfo({ SPELL_SUMMON_DARK_FIEND_ENTROPIUS }); + } - void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - SetDuration(3000); - } - - void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND_ENTROPIUS, true); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_entropius_void_zone_visual_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_entropius_void_zone_visual_AuraScript(); + SetDuration(3000); + } + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_SUMMON_DARK_FIEND_ENTROPIUS, true); + } + + void Register() override + { + OnEffectApply += AuraEffectApplyFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + OnEffectRemove += AuraEffectRemoveFn(spell_entropius_void_zone_visual_aura::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; -class spell_entropius_black_hole_effect : public SpellScriptLoader +class spell_entropius_black_hole_effect : public SpellScript { -public: - spell_entropius_black_hole_effect() : SpellScriptLoader("spell_entropius_black_hole_effect") { } + PrepareSpellScript(spell_entropius_black_hole_effect); - class spell_entropius_black_hole_effect_SpellScript : public SpellScript + void HandlePull(SpellEffIndex effIndex) { - PrepareSpellScript(spell_entropius_black_hole_effect_SpellScript); + PreventHitDefaultEffect(effIndex); + Unit* target = GetHitUnit(); + if (!target) + return; - void HandlePull(SpellEffIndex effIndex) + Position pos; + if (target->GetDistance(GetCaster()) < 5.0f) { - PreventHitDefaultEffect(effIndex); - Unit* target = GetHitUnit(); - if (!target) - return; - - Position pos; - if (target->GetDistance(GetCaster()) < 5.0f) - { - float o = frand(0, 2 * M_PI); - pos.Relocate(GetCaster()->GetPositionX() + 4.0f * cos(o), GetCaster()->GetPositionY() + 4.0f * std::sin(o), GetCaster()->GetPositionZ() + frand(10.0f, 15.0f)); - } - else - pos.Relocate(GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ() + 1.0f); - - float speedXY = float(GetSpellInfo()->Effects[effIndex].MiscValue) * 0.1f; - float speedZ = target->GetDistance(pos) / speedXY * 0.5f * Movement::gravity; - - target->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ); + float o = frand(0, 2 * M_PI); + pos.Relocate(GetCaster()->GetPositionX() + 4.0f * cos(o), GetCaster()->GetPositionY() + 4.0f * std::sin(o), GetCaster()->GetPositionZ() + frand(10.0f, 15.0f)); } + else + pos.Relocate(GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ() + 1.0f); - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_entropius_black_hole_effect_SpellScript::HandlePull, EFFECT_0, SPELL_EFFECT_PULL_TOWARDS_DEST); - } - }; + float speedXY = float(GetSpellInfo()->Effects[effIndex].MiscValue) * 0.1f; + float speedZ = target->GetDistance(pos) / speedXY * 0.5f * Movement::gravity; - SpellScript* GetSpellScript() const override + target->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ); + } + + void Register() override { - return new spell_entropius_black_hole_effect_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_entropius_black_hole_effect::HandlePull, EFFECT_0, SPELL_EFFECT_PULL_TOWARDS_DEST); } }; @@ -512,10 +477,10 @@ void AddSC_boss_muru() new boss_entropius(); new npc_singularity(); - new spell_muru_summon_blood_elves_periodic(); - new spell_muru_darkness(); - new spell_entropius_negative_energy(); - new spell_entropius_void_zone_visual(); - new spell_entropius_black_hole_effect(); + RegisterSpellScript(spell_muru_summon_blood_elves_periodic_aura); + RegisterSpellScript(spell_muru_darkness_aura); + RegisterSpellScript(spell_entropius_negative_energy); + RegisterSpellScript(spell_entropius_void_zone_visual_aura); + RegisterSpellScript(spell_entropius_black_hole_effect); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index 71cf4e99d..fe5c2ea40 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -271,37 +271,31 @@ enum cataclysmBreath SPELL_WITHERED_TOUCH = 46300 }; -class spell_cataclysm_breath : public SpellScriptLoader +class spell_cataclysm_breath : public SpellScript { -public: - spell_cataclysm_breath() : SpellScriptLoader("spell_cataclysm_breath") { } + PrepareSpellScript(spell_cataclysm_breath); - class spell_cataclysm_breath_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareSpellScript(spell_cataclysm_breath_SpellScript); + return ValidateSpellInfo({ SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH }); + } - void HandleAfterCast() - { - if (Unit* target = GetExplTargetUnit()) - for (uint8 i = 0; i < 4; ++i) - GetCaster()->CastSpell(target, RAND(SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH), true); - } - - void Register() override - { - AfterCast += SpellCastFn(spell_cataclysm_breath_SpellScript::HandleAfterCast); - } - }; - - SpellScript* GetSpellScript() const override + void HandleAfterCast() { - return new spell_cataclysm_breath_SpellScript(); + if (Unit* target = GetExplTargetUnit()) + for (uint8 i = 0; i < 4; ++i) + GetCaster()->CastSpell(target, RAND(SPELL_CORROSIVE_POISON, SPELL_FEVERED_FATIGUE, SPELL_HEX, SPELL_NECROTIC_POISON, SPELL_PIERCING_SHADOW, SPELL_SHRINK, SPELL_WAVERING_WILL, SPELL_WITHERED_TOUCH), true); + } + + void Register() override + { + AfterCast += SpellCastFn(spell_cataclysm_breath::HandleAfterCast); } }; void AddSC_instance_sunwell_plateau() { new instance_sunwell_plateau(); - new spell_cataclysm_breath(); + RegisterSpellScript(spell_cataclysm_breath); }