diff options
| author | Meji <alvaro.megias@outlook.com> | 2025-01-02 21:43:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-02 21:43:06 +0100 |
| commit | 98206bf7e8ce423e266283758155464431c2bd8d (patch) | |
| tree | 4c4956cce3bb3f7faffbd82d0b609e8ebfc404e0 /src/server/scripts/EasternKingdoms | |
| parent | 7fbdedfd9a472752ff53e1c16eb77580a4274649 (diff) | |
Scripts/StormwindCity: Implement quest "The Mission" (29548) (#30557)
Diffstat (limited to 'src/server/scripts/EasternKingdoms')
| -rw-r--r-- | src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp | 111 |
1 files changed, 98 insertions, 13 deletions
diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index 902fb016da4..bacfef7e2c5 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -32,13 +32,18 @@ #include "SpellScript.h" #include "TemporarySummon.h" -namespace StormwindCity +namespace Scripts::EasternKingdoms::StormwindCity { - namespace Spells - { - static constexpr uint32 MOPAllianceIntroMoviePlay = 130805; - static constexpr uint32 FadeToBlack = 130411; - } +namespace Spells +{ + // The King's Command + static constexpr uint32 MOPAllianceIntroMoviePlay = 130805; + static constexpr uint32 FadeToBlack = 130411; + + // The Mission + static constexpr uint32 TeleportPrep = 130832; + static constexpr uint32 TeleportTimer = 132032; + static constexpr uint32 TheMissionTeleportPlayer = 130321; } enum TidesOfWarData @@ -511,15 +516,13 @@ class spell_the_kings_command_movie_aura : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ - StormwindCity::Spells::FadeToBlack + Spells::FadeToBlack }); } void HandleHitTarget(SpellEffIndex /*effIndex*/) const { - Unit* hitUnit = GetHitUnit(); - - hitUnit->CastSpell(hitUnit, StormwindCity::Spells::FadeToBlack, CastSpellExtraArgsInit{ + GetHitUnit()->CastSpell(nullptr, Spells::FadeToBlack, CastSpellExtraArgsInit{ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, .OriginalCastId = GetSpell()->m_castId }); @@ -531,12 +534,87 @@ class spell_the_kings_command_movie_aura : public SpellScript } }; +// 130804 - The King's Command Movie Aura class spell_the_kings_command_movie_aura_aura : public AuraScript { bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo({ - StormwindCity::Spells::MOPAllianceIntroMoviePlay + Spells::MOPAllianceIntroMoviePlay + }); + } + + void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const + { + GetTarget()->CastSpell(nullptr, Spells::MOPAllianceIntroMoviePlay, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR + }); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_the_kings_command_movie_aura_aura::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 140885 - Admiral Rogers Script Effect +class spell_admiral_rogers_script_effect : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::TeleportPrep + }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetHitUnit()->CastSpell(nullptr, Spells::TeleportPrep, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .OriginalCastId = GetSpell()->m_castId + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_admiral_rogers_script_effect::HandleHitTarget, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 130832 - Teleport Prep +class spell_teleport_prep_alliance : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::TeleportTimer + }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + Unit* hitUnit = GetHitUnit(); + + hitUnit->CancelMountAura(); + hitUnit->CastSpell(nullptr, Spells::TeleportTimer, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .OriginalCastId = GetSpell()->m_castId + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_teleport_prep_alliance::HandleHitTarget, EFFECT_0, SPELL_EFFECT_APPLY_AURA); + } +}; + +// 132032 - Teleport Timer +class spell_teleport_timer_alliance : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::TheMissionTeleportPlayer }); } @@ -544,19 +622,23 @@ class spell_the_kings_command_movie_aura_aura : public AuraScript { Unit* target = GetTarget(); - target->CastSpell(target, StormwindCity::Spells::MOPAllianceIntroMoviePlay, CastSpellExtraArgsInit{ + target->CancelTravelShapeshiftForm(); + target->CastSpell(nullptr, Spells::TheMissionTeleportPlayer, CastSpellExtraArgsInit{ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR }); } void Register() override { - AfterEffectRemove += AuraEffectRemoveFn(spell_the_kings_command_movie_aura_aura::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_teleport_timer_alliance::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; +} void AddSC_stormwind_city() { + using namespace Scripts::EasternKingdoms::StormwindCity; + // Creature RegisterCreatureAI(npc_jaina_proudmoore_tides_of_war); RegisterCreatureAI(npc_anduin_wrynn_nation_of_kultiras); @@ -577,4 +659,7 @@ void AddSC_stormwind_city() RegisterSpellScript(spell_despawn_sailor_memory); RegisterSpellScript(spell_kultiras_skip_intro); RegisterSpellAndAuraScriptPair(spell_the_kings_command_movie_aura, spell_the_kings_command_movie_aura_aura); + RegisterSpellScript(spell_admiral_rogers_script_effect); + RegisterSpellScript(spell_teleport_prep_alliance); + RegisterSpellScript(spell_teleport_timer_alliance); } |
