Core/Scripts: Updated Ulduar instance model

- Codestyle/indent fixes
- Added ObjectData for some GOs
- Added GetUlduarAI to creatures
- Fixed possible out-of-bounds access in boss_razorscale_controllerAI (boss AI number beyond allocated boss size)
This commit is contained in:
ariel- authored and Aokromes committed 2017-03-26 05:46:04 +02:00
1 parent b2094ff611
commit 828101aa2b
12 files changed
+277 -453

No files matched your search

@@ -403,7 +403,7 @@ class boss_algalon_the_observer : public CreatureScript
{
_firstPull = false;
Talk(SAY_ALGALON_START_TIMER);
if (Creature* brann = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRANN_BRONZEBEARD_ALG)))
if (Creature* brann = instance->GetCreature(DATA_BRANN_BRONZEBEARD_ALG))
brann->AI()->DoAction(ACTION_FINISH_INTRO);
me->setActive(true);
@@ -324,7 +324,7 @@ class npc_auriaya_seeping_trigger : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_auriaya_seeping_triggerAI>(creature);
return GetUlduarAI<npc_auriaya_seeping_triggerAI>(creature);
}
};
@@ -391,8 +391,8 @@ class npc_sanctum_sentry : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA)))
Auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
auriaya->AI()->DoAction(ACTION_CRAZY_CAT_LADY);
}
private:
@@ -402,7 +402,7 @@ class npc_sanctum_sentry : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_sanctum_sentryAI>(creature);
return GetUlduarAI<npc_sanctum_sentryAI>(creature);
}
};
@@ -470,8 +470,8 @@ class npc_feral_defender : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
DoCast(me, SPELL_SUMMON_ESSENCE);
if (Creature* Auriaya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_AURIAYA)))
Auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER);
if (Creature* auriaya = instance->GetCreature(BOSS_AURIAYA))
auriaya->AI()->DoAction(ACTION_RESPAWN_DEFENDER);
}
private:
@@ -481,7 +481,7 @@ class npc_feral_defender : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_feral_defenderAI>(creature);
return GetUlduarAI<npc_feral_defenderAI>(creature);
}
};
@@ -636,7 +636,7 @@ class boss_flame_leviathan_seat : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_flame_leviathan_seatAI>(creature);
return GetUlduarAI<boss_flame_leviathan_seatAI>(creature);
}
};
@@ -692,7 +692,7 @@ class boss_flame_leviathan_defense_cannon : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_defense_cannonAI(creature);
return GetUlduarAI<boss_flame_leviathan_defense_cannonAI>(creature);
}
};
@@ -721,7 +721,7 @@ class boss_flame_leviathan_defense_turret : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_defense_turretAI(creature);
return GetUlduarAI<boss_flame_leviathan_defense_turretAI>(creature);
}
};
@@ -758,7 +758,7 @@ class boss_flame_leviathan_overload_device : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_overload_deviceAI(creature);
return GetUlduarAI<boss_flame_leviathan_overload_deviceAI>(creature);
}
};
@@ -789,7 +789,7 @@ class boss_flame_leviathan_safety_container : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new boss_flame_leviathan_safety_containerAI(creature);
return GetUlduarAI<boss_flame_leviathan_safety_containerAI>(creature);
}
};
@@ -858,7 +858,7 @@ class npc_mechanolift : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mechanoliftAI(creature);
return GetUlduarAI<npc_mechanoliftAI>(creature);
}
};
@@ -892,7 +892,7 @@ class npc_pool_of_tar : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_pool_of_tarAI(creature);
return GetUlduarAI<npc_pool_of_tarAI>(creature);
}
};
@@ -927,7 +927,7 @@ class npc_colossus : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_colossusAI>(creature);
return GetUlduarAI<npc_colossusAI>(creature);
}
};
@@ -965,7 +965,7 @@ class npc_thorims_hammer : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_thorims_hammerAI(creature);
return GetUlduarAI<npc_thorims_hammerAI>(creature);
}
};
@@ -974,11 +974,6 @@ class npc_mimirons_inferno : public CreatureScript
public:
npc_mimirons_inferno() : CreatureScript("npc_mimirons_inferno") { }
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mimirons_infernoAI(creature);
}
struct npc_mimirons_infernoAI : public npc_escortAI
{
npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature)
@@ -1031,6 +1026,10 @@ public:
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_mimirons_infernoAI>(creature);
}
};
class npc_hodirs_fury : public CreatureScript
@@ -1067,7 +1066,7 @@ class npc_hodirs_fury : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_hodirs_furyAI(creature);
return GetUlduarAI<npc_hodirs_furyAI>(creature);
}
};
@@ -1116,7 +1115,7 @@ class npc_freyas_ward : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freyas_wardAI(creature);
return GetUlduarAI<npc_freyas_wardAI>(creature);
}
};
@@ -1164,7 +1163,7 @@ class npc_freya_ward_summon : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_freya_ward_summonAI(creature);
return GetUlduarAI<npc_freya_ward_summonAI>(creature);
}
};
@@ -1247,7 +1246,7 @@ class npc_lorekeeper : public CreatureScript
player->PlayerTalkClass->SendCloseGossip();
_instance->instance->LoadGrid(364, -16); // make sure leviathan is loaded
if (Creature* leviathan = _instance->instance->GetCreature(_instance->GetGuidData(BOSS_LEVIATHAN)))
if (Creature* leviathan = _instance->GetCreature(BOSS_LEVIATHAN))
{
leviathan->AI()->DoAction(ACTION_START_HARD_MODE);
me->SetVisible(false);
@@ -1271,7 +1270,7 @@ class npc_lorekeeper : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_lorekeeperAI(creature);
return GetUlduarAI<npc_lorekeeperAI>(creature);
}
};
@@ -253,7 +253,7 @@ class npc_iron_roots : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_iron_rootsAI(creature);
return GetUlduarAI<npc_iron_rootsAI>(creature);
}
};
@@ -1042,7 +1042,7 @@ class npc_detonating_lasher : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_detonating_lasherAI(creature);
return GetUlduarAI<npc_detonating_lasherAI>(creature);
}
};
@@ -1057,8 +1057,8 @@ class npc_ancient_water_spirit : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1095,10 +1095,10 @@ class npc_ancient_water_spirit : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(1);
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(1);
}
}
@@ -1110,7 +1110,7 @@ class npc_ancient_water_spirit : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ancient_water_spiritAI>(creature);
return GetUlduarAI<npc_ancient_water_spiritAI>(creature);
}
};
@@ -1125,8 +1125,8 @@ class npc_storm_lasher : public CreatureScript
{
Initialize();
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1169,10 +1169,10 @@ class npc_storm_lasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(2);
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(2);
}
}
@@ -1185,7 +1185,7 @@ class npc_storm_lasher : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_storm_lasherAI>(creature);
return GetUlduarAI<npc_storm_lasherAI>(creature);
}
};
@@ -1199,8 +1199,8 @@ class npc_snaplasher : public CreatureScript
npc_snaplasherAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->trioWaveCount;
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
waveCount = ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->trioWaveCount;
else
waveCount = 0;
}
@@ -1218,10 +1218,10 @@ class npc_snaplasher : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* Freya = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_FREYA)))
if (Creature* freya = instance->GetCreature(BOSS_FREYA))
{
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, Freya->AI())->LasherDead(4);
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->checkElementalAlive[waveCount] = false;
ENSURE_AI(boss_freya::boss_freyaAI, freya->AI())->LasherDead(4);
}
}
@@ -1232,7 +1232,7 @@ class npc_snaplasher : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_snaplasherAI>(creature);
return GetUlduarAI<npc_snaplasherAI>(creature);
}
};
@@ -1309,7 +1309,7 @@ class npc_ancient_conservator : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_ancient_conservatorAI(creature);
return GetUlduarAI<npc_ancient_conservatorAI>(creature);
}
};
@@ -1331,7 +1331,7 @@ class npc_sun_beam : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sun_beamAI(creature);
return GetUlduarAI<npc_sun_beamAI>(creature);
}
};
@@ -1371,7 +1371,7 @@ class npc_healthy_spore : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_healthy_sporeAI(creature);
return GetUlduarAI<npc_healthy_sporeAI>(creature);
}
};
@@ -1411,7 +1411,7 @@ class npc_eonars_gift : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_eonars_giftAI(creature);
return GetUlduarAI<npc_eonars_giftAI>(creature);
}
};
@@ -1453,7 +1453,7 @@ class npc_nature_bomb : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_nature_bombAI(creature);
return GetUlduarAI<npc_nature_bombAI>(creature);
}
};
@@ -1502,7 +1502,7 @@ class npc_unstable_sun_beam : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_unstable_sun_beamAI>(creature);
return GetUlduarAI<npc_unstable_sun_beamAI>(creature);
}
};
@@ -331,8 +331,8 @@ class boss_saronite_animus : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
vezax->AI()->DoAction(ACTION_ANIMUS_DIE);
}
void UpdateAI(uint32 diff) override
@@ -429,8 +429,8 @@ class npc_saronite_vapors : public CreatureScript
DoCast(me, SPELL_SARONITE_VAPORS);
me->DespawnOrUnsummon(30000);
if (Creature* Vezax = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_VEZAX)))
Vezax->AI()->DoAction(ACTION_VAPORS_DIE);
if (Creature* vezax = instance->GetCreature(BOSS_VEZAX))
vezax->AI()->DoAction(ACTION_VAPORS_DIE);
}
}
@@ -239,15 +239,15 @@ 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 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);
}
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_flash_freezeAI>(creature);
return GetUlduarAI<npc_flash_freezeAI>(creature);
}
};
@@ -288,21 +288,21 @@ class npc_ice_block : public CreatureScript
void DamageTaken(Unit* who, uint32& /*damage*/) override
{
if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID))
if (Creature* helper = ObjectAccessor::GetCreature(*me, targetGUID))
{
Helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
Helper->SetControlled(false, UNIT_STATE_ROOT);
helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
helper->SetControlled(false, UNIT_STATE_ROOT);
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
{
if (!Hodir->IsInCombat())
if (!hodir->IsInCombat())
{
Hodir->SetReactState(REACT_AGGRESSIVE);
Hodir->AI()->DoZoneInCombat();
Hodir->AI()->AttackStart(who);
hodir->SetReactState(REACT_AGGRESSIVE);
hodir->AI()->DoZoneInCombat();
hodir->AI()->AttackStart(who);
}
Helper->AI()->AttackStart(Hodir);
helper->AI()->AttackStart(hodir);
}
}
}
@@ -310,7 +310,7 @@ class npc_ice_block : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_ice_blockAI>(creature);
return GetUlduarAI<npc_ice_blockAI>(creature);
}
};
@@ -713,10 +713,10 @@ class npc_hodir_priest : public CreatureScript
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
InstanceScript* instance;
@@ -778,10 +778,10 @@ class npc_hodir_shaman : public CreatureScript
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
InstanceScript* instance;
@@ -842,10 +842,10 @@ class npc_hodir_druid : public CreatureScript
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
InstanceScript* instance;
@@ -925,10 +925,10 @@ class npc_hodir_mage : public CreatureScript
}
void JustDied(Unit* /*killer*/) override
{
if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR)))
Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
{
if (Creature* hodir = instance->GetCreature(BOSS_HODIR))
hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);
}
private:
InstanceScript* instance;
@@ -324,7 +324,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 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_IGNIS)))
if (Creature* ignis = _instance->GetCreature(BOSS_IGNIS))
if (ignis->AI())
ignis->AI()->DoAction(ACTION_REMOVE_BUFF);
@@ -369,7 +369,7 @@ static bool IsEncounterFinished(Unit* who)
mkii->DespawnOrUnsummon(120000);
vx001->DespawnOrUnsummon(120000);
aerial->DespawnOrUnsummon(120000);
if (Creature* mimiron = ObjectAccessor::GetCreature(*who, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->JustDied(who);
return true;
}
@@ -426,7 +426,7 @@ class boss_mimiron : public CreatureScript
me->RemoveAurasDueToSpell(SPELL_WELD);
DoCast(me->GetVehicleBase(), SPELL_SEAT_6);
if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON))
button->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
if (_fireFighter)
@@ -456,14 +456,14 @@ class boss_mimiron : public CreatureScript
_Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_ACTIVE);
if (_fireFighter)
if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER)))
if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON)))
if (GameObject* button = instance->GetGameObject(DATA_MIMIRON_BUTTON))
{
button->SetGoState(GO_STATE_READY);
button->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
@@ -491,7 +491,7 @@ class boss_mimiron : public CreatureScript
switch (eventId)
{
case EVENT_SUMMON_FLAMES:
if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER)))
if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER))
worldtrigger->CastCustomSpell(SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, SPELLVALUE_MAX_TARGETS, 3, NULL, true, NULL, NULL, me->GetGUID());
events.RescheduleEvent(EVENT_SUMMON_FLAMES, 28000);
break;
@@ -527,14 +527,14 @@ class boss_mimiron : public CreatureScript
events.ScheduleEvent(EVENT_VX001_ACTIVATION_4, 5000);
break;
case EVENT_VX001_ACTIVATION_4:
if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_READY);
if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MIMIRON_WORLD_TRIGGER)))
if (Creature* worldtrigger = instance->GetCreature(DATA_MIMIRON_WORLD_TRIGGER))
worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK);
events.ScheduleEvent(EVENT_VX001_ACTIVATION_5, 6000);
break;
case EVENT_VX001_ACTIVATION_5:
if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR)))
if (GameObject* elevator = instance->GetGameObject(DATA_MIMIRON_ELEVATOR))
elevator->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
if (Creature* vx001 = me->SummonCreature(NPC_VX_001, VX001SummonPos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000))
vx001->CastSpell(vx001, SPELL_FREEZE_ANIM);
@@ -642,7 +642,7 @@ class boss_mimiron : public CreatureScript
Talk(SAY_V07TRON_DEATH);
if (_fireFighter)
{
if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_COMPUTER)))
if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION_FIREFIGHTER, GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO), 2744.040f, 2569.352f, 364.3135f, 3.124123f, G3D::Quat(0.f, 0.f, 0.9999619f, 0.008734641f), 604800);
}
@@ -781,7 +781,7 @@ class boss_leviathan_mk_ii : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_MK_II) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY);
}
@@ -796,7 +796,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 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_VX001);
break;
case WP_MKII_P4_POS_1:
@@ -806,7 +806,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 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2);
break;
case WP_MKII_P4_POS_4:
@@ -949,7 +949,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 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL);
}
else if (events.IsInPhase(PHASE_VOL7RON))
@@ -1020,7 +1020,7 @@ class boss_vx_001 : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_VX_001) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY);
}
@@ -1198,7 +1198,7 @@ class boss_aerial_command_unit : public CreatureScript
void KilledUnit(Unit* victim) override
{
if (victim->GetTypeId() == TYPEID_PLAYER)
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY);
}
@@ -1208,7 +1208,7 @@ class boss_aerial_command_unit : public CreatureScript
{
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
}
}
@@ -1432,7 +1432,7 @@ class npc_mimiron_computer : public CreatureScript
{
case EVENT_SELF_DESTRUCT_10:
Talk(SAY_SELF_DESTRUCT_10);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE);
events.ScheduleEvent(EVENT_SELF_DESTRUCT_9, 60000);
break;
@@ -1474,7 +1474,7 @@ class npc_mimiron_computer : public CreatureScript
break;
case EVENT_SELF_DESTRUCT_FINALIZED:
Talk(SAY_SELF_DESTRUCT_FINALIZED);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON)))
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT);
DoCast(me, SPELL_SELF_DESTRUCTION_AURA);
DoCast(me, SPELL_SELF_DESTRUCTION_VISUAL);
@@ -1655,7 +1655,7 @@ class go_mimiron_hardmode_button : public GameObjectScript
if (!instance)
return false;
if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_COMPUTER)))
if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
go->SetGoState(GO_STATE_ACTIVE);
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
@@ -185,16 +185,22 @@ class boss_razorscale_controller : public CreatureScript
public:
boss_razorscale_controller() : CreatureScript("boss_razorscale_controller") { }
struct boss_razorscale_controllerAI : public BossAI
struct boss_razorscale_controllerAI : public ScriptedAI
{
boss_razorscale_controllerAI(Creature* creature) : BossAI(creature, DATA_RAZORSCALE_CONTROL)
boss_razorscale_controllerAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
instance = creature->GetInstanceScript();
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
}
InstanceScript* instance;
EventMap events;
SummonList summons;
void Reset() override
{
_Reset();
events.Reset();
summons.DespawnAll();
me->SetReactState(REACT_PASSIVE);
}
@@ -203,14 +209,14 @@ class boss_razorscale_controller : public CreatureScript
switch (spell->Id)
{
case SPELL_FLAMED:
if (GameObject* Harpoon1 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_1)))
Harpoon1->RemoveFromWorld();
if (GameObject* Harpoon2 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_2)))
Harpoon2->RemoveFromWorld();
if (GameObject* Harpoon3 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_3)))
Harpoon3->RemoveFromWorld();
if (GameObject* Harpoon4 = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_RAZOR_HARPOON_4)))
Harpoon4->RemoveFromWorld();
if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_1))
harpoon->RemoveFromWorld();
if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_2))
harpoon->RemoveFromWorld();
if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_3))
harpoon->RemoveFromWorld();
if (GameObject* harpoon = instance->GetGameObject(GO_RAZOR_HARPOON_4))
harpoon->RemoveFromWorld();
DoAction(ACTION_HARPOON_BUILD);
DoAction(ACTION_PLACE_BROKEN_HARPOON);
break;
@@ -225,7 +231,8 @@ class boss_razorscale_controller : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
_JustDied();
events.Reset();
summons.DespawnAll();
}
void DoAction(int32 action) override
@@ -257,39 +264,39 @@ class boss_razorscale_controller : public CreatureScript
{
case EVENT_BUILD_HARPOON_1:
Talk(EMOTE_HARPOON);
if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, G3D::Quat(), uint32(me->GetRespawnTime())))
if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, G3D::Quat(), uint32(me->GetRespawnTime())))
{
if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon
BrokenHarpoon->RemoveFromWorld();
if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f)) //only nearest broken harpoon
brokenHarpoon->RemoveFromWorld();
events.ScheduleEvent(EVENT_BUILD_HARPOON_2, 20000);
events.CancelEvent(EVENT_BUILD_HARPOON_1);
}
return;
case EVENT_BUILD_HARPOON_2:
Talk(EMOTE_HARPOON);
if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, G3D::Quat(), uint32(me->GetRespawnTime())))
if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, G3D::Quat(), uint32(me->GetRespawnTime())))
{
if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
BrokenHarpoon->RemoveFromWorld();
if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
brokenHarpoon->RemoveFromWorld();
events.CancelEvent(EVENT_BUILD_HARPOON_2);
}
return;
case EVENT_BUILD_HARPOON_3:
Talk(EMOTE_HARPOON);
if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, G3D::Quat(), uint32(me->GetRespawnTime())))
if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, G3D::Quat(), uint32(me->GetRespawnTime())))
{
if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
BrokenHarpoon->RemoveFromWorld();
if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
brokenHarpoon->RemoveFromWorld();
events.ScheduleEvent(EVENT_BUILD_HARPOON_4, 20000);
events.CancelEvent(EVENT_BUILD_HARPOON_3);
}
return;
case EVENT_BUILD_HARPOON_4:
Talk(EMOTE_HARPOON);
if (GameObject* Harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, G3D::Quat(), uint32(me->GetRespawnTime())))
if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, G3D::Quat(), uint32(me->GetRespawnTime())))
{
if (GameObject* BrokenHarpoon = Harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
BrokenHarpoon->RemoveFromWorld();
if (GameObject* brokenHarpoon = harpoon->FindNearestGameObject(GO_RAZOR_BROKEN_HARPOON, 5.0f))
brokenHarpoon->RemoveFromWorld();
events.CancelEvent(EVENT_BUILD_HARPOON_4);
}
return;
@@ -300,7 +307,7 @@ class boss_razorscale_controller : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<boss_razorscale_controllerAI>(creature);
return GetUlduarAI<boss_razorscale_controllerAI>(creature);
}
};
@@ -311,9 +318,9 @@ class go_razorscale_harpoon : public GameObjectScript
bool OnGossipHello(Player* /*player*/, GameObject* go) override
{
InstanceScript* instance = go->GetInstanceScript();
if (ObjectAccessor::GetCreature(*go, instance->GetGuidData(BOSS_RAZORSCALE)))
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
if (InstanceScript* instance = go->GetInstanceScript())
if (instance->GetCreature(BOSS_RAZORSCALE))
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
return false;
}
};
@@ -357,14 +364,14 @@ class boss_razorscale : public CreatureScript
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
Initialize();
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER))
commander->AI()->DoAction(ACTION_COMMANDER_RESET);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->AI()->DoAction(ACTION_HARPOON_BUILD);
me->SetSpeedRate(MOVE_FLIGHT, 3.0f);
me->SetReactState(REACT_PASSIVE);
@@ -379,7 +386,7 @@ class boss_razorscale : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
_JustDied();
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->AI()->Reset();
}
@@ -455,7 +462,7 @@ class boss_razorscale : public CreatureScript
me->SetCanFly(false);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED);
if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER)))
if (Creature* commander = instance->GetCreature(DATA_EXPEDITION_COMMANDER))
commander->AI()->DoAction(ACTION_GROUND_PHASE);
events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);
events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND);
@@ -471,7 +478,7 @@ class boss_razorscale : public CreatureScript
return;
case EVENT_BUFFET:
DoCastAOE(SPELL_WINGBUFFET);
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RAZORSCALE_CONTROL)))
if (Creature* controller = instance->GetCreature(DATA_RAZORSCALE_CONTROL))
controller->CastSpell(controller, SPELL_FLAMED, true);
events.CancelEvent(EVENT_BUFFET);
return;
@@ -713,10 +720,10 @@ class npc_expedition_commander : public CreatureScript
Phase = 5;
break;
case 5:
if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_RAZORSCALE)))
if (Creature* razorscale = instance->GetCreature(BOSS_RAZORSCALE))
{
Razorscale->AI()->DoAction(ACTION_EVENT_START);
me->SetInCombatWith(Razorscale);
razorscale->AI()->DoAction(ACTION_EVENT_START);
me->SetInCombatWith(razorscale);
}
if (Creature* firstEngineer = ObjectAccessor::GetCreature(*me, Engineer[0]))
firstEngineer->AI()->Talk(SAY_AGGRO_1);
@@ -760,7 +767,7 @@ class npc_expedition_commander : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_expedition_commanderAI>(creature);
return GetUlduarAI<npc_expedition_commanderAI>(creature);
}
};
@@ -846,7 +853,7 @@ class npc_mole_machine_trigger : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_mole_machine_triggerAI(creature);
return GetUlduarAI<npc_mole_machine_triggerAI>(creature);
}
};
@@ -871,7 +878,7 @@ class npc_devouring_flame : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_devouring_flameAI(creature);
return GetUlduarAI<npc_devouring_flameAI>(creature);
}
};
@@ -928,7 +935,7 @@ class npc_darkrune_watcher : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_watcherAI(creature);
return GetUlduarAI<npc_darkrune_watcherAI>(creature);
}
};
@@ -991,7 +998,7 @@ class npc_darkrune_guardian : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_guardianAI(creature);
return GetUlduarAI<npc_darkrune_guardianAI>(creature);
}
};
@@ -1058,7 +1065,7 @@ class npc_darkrune_sentinel : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_darkrune_sentinelAI(creature);
return GetUlduarAI<npc_darkrune_sentinelAI>(creature);
}
};
@@ -173,11 +173,6 @@ class boss_xt002 : public CreatureScript
public:
boss_xt002() : CreatureScript("boss_xt002") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_xt002_AI>(creature);
}
struct boss_xt002_AI : public BossAI
{
boss_xt002_AI(Creature* creature) : BossAI(creature, BOSS_XT002)
@@ -437,6 +432,12 @@ class boss_xt002 : public CreatureScript
uint8 _heartExposed;
uint32 _transferHealth;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<boss_xt002_AI>(creature);
}
};
/*-------------------------------------------------------
@@ -456,7 +457,7 @@ class npc_xt002_heart : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
xt002->AI()->SetData(DATA_TRANSFERED_HEALTH, me->GetHealth());
xt002->AI()->DoAction(ACTION_ENTER_HARD_MODE);
@@ -469,7 +470,7 @@ class npc_xt002_heart : public CreatureScript
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_xt002_heartAI>(creature);
return GetUlduarAI<npc_xt002_heartAI>(creature);
}
};
@@ -483,11 +484,6 @@ class npc_scrapbot : public CreatureScript
public:
npc_scrapbot() : CreatureScript("npc_scrapbot") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_scrapbotAI>(creature);
}
struct npc_scrapbotAI : public ScriptedAI
{
npc_scrapbotAI(Creature* creature) : ScriptedAI(creature)
@@ -507,15 +503,15 @@ class npc_scrapbot : public CreatureScript
Initialize();
if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
void UpdateAI(uint32 diff) override
{
if (_rangeCheckTimer <= diff)
{
if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
if (me->IsWithinMeleeRange(xt002))
{
@@ -534,6 +530,11 @@ class npc_scrapbot : public CreatureScript
InstanceScript* _instance;
uint32 _rangeCheckTimer;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_scrapbotAI>(creature);
}
};
/*-------------------------------------------------------
@@ -546,11 +547,6 @@ class npc_pummeller : public CreatureScript
public:
npc_pummeller() : CreatureScript("npc_pummeller") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_pummellerAI>(creature);
}
struct npc_pummellerAI : public ScriptedAI
{
npc_pummellerAI(Creature* creature) : ScriptedAI(creature)
@@ -570,7 +566,7 @@ class npc_pummeller : public CreatureScript
{
Initialize();
if (Creature* xt002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
{
Position pos = xt002->GetPosition();
me->GetMotionMaster()->MovePoint(0, pos);
@@ -618,6 +614,11 @@ class npc_pummeller : public CreatureScript
uint32 _trampleTimer;
uint32 _uppercutTimer;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_pummellerAI>(creature);
}
};
/*-------------------------------------------------------
@@ -653,11 +654,6 @@ class npc_boombot : public CreatureScript
public:
npc_boombot() : CreatureScript("npc_boombot") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetInstanceAI<npc_boombotAI>(creature);
}
struct npc_boombotAI : public ScriptedAI
{
npc_boombotAI(Creature* creature) : ScriptedAI(creature)
@@ -684,8 +680,8 @@ class npc_boombot : public CreatureScript
me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f);
/// @todo proper waypoints?
if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002)))
me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f);
if (Creature* xt002 = _instance->GetCreature(BOSS_XT002))
me->GetMotionMaster()->MoveFollow(xt002, 0.0f, 0.0f);
}
void DamageTaken(Unit* /*who*/, uint32& damage) override
@@ -725,6 +721,11 @@ class npc_boombot : public CreatureScript
InstanceScript* _instance;
bool _boomed;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetUlduarAI<npc_boombotAI>(creature);
}
};
@@ -502,7 +502,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
if (Creature* sara = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SARA)))
if (Creature* sara = instance->GetCreature(DATA_SARA))
sara->SetInCombatWith(me);
for (uint8 i = DATA_FREYA_YS; i <= DATA_MIMIRON_YS; ++i)
@@ -522,7 +522,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 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
summons.Despawn(yogg);
BossAI::JustDied(killer);
@@ -547,7 +547,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
instance->SetBossState(BOSS_YOGG_SARON, IN_PROGRESS);
break;
case EVENT_EXTINGUISH_ALL_LIFE:
if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_EXTINGUISH_ALL_LIFE, me);
yogg->CastSpell((Unit*)NULL, SPELL_EXTINGUISH_ALL_LIFE, true);
@@ -575,7 +575,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
break;
case EVENT_ILLUSION:
{
if (Creature* yogg = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_YOGG_SARON)))
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
{
yogg->AI()->Talk(EMOTE_YOGG_SARON_MADNESS);
yogg->AI()->Talk(SAY_YOGG_SARON_MADNESS);
@@ -588,7 +588,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
uint8 illusion = urand(CHAMBER_ILLUSION, STORMWIND_ILLUSION);
instance->SetData(DATA_ILLUSION, illusion);
if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->AI()->DoAction(ACTION_INDUCE_MADNESS);
events.ScheduleEvent(EVENT_ILLUSION, 80000, 0, PHASE_TWO); // wowwiki says 80 secs, wowhead says something about 90 secs
break;
@@ -614,7 +614,7 @@ class boss_voice_of_yogg_saron : public CreatureScript
case ACTION_PHASE_TWO:
events.SetPhase(PHASE_TWO);
me->SummonCreature(NPC_YOGG_SARON, YoggSaronSpawnPos);
if (Creature* brain = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
if (Creature* brain = instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->SetInCombatWithZone();
events.ScheduleEvent(EVENT_SUMMON_CORRUPTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
events.ScheduleEvent(EVENT_SUMMON_CONSTRICTOR_TENTACLE, 1, EVENT_GROUP_SUMMON_TENTACLES, PHASE_TWO);
@@ -713,7 +713,7 @@ class boss_sara : public CreatureScript
if (_events.IsInPhase(PHASE_ONE))
{
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_TRANSFORM);
Talk(SAY_SARA_TRANSFORM_1);
@@ -809,14 +809,14 @@ class boss_sara : public CreatureScript
Talk(SAY_SARA_TRANSFORM_4);
DoCast(me, SPELL_FULL_HEAL);
me->setFaction(16);
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_TWO);
if (Creature* mimiron = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_MIMIRON_YS)))
mimiron->AI()->DoAction(ACTION_PHASE_TWO);
break;
case EVENT_TRANSFORM_4:
DoCast(me, SPELL_PHASE_2_TRANSFORM);
if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON)))
if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
DoCast(yogg, SPELL_RIDE_YOGG_SARON_VEHICLE);
DoCast(me, SPELL_SHADOWY_BARRIER_SARA);
_events.SetPhase(PHASE_TWO);
@@ -872,7 +872,7 @@ class boss_sara : public CreatureScript
break;
}
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(summon);
}
@@ -939,7 +939,7 @@ class boss_yogg_saron : public CreatureScript
{
Talk(SAY_YOGG_SARON_DEATH);
if (Creature* creature = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* creature = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
me->Kill(creature);
for (uint8 i = DATA_SARA; i <= DATA_BRAIN_OF_YOGG_SARON; ++i)
@@ -1056,11 +1056,11 @@ class boss_brain_of_yogg_saron : public CreatureScript
DoCast(me, SPELL_BRAIN_HURT_VISUAL, true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE);
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_PHASE_THREE);
if (Creature* sara = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_SARA)))
if (Creature* sara = _instance->GetCreature(DATA_SARA))
sara->AI()->DoAction(ACTION_PHASE_THREE);
if (Creature* yogg = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_YOGG_SARON)))
if (Creature* yogg = _instance->GetCreature(BOSS_YOGG_SARON))
yogg->AI()->DoAction(ACTION_PHASE_THREE);
for (uint8 i = DATA_THORIM_YS; i <= DATA_MIMIRON_YS; ++i)
@@ -1098,7 +1098,7 @@ class boss_brain_of_yogg_saron : public CreatureScript
DoCastAOE(SPELL_SHATTERED_ILLUSION, true);
_instance->HandleGameObject(_instance->GetGuidData(GO_BRAIN_ROOM_DOOR_1 + illusion), true);
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION);
}
break;
@@ -1205,7 +1205,7 @@ class npc_guardian_of_yogg_saron : public CreatureScript
return;
// Guardian can be summoned both by Voice of Yogg-Saron and by Ominous Cloud
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(me);
}
@@ -1308,7 +1308,7 @@ class npc_constrictor_tentacle : public CreatureScript
void IsSummonedBy(Unit* /*summoner*/) override
{
if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = _instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->JustSummoned(me);
}
@@ -1399,7 +1399,7 @@ class npc_influence_tentacle : public CreatureScript
void JustDied(Unit* /*killer*/) override
{
if (Creature* brain = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_BRAIN_OF_YOGG_SARON)))
if (Creature* brain = _instance->GetCreature(DATA_BRAIN_OF_YOGG_SARON))
brain->AI()->DoAction(ACTION_TENTACLE_KILLED);
}
@@ -2799,7 +2799,7 @@ class spell_yogg_saron_induce_madness : public SpellScriptLoader // 64059
GetCaster()->CastSpell((Unit*)NULL, SPELL_SHATTERED_ILLUSION_REMOVE);
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
if (Creature* voice = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON)))
if (Creature* voice = instance->GetCreature(DATA_VOICE_OF_YOGG_SARON))
voice->AI()->DoAction(ACTION_TOGGLE_SHATTERED_ILLUSION);
}
@@ -3079,7 +3079,9 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
SpellCastResult CheckRequirement()
{
if (InstanceScript* instance = GetCaster()->GetInstanceScript())
if (Creature* yogg = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(BOSS_YOGG_SARON)))
{
if (Creature* yogg = instance->GetCreature(BOSS_YOGG_SARON))
{
if (yogg->FindCurrentSpellBySpellId(SPELL_DEAFENING_ROAR))
{
if (GetCaster()->GetDistance(yogg) > 20.0f)
@@ -3087,6 +3089,8 @@ class spell_yogg_saron_in_the_maws_of_the_old_god : public SpellScriptLoader
else
return SPELL_CAST_OK;
}
}
}
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
}
@@ -73,6 +73,28 @@ MinionData const minionData[] =
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_EXPEDITION_COMMANDER, DATA_EXPEDITION_COMMANDER },
{ NPC_RAZORSCALE_CONTROLLER, DATA_RAZORSCALE_CONTROL },
{ NPC_COMPUTER, DATA_COMPUTER },
{ NPC_WORLD_TRIGGER_MIMIRON, DATA_MIMIRON_WORLD_TRIGGER },
{ NPC_VOICE_OF_YOGG_SARON, DATA_VOICE_OF_YOGG_SARON },
{ NPC_SARA, DATA_SARA },
{ NPC_BRAIN_OF_YOGG_SARON, DATA_BRAIN_OF_YOGG_SARON },
{ NPC_BRANN_BRONZBEARD_ALG, DATA_BRANN_BRONZEBEARD_ALG },
{ NPC_BRANN_BRONZEBEARD_INTRO, DATA_BRANN_BRONZEBEARD_INTRO },
{ NPC_LORE_KEEPER_OF_NORGANNON, DATA_LORE_KEEPER_OF_NORGANNON },
{ NPC_HIGH_EXPLORER_DELLORAH, DATA_DELLORAH },
@@ -80,6 +102,19 @@ ObjectData const creatureData[] =
{ 0, 0, }
};
ObjectData const objectData[] =
{
{ GO_MIMIRON_ELEVATOR, DATA_MIMIRON_ELEVATOR },
{ GO_MIMIRON_BUTTON, DATA_MIMIRON_BUTTON },
{ GO_DOODAD_UL_UNIVERSEGLOBE01, DATA_UNIVERSE_GLOBE },
{ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, DATA_ALGALON_TRAPDOOR },
{ GO_RAZOR_HARPOON_1, GO_RAZOR_HARPOON_1 },
{ GO_RAZOR_HARPOON_2, GO_RAZOR_HARPOON_2 },
{ GO_RAZOR_HARPOON_3, GO_RAZOR_HARPOON_3 },
{ GO_RAZOR_HARPOON_4, GO_RAZOR_HARPOON_4 },
{ 0, 0 }
};
class instance_ulduar : public InstanceMapScript
{
public:
@@ -94,7 +129,7 @@ class instance_ulduar : public InstanceMapScript
LoadBossBoundaries(boundaries);
LoadDoorData(doorData);
LoadMinionData(minionData);
LoadObjectData(creatureData, nullptr);
LoadObjectData(creatureData, objectData);
_algalonTimer = 61;
_maxArmorItemLevel = 0;
@@ -118,51 +153,29 @@ class instance_ulduar : public InstanceMapScript
}
// Creatures
ObjectGuid LeviathanGUID;
GuidVector LeviathanVehicleGUIDs;
ObjectGuid IgnisGUID;
ObjectGuid RazorscaleGUID;
ObjectGuid RazorscaleController;
ObjectGuid ExpeditionCommanderGUID;
ObjectGuid XT002GUID;
ObjectGuid XTToyPileGUIDs[4];
ObjectGuid AssemblyGUIDs[3];
ObjectGuid KologarnGUID;
ObjectGuid AuriayaGUID;
ObjectGuid HodirGUID;
ObjectGuid ThorimGUID;
ObjectGuid FreyaGUID;
ObjectGuid ElderGUIDs[3];
ObjectGuid FreyaAchieveTriggerGUID;
ObjectGuid MimironGUID;
ObjectGuid MimironVehicleGUIDs[3];
ObjectGuid MimironComputerGUID;
ObjectGuid MimironWorldTriggerGUID;
ObjectGuid VezaxGUID;
ObjectGuid YoggSaronGUID;
ObjectGuid VoiceOfYoggSaronGUID;
ObjectGuid SaraGUID;
ObjectGuid BrainOfYoggSaronGUID;
ObjectGuid KeeperGUIDs[4];
ObjectGuid AlgalonGUID;
ObjectGuid BrannBronzebeardAlgGUID;
// GameObjects
ObjectGuid LeviathanGateGUID;
ObjectGuid RazorHarpoonGUIDs[4];
ObjectGuid KologarnChestGUID;
ObjectGuid KologarnBridgeGUID;
ObjectGuid ThorimChestGUID;
ObjectGuid HodirRareCacheGUID;
ObjectGuid HodirChestGUID;
ObjectGuid MimironTramGUID;
ObjectGuid MimironElevatorGUID;
ObjectGuid MimironButtonGUID;
ObjectGuid BrainRoomDoorGUIDs[3];
ObjectGuid AlgalonSigilDoorGUID[3];
ObjectGuid AlgalonFloorGUID[2];
ObjectGuid AlgalonUniverseGUID;
ObjectGuid AlgalonTrapdoorGUID;
ObjectGuid GiftOfTheObserverGUID;
// Miscellaneous
@@ -233,6 +246,8 @@ class instance_ulduar : public InstanceMapScript
void OnCreatureCreate(Creature* creature) override
{
InstanceScript::OnCreatureCreate(creature);
if (!TeamInInstance)
{
Map::PlayerList const& Players = instance->GetPlayers();
@@ -243,40 +258,22 @@ class instance_ulduar : public InstanceMapScript
switch (creature->GetEntry())
{
case NPC_LEVIATHAN:
LeviathanGUID = creature->GetGUID();
break;
case NPC_SALVAGED_DEMOLISHER:
case NPC_SALVAGED_SIEGE_ENGINE:
case NPC_SALVAGED_CHOPPER:
LeviathanVehicleGUIDs.push_back(creature->GetGUID());
break;
case NPC_IGNIS:
IgnisGUID = creature->GetGUID();
break;
// Razorscale
case NPC_RAZORSCALE:
RazorscaleGUID = creature->GetGUID();
break;
case NPC_RAZORSCALE_CONTROLLER:
RazorscaleController = creature->GetGUID();
break;
case NPC_EXPEDITION_COMMANDER:
ExpeditionCommanderGUID = creature->GetGUID();
break;
// XT-002 Deconstructor
case NPC_XT002:
XT002GUID = creature->GetGUID();
break;
case NPC_XT_TOY_PILE:
for (uint8 i = 0; i < 4; ++i)
{
if (!XTToyPileGUIDs[i])
{
XTToyPileGUIDs[i] = creature->GetGUID();
break;
}
}
break;
// Assembly of Iron
@@ -293,17 +290,7 @@ class instance_ulduar : public InstanceMapScript
AddMinion(creature, true);
break;
case NPC_KOLOGARN:
KologarnGUID = creature->GetGUID();
break;
case NPC_AURIAYA:
AuriayaGUID = creature->GetGUID();
break;
// Hodir
case NPC_HODIR:
HodirGUID = creature->GetGUID();
break;
case NPC_EIVI_NIGHTFEATHER:
if (TeamInInstance == HORDE)
creature->UpdateEntry(NPC_TOR_GREYCLOUD);
@@ -337,14 +324,7 @@ class instance_ulduar : public InstanceMapScript
creature->UpdateEntry(NPC_BATTLE_PRIEST_GINA);
break;
case NPC_THORIM:
ThorimGUID = creature->GetGUID();
break;
// Freya
case NPC_FREYA:
FreyaGUID = creature->GetGUID();
break;
case NPC_IRONBRANCH:
ElderGUIDs[0] = creature->GetGUID();
if (GetBossState(BOSS_FREYA) == DONE)
@@ -365,9 +345,6 @@ class instance_ulduar : public InstanceMapScript
break;
// Mimiron
case NPC_MIMIRON:
MimironGUID = creature->GetGUID();
break;
case NPC_LEVIATHAN_MKII:
MimironVehicleGUIDs[0] = creature->GetGUID();
break;
@@ -377,30 +354,8 @@ class instance_ulduar : public InstanceMapScript
case NPC_AERIAL_COMMAND_UNIT:
MimironVehicleGUIDs[2] = creature->GetGUID();
break;
case NPC_COMPUTER:
MimironComputerGUID = creature->GetGUID();
break;
case NPC_WORLD_TRIGGER_MIMIRON:
MimironWorldTriggerGUID = creature->GetGUID();
break;
case NPC_VEZAX:
VezaxGUID = creature->GetGUID();
break;
// Yogg-Saron
case NPC_YOGG_SARON:
YoggSaronGUID = creature->GetGUID();
break;
case NPC_VOICE_OF_YOGG_SARON:
VoiceOfYoggSaronGUID = creature->GetGUID();
break;
case NPC_BRAIN_OF_YOGG_SARON:
BrainOfYoggSaronGUID = creature->GetGUID();
break;
case NPC_SARA:
SaraGUID = creature->GetGUID();
break;
case NPC_FREYA_YS:
KeeperGUIDs[0] = creature->GetGUID();
_summonYSKeeper[0] = false;
@@ -430,12 +385,6 @@ class instance_ulduar : public InstanceMapScript
break;
// Algalon
case NPC_ALGALON:
AlgalonGUID = creature->GetGUID();
break;
case NPC_BRANN_BRONZBEARD_ALG:
BrannBronzebeardAlgGUID = creature->GetGUID();
break;
//! These creatures are summoned by something else than Algalon
//! but need to be controlled/despawned by him - so they need to be
//! registered in his summon list
@@ -443,44 +392,42 @@ 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 = instance->GetCreature(AlgalonGUID))
if (Creature* algalon = GetCreature(BOSS_ALGALON))
algalon->AI()->JustSummoned(creature);
break;
}
InstanceScript::OnCreatureCreate(creature);
}
void OnCreatureRemove(Creature* creature) override
{
InstanceScript::OnCreatureRemove(creature);
switch (creature->GetEntry())
{
case NPC_XT_TOY_PILE:
for (uint8 i = 0; i < 4; ++i)
{
if (XTToyPileGUIDs[i] == creature->GetGUID())
{
XTToyPileGUIDs[i].Clear();
break;
}
}
break;
case NPC_STEELBREAKER:
case NPC_MOLGEIM:
case NPC_BRUNDIR:
AddMinion(creature, false);
break;
case NPC_BRANN_BRONZBEARD_ALG:
if (BrannBronzebeardAlgGUID == creature->GetGUID())
BrannBronzebeardAlgGUID.Clear();
break;
default:
break;
}
InstanceScript::OnCreatureRemove(creature);
}
void OnGameObjectCreate(GameObject* gameObject) override
{
InstanceScript::OnGameObjectCreate(gameObject);
switch (gameObject->GetEntry())
{
case GO_KOLOGARN_CHEST_HERO:
@@ -507,43 +454,11 @@ class instance_ulduar : public InstanceMapScript
case GO_MIMIRON_TRAM:
MimironTramGUID = gameObject->GetGUID();
break;
case GO_MIMIRON_ELEVATOR:
MimironElevatorGUID = gameObject->GetGUID();
break;
case GO_MIMIRON_BUTTON:
MimironButtonGUID = gameObject->GetGUID();
break;
case GO_LEVIATHAN_GATE:
LeviathanGateGUID = gameObject->GetGUID();
if (GetBossState(BOSS_LEVIATHAN) == DONE)
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;
case GO_LEVIATHAN_DOOR:
case GO_XT_002_DOOR:
case GO_IRON_COUNCIL_DOOR:
case GO_ARCHIVUM_DOOR:
case GO_HODIR_ENTRANCE:
case GO_HODIR_DOOR:
case GO_HODIR_ICE_DOOR:
case GO_MIMIRON_DOOR_1:
case GO_MIMIRON_DOOR_2:
case GO_MIMIRON_DOOR_3:
case GO_VEZAX_DOOR:
case GO_YOGG_SARON_DOOR:
AddDoor(gameObject, true);
break;
case GO_RAZOR_HARPOON_1:
RazorHarpoonGUIDs[0] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_2:
RazorHarpoonGUIDs[1] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_3:
RazorHarpoonGUIDs[2] = gameObject->GetGUID();
break;
case GO_RAZOR_HARPOON_4:
RazorHarpoonGUIDs[3] = gameObject->GetGUID();
break;
case GO_MOLE_MACHINE:
if (GetBossState(BOSS_RAZORSCALE) == IN_PROGRESS)
gameObject->SetGoState(GO_STATE_ACTIVE);
@@ -574,23 +489,12 @@ class instance_ulduar : public InstanceMapScript
break;
case GO_DOODAD_UL_SIGILDOOR_03:
AlgalonSigilDoorGUID[2] = gameObject->GetGUID();
AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_UNIVERSEFLOOR_01:
AlgalonFloorGUID[0] = gameObject->GetGUID();
AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_UNIVERSEFLOOR_02:
AlgalonFloorGUID[1] = gameObject->GetGUID();
AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_UNIVERSEGLOBE01:
AlgalonUniverseGUID = gameObject->GetGUID();
AddDoor(gameObject, true);
break;
case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03:
AlgalonTrapdoorGUID = gameObject->GetGUID();
AddDoor(gameObject, true);
break;
case GO_GIFT_OF_THE_OBSERVER_10:
case GO_GIFT_OF_THE_OBSERVER_25:
@@ -601,40 +505,12 @@ class instance_ulduar : public InstanceMapScript
}
}
void OnGameObjectRemove(GameObject* gameObject) override
{
switch (gameObject->GetEntry())
{
case GO_LEVIATHAN_DOOR:
case GO_XT_002_DOOR:
case GO_IRON_COUNCIL_DOOR:
case GO_ARCHIVUM_DOOR:
case GO_HODIR_ENTRANCE:
case GO_HODIR_DOOR:
case GO_HODIR_ICE_DOOR:
case GO_MIMIRON_DOOR_1:
case GO_MIMIRON_DOOR_2:
case GO_MIMIRON_DOOR_3:
case GO_VEZAX_DOOR:
case GO_YOGG_SARON_DOOR:
case GO_DOODAD_UL_SIGILDOOR_03:
case GO_DOODAD_UL_UNIVERSEFLOOR_01:
case GO_DOODAD_UL_UNIVERSEFLOOR_02:
case GO_DOODAD_UL_UNIVERSEGLOBE01:
case GO_DOODAD_UL_ULDUAR_TRAPDOOR_03:
AddDoor(gameObject, false);
break;
default:
break;
}
}
void OnUnitDeath(Unit* unit) override
{
// Champion/Conqueror of Ulduar
if (unit->GetTypeId() == TYPEID_PLAYER)
{
for (uint8 i = 0; i < BOSS_ALGALON; i++)
for (uint8 i = 0; i < BOSS_ALGALON; ++i)
{
if (GetBossState(i) == IN_PROGRESS)
{
@@ -680,27 +556,27 @@ class instance_ulduar : public InstanceMapScript
void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override
{
// Flame Leviathan's Tower Event triggers
Creature* FlameLeviathan = instance->GetCreature(LeviathanGUID);
switch (eventId)
{
// Flame Leviathan's Tower Event triggers
case EVENT_TOWER_OF_STORM_DESTROYED:
if (FlameLeviathan && FlameLeviathan->IsAlive())
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
break;
case EVENT_TOWER_OF_FROST_DESTROYED:
if (FlameLeviathan && FlameLeviathan->IsAlive())
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
break;
case EVENT_TOWER_OF_FLAMES_DESTROYED:
if (FlameLeviathan && FlameLeviathan->IsAlive())
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
break;
case EVENT_TOWER_OF_LIFE_DESTROYED:
if (FlameLeviathan && FlameLeviathan->IsAlive())
FlameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
if (Creature* flameLeviathan = GetCreature(BOSS_LEVIATHAN))
flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
break;
// Yogg-Saron Event triggers
case EVENT_ACTIVATE_SANITY_WELL:
if (Creature* freya = instance->GetCreature(KeeperGUIDs[0]))
freya->AI()->DoAction(4/*ACTION_SANITY_WELLS*/);
@@ -845,9 +721,9 @@ class instance_ulduar : public InstanceMapScript
HodirRareCacheData = data;
if (!HodirRareCacheData)
{
if (Creature* Hodir = instance->GetCreature(HodirGUID))
if (Creature* hodir = GetCreature(BOSS_HODIR))
if (GameObject* gameObject = instance->GetGameObject(HodirRareCacheGUID))
Hodir->RemoveGameObject(gameObject, false);
hodir->RemoveGameObject(gameObject, false);
}
break;
case DATA_UNBROKEN:
@@ -882,30 +758,7 @@ class instance_ulduar : public InstanceMapScript
{
switch (data)
{
case BOSS_LEVIATHAN:
return LeviathanGUID;
case BOSS_IGNIS:
return IgnisGUID;
// Razorscale
case BOSS_RAZORSCALE:
return RazorscaleGUID;
case DATA_RAZORSCALE_CONTROL:
return RazorscaleController;
case DATA_EXPEDITION_COMMANDER:
return ExpeditionCommanderGUID;
case GO_RAZOR_HARPOON_1:
return RazorHarpoonGUIDs[0];
case GO_RAZOR_HARPOON_2:
return RazorHarpoonGUIDs[1];
case GO_RAZOR_HARPOON_3:
return RazorHarpoonGUIDs[2];
case GO_RAZOR_HARPOON_4:
return RazorHarpoonGUIDs[3];
// XT-002 Deconstructor
case BOSS_XT002:
return XT002GUID;
case DATA_TOY_PILE_0:
case DATA_TOY_PILE_1:
case DATA_TOY_PILE_2:
@@ -920,18 +773,7 @@ class instance_ulduar : public InstanceMapScript
case DATA_BRUNDIR:
return AssemblyGUIDs[2];
case BOSS_KOLOGARN:
return KologarnGUID;
case BOSS_AURIAYA:
return AuriayaGUID;
case BOSS_HODIR:
return HodirGUID;
case BOSS_THORIM:
return ThorimGUID;
// Freya
case BOSS_FREYA:
return FreyaGUID;
case BOSS_BRIGHTLEAF:
return ElderGUIDs[0];
case BOSS_IRONBRANCH:
@@ -940,35 +782,14 @@ class instance_ulduar : public InstanceMapScript
return ElderGUIDs[2];
// Mimiron
case BOSS_MIMIRON:
return MimironGUID;
case DATA_LEVIATHAN_MK_II:
return MimironVehicleGUIDs[0];
case DATA_VX_001:
return MimironVehicleGUIDs[1];
case DATA_AERIAL_COMMAND_UNIT:
return MimironVehicleGUIDs[2];
case DATA_COMPUTER:
return MimironComputerGUID;
case DATA_MIMIRON_WORLD_TRIGGER:
return MimironWorldTriggerGUID;
case DATA_MIMIRON_ELEVATOR:
return MimironElevatorGUID;
case DATA_MIMIRON_BUTTON:
return MimironButtonGUID;
case BOSS_VEZAX:
return VezaxGUID;
// Yogg-Saron
case BOSS_YOGG_SARON:
return YoggSaronGUID;
case DATA_VOICE_OF_YOGG_SARON:
return VoiceOfYoggSaronGUID;
case DATA_BRAIN_OF_YOGG_SARON:
return BrainOfYoggSaronGUID;
case DATA_SARA:
return SaraGUID;
case GO_BRAIN_ROOM_DOOR_1:
return BrainRoomDoorGUIDs[0];
case GO_BRAIN_ROOM_DOOR_2:
@@ -985,8 +806,6 @@ class instance_ulduar : public InstanceMapScript
return KeeperGUIDs[3];
// Algalon
case BOSS_ALGALON:
return AlgalonGUID;
case DATA_SIGILDOOR_01:
return AlgalonSigilDoorGUID[0];
case DATA_SIGILDOOR_02:
@@ -997,15 +816,9 @@ class instance_ulduar : public InstanceMapScript
return AlgalonFloorGUID[0];
case DATA_UNIVERSE_FLOOR_02:
return AlgalonFloorGUID[1];
case DATA_UNIVERSE_GLOBE:
return AlgalonUniverseGUID;
case DATA_ALGALON_TRAPDOOR:
return AlgalonTrapdoorGUID;
case DATA_BRANN_BRONZEBEARD_ALG:
return BrannBronzebeardAlgGUID;
}
return ObjectGuid::Empty;
return InstanceScript::GetGuidData(data);
}
uint32 GetData(uint32 type) const override
@@ -1174,7 +987,7 @@ class instance_ulduar : public InstanceMapScript
{
DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 0);
_events.CancelEvent(EVENT_UPDATE_ALGALON_TIMER);
if (Creature* algalon = instance->GetCreature(AlgalonGUID))
if (Creature* algalon = GetCreature(BOSS_ALGALON))
algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON);
}
break;
@@ -1195,8 +1008,8 @@ class instance_ulduar : public InstanceMapScript
}
break;
case EVENT_LEVIATHAN_BREAK_DOOR:
if (Creature* Leviathan = instance->GetCreature(LeviathanGUID))
Leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
if (Creature* leviathan = GetCreature(BOSS_LEVIATHAN))
leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
if (GameObject* gameObject = instance->GetGameObject(LeviathanGateGUID))
gameObject->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
break;