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:
Skjalf
2023-04-09 15:37:04 -03:00
committed by GitHub
parent d167781576
commit d47e93830f
3 changed files with 21 additions and 25 deletions
@@ -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())