diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 61bb9f333..8feeadedc 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -52,7 +52,12 @@ enum Spells SPELL_GRAVITY_LAPSE_FLY = 44227, SPELL_GRAVITY_LAPSE_DOT = 44226, SPELL_GRAVITY_LAPSE_CHANNEL = 44251, - SPELL_POWER_FEEDBACK = 44233 + SPELL_POWER_FEEDBACK = 44233, + SPELL_CLEAR_FLIGHT = 44232, // Does nothing currently + + SPELL_EMOTE_EXCLAMATION = 48348, + SPELL_EMOTE_POINT = 48349, + SPELL_EMOTE_ROAR = 48350 }; enum Misc @@ -72,7 +77,6 @@ struct boss_felblood_kaelthas : public BossAI void Reset() override { BossAI::Reset(); - _OOCScheduler.CancelAll(); _gravityLapseCounter = 0; me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); @@ -169,11 +173,12 @@ struct boss_felblood_kaelthas : public BossAI Talk(SAY_AGGRO_2, 20s); me->SetImmuneToAll(true); - _OOCScheduler.Schedule(35s, [this](TaskContext) { + + me->m_Events.AddEventAtOffset([&] { me->ClearEmoteState(); me->SetReactState(REACT_AGGRESSIVE); me->SetImmuneToAll(false); - }); + }, 35s); } } } @@ -185,19 +190,35 @@ struct boss_felblood_kaelthas : public BossAI damage = me->GetHealth() - 1; if (me->isRegeneratingHealth()) { + me->CombatStop(); me->CastStop(); me->SetRegeneratingHealth(false); me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE); me->SetImmuneToAll(true); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->CombatStop(); me->SetReactState(REACT_PASSIVE); LapseAction(ACTION_REMOVE_FLY); scheduler.CancelAll(); - _OOCScheduler.Schedule(6s, [this](TaskContext){ - me->KillSelf(); - }); + summons.DespawnAll(); + Talk(SAY_DEATH); + DoCastSelf(SPELL_EMOTE_EXCLAMATION); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_POINT); + }, 3s); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_ROAR); + }, 7s); + + me->m_Events.AddEventAtOffset([&] { + DoCastSelf(SPELL_EMOTE_ROAR); + DoCastSelf(SPELL_CLEAR_FLIGHT); + }, 9s); + + me->m_Events.AddEventAtOffset([&] { + me->KillSelf(); + }, 11s); } } BossAI::DamageTaken(attacker, damage, damagetype, damageSchoolMask); @@ -208,6 +229,9 @@ struct boss_felblood_kaelthas : public BossAI _gravityLapseCounter = 0; me->GetMap()->DoForAllPlayers([&](Player* player) { + if (player->IsGameMaster()) + return; + if (action == ACTION_TELEPORT_PLAYERS) DoCast(player, SPELL_GRAVITY_LAPSE_PLAYER + _gravityLapseCounter, true); else if (action == ACTION_KNOCKUP) @@ -222,14 +246,7 @@ struct boss_felblood_kaelthas : public BossAI ++_gravityLapseCounter; }); } - - void UpdateAI(uint32 diff) override - { - _OOCScheduler.Update(diff); - BossAI::UpdateAI(diff); - } private: - TaskScheduler _OOCScheduler; uint8 _gravityLapseCounter; }; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp index 5971f8369..74308a0bb 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/instance_magisters_terrace.cpp @@ -48,6 +48,7 @@ DoorData const doorData[] = { GO_SELIN_ENCOUNTER_DOOR, DATA_SELIN_FIREHEART, DOOR_TYPE_ROOM }, { GO_VEXALLUS_DOOR, DATA_VEXALLUS, DOOR_TYPE_PASSAGE }, { GO_DELRISSA_DOOR, DATA_DELRISSA, DOOR_TYPE_PASSAGE }, + { GO_KAEL_DOOR, DATA_KAELTHAS, DOOR_TYPE_ROOM }, { 0, 0, DOOR_TYPE_ROOM } // END };