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
5 changed files with 70 additions and 42 deletions

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)
{