diff options
author | Andrew <47818697+Nyeriah@users.noreply.github.com> | 2024-11-16 08:33:12 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-16 08:33:12 -0300 |
commit | 59db107ed38a1e50f6beccfc34a5baf55620fe92 (patch) | |
tree | d1e87edba22108c26d4cb19561051a70041500d6 /src | |
parent | 48a0b7a460b53b048d942a65f52c85a5c8a89153 (diff) |
refactor(Scripts/SunwellPlateau): Update Kalecgos script (#20588)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp | 533 |
1 files changed, 201 insertions, 332 deletions
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 2c41d4a805..abb1b321c1 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -84,50 +84,28 @@ enum SWPActions ACTION_ENRAGE_OTHER = 5, }; -enum kalEvents -{ - EVENT_ARCANE_BUFFET = 1, - EVENT_FROST_BREATH = 2, - EVENT_WILD_MAGIC = 3, - EVENT_TAIL_LASH = 4, - EVENT_SPECTRAL_BLAST = 5, - EVENT_CHECK_HEALTH = 6, - EVENT_CHECK_HEALTH2 = 7, - EVENT_CHECK_POS = 8, - EVENT_SPAWN_SPECTRALS = 9, - - EVENT_SPELL_REVITALIZE = 10, - EVENT_SPELL_HEROIC_STRIKE = 11, - EVENT_SHADOW_BOLT = 12, - EVENT_AGONY_CURSE = 13, - EVENT_CORRUPTION_STRIKE = 14, - - EVENT_TALK_GOOD_1 = 20, - EVENT_TALK_GOOD_2 = 21, - EVENT_TALK_GOOD_3 = 22, - EVENT_TALK_GOOD_4 = 23, - EVENT_TALK_GOOD_5 = 24, - EVENT_TALK_BAD_1 = 25, - EVENT_TALK_BAD_2 = 26, - EVENT_TALK_BAD_3 = 27 -}; - #define DRAGON_REALM_Z 53.079f struct boss_kalecgos : public BossAI { boss_kalecgos(Creature* creature) : BossAI(creature, DATA_KALECGOS) { + SetInvincibility(true); } - bool sathBanished; - EventMap events2; - bool CanAIAttack(Unit const* target) const override { return target->GetPositionZ() > 50.0f; } + bool CheckInRoom() override + { + if (me->GetDistance(me->GetHomePosition()) > 50.0f) + return false; + + return true; + } + void JustReachedHome() override { BossAI::JustReachedHome(); @@ -137,15 +115,24 @@ struct boss_kalecgos : public BossAI void Reset() override { BossAI::Reset(); - me->SetHealth(me->GetMaxHealth()); + me->SetFullHealth(); me->SetStandState(UNIT_STAND_STATE_SLEEP); me->SetDisableGravity(false); me->SetReactState(REACT_AGGRESSIVE); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - events2.Reset(); - sathBanished = false; + _sathBanished = false; ClearPlayerAuras(); + + ScheduleHealthCheckEvent(10, [&] { + if (Creature* Sath = instance->GetCreature(DATA_SATHROVARR)) + Sath->AI()->DoAction(ACTION_ENRAGE_OTHER); + DoAction(ACTION_ENRAGE); + }); + + ScheduleHealthCheckEvent(1, [&] { + DoAction(ACTION_BANISH); + }); } void ClearPlayerAuras() const @@ -160,29 +147,75 @@ struct boss_kalecgos : public BossAI if (param == ACTION_ENRAGE || param == ACTION_ENRAGE_OTHER) { Talk(param == ACTION_ENRAGE ? SAY_KALEC_ENRAGE_SATH : SAY_SATH_ENRAGE_ME); - me->CastSpell(me, SPELL_CRAZED_RAGE, true); - events.CancelEvent(EVENT_CHECK_HEALTH); + DoCastSelf(SPELL_CRAZED_RAGE, true); return; } else if (param == ACTION_BANISH) { - me->CastSpell(me, SPELL_BANISH, true); - events.Reset(); + DoCastSelf(SPELL_BANISH, true); + scheduler.CancelAll(); } else if (param == ACTION_SATH_BANISH) - sathBanished = true; + _sathBanished = true; else if (param == ACTION_KALEC_DIED) { - events.Reset(); - events2.ScheduleEvent(EVENT_TALK_BAD_1, 0); + scheduler.CancelAll(); + + me->m_Events.AddEventAtOffset([&] { + me->SetReactState(REACT_PASSIVE); + me->CombatStop(); + me->RemoveAllAuras(); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + Talk(SAY_EVIL_ENRAGE); + }, 1s); + + me->m_Events.AddEventAtOffset([&] { + me->SetDisableGravity(true); + me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); + }, 4s); + + me->m_Events.AddEventAtOffset([&] { + me->SetVisible(false); + EnterEvadeMode(); + }, 9s); + ClearPlayerAuras(); return; } - if (me->HasAura(SPELL_BANISH) && sathBanished) + if (me->HasAura(SPELL_BANISH) && _sathBanished) { - events.Reset(); - events2.ScheduleEvent(EVENT_TALK_GOOD_1, 1000); + scheduler.CancelAll(); + + me->m_Events.AddEventAtOffset([&] { + me->SetRegeneratingHealth(false); + me->RemoveAllAuras(); + me->SetReactState(REACT_PASSIVE); + me->CombatStop(); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetFaction(FACTION_FRIENDLY); + }, 1s); + + me->m_Events.AddEventAtOffset([&] { + if (Creature* Sath = instance->GetCreature(DATA_SATHROVARR)) + { + summons.Despawn(Sath); + Unit::Kill(me, Sath); + } + }, 2s); + + Talk(SAY_GOOD_PLRWIN, 10s); + + me->m_Events.AddEventAtOffset([&] { + me->SetDisableGravity(true); + me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); + }, 15s); + + me->m_Events.AddEventAtOffset([&] { + me->SetVisible(false); + me->KillSelf(); + }, 20s); + ClearPlayerAuras(); if (Creature* Sath = instance->GetCreature(DATA_SATHROVARR)) { @@ -194,160 +227,47 @@ struct boss_kalecgos : public BossAI } } - void JustDied(Unit* killer) override - { - BossAI::JustDied(killer); - } - void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_ARCANE_BUFFET, 6000); - events.ScheduleEvent(EVENT_FROST_BREATH, 15000); - events.ScheduleEvent(EVENT_WILD_MAGIC, 10000); - events.ScheduleEvent(EVENT_TAIL_LASH, 25000); - events.ScheduleEvent(EVENT_SPECTRAL_BLAST, 20000); - events.ScheduleEvent(EVENT_CHECK_POS, 5000); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - events.ScheduleEvent(EVENT_SPAWN_SPECTRALS, 16000); + + ScheduleTimedEvent(6s, [&] { + DoCastAOE(SPELL_ARCANE_BUFFET); + }, 8s); + + ScheduleTimedEvent(15s, [&] { + DoCastVictim(SPELL_FROST_BREATH); + }, 15s); + + ScheduleTimedEvent(10s, [&] { + me->CastCustomSpell(RAND(44978, 45001, 45002, 45004, 45006, 45010), SPELLVALUE_MAX_TARGETS, 1, me, false); + }, 20s); + + ScheduleTimedEvent(25s, [&] { + DoCastVictim(SPELL_TAIL_LASH); + }, 15s); + + ScheduleTimedEvent(20s, [&] { + DoCastAOE(SPELL_SPECTRAL_BLAST); + }, 15s, 25s); + + me->m_Events.AddEventAtOffset([&] { + me->SummonCreature(NPC_KALEC, 1702.21f, 931.7f, -74.56f, 5.07f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_SATHROVARR, 1704.62f, 927.78f, -73.9f, 2.0f, TEMPSUMMON_MANUAL_DESPAWN); + }, 16s); me->SetStandState(UNIT_STAND_STATE_STAND); Talk(SAY_EVIL_AGGRO); } - void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - if (damage >= me->GetHealth() && attacker != me) - damage = 0; - } - void KilledUnit(Unit* victim) override { if (victim->IsPlayer() && roll_chance_i(50)) Talk(SAY_EVIL_SLAY); } - void UpdateAI(uint32 diff) override - { - events2.Update(diff); - switch (events2.ExecuteEvent()) - { - case EVENT_TALK_GOOD_1: - me->SetRegeneratingHealth(false); - me->RemoveAllAuras(); - me->SetReactState(REACT_PASSIVE); - me->CombatStop(); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetFaction(FACTION_FRIENDLY); - events2.ScheduleEvent(EVENT_TALK_GOOD_2, 1000); - break; - case EVENT_TALK_GOOD_2: - if (Creature* Sath = instance->GetCreature(DATA_SATHROVARR)) - { - summons.Despawn(Sath); - Unit::Kill(me, Sath); - } - events2.ScheduleEvent(EVENT_TALK_GOOD_3, 8000); - break; - case EVENT_TALK_GOOD_3: - Talk(SAY_GOOD_PLRWIN); - events2.ScheduleEvent(EVENT_TALK_GOOD_4, 10000); - break; - case EVENT_TALK_GOOD_4: - me->SetDisableGravity(true); - me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - events2.ScheduleEvent(EVENT_TALK_GOOD_5, 10000); - break; - case EVENT_TALK_GOOD_5: - me->SetVisible(false); - me->KillSelf(); - break; - case EVENT_TALK_BAD_1: - me->SetReactState(REACT_PASSIVE); - me->CombatStop(); - me->RemoveAllAuras(); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - Talk(SAY_EVIL_ENRAGE); - events2.ScheduleEvent(EVENT_TALK_BAD_2, 3000); - break; - case EVENT_TALK_BAD_2: - me->SetDisableGravity(true); - me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - events2.ScheduleEvent(EVENT_TALK_BAD_3, 15000); - break; - case EVENT_TALK_BAD_3: - me->SetVisible(false); - EnterEvadeMode(); - break; - } - - if (!events2.Empty()) - return; - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPAWN_SPECTRALS: - me->SummonCreature(NPC_KALEC, 1702.21f, 931.7f, -74.56f, 5.07f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_SATHROVARR, 1704.62f, 927.78f, -73.9f, 2.0f, TEMPSUMMON_MANUAL_DESPAWN); - break; - case EVENT_ARCANE_BUFFET: - me->CastSpell(me, SPELL_ARCANE_BUFFET, false); - events.ScheduleEvent(EVENT_ARCANE_BUFFET, 8000); - break; - case EVENT_FROST_BREATH: - me->CastSpell(me->GetVictim(), SPELL_FROST_BREATH, false); - events.ScheduleEvent(EVENT_FROST_BREATH, 15000); - break; - case EVENT_TAIL_LASH: - me->CastSpell(me->GetVictim(), SPELL_TAIL_LASH, false); - events.ScheduleEvent(EVENT_TAIL_LASH, 15000); - break; - case EVENT_WILD_MAGIC: - me->CastCustomSpell(RAND(44978, 45001, 45002, 45004, 45006, 45010), SPELLVALUE_MAX_TARGETS, 1, me, false); - events.ScheduleEvent(EVENT_WILD_MAGIC, 20000); - break; - case EVENT_SPECTRAL_BLAST: - me->CastSpell(me, SPELL_SPECTRAL_BLAST, false); - events.ScheduleEvent(EVENT_SPECTRAL_BLAST, urand(15000, 25000)); - break; - case EVENT_CHECK_POS: - if (me->GetDistance(me->GetHomePosition()) > 50.0f) - { - EnterEvadeMode(); - return; - } - events.ScheduleEvent(EVENT_CHECK_POS, 5000); - break; - case EVENT_CHECK_HEALTH: - if (me->HealthBelowPct(10)) - { - if (Creature* Sath = instance->GetCreature(DATA_SATHROVARR)) - Sath->AI()->DoAction(ACTION_ENRAGE_OTHER); - DoAction(ACTION_ENRAGE); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - break; - case EVENT_CHECK_HEALTH2: - if (me->HealthBelowPct(1)) - { - DoAction(ACTION_BANISH); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - break; - } - - DoMeleeAttackIfReady(); - } + private: + bool _sathBanished; }; enum Kalec @@ -362,41 +282,66 @@ enum Kalec struct boss_kalec : public ScriptedAI { - boss_kalec(Creature* creature) : ScriptedAI(creature) { } - - EventMap events; - EventMap events2; + boss_kalec(Creature* creature) : ScriptedAI(creature) + { + SetInvincibility(true); + } void Reset() override { - events.Reset(); - events2.Reset(); if (me->GetPositionY() < 750.0f) { me->SetSpeed(MOVE_RUN, 2.4f); me->SetDisplayId(MODEL_KALECGOS_DRAGON); me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(0, 1483.30f, 657.99f, 28.0f, false, true); - events2.ScheduleEvent(EVENT_KALEC_SCENE_1, 9000); - events2.ScheduleEvent(EVENT_KALEC_SCENE_2, 16000); - events2.ScheduleEvent(EVENT_KALEC_SCENE_3, 22000); + + me->m_Events.AddEventAtOffset([&] { + Talk(SAY_GOOD_MADRIGOSA); + me->GetMotionMaster()->MovePoint(0, 1509.0f, 560.0f, 30.0f, false, true); + }, 9s); + + me->m_Events.AddEventAtOffset([&] { + DoCastAOE(SPELL_OPEN_BRUTALLUS_BACK_DOOR, true); + me->GetInstanceScript()->SetBossState(DATA_FELMYST_DOORS, NOT_STARTED); + me->GetInstanceScript()->SetBossState(DATA_FELMYST_DOORS, DONE); + }, 16s); + + me->m_Events.AddEventAtOffset([&] { + me->GetMotionMaster()->MovePoint(0, 1400.0f, 630.0f, 90.0f, false, true); + me->DespawnOrUnsummon(6000); + }, 22s); } else - me->CastSpell(me, SPELL_SPECTRAL_INVISIBILITY, true); - } - - void DamageTaken(Unit* who, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - if (!who || who->GetEntry() != NPC_SATHROVARR) - damage = 0; + DoCastSelf(SPELL_SPECTRAL_INVISIBILITY, true); } void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - events.ScheduleEvent(EVENT_SPELL_REVITALIZE, 5000); - events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, 3000); + ScheduleTimedEvent(5s, [&] { + DoCastSelf(SPELL_REVITALIZE); + }, 10s); + + ScheduleTimedEvent(3s, [&] { + DoCastVictim(SPELL_HEROIC_STRIKE); + }, 5s); + + scheduler.Schedule(1s, [this](TaskContext context) + { + if (me->HealthBelowPct(50)) + Talk(SAY_GOOD_NEAR_DEATH); + else + context.Repeat(); + }); + + scheduler.Schedule(1s, [this](TaskContext context) + { + if (me->HealthBelowPct(10)) + Talk(SAY_GOOD_NEAR_DEATH2); + else + context.Repeat(); + }); + Talk(SAY_GOOD_AGGRO); } @@ -409,60 +354,11 @@ struct boss_kalec : public ScriptedAI void UpdateAI(uint32 diff) override { - events2.Update(diff); - switch (events2.ExecuteEvent()) - { - case EVENT_KALEC_SCENE_1: - Talk(SAY_GOOD_MADRIGOSA); - me->GetMotionMaster()->MovePoint(0, 1509.0f, 560.0f, 30.0f, false, true); - break; - case EVENT_KALEC_SCENE_2: - me->CastSpell(me, SPELL_OPEN_BRUTALLUS_BACK_DOOR, true); - me->GetInstanceScript()->SetBossState(DATA_FELMYST_DOORS, NOT_STARTED); - me->GetInstanceScript()->SetBossState(DATA_FELMYST_DOORS, DONE); - break; - case EVENT_KALEC_SCENE_3: - me->GetMotionMaster()->MovePoint(0, 1400.0f, 630.0f, 90.0f, false, true); - me->DespawnOrUnsummon(6000); - break; - } - if (!UpdateVictim()) return; - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_CHECK_HEALTH: - if (me->HealthBelowPct(50)) - { - Talk(SAY_GOOD_NEAR_DEATH); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - break; - case EVENT_CHECK_HEALTH2: - if (me->HealthBelowPct(10)) - { - Talk(SAY_GOOD_NEAR_DEATH2); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - break; - case EVENT_SPELL_REVITALIZE: - me->CastSpell(me, SPELL_REVITALIZE, false); - events.ScheduleEvent(EVENT_SPELL_REVITALIZE, 10000); - break; - case EVENT_SPELL_HEROIC_STRIKE: - me->CastSpell(me->GetVictim(), SPELL_HEROIC_STRIKE, false); - events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, 5000); - break; - } - - DoMeleeAttackIfReady(); + scheduler.Update(diff, + std::bind(&BossAI::DoMeleeAttackIfReady, this)); } }; @@ -470,12 +366,10 @@ struct boss_sathrovarr : public ScriptedAI { boss_sathrovarr(Creature* creature) : ScriptedAI(creature) { - instance = creature->GetInstanceScript(); + _instance = creature->GetInstanceScript(); + SetInvincibility(true); } - InstanceScript* instance; - EventMap events; - bool CanAIAttack(Unit const* target) const override { return target->GetPositionZ() < 50.0f; @@ -483,26 +377,53 @@ struct boss_sathrovarr : public ScriptedAI void Reset() override { - events.Reset(); - me->CastSpell(me, SPELL_DEMONIC_VISUAL, true); - me->CastSpell(me, SPELL_SPECTRAL_INVISIBILITY, true); - - events.ScheduleEvent(EVENT_SHADOW_BOLT, 7000); - events.ScheduleEvent(EVENT_AGONY_CURSE, 20000); - events.ScheduleEvent(EVENT_CORRUPTION_STRIKE, 13000); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); + DoCastSelf(SPELL_DEMONIC_VISUAL, true); + DoCastSelf(SPELL_SPECTRAL_INVISIBILITY, true); } void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_SATH_AGGRO); - } - void DamageTaken(Unit* who, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - if (damage >= me->GetHealth() && who != me) - damage = 0; + ScheduleTimedEvent(7s, [&] { + if (roll_chance_i(20)) + Talk(SAY_SATH_SPELL1); + DoCastVictim(SPELL_SHADOW_BOLT); + }, 9s); + + ScheduleTimedEvent(20s, [&] { + me->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY, SPELLVALUE_MAX_TARGETS, 1, me, false); + }, 30s); + + ScheduleTimedEvent(20s, [&] { + if (roll_chance_i(20)) + Talk(SAY_SATH_SPELL2); + DoCastVictim(SPELL_CORRUPTION_STRIKE); + }, 9s); + + scheduler.Schedule(1s, [this](TaskContext context) + { + if (me->HealthBelowPct(10)) + { + if (Creature* kalecgos = _instance->GetCreature(DATA_KALECGOS)) + kalecgos->AI()->DoAction(ACTION_ENRAGE_OTHER); + DoAction(ACTION_ENRAGE); + } + else + context.Repeat(); + }); + + scheduler.Schedule(1s, [this](TaskContext context) + { + if (me->HealthBelowPct(1)) + { + if (Creature* kalecgos = _instance->GetCreature(DATA_KALECGOS)) + kalecgos->AI()->DoAction(ACTION_SATH_BANISH); + DoAction(ACTION_BANISH); + } + else + context.Repeat(); + }); } void KilledUnit(Unit* target) override @@ -519,15 +440,9 @@ struct boss_sathrovarr : public ScriptedAI void DoAction(int32 param) override { if (param == ACTION_ENRAGE || param == ACTION_ENRAGE_OTHER) - { - me->CastSpell(me, SPELL_CRAZED_RAGE, true); - events.CancelEvent(EVENT_CHECK_HEALTH); - } + DoCastSelf(SPELL_CRAZED_RAGE, true); else if (param == ACTION_BANISH) - { - me->CastSpell(me, SPELL_BANISH, true); - events.Reset(); - } + DoCastSelf(SPELL_BANISH, true); } void UpdateAI(uint32 diff) override @@ -535,58 +450,12 @@ struct boss_sathrovarr : public ScriptedAI if (!UpdateVictim()) return; - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SHADOW_BOLT: - if (roll_chance_i(20)) - Talk(SAY_SATH_SPELL1); - me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); - events.ScheduleEvent(EVENT_SHADOW_BOLT, 9000); - break; - case EVENT_AGONY_CURSE: - me->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.ScheduleEvent(EVENT_AGONY_CURSE, 30000); - break; - case EVENT_CORRUPTION_STRIKE: - if (roll_chance_i(20)) - Talk(SAY_SATH_SPELL2); - me->CastSpell(me->GetVictim(), SPELL_CORRUPTION_STRIKE, false); - events.ScheduleEvent(EVENT_CORRUPTION_STRIKE, 9000); - break; - case EVENT_CHECK_HEALTH: - if (me->HealthBelowPct(10)) - { - if (InstanceScript* instanceScript = me->GetInstanceScript()) - { - if (Creature* kalecgos = ObjectAccessor::GetCreature(*me, instanceScript->GetGuidData( - NPC_KALECGOS))) - { - kalecgos->AI()->DoAction(ACTION_ENRAGE_OTHER); - } - } - DoAction(ACTION_ENRAGE); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - break; - case EVENT_CHECK_HEALTH2: - if (me->HealthBelowPct(1)) - { - if (Creature* kalecgos = instance->GetCreature(DATA_KALECGOS)) - kalecgos->AI()->DoAction(ACTION_SATH_BANISH); - DoAction(ACTION_BANISH); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - break; - } - - DoMeleeAttackIfReady(); + scheduler.Update(diff, + std::bind(&BossAI::DoMeleeAttackIfReady, this)); } + +private: + InstanceScript* _instance; }; class SpectralBlastCheck |