Scripts/Ulduar: reworked Assembly of Iron encounter
This commit is contained in:
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:
|
||||
|
||||
Reference in new issue
Block a user