From 2495ef4422e35f0e153378d23260ed826f900dae Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 9 Feb 2025 15:55:58 -0300 Subject: [PATCH] fix(Scripts/SunwellPlateau): Correct Felmyst spawn event (#21360) --- .../rev_1738993270260395300.sql | 31 ++++++++++ .../SunwellPlateau/boss_brutallus.cpp | 3 +- .../SunwellPlateau/boss_felmyst.cpp | 61 +++++++------------ .../instance_sunwell_plateau.cpp | 12 ++++ .../SunwellPlateau/sunwell_plateau.h | 5 ++ 5 files changed, 70 insertions(+), 42 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1738993270260395300.sql diff --git a/data/sql/updates/pending_db_world/rev_1738993270260395300.sql b/data/sql/updates/pending_db_world/rev_1738993270260395300.sql new file mode 100644 index 000000000..7004e7058 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1738993270260395300.sql @@ -0,0 +1,31 @@ +-- +UPDATE `creature_template_movement` SET `Flight` = 2 WHERE `CreatureId` = 25038; + +DELETE FROM `creature` WHERE `id1` = 25038; + +-- Pathing for Entry: 25038 +SET @NPC := 25038; +SET @PATH := @NPC * 10; +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,1469.8419,617.6385,43.109043,0,0,2,0,100,0), +(@PATH,2,1457.057,601.483,45.94235,0,0,2,0,100,0), +(@PATH,3,1441.8115,579.3153,47.886784,0,0,2,0,100,0), +(@PATH,4,1436.9575,553.7235,48.136852,0,0,2,0,100,0), +(@PATH,5,1445.1992,530.0166,47.609146,0,0,2,0,100,0), +(@PATH,6,1466.5448,511.74057,46.942425,0,0,2,0,100,0), +(@PATH,7,1495.123,512.1063,47.056377,0,0,2,0,100,0), +(@PATH,8,1508.4324,531.7451,46.67483,0,0,2,0,100,0), +(@PATH,9,1511.3053,556.9556,46.87133,0,0,2,0,100,0), +(@PATH,10,1507.6771,580.32935,47.010162,0,0,2,0,100,0), +(@PATH,11,1497.4128,601.9794,47.37127,0,0,0,2,100,0), +(@PATH,12,1479.3727,624.20746,47.287914,0,0,2,0,100,0), +(@PATH,13,1467.832,637.91895,46.565674,0,0,2,0,100,0), +(@PATH,14,1449.8766,658.87976,46.037872,0,0,2,0,100,0), +(@PATH,15,1442.1505,681.62445,45.26012,0,0,2,0,100,0), +(@PATH,16,1438.8881,713.9516,44.95452,0,0,2,0,100,0), +(@PATH,17,1452.2178,737.73157,44.23236,0,0,2,0,100,0), +(@PATH,18,1476.1324,743.0824,43.843422,0,0,2,0,100,0), +(@PATH,19,1498.3573,726.6184,43.843445,0,0,2,0,100,0), +(@PATH,20,1503.4194,693.78595,44.26011,0,0,2,0,100,0), +(@PATH,21,1496.3456,664.36005,43.037888,0,0,2,0,100,0); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 6f464d7d1..abd2df2d8 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -354,9 +354,8 @@ struct npc_madrigosa : public NullCreatureAI } break; case EVENT_SPAWN_FELMYST: + DoCastAOE(SPELL_SUMMON_FELBLAZE, true); me->DespawnOrUnsummon(1); - if (Creature* felmyst = instance->GetCreature(DATA_FELMYST)) - felmyst->AI()->DoAction(ACTION_START_EVENT); break; } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 0b94483fb..709cae438 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -100,41 +100,35 @@ private: struct boss_felmyst : public BossAI { - boss_felmyst(Creature* creature) : BossAI(creature, DATA_FELMYST) - { - bool appear = instance->GetBossState(DATA_BRUTALLUS) == DONE; - creature->SetVisible(appear); - creature->SetStandState(UNIT_STAND_STATE_SLEEP); - creature->SetReactState(REACT_PASSIVE); - } + boss_felmyst(Creature* creature) : BossAI(creature, DATA_FELMYST) { } - void DoAction(int32 param) override + void InitializeAI() override { - if (param == ACTION_START_EVENT) - { - me->SetVisible(true); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - StartIntro(); - } + me->SetStandState(UNIT_STAND_STATE_SLEEP); + me->SetReactState(REACT_PASSIVE); + me->SetImmuneToPC(true); + StartIntro(); } void Reset() override { BossAI::Reset(); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetReactState(REACT_PASSIVE); - me->SetDisableGravity(false); me->m_Events.KillAllEvents(false); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_FOG_OF_CORRUPTION_CHARM); + me->SetCanFly(true); + me->SetDisableGravity(true); + me->SendMovementFlagUpdate(); } void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - - if (!scheduler.IsGroupScheduled(GROUP_START_INTRO)) - StartIntro(); + me->CastSpell(me, SPELL_NOXIOUS_FUMES, true); + me->m_Events.AddEventAtOffset([&] { + Talk(YELL_BERSERK); + DoCastSelf(SPELL_BERSERK, true); + }, 10min); + me->GetMotionMaster()->MovePoint(POINT_GROUND, who->GetPosition(), false, true); } void KilledUnit(Unit* victim) override @@ -161,6 +155,7 @@ struct boss_felmyst : public BossAI if (point == POINT_GROUND) { me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); + me->SetCanFly(false); me->SetDisableGravity(false); me->SendMovementFlagUpdate(); SetInvincibility(false); @@ -172,7 +167,7 @@ struct boss_felmyst : public BossAI me->SetTarget(me->GetVictim()->GetGUID()); me->ResumeChasingVictim(); - }, 1s); + }, 2s); ScheduleTimedEvent(7500ms, [&] { DoCastVictim(SPELL_CLEAVE); @@ -306,30 +301,16 @@ struct boss_felmyst : public BossAI me->m_Events.AddEventAtOffset([&] { Talk(YELL_BIRTH); + me->SetCanFly(true); me->SetDisableGravity(true); - me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); me->SendMovementFlagUpdate(); + me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); }, 7s); me->m_Events.AddEventAtOffset([&] { - me->GetMotionMaster()->MovePoint(POINT_AIR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 10.0f, false, true); + me->SetImmuneToPC(false); + me->GetMotionMaster()->MovePath(me->GetEntry() * 10, true); }, 8500ms); - - me->m_Events.AddEventAtOffset([&] { - me->SetInCombatWithZone(); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->CastSpell(me, SPELL_NOXIOUS_FUMES, true); - me->GetMotionMaster()->MovePoint(POINT_MISC, 1472.18f, 603.38f, 34.0f, false, true); - - me->m_Events.AddEventAtOffset([&] { - me->GetMotionMaster()->MovePoint(POINT_GROUND, me->GetPositionX(), me->GetPositionY(), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), false, true); - }, 3s); - - me->m_Events.AddEventAtOffset([&] { - Talk(YELL_BERSERK); - DoCastSelf(SPELL_BERSERK, true); - }, 10min); - }, 10500ms); }); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp index a37aa61c4..03c85d228 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/instance_sunwell_plateau.cpp @@ -89,6 +89,18 @@ public: LoadSummonData(summonData); } + void Load(char const* data) override + { + InstanceScript::Load(data); + + scheduler.Schedule(3s, [this](TaskContext /*context*/) + { + if (IsBossDone(DATA_BRUTALLUS) && !IsBossDone(DATA_FELMYST)) + if (Creature* madrigosa = GetCreature(DATA_MADRIGOSA)) + madrigosa->CastSpell((Unit*)nullptr, SPELL_SUMMON_FELBLAZE, true); + }); + } + void OnPlayerEnter(Player* player) override { instance->LoadGrid(1477.94f, 643.22f); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h index 83f8705a4..9db46986d 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/sunwell_plateau.h @@ -106,6 +106,11 @@ enum GameObjectIds GO_ORB_OF_THE_BLUE_DRAGONFLIGHT4 = 188116 }; +enum SpellIds +{ + SPELL_SUMMON_FELBLAZE = 45069 // Felblaze? Summons Felmyst +}; + template inline AI* GetSunwellPlateauAI(T* obj) {