fix(Scripts/SunwellPlateau): Correct Felmyst spawn event (#21360)

This commit is contained in:
Andrew 2025-02-09 15:55:58 -03:00 committed by GitHub
parent 3c8823a871
commit 2495ef4422
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 70 additions and 42 deletions

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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);
});
}

View File

@ -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);

View File

@ -106,6 +106,11 @@ enum GameObjectIds
GO_ORB_OF_THE_BLUE_DRAGONFLIGHT4 = 188116
};
enum SpellIds
{
SPELL_SUMMON_FELBLAZE = 45069 // Felblaze? Summons Felmyst
};
template <class AI, class T>
inline AI* GetSunwellPlateauAI(T* obj)
{