diff options
author | Meji <alvaro.megias@outlook.com> | 2025-05-16 08:30:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-16 08:30:21 +0200 |
commit | 77d1605700e30f5cd753a6f562ad7b9566857a9b (patch) | |
tree | cb31424497f9bf5f64fd8dda791159d6c50e61cd /src/server | |
parent | 23b216aa67f3d348ce209b93262d75678642d77c (diff) |
Scripts/TheJadeForest: Implement quest "Paint it Red!" (31765) (#30884)
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 31 | ||||
-rw-r--r-- | src/server/scripts/Pandaria/zone_the_jade_forest.cpp | 94 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 16 |
3 files changed, 141 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 09580e87dff..0d096f7bca2 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -5004,6 +5004,37 @@ void SpellMgr::LoadSpellInfoCorrections() // ENDOF THE WANDERING ISLE SPELLS // + // + // JADE FOREST SPELLS + // + + // Shredder Round + ApplySpellFix({ 130162 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(245); // Five Hundred Yards + }); + + // Cannon Explosion + ApplySpellFix({ 130237 }, [](SpellInfo* spellInfo) + { + ApplySpellEffectFix(spellInfo, EFFECT_1, [](SpellEffectInfo* spellEffectInfo) + { + spellEffectInfo->Effect = SPELL_EFFECT_NONE; + }); + }); + + // Summon Gunship Turret, Left + // Summon Gunship Turret, Middle + // Summon Gunship Turret, Right + ApplySpellFix({ 130996, 130997, 130998 }, [](SpellInfo* spellInfo) + { + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(12); // Interact Range + spellInfo->AttributesEx4 &= ~SPELL_ATTR4_USE_FACING_FROM_SPELL; + }); + + // ENDOF JADE FOREST SPELLS + // + // Earthquake ApplySpellFix({ 61882 }, [](SpellInfo* spellInfo) { diff --git a/src/server/scripts/Pandaria/zone_the_jade_forest.cpp b/src/server/scripts/Pandaria/zone_the_jade_forest.cpp index 593933bac3b..4c3ff748c8c 100644 --- a/src/server/scripts/Pandaria/zone_the_jade_forest.cpp +++ b/src/server/scripts/Pandaria/zone_the_jade_forest.cpp @@ -16,6 +16,8 @@ */ #include "ScriptMgr.h" +#include "PhasingHandler.h" +#include "Player.h" #include "Spell.h" #include "SpellAuraEffects.h" #include "SpellScript.h" @@ -23,6 +25,11 @@ namespace Scripts::Pandaria::TheJadeForest { +namespace Quests +{ + static constexpr uint32 PaintItRed = 31765; +} + namespace Spells { // Into the Mists & The Mission @@ -38,6 +45,11 @@ namespace Spells static constexpr uint32 TeleportPrepAlliance = 130832; static constexpr uint32 TheMissionTeleportPlayer = 130321; static constexpr uint32 TheMissionSceneJF = 131057; + + // Paint it Red! + static constexpr uint32 AbandonVehicle = 92678; + static constexpr uint32 CannonExplosionTrigger = 130234; + static constexpr uint32 BarrelExplosionTrigger = 130247; } // 121545 - Into the Mists Scene - JF @@ -180,6 +192,85 @@ class spell_cancel_blackout : public AuraScript AfterEffectRemove += AuraEffectRemoveFn(spell_cancel_blackout::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; + +// 130996 - Summon Gunship Turret, Left +// 130997 - Summon Gunship Turret, Middle +// 130998 - Summon Gunship Turret, Right +class spell_summon_gunship_turret : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::AbandonVehicle + }); + } + + void OnPeriodic(AuraEffect const* /*aurEff*/) const + { + if (Player* playerTarget = GetTarget()->ToPlayer()) + if (playerTarget->GetQuestStatus(Quests::PaintItRed) == QUEST_STATUS_COMPLETE) + playerTarget->CastSpell(nullptr, Spells::AbandonVehicle, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR + }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const + { + PhasingHandler::OnConditionChange(GetTarget()); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_summon_gunship_turret::OnPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + AfterEffectApply += AuraEffectApplyFn(spell_summon_gunship_turret::AfterApply, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 130233 - Cannon Explosion Reversecast +class spell_cannon_explosion_reversecast : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::CannonExplosionTrigger + }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetHitUnit()->CastSpell(GetCaster(), Spells::CannonExplosionTrigger, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_cannon_explosion_reversecast::HandleHitTarget, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 130246 - Barrel Explosion Reversecast +class spell_barrel_explosion_reversecast : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ + Spells::BarrelExplosionTrigger + }); + } + + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetHitUnit()->CastSpell(GetCaster(), Spells::BarrelExplosionTrigger, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_barrel_explosion_reversecast::HandleHitTarget, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; } void AddSC_zone_the_jade_forest() @@ -192,4 +283,7 @@ void AddSC_zone_the_jade_forest() RegisterSpellScript(spell_the_mission_scene_jf); RegisterSpellScript(spell_the_mission_scene_end); RegisterSpellScript(spell_cancel_blackout); + RegisterSpellScript(spell_summon_gunship_turret); + RegisterSpellScript(spell_cannon_explosion_reversecast); + RegisterSpellScript(spell_barrel_explosion_reversecast); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 8831ab23a0c..42bd92eeb4c 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4922,6 +4922,7 @@ class spell_gen_eject_passengers_3_8 : public SpellScript }; // 83781 - Reverse Cast Ride Vehicle +// 85299 - Reverse Cast Ride Seat 1 // 258344 - Reverse Cast Ride Vehicle class spell_gen_reverse_cast_target_to_caster_triggered: public SpellScript { @@ -5609,6 +5610,20 @@ private: float _healthPct; }; +// 92678 - Abandon Vehicle +class spell_gen_abandon_vehicle : public SpellScript +{ + void HandleHitTarget(SpellEffIndex /*effIndex*/) const + { + GetHitUnit()->ExitVehicle(); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_gen_abandon_vehicle::HandleHitTarget, EFFECT_FIRST_FOUND, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_gen_absorb0_hitlimit1); @@ -5796,4 +5811,5 @@ void AddSC_generic_spell_scripts() RegisterAreaTriggerAI(at_gen_spatial_rift); RegisterSpellScript(spell_gen_force_phase_update); RegisterSpellScriptWithArgs(spell_gen_no_npc_damage_below_override, "spell_gen_no_npc_damage_below_override_70", 70.0f); + RegisterSpellScript(spell_gen_abandon_vehicle); } |