feat(Core/Scripts): Allow scheduling multiple hp checks at once for i… (#15897)
feat(Core/Scripts): Allow scheduling multiple hp checks at once for identical phases
This commit is contained in:
@@ -691,6 +691,14 @@ void BossAI::ScheduleHealthCheckEvent(uint32 healthPct, std::function<void()> ex
|
|||||||
_healthCheckEvents.push_back(HealthCheckEventData(healthPct, exec));
|
_healthCheckEvents.push_back(HealthCheckEventData(healthPct, exec));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void BossAI::ScheduleHealthCheckEvent(std::initializer_list<uint8> healthPct, std::function<void()> exec)
|
||||||
|
{
|
||||||
|
for (auto const& checks : healthPct)
|
||||||
|
{
|
||||||
|
_healthCheckEvents.push_back(HealthCheckEventData(checks, exec));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool BossAI::_ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function<void()> exec) const
|
bool BossAI::_ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function<void()> exec) const
|
||||||
{
|
{
|
||||||
if (me->HealthBelowPctDamaged(healthPct, damage))
|
if (me->HealthBelowPctDamaged(healthPct, damage))
|
||||||
|
|||||||
@@ -470,6 +470,7 @@ public:
|
|||||||
void UpdateAI(uint32 diff) override;
|
void UpdateAI(uint32 diff) override;
|
||||||
|
|
||||||
void ScheduleHealthCheckEvent(uint32 healthPct, std::function<void()> exec);
|
void ScheduleHealthCheckEvent(uint32 healthPct, std::function<void()> exec);
|
||||||
|
void ScheduleHealthCheckEvent(std::initializer_list<uint8> healthPct, std::function<void()> exec);
|
||||||
|
|
||||||
// Hook used to execute events scheduled into EventMap without the need
|
// Hook used to execute events scheduled into EventMap without the need
|
||||||
// to override UpdateAI
|
// to override UpdateAI
|
||||||
|
|||||||
@@ -56,16 +56,19 @@ struct boss_talon_king_ikiss : public BossAI
|
|||||||
_Reset();
|
_Reset();
|
||||||
_spoken = false;
|
_spoken = false;
|
||||||
|
|
||||||
ScheduleHealthCheckEvent(80, [&] {
|
ScheduleHealthCheckEvent({ 80, 50, 25 }, [&] {
|
||||||
TeleportAndCastExplosion();
|
me->InterruptNonMeleeSpells(false);
|
||||||
});
|
DoCastAOE(SPELL_BLINK);
|
||||||
|
DoCastSelf(SPELL_ARCANE_BUBBLE, true);
|
||||||
|
Talk(EMOTE_ARCANE_EXP);
|
||||||
|
|
||||||
ScheduleHealthCheckEvent(50, [&] {
|
scheduler.Schedule(1s, [this](TaskContext)
|
||||||
TeleportAndCastExplosion();
|
{
|
||||||
});
|
DoCastAOE(SPELL_ARCANE_EXPLOSION);
|
||||||
|
}).Schedule(6500ms, [this](TaskContext /*context*/)
|
||||||
ScheduleHealthCheckEvent(25, [&] {
|
{
|
||||||
TeleportAndCastExplosion();
|
me->GetThreatMgr().ResetAllThreat();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
ScheduleHealthCheckEvent(20, [&] {
|
ScheduleHealthCheckEvent(20, [&] {
|
||||||
@@ -79,22 +82,6 @@ struct boss_talon_king_ikiss : public BossAI
|
|||||||
return _spoken;
|
return _spoken;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeleportAndCastExplosion()
|
|
||||||
{
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
DoCastAOE(SPELL_BLINK);
|
|
||||||
DoCastSelf(SPELL_ARCANE_BUBBLE, true);
|
|
||||||
Talk(EMOTE_ARCANE_EXP);
|
|
||||||
|
|
||||||
scheduler.Schedule(1s, [this](TaskContext)
|
|
||||||
{
|
|
||||||
DoCastAOE(SPELL_ARCANE_EXPLOSION);
|
|
||||||
}).Schedule(6500ms, [this](TaskContext /*context*/)
|
|
||||||
{
|
|
||||||
me->GetThreatMgr().ResetAllThreat();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* who) override
|
void MoveInLineOfSight(Unit* who) override
|
||||||
{
|
{
|
||||||
if (!_spoken && who->IsPlayer())
|
if (!_spoken && who->IsPlayer())
|
||||||
|
|||||||
Reference in New Issue
Block a user