mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-29 08:33:47 +00:00
fix(Scripts/SunwellPlateau): Correct Felmyst spawn event (#21360)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user