refactor(Scripts/RuinsOfAhnQiraj)Ç AQ20: Modernize Kurinnaxx (#17671)

This commit is contained in:
KJack
2023-11-10 16:59:46 -05:00
committed by GitHub
parent 5bfd06ae45
commit f7fdc7cb6c

View File

@@ -32,14 +32,6 @@ enum Spells
SPELL_THRASH = 3391
};
enum Events
{
EVENT_MORTAL_WOUND = 1,
EVENT_SAND_TRAP = 2,
EVENT_WIDE_SLASH = 3,
EVENT_THRASH = 4
};
enum Texts
{
SAY_KURINNAXX_DEATH = 5 // Yell by 'Ossirian the Unscarred'
@@ -52,26 +44,42 @@ struct boss_kurinnaxx : public BossAI
void InitializeAI() override
{
me->m_CombatDistance = 50.0f;
Reset();
scheduler.SetValidator([this]
{
return !me->HasUnitState(UNIT_STATE_CASTING);
});
}
void Reset() override
void JustEngagedWith(Unit* who) override
{
BossAI::Reset();
_enraged = false;
events.ScheduleEvent(EVENT_MORTAL_WOUND, 8s, 10s);
events.ScheduleEvent(EVENT_SAND_TRAP, 5s, 15s);
events.ScheduleEvent(EVENT_WIDE_SLASH, 10s, 15s);
events.ScheduleEvent(EVENT_THRASH, 16s);
}
BossAI::JustEngagedWith(who);
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
{
if (!_enraged && HealthBelowPct(30))
scheduler.Schedule(8s, 10s, [this](TaskContext context)
{
DoCastVictim(SPELL_MORTAL_WOUND);
context.Repeat(8s, 10s);
}).Schedule(5s, 15s, [this](TaskContext context)
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.f, true))
{
target->CastSpell(target, SPELL_SAND_TRAP, true, nullptr, nullptr, me->GetGUID());
}
context.Repeat(5s, 15s);
}).Schedule(10s, 15s, [this](TaskContext context)
{
DoCastSelf(SPELL_WIDE_SLASH);
context.Repeat(12s, 15s);
}).Schedule(16s, [this](TaskContext context)
{
DoCastSelf(SPELL_THRASH);
context.Repeat(16s);
});
ScheduleHealthCheckEvent(30, [&]
{
DoCastSelf(SPELL_ENRAGE);
_enraged = true;
}
});
}
void JustDied(Unit* killer) override
@@ -94,49 +102,6 @@ struct boss_kurinnaxx : public BossAI
}
BossAI::JustDied(killer);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_MORTAL_WOUND:
DoCastVictim(SPELL_MORTAL_WOUND);
events.ScheduleEvent(EVENT_MORTAL_WOUND, 8s, 10s);
break;
case EVENT_SAND_TRAP:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.f, true))
{
target->CastSpell(target, SPELL_SAND_TRAP, true, nullptr, nullptr, me->GetGUID());
}
events.ScheduleEvent(EVENT_SAND_TRAP, 5s, 15s);
break;
case EVENT_WIDE_SLASH:
DoCastSelf(SPELL_WIDE_SLASH);
events.ScheduleEvent(EVENT_WIDE_SLASH, 12s, 15s);
break;
case EVENT_THRASH:
DoCastSelf(SPELL_THRASH);
events.ScheduleEvent(EVENT_THRASH, 16s);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
bool _enraged;
};
struct go_sand_trap : public GameObjectAI