fix(Scripts/TempestKeep): force attackstop for all player during the last phase and cleanup the script of Kael'Thas

This commit is contained in:
Grimdhex
2024-08-16 21:59:57 +02:00
parent 5cbe485785
commit 32ffa402de

View File

@@ -79,7 +79,7 @@ enum Spells
SPELL_FLAME_STRIKE = 36735,
SPELL_FLAME_STRIKE_DAMAGE = 36731,
// Event
// transition scene spells
SPELL_NETHERBEAM_AURA1 = 36364,
SPELL_NETHERBEAM_AURA2 = 36370,
SPELL_NETHERBEAM_AURA3 = 36371,
@@ -138,57 +138,43 @@ enum Spells
SPELL_SILENCE = 30225
};
enum Misc
enum Phases
{
POINT_MIDDLE = 1,
POINT_AIR = 2,
POINT_START_LAST_PHASE = 3,
DATA_RESURRECT_CAST = 1,
NPC_WORLD_TRIGGER = 19871,
NPC_NETHER_VAPOR = 21002,
NPC_NETHERSTRAND_LONGBOW = 21268,
NPC_STAFF_OF_DISINTEGRATION = 21274,
PHASE_NONE = 0,
PHASE_SINGLE_ADVISOR = 1,
PHASE_WEAPONS = 2,
PHASE_TRANSITION = 3,
PHASE_ALL_ADVISORS = 4,
PHASE_FINAL = 5,
PHASE_FINAL = 5
};
EVENT_PREFIGHT_PHASE11 = 1,
EVENT_PREFIGHT_PHASE12 = 2,
EVENT_PREFIGHT_PHASE21 = 3,
EVENT_PREFIGHT_PHASE22 = 4,
EVENT_PREFIGHT_PHASE31 = 5,
EVENT_PREFIGHT_PHASE32 = 6,
EVENT_PREFIGHT_PHASE41 = 7,
EVENT_PREFIGHT_PHASE42 = 8,
EVENT_PREFIGHT_PHASE51 = 9,
EVENT_PREFIGHT_PHASE52 = 10,
EVENT_PREFIGHT_PHASE61 = 11,
EVENT_PREFIGHT_PHASE62 = 12,
EVENT_PREFIGHT_PHASE63 = 13,
EVENT_PREFIGHT_PHASE71 = 14,
EVENT_GATHER_ADVISORS = 15,
enum Misc
{
POINT_MIDDLE = 1,
POINT_AIR = 2,
POINT_START_LAST_PHASE = 3,
EVENT_SPELL_SEQ_1 = 30,
EVENT_SPELL_SEQ_2 = 31,
EVENT_SPELL_SEQ_3 = 32,
EVENT_SPELL_FIREBALL = 33,
EVENT_SPELL_PYROBLAST = 34,
EVENT_SPELL_FLAMESTRIKE = 35,
EVENT_SPELL_ARCANE_DISRUPTION = 36,
EVENT_SPELL_MIND_CONTROL = 37,
EVENT_SPELL_SUMMON_PHOENIX = 38,
EVENT_CHECK_HEALTH = 39,
EVENT_SPELL_GRAVITY_LAPSE = 40,
EVENT_GRAVITY_LAPSE_END = 41,
EVENT_SPELL_SHOCK_BARRIER = 42,
EVENT_SPELL_NETHER_BEAM = 43,
EVENT_SPELL_NETHER_VAPOR = 44,
DATA_RESURRECT_CAST = 1,
EVENT_SCENE_1 = 50,
NPC_WORLD_TRIGGER = 19871,
NPC_NETHER_VAPOR = 21002,
NPC_NETHERSTRAND_LONGBOW = 21268,
NPC_STAFF_OF_DISINTEGRATION = 21274,
};
enum PreFightEvents
{
EVENT_PREFIGHT_PHASE1_01 = 1,
EVENT_PREFIGHT_PHASE1_02 = 2,
EVENT_PREFIGHT_PHASE5_01 = 3,
EVENT_PREFIGHT_PHASE5_02 = 4,
EVENT_PREFIGHT_PHASE6_02 = 5,
EVENT_PREFIGHT_PHASE6_03 = 6,
};
enum TransitionScene
{
EVENT_SCENE_1 = 50, // NYI
EVENT_SCENE_2 = 51,
EVENT_SCENE_3 = 52,
EVENT_SCENE_4 = 53,
@@ -296,15 +282,6 @@ struct boss_kaelthas : public BossAI
SetRoomState(GO_STATE_READY);
me->SetDisableGravity(false);
me->SetWalk(false);
ScheduleHealthCheckEvent(50, [&]{
scheduler.CancelAll();
me->CastStop();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), true, true);
me->ClearUnitState(UNIT_STATE_MELEE_ATTACKING);
me->SendMeleeAttackStop();
});
}
void AttackStart(Unit* who) override
@@ -313,17 +290,23 @@ struct boss_kaelthas : public BossAI
BossAI::AttackStart(who);
}
void JustReachedHome() override
{
Reset();
}
void MoveInLineOfSight(Unit* who) override
{
if (_phase == PHASE_NONE && who->GetTypeId() == TYPEID_PLAYER && me->IsValidAttackTarget(who))
{
_phase = PHASE_SINGLE_ADVISOR;
me->SetInCombatWithZone();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE);
Talk(SAY_INTRO);
ScheduleUniqueTimedEvent(23s, [&]
{
Talk(SAY_INTRO_THALADRED);
}, EVENT_PREFIGHT_PHASE11);
}, EVENT_PREFIGHT_PHASE1_01);
ScheduleUniqueTimedEvent(30s, [&]
{
if (Creature* thaladred = summons.GetCreatureWithEntry(NPC_THALADRED))
@@ -334,15 +317,10 @@ struct boss_kaelthas : public BossAI
thaladred->AI()->AttackStart(target);
thaladred->SetInCombatWithZone();
}
}, EVENT_PREFIGHT_PHASE12);
}, EVENT_PREFIGHT_PHASE1_02);
}
}
void JustEngagedWith(Unit* who) override
{
BossAI::JustEngagedWith(who);
}
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
@@ -376,7 +354,7 @@ struct boss_kaelthas : public BossAI
Talk(SAY_PHASE2_WEAPON);
DoCastSelf(SPELL_SUMMON_WEAPONS);
_phase = PHASE_WEAPONS;
}, EVENT_PREFIGHT_PHASE51);
}, EVENT_PREFIGHT_PHASE5_01);
ScheduleUniqueTimedEvent(9s, [&]{
summons.DoForAllSummons([&](WorldObject* summon)
{
@@ -397,7 +375,7 @@ struct boss_kaelthas : public BossAI
{
PhaseAllAdvisorsExecute();
});
}, EVENT_PREFIGHT_PHASE52);
}, EVENT_PREFIGHT_PHASE5_02);
break;
case ACTION_PROGRESS_PHASE_CHECK:
if (_phase == PHASE_ALL_ADVISORS)
@@ -671,7 +649,7 @@ struct boss_kaelthas : public BossAI
Talk(SAY_PHASE3_ADVANCE);
ScheduleUniqueTimedEvent(6s, [&]{
DoCastSelf(SPELL_RESURRECTION);
}, EVENT_PREFIGHT_PHASE62);
}, EVENT_PREFIGHT_PHASE6_02);
ScheduleUniqueTimedEvent(12s, [&]{
_phase = PHASE_ALL_ADVISORS;
summons.DoForAllSummons([&](WorldObject* summon)
@@ -694,7 +672,7 @@ struct boss_kaelthas : public BossAI
{
PhaseKaelExecute();
});
}, EVENT_PREFIGHT_PHASE63);
}, EVENT_PREFIGHT_PHASE6_03);
}
void PhaseKaelExecute()
@@ -703,7 +681,7 @@ struct boss_kaelthas : public BossAI
Talk(SAY_PHASE4_INTRO2);
_phase = PHASE_FINAL;
DoResetThreatList();
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
{
AttackStart(target);
@@ -721,7 +699,6 @@ struct boss_kaelthas : public BossAI
Talk(SAY_SUMMON_PHOENIX);
DoCastSelf(SPELL_PHOENIX);
}, 35450ms, 41550ms);
//sequence
ScheduleTimedEvent(20s, 23s, [&]
{
if (roll_chance_i(50))
@@ -756,12 +733,32 @@ struct boss_kaelthas : public BossAI
return;
DoMeleeAttackIfReady();
ScheduleHealthCheckEvent(50, [&]{
scheduler.CancelAll();
me->CastStop();
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), true, true);
me->ClearUnitState(UNIT_STATE_MELEE_ATTACKING);
me->SendMeleeAttackStop();
ThreatContainer::StorageType threatList = me->GetThreatMgr().GetThreatList();
for (ThreatContainer::StorageType::const_iterator i = threatList.begin(); i != threatList.end(); ++i)
{
if (Unit* target = ObjectAccessor::GetUnit(*me, (*i)->getUnitGuid()))
{
target->AttackStop();
}
}
});
}
bool CheckEvadeIfOutOfCombatArea() const override
{
return me->GetHomePosition().GetExactDist2d(me) > 165.0f || !SelectTargetFromPlayerList(165.0f);
}
private:
uint32 _phase;
};