aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2025-01-02 21:43:06 +0100
committerGitHub <noreply@github.com>2025-01-02 21:43:06 +0100
commit98206bf7e8ce423e266283758155464431c2bd8d (patch)
tree4c4956cce3bb3f7faffbd82d0b609e8ebfc404e0 /src/server/scripts/EasternKingdoms
parent7fbdedfd9a472752ff53e1c16eb77580a4274649 (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.cpp111
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);
}