Scripts/Ulduar: reworked Assembly of Iron encounter

This commit is contained in:
Ovahlord committed 2020-10-01 16:59:18 +02:00
1 parent f1ef08fc84
commit e04389e539
17 files changed
+1094 -900

No files matched your search

@@ -251,7 +251,7 @@ class ActivateLivingConstellation : public BasicEvent
bool Execute(uint64 execTime, uint32 /*diff*/) override
{
if (!_instance || _instance->GetBossState(BOSS_ALGALON) != IN_PROGRESS)
if (!_instance || _instance->GetBossState(DATA_ALGALON) != IN_PROGRESS)
return true; // delete event
_owner->CastSpell((Unit*)nullptr, SPELL_TRIGGER_3_ADDS, TRIGGERED_FULL_MASK);
@@ -306,7 +306,7 @@ class boss_algalon_the_observer : public CreatureScript
struct boss_algalon_the_observerAI : public BossAI
{
boss_algalon_the_observerAI(Creature* creature) : BossAI(creature, BOSS_ALGALON)
boss_algalon_the_observerAI(Creature* creature) : BossAI(creature, DATA_ALGALON)
{
Initialize();
_firstPull = true;
@@ -504,7 +504,7 @@ class boss_algalon_the_observer : public CreatureScript
void EnterEvadeMode(EvadeReason why) override
{
instance->SetBossState(BOSS_ALGALON, FAIL);
instance->SetBossState(DATA_ALGALON, FAIL);
BossAI::EnterEvadeMode(why);
me->SetImmuneToPC(false);
me->SetSheath(SHEATH_STATE_UNARMED);
@@ -584,7 +584,7 @@ class boss_algalon_the_observer : public CreatureScript
me->SetImmuneToPC(false);
break;
case EVENT_START_COMBAT:
instance->SetBossState(BOSS_ALGALON, IN_PROGRESS);
instance->SetBossState(DATA_ALGALON, IN_PROGRESS);
break;
case EVENT_INTRO_TIMER_DONE:
{
@@ -661,7 +661,7 @@ class boss_algalon_the_observer : public CreatureScript
_hasYelled = false;
break;
case EVENT_OUTRO_START:
instance->SetBossState(BOSS_ALGALON, DONE);
instance->SetBossState(DATA_ALGALON, DONE);
break;
case EVENT_OUTRO_1:
me->RemoveAllAuras();
File diff suppressed because it is too large. Load diff
@@ -107,7 +107,7 @@ class boss_auriaya : public CreatureScript
struct boss_auriayaAI : public BossAI
{
boss_auriayaAI(Creature* creature) : BossAI(creature, BOSS_AURIAYA)
boss_auriayaAI(Creature* creature) : BossAI(creature, DATA_AURIAYA)
{
Initialize();
}
@@ -316,7 +316,7 @@ class npc_auriaya_seeping_trigger : public CreatureScript
void UpdateAI(uint32 /*diff*/) override
{
if (instance->GetBossState(BOSS_AURIAYA) != IN_PROGRESS)
if (instance->GetBossState(DATA_AURIAYA) != IN_PROGRESS)
me->DespawnOrUnsummon();
}
@@ -393,7 +393,7 @@ class npc_sanctum_sentry : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
if (Creature* auriaya = instance->GetCreature(DATA_AURIAYA))
auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
}
@@ -472,7 +472,7 @@ class npc_feral_defender : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SUMMON_ESSENCE);
if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
if (Creature* auriaya = instance->GetCreature(DATA_AURIAYA))
auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER);
}
@@ -220,7 +220,7 @@ class boss_flame_leviathan : public CreatureScript
struct boss_flame_leviathanAI : public BossAI
{
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, BOSS_LEVIATHAN)
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, DATA_FLAME_LEVIATHAN)
{
Initialize();
}
@@ -1273,7 +1273,7 @@ class npc_lorekeeper : public CreatureScript
player->PlayerTalkClass->SendCloseGossip();
_instance->instance->LoadGrid(364, -16); // make sure leviathan is loaded
if (Creature* leviathan = _instance->GetCreature(BOSS_LEVIATHAN))
if (Creature* leviathan = _instance->GetCreature(DATA_FLAME_LEVIATHAN))
{
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
me->SetVisible(false);
@@ -266,7 +266,7 @@ class boss_freya : public CreatureScript
struct boss_freyaAI : public BossAI
{
boss_freyaAI(Creature* creature) : BossAI(creature, BOSS_FREYA)
boss_freyaAI(Creature* creature) : BossAI(creature, DATA_FREYA)
{
_encounterFinished = false;
Initialize();
@@ -344,7 +344,7 @@ class boss_freya : public CreatureScript
Creature* Elder[3];
for (uint8 n = 0; n < 3; ++n)
{
Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_BRIGHTLEAF + n));
Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRIGHTLEAF + n));
if (Elder[n] && Elder[n]->IsAlive())
{
me->AddAura(SPELL_DRAINED_OF_POWER, Elder[n]);
@@ -625,7 +625,7 @@ class boss_freya : public CreatureScript
for (uint8 n = 0; n < 3; ++n)
{
Creature* Elder = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_BRIGHTLEAF + n));
Creature* Elder = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRIGHTLEAF + n));
if (Elder && Elder->IsAlive())
{
Elder->RemoveAllAuras();
@@ -698,7 +698,7 @@ class boss_elder_brightleaf : public CreatureScript
struct boss_elder_brightleafAI : public BossAI
{
boss_elder_brightleafAI(Creature* creature) : BossAI(creature, BOSS_BRIGHTLEAF)
boss_elder_brightleafAI(Creature* creature) : BossAI(creature, DATA_BRIGHTLEAF)
{
}
@@ -799,7 +799,7 @@ class boss_elder_stonebark : public CreatureScript
struct boss_elder_stonebarkAI : public BossAI
{
boss_elder_stonebarkAI(Creature* creature) : BossAI(creature, BOSS_STONEBARK)
boss_elder_stonebarkAI(Creature* creature) : BossAI(creature, DATA_STONEBARK)
{
}
@@ -906,7 +906,7 @@ class boss_elder_ironbranch : public CreatureScript
struct boss_elder_ironbranchAI : public BossAI
{
boss_elder_ironbranchAI(Creature* creature) : BossAI(creature, BOSS_IRONBRANCH)
boss_elder_ironbranchAI(Creature* creature) : BossAI(creature, DATA_IRONBRANCH)
{
}
@@ -1068,7 +1068,7 @@ class npc_ancient_water_spirit : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
@@ -1106,7 +1106,7 @@ class npc_ancient_water_spirit : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(1);
@@ -1136,7 +1136,7 @@ class npc_storm_lasher : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
@@ -1180,7 +1180,7 @@ class npc_storm_lasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(2);
@@ -1210,7 +1210,7 @@ class npc_snaplasher : public CreatureScript
npc_snaplasherAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
@@ -1229,7 +1229,7 @@ class npc_snaplasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
if (Creature* freya = instance->GetCreature(DATA_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(4);
@@ -106,7 +106,7 @@ class boss_general_vezax : public CreatureScript
struct boss_general_vezaxAI : public BossAI
{
boss_general_vezaxAI(Creature* creature) : BossAI(creature, BOSS_VEZAX)
boss_general_vezaxAI(Creature* creature) : BossAI(creature, DATA_VEZAX)
{
Initialize();
}
@@ -334,7 +334,7 @@ class boss_saronite_animus : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
if (Creature* vezax = instance->GetCreature(DATA_VEZAX))
vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
@@ -432,7 +432,7 @@ class npc_saronite_vapors : public CreatureScript
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
if (Creature* vezax = instance->GetCreature(DATA_VEZAX))
vezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}
@@ -215,7 +215,7 @@ class npc_flash_freeze : public CreatureScript
|| me->EnsureVictim()->HasAura(SPELL_FLASH_FREEZE_HELPER))
return;
if (me->EnsureVictim()->GetGUID() != targetGUID || instance->GetBossState(BOSS_HODIR) != IN_PROGRESS)
if (me->EnsureVictim()->GetGUID() != targetGUID || instance->GetBossState(DATA_HODIR) != IN_PROGRESS)
me->DespawnOrUnsummon();
if (checkDespawnTimer <= diff)
@@ -240,7 +240,7 @@ class npc_flash_freeze : public CreatureScript
// Prevents to have Ice Block on other place than target is
me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation());
if (target->GetTypeId() == TYPEID_PLAYER)
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
}
}
@@ -294,7 +294,7 @@ class npc_ice_block : public CreatureScript
helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
helper->SetControlled(false, UNIT_STATE_ROOT);
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
{
if (!hodir->IsInCombat())
{
@@ -322,7 +322,7 @@ class boss_hodir : public CreatureScript
struct boss_hodirAI : public BossAI
{
boss_hodirAI(Creature* creature) : BossAI(creature, BOSS_HODIR)
boss_hodirAI(Creature* creature) : BossAI(creature, DATA_HODIR)
{
Initialize();
me->SetReactState(REACT_PASSIVE);
@@ -714,7 +714,7 @@ class npc_hodir_priest : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -779,7 +779,7 @@ class npc_hodir_shaman : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -843,7 +843,7 @@ class npc_hodir_druid : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -926,7 +926,7 @@ class npc_hodir_mage : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
if (Creature* hodir = instance->GetCreature(DATA_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
@@ -120,7 +120,7 @@ class boss_ignis : public CreatureScript
struct boss_ignis_AI : public BossAI
{
boss_ignis_AI(Creature* creature) : BossAI(creature, BOSS_IGNIS)
boss_ignis_AI(Creature* creature) : BossAI(creature, DATA_IGNIS)
{
Initialize();
}
@@ -328,7 +328,7 @@ class npc_iron_construct : public CreatureScript
if (me->HasAura(RAID_MODE(SPELL_BRITTLE, SPELL_BRITTLE_25)) && damage >= 5000)
{
DoCast(SPELL_SHATTER);
if (Creature* ignis = _instance->GetCreature(BOSS_IGNIS))
if (Creature* ignis = _instance->GetCreature(DATA_IGNIS))
if (ignis->AI())
ignis->AI()->DoAction(ACTION_REMOVE_BUFF);
@@ -104,7 +104,7 @@ class boss_kologarn : public CreatureScript
struct boss_kologarnAI : public BossAI
{
boss_kologarnAI(Creature* creature) : BossAI(creature, BOSS_KOLOGARN),
boss_kologarnAI(Creature* creature) : BossAI(creature, DATA_KOLOGARN),
left(false), right(false)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -162,7 +162,7 @@ class boss_kologarn : public CreatureScript
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
bool isEncounterInProgress = instance->GetBossState(BOSS_KOLOGARN) == IN_PROGRESS;
bool isEncounterInProgress = instance->GetBossState(DATA_KOLOGARN) == IN_PROGRESS;
if (who->GetEntry() == NPC_LEFT_ARM)
{
left = apply;
@@ -339,7 +339,7 @@ class spell_ulduar_rubble_summon : public SpellScriptLoader
if (!caster)
return;
ObjectGuid originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetGuidData(BOSS_KOLOGARN) : ObjectGuid::Empty;
ObjectGuid originalCaster = caster->GetInstanceScript() ? caster->GetInstanceScript()->GetGuidData(DATA_KOLOGARN) : ObjectGuid::Empty;
uint32 spellId = GetEffectValue();
for (uint8 i = 0; i < 5; ++i)
caster->CastSpell(caster, spellId, true, nullptr, nullptr, originalCaster);
@@ -372,7 +372,7 @@ static bool IsEncounterFinished(Unit* who)
mkii->DespawnOrUnsummon(120000);
vx001->DespawnOrUnsummon(120000);
aerial->DespawnOrUnsummon(120000);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->JustDied(who);
return true;
}
@@ -386,7 +386,7 @@ class boss_mimiron : public CreatureScript
struct boss_mimironAI : public BossAI
{
boss_mimironAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
boss_mimironAI(Creature* creature) : BossAI(creature, DATA_MIMIRON)
{
me->SetReactState(REACT_PASSIVE);
_fireFighter = false;
@@ -439,7 +439,7 @@ class boss_mimiron : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
instance->SetBossState(BOSS_MIMIRON, DONE);
instance->SetBossState(DATA_MIMIRON, DONE);
events.Reset();
me->CombatStop(true);
me->SetDisableGravity(false);
@@ -453,7 +453,7 @@ class boss_mimiron : public CreatureScript
void Reset() override
{
if (instance->GetBossState(BOSS_MIMIRON) == DONE) // Mimiron will attempt to reset because he is not dead and will be set to friendly before despawning.
if (instance->GetBossState(DATA_MIMIRON) == DONE) // Mimiron will attempt to reset because he is not dead and will be set to friendly before despawning.
return;
_Reset();
@@ -481,7 +481,7 @@ class boss_mimiron : public CreatureScript
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && instance->GetBossState(BOSS_MIMIRON) != DONE)
if (!UpdateVictim() && instance->GetBossState(DATA_MIMIRON) != DONE)
return;
events.Update(diff);
@@ -684,7 +684,7 @@ class boss_leviathan_mk_ii : public CreatureScript
struct boss_leviathan_mk_iiAI : public BossAI
{
boss_leviathan_mk_iiAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
boss_leviathan_mk_iiAI(Creature* creature) : BossAI(creature, DATA_MIMIRON)
{
_fireFighter = false;
_setupMine = true;
@@ -784,7 +784,7 @@ class boss_leviathan_mk_ii : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_MK_II) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY);
}
@@ -799,7 +799,7 @@ class boss_leviathan_mk_ii : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_VX001);
break;
case WP_MKII_P4_POS_1:
@@ -809,7 +809,7 @@ class boss_leviathan_mk_ii : public CreatureScript
events.ScheduleEvent(EVENT_MOVE_POINT_3, 1);
break;
case WP_MKII_P4_POS_3:
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2);
break;
case WP_MKII_P4_POS_4:
@@ -929,7 +929,7 @@ class boss_vx_001 : public CreatureScript
struct boss_vx_001AI : public BossAI
{
boss_vx_001AI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
boss_vx_001AI(Creature* creature) : BossAI(creature, DATA_MIMIRON)
{
me->SetDisableGravity(true); // This is the unfold visual state of VX-001, it has to be set on create as it requires an objectupdate if set later.
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state.
@@ -952,7 +952,7 @@ class boss_vx_001 : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE);
DoCast(me, SPELL_HALF_HEAL); // has no effect, wat
DoCast(me, SPELL_TORSO_DISABLED);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL);
}
else if (events.IsInPhase(PHASE_VOL7RON))
@@ -1024,7 +1024,7 @@ class boss_vx_001 : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY);
}
@@ -1112,7 +1112,7 @@ class boss_aerial_command_unit : public CreatureScript
struct boss_aerial_command_unitAI : public BossAI
{
boss_aerial_command_unitAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
boss_aerial_command_unitAI(Creature* creature) : BossAI(creature, DATA_MIMIRON)
{
me->SetReactState(REACT_PASSIVE);
fireFigther = false;
@@ -1205,7 +1205,7 @@ class boss_aerial_command_unit : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY);
}
@@ -1215,7 +1215,7 @@ class boss_aerial_command_unit : public CreatureScript
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
}
}
@@ -1438,7 +1438,7 @@ class npc_mimiron_computer : public CreatureScript
{
case EVENT_SELF_DESTRUCT_10:
Talk(SAY_SELF_DESTRUCT_10);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE);
events.ScheduleEvent(EVENT_SELF_DESTRUCT_9, 60000);
break;
@@ -1480,7 +1480,7 @@ class npc_mimiron_computer : public CreatureScript
break;
case EVENT_SELF_DESTRUCT_FINALIZED:
Talk(SAY_SELF_DESTRUCT_FINALIZED);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT);
DoCast(me, SPELL_SELF_DESTRUCTION_AURA);
DoCast(me, SPELL_SELF_DESTRUCTION_VISUAL);
@@ -1521,7 +1521,7 @@ class npc_mimiron_flames : public CreatureScript
void UpdateAI(uint32 diff) override
{
if (instance->GetBossState(BOSS_MIMIRON) != IN_PROGRESS)
if (instance->GetBossState(DATA_MIMIRON) != IN_PROGRESS)
me->DespawnOrUnsummon();
events.Update(diff);
@@ -2370,7 +2370,7 @@ class spell_mimiron_summon_assault_bot : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
}
@@ -2433,7 +2433,7 @@ class spell_mimiron_summon_fire_bot : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
}
@@ -2611,7 +2611,7 @@ class spell_mimiron_summon_junk_bot : public SpellScriptLoader
{
if (Unit* caster = GetCaster())
if (InstanceScript* instance = caster->GetInstanceScript())
if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, false, nullptr, aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT));
}
@@ -244,7 +244,7 @@ class boss_razorscale_controller : public CreatureScript
void DoAction(int32 action) override
{
if (instance->GetBossState(BOSS_RAZORSCALE) != IN_PROGRESS)
if (instance->GetBossState(DATA_RAZORSCALE) != IN_PROGRESS)
return;
switch (action)
@@ -331,7 +331,7 @@ class go_razorscale_harpoon : public GameObjectScript
bool GossipHello(Player* /*player*/) override
{
if (instance->GetCreature(BOSS_RAZORSCALE))
if (instance->GetCreature(DATA_RAZORSCALE))
me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
return true;
}
@@ -350,7 +350,7 @@ class boss_razorscale : public CreatureScript
struct boss_razorscaleAI : public BossAI
{
boss_razorscaleAI(Creature* creature) : BossAI(creature, BOSS_RAZORSCALE)
boss_razorscaleAI(Creature* creature) : BossAI(creature, DATA_RAZORSCALE)
{
Initialize();
// Do not let Razorscale be affected by Battle Shout buff
@@ -691,7 +691,7 @@ class npc_expedition_commander : public CreatureScript
switch (Phase)
{
case 1:
instance->SetBossState(BOSS_RAZORSCALE, IN_PROGRESS);
instance->SetBossState(DATA_RAZORSCALE, IN_PROGRESS);
summons.DespawnAll();
AttackStartTimer = 1000;
Phase = 2;
@@ -738,7 +738,7 @@ class npc_expedition_commander : public CreatureScript
Phase = 5;
break;
case 5:
if (Creature* razorscale = instance->GetCreature(BOSS_RAZORSCALE))
if (Creature* razorscale = instance->GetCreature(DATA_RAZORSCALE))
{
razorscale->AI()->DoAction(ACTION_EVENT_START);
me->SetInCombatWith(razorscale);
@@ -769,7 +769,7 @@ class npc_expedition_commander : public CreatureScript
bool GossipHello(Player* player) override
{
InstanceScript* instance = me->GetInstanceScript();
if (instance && instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED)
if (instance && instance->GetBossState(DATA_RAZORSCALE) == NOT_STARTED)
{
player->PrepareGossipMenu(me);
@@ -423,7 +423,7 @@ class LightningFieldEvent : public BasicEvent
{
if (InstanceScript* instance = _owner->GetInstanceScript())
{
if (instance->GetBossState(BOSS_THORIM) == IN_PROGRESS)
if (instance->GetBossState(DATA_THORIM) == IN_PROGRESS)
{
_owner->CastSpell((Unit*)nullptr, SPELL_LIGHTNING_FIELD);
_owner->m_Events.AddEvent(this, eventTime + 1000);
@@ -447,7 +447,7 @@ class boss_thorim : public CreatureScript
struct boss_thorimAI : public BossAI
{
boss_thorimAI(Creature* creature) : BossAI(creature, BOSS_THORIM)
boss_thorimAI(Creature* creature) : BossAI(creature, DATA_THORIM)
{
_encounterFinished = false;
Initialize();
@@ -1158,7 +1158,7 @@ class npc_thorim_pre_phase : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* thorim = _instance->GetCreature(BOSS_THORIM))
if (Creature* thorim = _instance->GetCreature(DATA_THORIM))
thorim->AI()->DoAction(ACTION_INCREASE_PREADDS_COUNT);
}
@@ -1275,7 +1275,7 @@ class npc_thorim_arena_phase : public CreatureScript
return;
// this should only happen if theres no alive player in the arena -> summon orb
if (Creature* thorim = _instance->GetCreature(BOSS_THORIM))
if (Creature* thorim = _instance->GetCreature(DATA_THORIM))
thorim->AI()->DoAction(ACTION_BERSERK);
ScriptedAI::EnterEvadeMode(why);
}
@@ -1420,7 +1420,7 @@ class npc_runic_colossus : public CreatureScript
// open the Runic Door
_instance->HandleGameObject(_instance->GetGuidData(DATA_RUNIC_DOOR), true);
if (Creature* thorim = _instance->GetCreature(BOSS_THORIM))
if (Creature* thorim = _instance->GetCreature(DATA_THORIM))
thorim->AI()->Talk(SAY_SPECIAL);
if (Creature* giant = _instance->GetCreature(DATA_RUNE_GIANT))
@@ -2062,7 +2062,7 @@ class spell_thorim_activate_lightning_orb_periodic : public SpellScriptLoader
if (!triggers.empty())
{
Creature* target = Trinity::Containers::SelectRandomContainerElement(triggers);
if (Creature* thorim = instance->GetCreature(BOSS_THORIM))
if (Creature* thorim = instance->GetCreature(DATA_THORIM))
thorim->AI()->SetGUID(target->GetGUID(), DATA_CHARGED_PILLAR);
}
}
@@ -178,7 +178,7 @@ class boss_xt002 : public CreatureScript
struct boss_xt002_AI : public BossAI
{
boss_xt002_AI(Creature* creature) : BossAI(creature, BOSS_XT002)
boss_xt002_AI(Creature* creature) : BossAI(creature, DATA_XT002)
{
Initialize();
_transferHealth = 0;
@@ -460,7 +460,7 @@ class npc_xt002_heart : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
if (Creature* xt002 = _instance->GetCreature(DATA_XT002))
{
xt002->AI()->SetData(DATA_TRANSFERED_HEALTH, me->GetHealth());
xt002->AI()->DoAction(ACTION_ENTER_HARD_MODE);
@@ -506,7 +506,7 @@ class npc_scrapbot : public CreatureScript
Initialize();
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
if (Creature* xt002 = _instance->GetCreature(DATA_XT002))
me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
@@ -514,7 +514,7 @@ class npc_scrapbot : public CreatureScript
{
if (_rangeCheckTimer <= diff)
{
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
if (Creature* xt002 = _instance->GetCreature(DATA_XT002))
{
if (me->IsWithinMeleeRange(xt002))
{
@@ -569,7 +569,7 @@ class npc_pummeller : public CreatureScript
{
Initialize();
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
if (Creature* xt002 = _instance->GetCreature(DATA_XT002))
{
Position pos = xt002->GetPosition();
me->GetMotionMaster()->MovePoint(0, pos);
@@ -683,7 +683,7 @@ class npc_boombot : public CreatureScript
me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f);
/// @todo proper waypoints?
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
if (Creature* xt002 = _instance->GetCreature(DATA_XT002))
me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
@@ -956,7 +956,7 @@ class spell_xt002_heart_overload_periodic : public SpellScriptLoader
{
uint8 a = urand(0, 4);
uint32 spellId = spells[a];
toyPile->CastSpell(toyPile, spellId, true, nullptr, nullptr, instance->GetGuidData(BOSS_XT002));
toyPile->CastSpell(toyPile, spellId, true, nullptr, nullptr, instance->GetGuidData(DATA_XT002));
}
}
}
@@ -446,7 +446,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
struct boss_voice_of_yogg_saronAI : public BossAI
{
boss_voice_of_yogg_saronAI(Creature* creature) : BossAI(creature, BOSS_YOGG_SARON)
boss_voice_of_yogg_saronAI(Creature* creature) : BossAI(creature, DATA_YOGG_SARON)
{
Initialize();
SetCombatMovement(false);
@@ -530,7 +530,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
// don't despawn Yogg-Saron's corpse, remove him from SummonList!
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = instance->GetCreature(DATA_YOGG_SARON))
summons.Despawn(yogg);
_JustDied();
@@ -552,10 +552,10 @@ class boss_voice_of_yogg_saron : public CreatureScript
{
case EVENT_LOCK_DOOR:
DoCast(me, SPELL_INSANE_PERIODIC);
instance->SetBossState(BOSS_YOGG_SARON, IN_PROGRESS);
instance->SetBossState(DATA_YOGG_SARON, IN_PROGRESS);
break;
case EVENT_EXTINGUISH_ALL_LIFE:
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = instance->GetCreature(DATA_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me);
yogg->CastSpell((Unit*)nullptr, SPELL_EXTINGUISH_ALL_LIFE, true);
@@ -583,7 +583,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
break;
case EVENT_ILLUSION:
{
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = instance->GetCreature(DATA_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_MADNESS);
yogg->AI()->Talk(SAY_YOGG_SARON_MADNESS);
@@ -824,7 +824,7 @@ class boss_sara : public CreatureScript
break;
case EVENT_TRANSFORM_4:
DoCast(me, SPELL_PHASE_2_TRANSFORM);
if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = _instance->GetCreature(DATA_YOGG_SARON))
DoCast(yogg, SPELL_RIDE_YOGG_SARON_VEHICLE);
DoCast(me, SPELL_SHADOWY_BARRIER_SARA);
_events.SetPhase(PHASE_TWO);
@@ -1071,7 +1071,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
voice->AI()->DoAction(ACTION_PHASE_THREE);
if (Creature* sara = _instance->GetCreature(DATA_SARA))
sara->AI()->DoAction(ACTION_PHASE_THREE);
if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = _instance->GetCreature(DATA_YOGG_SARON))
yogg->AI()->DoAction(ACTION_PHASE_THREE);
for (uint8 i = DATA_THORIM_YS; i <= DATA_MIMIRON_YS; ++i)
@@ -2986,7 +2986,7 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
{
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
{
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
if (Creature* yogg = instance->GetCreature(DATA_YOGG_SARON))
{
if (yogg->FindCurrentSpellBySpellId(SPELL_DEAFENING_ROAR))
{
@@ -33,48 +33,49 @@
static BossBoundaryData const boundaries =
{
{ BOSS_LEVIATHAN, new RectangleBoundary(148.0f, 401.3f, -155.0f, 90.0f) },
{ BOSS_IGNIS, new RectangleBoundary(495.0f, 680.0f, 90.0f, 400.0f) },
{ BOSS_RAZORSCALE, new RectangleBoundary(370.0f, 810.0f, -542.0f, -55.0f) },
{ BOSS_XT002, new RectangleBoundary(755.0f, 940.0f, -125.0f, 95.0f) },
{ BOSS_ASSEMBLY_OF_IRON, new CircleBoundary(Position(1587.2f, 121.0f), 90.0) },
{ BOSS_ALGALON, new CircleBoundary(Position(1632.668f, -307.7656f), 45.0) },
{ BOSS_ALGALON, new ZRangeBoundary(410.0f, 470.0f) },
{ BOSS_HODIR, new EllipseBoundary(Position(2001.5f, -240.0f), 50.0, 75.0) },
{ DATA_FLAME_LEVIATHAN, new RectangleBoundary(148.0f, 401.3f, -155.0f, 90.0f) },
{ DATA_IGNIS, new RectangleBoundary(495.0f, 680.0f, 90.0f, 400.0f) },
{ DATA_RAZORSCALE, new RectangleBoundary(370.0f, 810.0f, -542.0f, -55.0f) },
{ DATA_XT002, new RectangleBoundary(755.0f, 940.0f, -125.0f, 95.0f) },
{ DATA_ASSEMBLY_OF_IRON, new CircleBoundary(Position(1587.2f, 121.0f), 90.0) },
{ DATA_ALGALON, new CircleBoundary(Position(1632.668f, -307.7656f), 45.0) },
{ DATA_ALGALON, new ZRangeBoundary(410.0f, 470.0f) },
{ DATA_HODIR, new EllipseBoundary(Position(2001.5f, -240.0f), 50.0, 75.0) },
// Thorim sets boundaries dynamically
{ BOSS_FREYA, new RectangleBoundary(2094.6f, 2520.0f, -250.0f, 200.0f) },
{ BOSS_MIMIRON, new CircleBoundary(Position(2744.0f, 2569.0f), 70.0) },
{ BOSS_VEZAX, new RectangleBoundary(1740.0f, 1930.0f, 31.0f, 228.0f) },
{ BOSS_YOGG_SARON, new CircleBoundary(Position(1980.42f, -27.68f), 105.0) }
{ DATA_FREYA, new RectangleBoundary(2094.6f, 2520.0f, -250.0f, 200.0f) },
{ DATA_MIMIRON, new CircleBoundary(Position(2744.0f, 2569.0f), 70.0) },
{ DATA_VEZAX, new RectangleBoundary(1740.0f, 1930.0f, 31.0f, 228.0f) },
{ DATA_YOGG_SARON, new CircleBoundary(Position(1980.42f, -27.68f), 105.0) }
};
static DoorData const doorData[] =
{
{ GO_LEVIATHAN_DOOR, BOSS_LEVIATHAN, DOOR_TYPE_ROOM },
{ GO_XT_002_DOOR, BOSS_XT002, DOOR_TYPE_ROOM },
{ GO_IRON_COUNCIL_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_ROOM },
{ GO_ARCHIVUM_DOOR, BOSS_ASSEMBLY_OF_IRON, DOOR_TYPE_PASSAGE },
{ GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM },
{ GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE },
{ GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE },
{ GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM },
{ GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM },
{ GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM },
{ GO_THORIM_ENCOUNTER_DOOR, BOSS_THORIM, DOOR_TYPE_ROOM },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, BOSS_HODIR, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, BOSS_MIMIRON, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, BOSS_THORIM, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, BOSS_FREYA, DOOR_TYPE_PASSAGE },
{ GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE },
{ GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_UNIVERSEFLOOR_01, BOSS_ALGALON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_UNIVERSEFLOOR_02, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ GO_DOODAD_UL_UNIVERSEGLOBE01, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, BOSS_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ GO_LEVIATHAN_DOOR, DATA_FLAME_LEVIATHAN, DOOR_TYPE_ROOM },
{ GO_XT_002_DOOR, DATA_XT002, DOOR_TYPE_ROOM },
{ GO_IRON_COUNCIL_DOOR, DATA_ASSEMBLY_OF_IRON, DOOR_TYPE_ROOM },
{ GO_ARCHIVUM_DOOR, DATA_ASSEMBLY_OF_IRON, DOOR_TYPE_PASSAGE },
{ GO_HODIR_ENTRANCE, DATA_HODIR, DOOR_TYPE_ROOM },
{ GO_HODIR_DOOR, DATA_HODIR, DOOR_TYPE_PASSAGE },
{ GO_HODIR_ICE_DOOR, DATA_HODIR, DOOR_TYPE_PASSAGE },
{ GO_MIMIRON_DOOR_1, DATA_MIMIRON, DOOR_TYPE_ROOM },
{ GO_MIMIRON_DOOR_2, DATA_MIMIRON, DOOR_TYPE_ROOM },
{ GO_MIMIRON_DOOR_3, DATA_MIMIRON, DOOR_TYPE_ROOM },
{ GO_THORIM_ENCOUNTER_DOOR, DATA_THORIM, DOOR_TYPE_ROOM },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, DATA_HODIR, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, DATA_MIMIRON, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, DATA_THORIM, DOOR_TYPE_PASSAGE },
{ GO_ANCIENT_GATE_OF_THE_KEEPERS, DATA_FREYA, DOOR_TYPE_PASSAGE },
{ GO_VEZAX_DOOR, DATA_VEZAX, DOOR_TYPE_PASSAGE },
{ GO_YOGG_SARON_DOOR, DATA_YOGG_SARON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_SIGILDOOR_03, DATA_ALGALON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_UNIVERSEFLOOR_01, DATA_ALGALON, DOOR_TYPE_ROOM },
{ GO_DOODAD_UL_UNIVERSEFLOOR_02, DATA_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON, DOOR_TYPE_SPAWN_HOLE },
{ 0, 0, DOOR_TYPE_ROOM },
};
/*
MinionData const minionData[] =
{
{ NPC_STEELBREAKER, BOSS_ASSEMBLY_OF_IRON },
@@ -82,22 +83,27 @@ MinionData const minionData[] =
{ NPC_BRUNDIR, BOSS_ASSEMBLY_OF_IRON },
{ 0, 0, }
};
*/
ObjectData const creatureData[] =
{
{ NPC_FLAME_LEVIATHAN, BOSS_LEVIATHAN },
{ NPC_IGNIS, BOSS_IGNIS },
{ NPC_RAZORSCALE, BOSS_RAZORSCALE },
{ NPC_XT002, BOSS_XT002 },
{ NPC_KOLOGARN, BOSS_KOLOGARN },
{ NPC_AURIAYA, BOSS_AURIAYA },
{ NPC_HODIR, BOSS_HODIR },
{ NPC_THORIM, BOSS_THORIM },
{ NPC_FREYA, BOSS_FREYA },
{ NPC_MIMIRON, BOSS_MIMIRON },
{ NPC_VEZAX, BOSS_VEZAX },
{ NPC_YOGG_SARON, BOSS_YOGG_SARON },
{ NPC_ALGALON, BOSS_ALGALON },
{ NPC_FLAME_LEVIATHAN, DATA_FLAME_LEVIATHAN },
{ NPC_IGNIS, DATA_IGNIS },
{ NPC_RAZORSCALE, DATA_RAZORSCALE },
{ NPC_XT002, DATA_XT002 },
{ NPC_KOLOGARN, DATA_KOLOGARN },
{ NPC_AURIAYA, DATA_AURIAYA },
{ NPC_HODIR, DATA_HODIR },
{ NPC_THORIM, DATA_THORIM },
{ NPC_FREYA, DATA_FREYA },
{ NPC_MIMIRON, DATA_MIMIRON },
{ NPC_VEZAX, DATA_VEZAX },
{ NPC_YOGG_SARON, DATA_YOGG_SARON },
{ NPC_ALGALON, DATA_ALGALON },
{ BOSS_STEELBREAKER, DATA_STEELBREAKER },
{ BOSS_RUNEMASTER_MOLGEIM, DATA_RUNEMASTER_MOLGEIM },
{ BOSS_STORMCALLER_BRUNDIR, DATA_STORMCALLER_BRUNDIR },
{ NPC_EXPEDITION_COMMANDER, DATA_EXPEDITION_COMMANDER },
{ NPC_RAZORSCALE_CONTROLLER, DATA_RAZORSCALE_CONTROL },
@@ -147,7 +153,7 @@ class instance_ulduar : public InstanceMapScript
SetBossNumber(MAX_ENCOUNTER);
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
LoadMinionData(minionData);
//LoadMinionData(minionData);
LoadObjectData(creatureData, objectData);
_algalonTimer = 61;
@@ -175,7 +181,6 @@ class instance_ulduar : public InstanceMapScript
GuidVector LeviathanVehicleGUIDs;
ObjectGuid XTToyPileGUIDs[4];
ObjectGuid AssemblyGUIDs[3];
ObjectGuid ElderGUIDs[3];
ObjectGuid FreyaAchieveTriggerGUID;
@@ -233,22 +238,22 @@ class instance_ulduar : public InstanceMapScript
}
// Keepers at Observation Ring
if (GetBossState(BOSS_FREYA) == DONE && _summonObservationRingKeeper[0] && !KeeperGUIDs[0])
if (GetBossState(DATA_FREYA) == DONE && _summonObservationRingKeeper[0] && !KeeperGUIDs[0])
{
_summonObservationRingKeeper[0] = false;
instance->SummonCreature(NPC_FREYA_OBSERVATION_RING, ObservationRingKeepersPos[0]);
}
if (GetBossState(BOSS_HODIR) == DONE && _summonObservationRingKeeper[1] && !KeeperGUIDs[1])
if (GetBossState(DATA_HODIR) == DONE && _summonObservationRingKeeper[1] && !KeeperGUIDs[1])
{
_summonObservationRingKeeper[1] = false;
instance->SummonCreature(NPC_HODIR_OBSERVATION_RING, ObservationRingKeepersPos[1]);
}
if (GetBossState(BOSS_THORIM) == DONE && _summonObservationRingKeeper[2] && !KeeperGUIDs[2])
if (GetBossState(DATA_THORIM) == DONE && _summonObservationRingKeeper[2] && !KeeperGUIDs[2])
{
_summonObservationRingKeeper[2] = false;
instance->SummonCreature(NPC_THORIM_OBSERVATION_RING, ObservationRingKeepersPos[2]);
}
if (GetBossState(BOSS_MIMIRON) == DONE && _summonObservationRingKeeper[3] && !KeeperGUIDs[3])
if (GetBossState(DATA_MIMIRON) == DONE && _summonObservationRingKeeper[3] && !KeeperGUIDs[3])
{
_summonObservationRingKeeper[3] = false;
instance->SummonCreature(NPC_MIMIRON_OBSERVATION_RING, ObservationRingKeepersPos[3]);
@@ -265,6 +270,11 @@ class instance_ulduar : public InstanceMapScript
instance->SummonCreature(NPC_MIMIRON_YS, YSKeepersPos[3]);
}
void Create() override
{
instance->SpawnGroupSpawn(SPAWN_GROUP_ASSEMBLY_OF_IRON, true);
}
void OnCreatureCreate(Creature* creature) override
{
InstanceScript::OnCreatureCreate(creature);
@@ -282,7 +292,7 @@ class instance_ulduar : public InstanceMapScript
case NPC_SALVAGED_DEMOLISHER:
case NPC_SALVAGED_SIEGE_ENGINE:
case NPC_SALVAGED_CHOPPER:
if (GetBossState(BOSS_LEVIATHAN) == DONE)
if (GetBossState(DATA_FLAME_LEVIATHAN) == DONE)
DespawnLeviatanVehicle(creature);
else
LeviathanVehicleGUIDs.push_back(creature->GetGUID());
@@ -299,21 +309,6 @@ class instance_ulduar : public InstanceMapScript
}
}
break;
// Assembly of Iron
case NPC_STEELBREAKER:
AssemblyGUIDs[0] = creature->GetGUID();
AddMinion(creature, true);
break;
case NPC_MOLGEIM:
AssemblyGUIDs[1] = creature->GetGUID();
AddMinion(creature, true);
break;
case NPC_BRUNDIR:
AssemblyGUIDs[2] = creature->GetGUID();
AddMinion(creature, true);
break;
// Hodir
case NPC_EIVI_NIGHTFEATHER:
if (TeamInInstance == HORDE)
@@ -361,17 +356,17 @@ class instance_ulduar : public InstanceMapScript
// Freya
case NPC_IRONBRANCH:
ElderGUIDs[0] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
if (GetBossState(DATA_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
case NPC_BRIGHTLEAF:
ElderGUIDs[1] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
if (GetBossState(DATA_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
case NPC_STONEBARK:
ElderGUIDs[2] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
if (GetBossState(DATA_FREYA) == DONE)
creature->DespawnOrUnsummon();
break;
case NPC_FREYA_ACHIEVE_TRIGGER:
@@ -426,7 +421,7 @@ class instance_ulduar : public InstanceMapScript
case NPC_ALGALON_STALKER_ASTEROID_TARGET_01:
case NPC_ALGALON_STALKER_ASTEROID_TARGET_02:
case NPC_UNLEASHED_DARK_MATTER:
if (Creature* algalon = GetCreature(BOSS_ALGALON))
if (Creature* algalon = GetCreature(DATA_ALGALON))
algalon->AI()->JustSummoned(creature);
break;
}
@@ -448,11 +443,6 @@ class instance_ulduar : public InstanceMapScript
}
}
break;
case NPC_STEELBREAKER:
case NPC_MOLGEIM:
case NPC_BRUNDIR:
AddMinion(creature, false);
break;
default:
break;
}
@@ -470,7 +460,7 @@ class instance_ulduar : public InstanceMapScript
break;
case GO_KOLOGARN_BRIDGE:
KologarnBridgeGUID = gameObject->GetGUID();
if (GetBossState(BOSS_KOLOGARN) == DONE)
if (GetBossState(DATA_KOLOGARN) == DONE)
HandleGameObject(ObjectGuid::Empty, false, gameObject);
break;
case GO_THORIM_DARK_IRON_PORTCULLIS:
@@ -497,11 +487,11 @@ class instance_ulduar : public InstanceMapScript
break;
case GO_LEVIATHAN_GATE:
LeviathanGateGUID = gameObject->GetGUID();
if (GetBossState(BOSS_LEVIATHAN) == DONE)
if (GetBossState(DATA_FLAME_LEVIATHAN) == DONE)
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
case GO_MOLE_MACHINE:
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
if (GetBossState(DATA_RAZORSCALE) == IN_PROGRESS)
gameObject->SetGoState(GO_STATE_ACTIVE);
break;
case GO_BRAIN_ROOM_DOOR_1:
@@ -551,7 +541,7 @@ class instance_ulduar : public InstanceMapScript
// Champion/Conqueror of Ulduar
if (unit->GetTypeId() == TYPEID_PLAYER)
{
for (uint8 i = 0; i < BOSS_ALGALON; ++i)
for (uint8 i = 0; i < DATA_ALGALON; ++i)
{
if (GetBossState(i) == IN_PROGRESS)
{
@@ -601,19 +591,19 @@ class instance_ulduar : public InstanceMapScript
{
// Flame Leviathan's Tower Event triggers
case EVENT_TOWER_OF_STORM_DESTROYED:
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
break;
case EVENT_TOWER_OF_FROST_DESTROYED:
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
break;
case EVENT_TOWER_OF_FLAMES_DESTROYED:
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
break;
case EVENT_TOWER_OF_LIFE_DESTROYED:
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
break;
@@ -636,34 +626,40 @@ class instance_ulduar : public InstanceMapScript
switch (type)
{
case BOSS_LEVIATHAN:
case DATA_FLAME_LEVIATHAN:
if (state == DONE)
_events.ScheduleEvent(EVENT_DESPAWN_LEVIATHAN_VEHICLES, 5 * IN_MILLISECONDS);
break;
case BOSS_IGNIS:
case BOSS_RAZORSCALE:
case BOSS_XT002:
case BOSS_ASSEMBLY_OF_IRON:
case BOSS_AURIAYA:
case BOSS_VEZAX:
case BOSS_YOGG_SARON:
case DATA_ASSEMBLY_OF_IRON:
if (state == FAIL)
{
instance->SpawnGroupDespawn(SPAWN_GROUP_ASSEMBLY_OF_IRON);
_events.ScheduleEvent(EVENT_RESPAWN_ASSEMBLY_OF_IRON, 30s);
}
break;
case BOSS_MIMIRON:
case DATA_IGNIS:
case DATA_RAZORSCALE:
case DATA_XT002:
case DATA_AURIAYA:
case DATA_VEZAX:
case DATA_YOGG_SARON:
break;
case DATA_MIMIRON:
if (state == DONE)
instance->SummonCreature(NPC_MIMIRON_OBSERVATION_RING, ObservationRingKeepersPos[3]);
break;
case BOSS_FREYA:
case DATA_FREYA:
if (state == DONE)
instance->SummonCreature(NPC_FREYA_OBSERVATION_RING, ObservationRingKeepersPos[0]);
break;
case BOSS_IRONBRANCH:
case BOSS_STONEBARK:
case BOSS_BRIGHTLEAF:
if (GetBossState(BOSS_BRIGHTLEAF) == DONE && GetBossState(BOSS_IRONBRANCH) == DONE && GetBossState(BOSS_STONEBARK) == DONE && GetBossState(BOSS_FREYA) != DONE)
case DATA_IRONBRANCH:
case DATA_STONEBARK:
case DATA_BRIGHTLEAF:
if (GetBossState(DATA_BRIGHTLEAF) == DONE && GetBossState(DATA_IRONBRANCH) == DONE && GetBossState(DATA_STONEBARK) == DONE && GetBossState(DATA_FREYA) != DONE)
if (Creature* trigger = instance->GetCreature(FreyaAchieveTriggerGUID))
trigger->CastSpell(trigger, SPELL_LUMBERJACKED_CREDIT, true);
break;
case BOSS_KOLOGARN:
case DATA_KOLOGARN:
if (state == DONE)
{
if (GameObject* gameObject = instance->GetGameObject(KologarnChestGUID))
@@ -674,7 +670,7 @@ class instance_ulduar : public InstanceMapScript
HandleGameObject(KologarnBridgeGUID, false);
}
break;
case BOSS_HODIR:
case DATA_HODIR:
if (state == DONE)
{
if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID))
@@ -686,10 +682,10 @@ class instance_ulduar : public InstanceMapScript
instance->SummonCreature(NPC_HODIR_OBSERVATION_RING, ObservationRingKeepersPos[1]);
}
break;
case BOSS_THORIM:
case DATA_THORIM:
if (state == DONE)
{
if (Creature* thorim = GetCreature(BOSS_THORIM))
if (Creature* thorim = GetCreature(DATA_THORIM))
{
if (GameObject* cache = instance->GetGameObject(thorim->AI()->GetData(DATA_THORIM_HARDMODE) ? CacheOfStormsHardmodeGUID : CacheOfStormsGUID))
{
@@ -707,7 +703,7 @@ class instance_ulduar : public InstanceMapScript
DoCloseDoorOrButton(ThorimDarkIronPortcullisGUID);
}
break;
case BOSS_ALGALON:
case DATA_ALGALON:
if (state == DONE)
{
_events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
@@ -764,7 +760,7 @@ class instance_ulduar : public InstanceMapScript
{
case DATA_COLOSSUS:
ColossusData = data;
if (data >= 2 && GetBossState(BOSS_LEVIATHAN) == NOT_STARTED)
if (data >= 2 && GetBossState(DATA_FLAME_LEVIATHAN) == NOT_STARTED)
{
_events.ScheduleEvent(EVENT_LEVIATHAN_BREAK_DOOR, 5 * IN_MILLISECONDS);
SaveToDB();
@@ -774,7 +770,7 @@ class instance_ulduar : public InstanceMapScript
HodirRareCacheData = data;
if (!HodirRareCacheData)
{
if (Creature* hodir = GetCreature(BOSS_HODIR))
if (Creature* hodir = GetCreature(DATA_HODIR))
if (GameObject* gameObject = instance->GetGameObject(HodirRareCacheGUID))
hodir->RemoveGameObject(gameObject, false);
}
@@ -817,21 +813,12 @@ class instance_ulduar : public InstanceMapScript
case DATA_TOY_PILE_2:
case DATA_TOY_PILE_3:
return XTToyPileGUIDs[data - DATA_TOY_PILE_0];
// Assembly of Iron
case DATA_STEELBREAKER:
return AssemblyGUIDs[0];
case DATA_MOLGEIM:
return AssemblyGUIDs[1];
case DATA_BRUNDIR:
return AssemblyGUIDs[2];
// Freya
case BOSS_BRIGHTLEAF:
case DATA_BRIGHTLEAF:
return ElderGUIDs[0];
case BOSS_IRONBRANCH:
case DATA_IRONBRANCH:
return ElderGUIDs[1];
case BOSS_STONEBARK:
case DATA_STONEBARK:
return ElderGUIDs[2];
// Mimiron
@@ -927,43 +914,43 @@ class instance_ulduar : public InstanceMapScript
return keepersCount == 0;
case CRITERIA_C_O_U_LEVIATHAN_10:
case CRITERIA_C_O_U_LEVIATHAN_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_LEVIATHAN)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_FLAME_LEVIATHAN)) == 0;
case CRITERIA_C_O_U_IGNIS_10:
case CRITERIA_C_O_U_IGNIS_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_IGNIS)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_IGNIS)) == 0;
case CRITERIA_C_O_U_RAZORSCALE_10:
case CRITERIA_C_O_U_RAZORSCALE_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_RAZORSCALE)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_RAZORSCALE)) == 0;
case CRITERIA_C_O_U_XT002_10:
case CRITERIA_C_O_U_XT002_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_XT002)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_XT002)) == 0;
case CRITERIA_C_O_U_IRON_COUNCIL_10:
case CRITERIA_C_O_U_IRON_COUNCIL_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_ASSEMBLY_OF_IRON)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_ASSEMBLY_OF_IRON)) == 0;
case CRITERIA_C_O_U_KOLOGARN_10:
case CRITERIA_C_O_U_KOLOGARN_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_KOLOGARN)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_KOLOGARN)) == 0;
case CRITERIA_C_O_U_AURIAYA_10:
case CRITERIA_C_O_U_AURIAYA_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_AURIAYA)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_AURIAYA)) == 0;
case CRITERIA_C_O_U_HODIR_10:
case CRITERIA_C_O_U_HODIR_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_HODIR)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_HODIR)) == 0;
case CRITERIA_C_O_U_THORIM_10:
case CRITERIA_C_O_U_THORIM_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_THORIM)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_THORIM)) == 0;
case CRITERIA_C_O_U_FREYA_10:
case CRITERIA_C_O_U_FREYA_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_FREYA)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_FREYA)) == 0;
case CRITERIA_C_O_U_MIMIRON_10:
case CRITERIA_C_O_U_MIMIRON_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_MIMIRON)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_MIMIRON)) == 0;
case CRITERIA_C_O_U_VEZAX_10:
case CRITERIA_C_O_U_VEZAX_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_VEZAX)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_VEZAX)) == 0;
case CRITERIA_C_O_U_YOGG_SARON_10:
case CRITERIA_C_O_U_YOGG_SARON_25:
return (_CoUAchivePlayerDeathMask & (1 << BOSS_YOGG_SARON)) == 0;
return (_CoUAchivePlayerDeathMask & (1 << DATA_YOGG_SARON)) == 0;
}
return false;
@@ -988,7 +975,7 @@ class instance_ulduar : public InstanceMapScript
data >> _algalonTimer;
data >> tempState;
_algalonSummoned = tempState != 0;
if (_algalonSummoned && GetBossState(BOSS_ALGALON) != DONE)
if (_algalonSummoned && GetBossState(DATA_ALGALON) != DONE)
{
_summonAlgalon = true;
if (_algalonTimer && _algalonTimer <= 60)
@@ -1005,16 +992,19 @@ class instance_ulduar : public InstanceMapScript
_summonYSKeeper[i] = tempState != 0;
}
if (GetBossState(BOSS_FREYA) == DONE && !_summonYSKeeper[0])
if (GetBossState(DATA_FREYA) == DONE && !_summonYSKeeper[0])
_summonObservationRingKeeper[0] = true;
if (GetBossState(BOSS_HODIR) == DONE && !_summonYSKeeper[1])
if (GetBossState(DATA_HODIR) == DONE && !_summonYSKeeper[1])
_summonObservationRingKeeper[1] = true;
if (GetBossState(BOSS_THORIM) == DONE && !_summonYSKeeper[2])
if (GetBossState(DATA_THORIM) == DONE && !_summonYSKeeper[2])
_summonObservationRingKeeper[2] = true;
if (GetBossState(BOSS_MIMIRON) == DONE && !_summonYSKeeper[3])
if (GetBossState(DATA_MIMIRON) == DONE && !_summonYSKeeper[3])
_summonObservationRingKeeper[3] = true;
data >> _CoUAchivePlayerDeathMask;
if (GetBossState(DATA_ASSEMBLY_OF_IRON) != DONE)
instance->SpawnGroupSpawn(SPAWN_GROUP_ASSEMBLY_OF_IRON, true);
}
void Update(uint32 diff) override
@@ -1037,7 +1027,7 @@ class instance_ulduar : public InstanceMapScript
{
DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
_events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
if (Creature* algalon = GetCreature(BOSS_ALGALON))
if (Creature* algalon = GetCreature(DATA_ALGALON))
algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON);
}
break;
@@ -1049,11 +1039,17 @@ class instance_ulduar : public InstanceMapScript
DespawnLeviatanVehicle(vehicleCreature);
break;
case EVENT_LEVIATHAN_BREAK_DOOR:
if (Creature* leviathan = GetCreature(BOSS_LEVIATHAN))
if (Creature* leviathan = GetCreature(DATA_FLAME_LEVIATHAN))
leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
case EVENT_RESPAWN_ASSEMBLY_OF_IRON:
SetBossState(DATA_ASSEMBLY_OF_IRON, NOT_STARTED);
instance->SpawnGroupSpawn(SPAWN_GROUP_ASSEMBLY_OF_IRON, true);
break;
default:
break;
}
}
}
@@ -1073,7 +1069,7 @@ class instance_ulduar : public InstanceMapScript
// Leviathan doors are set to DOOR_TYPE_ROOM except the one it uses to enter the room
// which has to be set to DOOR_TYPE_PASSAGE
if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
door->SetGoState(GetBossState(BOSS_LEVIATHAN) == DONE ? GO_STATE_ACTIVE : GO_STATE_READY);
door->SetGoState(GetBossState(DATA_FLAME_LEVIATHAN) == DONE ? GO_STATE_ACTIVE : GO_STATE_READY);
else
InstanceScript::UpdateDoorState(door);
}
@@ -1085,9 +1081,9 @@ class instance_ulduar : public InstanceMapScript
if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
{
if (add)
GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].insert(door->GetGUID());
GetBossInfo(DATA_FLAME_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].insert(door->GetGUID());
else
GetBossInfo(BOSS_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].erase(door->GetGUID());
GetBossInfo(DATA_FLAME_LEVIATHAN)->door[DOOR_TYPE_PASSAGE].erase(door->GetGUID());
if (add)
UpdateDoorState(door);
@@ -27,27 +27,27 @@ extern Position const ObservationRingKeepersPos[4];
extern Position const YSKeepersPos[4];
extern Position const AlgalonLandPos;
static constexpr uint8 const MAX_ENCOUNTER = 17;
enum UlduarBosses
{
MAX_ENCOUNTER = 17,
BOSS_LEVIATHAN = 0,
BOSS_IGNIS = 1,
BOSS_RAZORSCALE = 2,
BOSS_XT002 = 3,
BOSS_ASSEMBLY_OF_IRON = 4,
BOSS_KOLOGARN = 5,
BOSS_AURIAYA = 6,
BOSS_HODIR = 7,
BOSS_THORIM = 8,
BOSS_FREYA = 9,
BOSS_MIMIRON = 10,
BOSS_VEZAX = 11,
BOSS_YOGG_SARON = 12,
BOSS_ALGALON = 13,
BOSS_BRIGHTLEAF = 14,
BOSS_IRONBRANCH = 15,
BOSS_STONEBARK = 16,
DATA_FLAME_LEVIATHAN = 0,
DATA_IGNIS = 1,
DATA_RAZORSCALE = 2,
DATA_XT002 = 3,
DATA_ASSEMBLY_OF_IRON = 4,
DATA_KOLOGARN = 5,
DATA_AURIAYA = 6,
DATA_HODIR = 7,
DATA_THORIM = 8,
DATA_FREYA = 9,
DATA_MIMIRON = 10,
DATA_VEZAX = 11,
DATA_YOGG_SARON = 12,
DATA_ALGALON = 13,
DATA_BRIGHTLEAF = 14,
DATA_IRONBRANCH = 15,
DATA_STONEBARK = 16
};
enum UlduarNPCs
@@ -64,9 +64,6 @@ enum UlduarNPCs
NPC_EXPEDITION_COMMANDER = 33210,
NPC_XT002 = 33293,
NPC_XT_TOY_PILE = 33337,
NPC_STEELBREAKER = 32867,
NPC_MOLGEIM = 32927,
NPC_BRUNDIR = 32857,
NPC_KOLOGARN = 32930,
NPC_FOCUSED_EYEBEAM = 33632,
NPC_FOCUSED_EYEBEAM_RIGHT = 33802,
@@ -82,6 +79,11 @@ enum UlduarNPCs
NPC_YOGG_SARON = 33288,
NPC_ALGALON = 32871,
// Assembly of Iron
BOSS_STEELBREAKER = 32867,
BOSS_RUNEMASTER_MOLGEIM = 32927,
BOSS_STORMCALLER_BRUNDIR = 32857,
//XT002
NPC_XS013_SCRAPBOT = 33343,
@@ -400,8 +402,8 @@ enum UlduarData
// Assembly of Iron
DATA_STEELBREAKER,
DATA_MOLGEIM,
DATA_BRUNDIR,
DATA_RUNEMASTER_MOLGEIM,
DATA_STORMCALLER_BRUNDIR,
// Hodir
DATA_HODIR_RARE_CACHE,
@@ -478,11 +480,17 @@ enum UlduarSharedSpells
enum UlduarEvents
{
EVENT_DESPAWN_ALGALON = 1,
EVENT_UPDATE_ALGALON_TIMER = 2,
ACTION_INIT_ALGALON = 6,
EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7,
EVENT_LEVIATHAN_BREAK_DOOR = 8
EVENT_DESPAWN_ALGALON = 1,
EVENT_UPDATE_ALGALON_TIMER = 2,
ACTION_INIT_ALGALON = 6,
EVENT_DESPAWN_LEVIATHAN_VEHICLES = 7,
EVENT_LEVIATHAN_BREAK_DOOR = 8,
EVENT_RESPAWN_ASSEMBLY_OF_IRON = 9
};
enum UlduarSpawnGroups
{
SPAWN_GROUP_ASSEMBLY_OF_IRON = 67
};
enum YoggSaronIllusions
@@ -498,6 +506,8 @@ inline AI* GetUlduarAI(T* obj)
return GetInstanceAI<AI, T>(obj, UlduarScriptName);
}
#define RegisterUlduarCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetUlduarAI)
class KeeperDespawnEvent : public BasicEvent
{
public: