fix(Scripts/TheEye): make sure Al'ar does not melee during transitions (#18479)
* init * Update boss_alar.cpp
This commit is contained in:
@@ -109,6 +109,7 @@ struct boss_alar : public BossAI
|
|||||||
_baseAttackOverride = false;
|
_baseAttackOverride = false;
|
||||||
_spawnPhoenixes = false;
|
_spawnPhoenixes = false;
|
||||||
_platform = 0;
|
_platform = 0;
|
||||||
|
_noMelee = false;
|
||||||
_platformRoll = 0;
|
_platformRoll = 0;
|
||||||
_noQuillTimes = 0;
|
_noQuillTimes = 0;
|
||||||
_platformMoveRepeatTimer = 16s;
|
_platformMoveRepeatTimer = 16s;
|
||||||
@@ -191,6 +192,7 @@ struct boss_alar : public BossAI
|
|||||||
ScheduleUniqueTimedEvent(16001ms, [&]{
|
ScheduleUniqueTimedEvent(16001ms, [&]{
|
||||||
me->SetHealth(me->GetMaxHealth());
|
me->SetHealth(me->GetMaxHealth());
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
_noMelee = false;
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||||
_platform = POINT_MIDDLE;
|
_platform = POINT_MIDDLE;
|
||||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||||
@@ -201,6 +203,7 @@ struct boss_alar : public BossAI
|
|||||||
|
|
||||||
void PretendToDie(Creature* creature)
|
void PretendToDie(Creature* creature)
|
||||||
{
|
{
|
||||||
|
_noMelee = true;
|
||||||
scheduler.CancelAll();
|
scheduler.CancelAll();
|
||||||
creature->InterruptNonMeleeSpells(true);
|
creature->InterruptNonMeleeSpells(true);
|
||||||
creature->RemoveAllAuras();
|
creature->RemoveAllAuras();
|
||||||
@@ -254,6 +257,7 @@ struct boss_alar : public BossAI
|
|||||||
|
|
||||||
void DoDiveBomb()
|
void DoDiveBomb()
|
||||||
{
|
{
|
||||||
|
_noMelee = true;
|
||||||
scheduler.Schedule(2s, [this](TaskContext)
|
scheduler.Schedule(2s, [this](TaskContext)
|
||||||
{
|
{
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true))
|
||||||
@@ -267,6 +271,7 @@ struct boss_alar : public BossAI
|
|||||||
}).Schedule(10s, [this](TaskContext)
|
}).Schedule(10s, [this](TaskContext)
|
||||||
{
|
{
|
||||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||||
|
_noMelee = false;
|
||||||
});
|
});
|
||||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 90.0f, true))
|
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 90.0f, true))
|
||||||
{
|
{
|
||||||
@@ -341,10 +346,31 @@ struct boss_alar : public BossAI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 diff) override
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scheduler.Update(diff);
|
||||||
|
|
||||||
|
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_noMelee)
|
||||||
|
{
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _canAttackCooldown;
|
bool _canAttackCooldown;
|
||||||
bool _baseAttackOverride;
|
bool _baseAttackOverride;
|
||||||
bool _spawnPhoenixes;
|
bool _spawnPhoenixes;
|
||||||
|
bool _noMelee;
|
||||||
uint8 _platform;
|
uint8 _platform;
|
||||||
uint8 _platformRoll;
|
uint8 _platformRoll;
|
||||||
uint8 _noQuillTimes;
|
uint8 _noQuillTimes;
|
||||||
|
|||||||
Reference in New Issue
Block a user