fix(Scripts/Ulduar): Algalon engage roleplays (#26667)

Co-authored-by: sogladev <sogladev@gmail.com>
This commit is contained in:
Eddy Vega
2026-07-20 12:15:17 -06:00
committed by GitHub
parent 300863c756
commit 9a9924ed43
2 changed files with 35 additions and 33 deletions

View File

@@ -118,7 +118,7 @@ enum Events
EVENT_INTRO_2 = 7,
EVENT_INTRO_3 = 8,
EVENT_INTRO_FINISH = 9,
EVENT_START_COMBAT = 10,
EVENT_SAY_ALGALON_AGGRO = 10,
EVENT_INTRO_TIMER_DONE = 11,
EVENT_QUANTUM_STRIKE = 12,
EVENT_PHASE_PUNCH = 13,
@@ -143,7 +143,7 @@ enum Events
EVENT_OUTRO_11 = 32,
EVENT_ACTIVATE_LIVING_CONSTELLATION = 33,
EVENT_CHECK_HERALD_ITEMS = 34,
EVENT_REMOVE_UNNATTACKABLE = 35,
EVENT_ALGALON_IN_PROGRESS = 35,
EVENT_DESPAWN_ALGALON_1 = 36,
EVENT_DESPAWN_ALGALON_2 = 37,
EVENT_DESPAWN_ALGALON_3 = 38,
@@ -264,10 +264,13 @@ struct boss_algalon_the_observer : public ScriptedAI
{
boss_algalon_the_observer(Creature* creature) : ScriptedAI(creature), summons(me)
{
_fedOnTears = true;
_firstPull = true;
_fightWon = false;
_instance = me->GetInstanceScript();
_fedOnTears = true;
_fightWon = false;
if (_instance)
_firstPull = !_instance->GetPersistentData(PERSISTENT_DATA_ALGALON_FIRST_PULL);
else
_firstPull = true;
}
EventMap events;
@@ -381,17 +384,17 @@ struct boss_algalon_the_observer : public ScriptedAI
me->SetSheath(SHEATH_STATE_UNARMED);
me->SetFaction(190);
me->CastSpell(me, SPELL_DUAL_WIELD, true);
_phaseTwo = false;
_heraldOfTheTitans = true;
if (_instance->GetBossState(BOSS_ALGALON) == FAIL)
{
_firstPull = false;
}
if (_instance)
{
if (_instance->GetBossState(BOSS_ALGALON) == FAIL)
{
_firstPull = false;
_instance->StorePersistentData(PERSISTENT_DATA_ALGALON_FIRST_PULL, 1);
}
_instance->SetBossState(BOSS_ALGALON, NOT_STARTED);
}
}
void KilledUnit(Unit* victim) override
@@ -452,6 +455,8 @@ struct boss_algalon_the_observer : public ScriptedAI
_firstPull = false;
_fedOnTears = false;
me->SetImmuneToPC(false);
if (_instance)
_instance->StorePersistentData(PERSISTENT_DATA_ALGALON_FIRST_PULL, 1);
break;
case ACTION_ASCEND:
summons.DespawnAll();
@@ -486,32 +491,28 @@ struct boss_algalon_the_observer : public ScriptedAI
me->SetImmuneToNPC(true);
events.Reset();
events.SetPhase(PHASE_ROLE_PLAY);
events.ScheduleEvent(EVENT_ALGALON_IN_PROGRESS, _firstPull ? 14s : 1500ms);
Talk(SAY_ALGALON_START_TIMER);
summons.DespawnEntry(NPC_AZEROTH);
if (!_firstPull)
if (_firstPull)
{
events.ScheduleEvent(EVENT_START_COMBAT, 0ms);
introDelay = 8s;
_firstPull = false;
_instance->SetData(DATA_DESPAWN_ALGALON, 0);
events.ScheduleEvent(EVENT_SAY_ALGALON_AGGRO, 16s);
introDelay = 26s;
}
else
{
summons.DespawnEntry(NPC_AZEROTH);
_firstPull = false;
Talk(SAY_ALGALON_START_TIMER);
introDelay = 22s;
events.ScheduleEvent(EVENT_START_COMBAT, 14s);
_instance->SetData(DATA_DESPAWN_ALGALON, 0);
}
introDelay = 8500ms;
events.ScheduleEvent(EVENT_REMOVE_UNNATTACKABLE, introDelay - 500ms);
events.ScheduleEvent(EVENT_INTRO_TIMER_DONE, introDelay);
events.ScheduleEvent(EVENT_QUANTUM_STRIKE, 3500ms + introDelay);
events.ScheduleEvent(EVENT_PHASE_PUNCH, 15500ms + introDelay);
events.ScheduleEvent(EVENT_SUMMON_COLLAPSING_STAR, 16500ms + introDelay);
events.ScheduleEvent(EVENT_COSMIC_SMASH, 25s + introDelay);
events.ScheduleEvent(EVENT_COSMIC_SMASH, 26s + introDelay);
events.ScheduleEvent(EVENT_ACTIVATE_LIVING_CONSTELLATION, 60s + introDelay);
events.ScheduleEvent(EVENT_BIG_BANG, 90s + introDelay);
events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360s + introDelay);
events.ScheduleEvent(EVENT_CHECK_HERALD_ITEMS, 5s);
DoCheckHeraldOfTheTitans();
}
@@ -533,7 +534,7 @@ struct boss_algalon_the_observer : public ScriptedAI
events.ScheduleEvent(EVENT_OUTRO_7, 55s + 500ms);
events.ScheduleEvent(EVENT_OUTRO_8, 73s + 500ms);
events.ScheduleEvent(EVENT_OUTRO_9, 85s + 500ms);
events.ScheduleEvent(EVENT_OUTRO_10, 101s + 500ms);
events.ScheduleEvent(EVENT_OUTRO_10, 111s);
events.ScheduleEvent(EVENT_OUTRO_11, 117s + 500ms);
}
}
@@ -659,16 +660,17 @@ struct boss_algalon_the_observer : public ScriptedAI
if (Creature* brann = _instance->GetCreature(DATA_BRANN_BRONZEBEARD_ALG))
brann->AI()->DoAction(ACTION_FINISH_INTRO);
break;
case EVENT_START_COMBAT:
_instance->SetBossState(BOSS_ALGALON, IN_PROGRESS);
case EVENT_SAY_ALGALON_AGGRO:
Talk(SAY_ALGALON_AGGRO);
break;
case EVENT_REMOVE_UNNATTACKABLE:
case EVENT_ALGALON_IN_PROGRESS:
if (_instance)
_instance->SetBossState(BOSS_ALGALON, IN_PROGRESS);
break;
case EVENT_INTRO_TIMER_DONE:
me->SetSheath(SHEATH_STATE_MELEE);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToNPC(false);
break;
case EVENT_INTRO_TIMER_DONE:
events.SetPhase(PHASE_NORMAL);
me->CastSpell((Unit*)nullptr, SPELL_SUPERMASSIVE_FAIL, true);
// Hack: _IsValidTarget failed earlier due to flags, call AttackStart again
@@ -677,7 +679,6 @@ struct boss_algalon_the_observer : public ScriptedAI
if (Player* target = SelectTargetFromPlayerList(150.0f))
AttackStart(target);
me->SetInCombatWithZone();
for (uint32 i = 0; i < LIVING_CONSTELLATION_COUNT; ++i)
me->SummonCreature(NPC_LIVING_CONSTELLATION, ConstellationPos[i], TEMPSUMMON_DEAD_DESPAWN);
break;

View File

@@ -317,6 +317,7 @@ enum UlduarPersistentData
PERSISTENT_DATA_ALGALON_TIMER,
PERSISTENT_DATA_C_OF_ULDUAR_MASK,
PERSISTENT_DATA_MAGE_BARRIER,
PERSISTENT_DATA_ALGALON_FIRST_PULL,
MAX_PERSISTENT_DATA
};