mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-25 14:46:24 +00:00
refactor(Scripts/RuinsOfAhnQiraj)Ç AQ20: Modernize Kurinnaxx (#17671)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user