refactor(Scripts/RuinsOfAhnQiraj)Ç AQ20: Modernize Kurinnaxx (#17671)
This commit is contained in:
@@ -32,14 +32,6 @@ enum Spells
|
|||||||
SPELL_THRASH = 3391
|
SPELL_THRASH = 3391
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Events
|
|
||||||
{
|
|
||||||
EVENT_MORTAL_WOUND = 1,
|
|
||||||
EVENT_SAND_TRAP = 2,
|
|
||||||
EVENT_WIDE_SLASH = 3,
|
|
||||||
EVENT_THRASH = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum Texts
|
enum Texts
|
||||||
{
|
{
|
||||||
SAY_KURINNAXX_DEATH = 5 // Yell by 'Ossirian the Unscarred'
|
SAY_KURINNAXX_DEATH = 5 // Yell by 'Ossirian the Unscarred'
|
||||||
@@ -52,26 +44,42 @@ struct boss_kurinnaxx : public BossAI
|
|||||||
void InitializeAI() override
|
void InitializeAI() override
|
||||||
{
|
{
|
||||||
me->m_CombatDistance = 50.0f;
|
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();
|
BossAI::JustEngagedWith(who);
|
||||||
_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);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DamageTaken(Unit*, uint32& /*damage*/, DamageEffectType, SpellSchoolMask) override
|
scheduler.Schedule(8s, 10s, [this](TaskContext context)
|
||||||
{
|
{
|
||||||
if (!_enraged && HealthBelowPct(30))
|
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);
|
DoCastSelf(SPELL_ENRAGE);
|
||||||
_enraged = true;
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* killer) override
|
void JustDied(Unit* killer) override
|
||||||
@@ -94,49 +102,6 @@ struct boss_kurinnaxx : public BossAI
|
|||||||
}
|
}
|
||||||
BossAI::JustDied(killer);
|
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
|
struct go_sand_trap : public GameObjectAI
|
||||||
|
|||||||
Reference in New Issue
Block a user