diff options
Diffstat (limited to 'src')
12 files changed, 235 insertions, 406 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 818485e4440..4e5019618ec 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -410,7 +410,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); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index b8f23964df6..fe01a917cd6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -393,8 +393,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: @@ -472,8 +472,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: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index b2958daf07c..8e734e6d3e7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -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 GetUlduarAI<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 @@ -1247,7 +1246,7 @@ class npc_lorekeeper : public CreatureScript CloseGossipMenuFor(player); me->GetMap()->LoadGrid(364, -16); // make sure leviathan is loaded - if (Creature* leviathan = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_LEVIATHAN))) + if (Creature* leviathan = _instance->GetCreature(BOSS_LEVIATHAN)) { leviathan->AI()->DoAction(ACTION_START_HARD_MODE); me->SetVisible(false); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index ad4b7c6413f..5cfc0d75481 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1061,8 +1061,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; } @@ -1099,10 +1099,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); } } @@ -1129,8 +1129,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; } @@ -1173,10 +1173,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); } } @@ -1203,8 +1203,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; } @@ -1222,10 +1222,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); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 9630f1ddbfe..6c03b9f5ecb 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -336,8 +336,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 @@ -434,8 +434,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); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 57b96e26943..4d8a49160bc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -242,8 +242,8 @@ 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); } } }; @@ -291,21 +291,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->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); - Helper->SetControlled(false, UNIT_STATE_ROOT); + helper->RemoveUnitFlag(UnitFlags(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); } } } @@ -717,8 +717,8 @@ 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: @@ -782,8 +782,8 @@ 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: @@ -846,8 +846,8 @@ 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: @@ -929,8 +929,8 @@ 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: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index e4040a44a36..37141085731 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -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 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_IGNIS))) + if (Creature* ignis = _instance->GetCreature(BOSS_IGNIS)) if (ignis->AI()) ignis->AI()->DoAction(ACTION_REMOVE_BUFF); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 5cf1cf67de8..fd4d7b02229 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -371,7 +371,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; } @@ -428,7 +428,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->AddFlag(GO_FLAG_NOT_SELECTABLE); if (_fireFighter) @@ -458,14 +458,14 @@ class boss_mimiron : public CreatureScript _Reset(); me->RemoveUnitFlag(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(GO_FLAG_NOT_SELECTABLE); @@ -493,7 +493,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; @@ -529,14 +529,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); @@ -644,7 +644,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, QuaternionData(0.f, 0.f, 0.9999619f, 0.008734641f), 604800); } @@ -783,7 +783,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); } @@ -798,7 +798,7 @@ class boss_leviathan_mk_ii : public CreatureScript me->AddUnitFlag(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: @@ -808,7 +808,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: @@ -951,7 +951,7 @@ class boss_vx_001 : public CreatureScript me->AddUnitFlag(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)) @@ -1022,7 +1022,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); } @@ -1201,7 +1201,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); } @@ -1211,7 +1211,7 @@ class boss_aerial_command_unit : public CreatureScript { me->AddUnitFlag(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); } } @@ -1435,7 +1435,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; @@ -1477,7 +1477,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); @@ -1658,7 +1658,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->AddFlag(GO_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 8a1bbfe712c..3f56f4523cc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -189,16 +189,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->SetDisplayFromModel(1); } + InstanceScript* instance; + EventMap events; + SummonList summons; + void Reset() override { - _Reset(); + events.Reset(); + summons.DespawnAll(); me->SetReactState(REACT_PASSIVE); } @@ -207,14 +213,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; @@ -229,7 +235,8 @@ class boss_razorscale_controller : public CreatureScript void JustDied(Unit* /*killer*/) override { - _JustDied(); + events.Reset(); + summons.DespawnAll(); } void DoAction(int32 action) override @@ -261,39 +268,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, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_1, PosHarpoon[0].GetPositionX(), PosHarpoon[0].GetPositionY(), PosHarpoon[0].GetPositionZ(), 4.790f, QuaternionData::fromEulerAnglesZYX(4.790f, 0.0f, 0.0f), 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, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_2, PosHarpoon[1].GetPositionX(), PosHarpoon[1].GetPositionY(), PosHarpoon[1].GetPositionZ(), 4.659f, QuaternionData::fromEulerAnglesZYX(4.659f, 0.0f, 0.0f), 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, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_3, PosHarpoon[2].GetPositionX(), PosHarpoon[2].GetPositionY(), PosHarpoon[2].GetPositionZ(), 5.382f, QuaternionData::fromEulerAnglesZYX(5.382f, 0.0f, 0.0f), 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, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), uint32(me->GetRespawnTime()))) + if (GameObject* harpoon = me->SummonGameObject(GO_RAZOR_HARPOON_4, PosHarpoon[3].GetPositionX(), PosHarpoon[3].GetPositionY(), PosHarpoon[3].GetPositionZ(), 4.266f, QuaternionData::fromEulerAnglesZYX(4.266f, 0.0f, 0.0f), 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; @@ -315,9 +322,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->AddFlag(GO_FLAG_NOT_SELECTABLE); + if (InstanceScript* instance = go->GetInstanceScript()) + if (instance->GetCreature(BOSS_RAZORSCALE)) + go->AddFlag(GO_FLAG_NOT_SELECTABLE); return false; } }; @@ -361,14 +368,14 @@ class boss_razorscale : public CreatureScript me->AddUnitFlag(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); @@ -383,7 +390,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(); } @@ -459,7 +466,7 @@ class boss_razorscale : public CreatureScript me->SetCanFly(false); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->AddUnitFlag(UnitFlags(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); @@ -475,7 +482,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; @@ -717,10 +724,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); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 0366f1534ba..c6fc0925bf6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -176,11 +176,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) @@ -441,6 +436,12 @@ class boss_xt002 : public CreatureScript uint8 _heartExposed; uint32 _transferHealth; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<boss_xt002_AI>(creature); + } + }; /*------------------------------------------------------- @@ -460,7 +461,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); @@ -487,11 +488,6 @@ class npc_scrapbot : public CreatureScript public: npc_scrapbot() : CreatureScript("npc_scrapbot") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_scrapbotAI>(creature); - } - struct npc_scrapbotAI : public ScriptedAI { npc_scrapbotAI(Creature* creature) : ScriptedAI(creature) @@ -511,15 +507,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)) { @@ -538,6 +534,12 @@ class npc_scrapbot : public CreatureScript InstanceScript* _instance; uint32 _rangeCheckTimer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_scrapbotAI>(creature); + } + }; /*------------------------------------------------------- @@ -550,11 +552,6 @@ class npc_pummeller : public CreatureScript public: npc_pummeller() : CreatureScript("npc_pummeller") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_pummellerAI>(creature); - } - struct npc_pummellerAI : public ScriptedAI { npc_pummellerAI(Creature* creature) : ScriptedAI(creature) @@ -574,7 +571,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); @@ -622,6 +619,12 @@ class npc_pummeller : public CreatureScript uint32 _trampleTimer; uint32 _uppercutTimer; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_pummellerAI>(creature); + } + }; /*------------------------------------------------------- @@ -657,11 +660,6 @@ class npc_boombot : public CreatureScript public: npc_boombot() : CreatureScript("npc_boombot") { } - CreatureAI* GetAI(Creature* creature) const override - { - return GetUlduarAI<npc_boombotAI>(creature); - } - struct npc_boombotAI : public ScriptedAI { npc_boombotAI(Creature* creature) : ScriptedAI(creature) @@ -682,8 +680,8 @@ class npc_boombot : public CreatureScript DoCast(SPELL_AURA_BOOMBOT); // For achievement /// @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 @@ -723,6 +721,12 @@ class npc_boombot : public CreatureScript InstanceScript* _instance; bool _boomed; }; + + CreatureAI* GetAI(Creature* creature) const override + { + return GetUlduarAI<npc_boombotAI>(creature); + } + }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 6c1101d433d..79214b5b0e1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -511,7 +511,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) @@ -531,7 +531,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); @@ -556,7 +556,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); @@ -584,7 +584,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); @@ -597,7 +597,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; @@ -623,7 +623,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); @@ -722,7 +722,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); @@ -818,14 +818,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); @@ -881,7 +881,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); } @@ -948,7 +948,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) @@ -1065,11 +1065,11 @@ class boss_brain_of_yogg_saron : public CreatureScript DoCast(me, SPELL_BRAIN_HURT_VISUAL, true); me->AddUnitFlag(UnitFlags(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) @@ -1107,7 +1107,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; @@ -1214,7 +1214,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); } @@ -1317,7 +1317,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); } @@ -1408,7 +1408,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); } @@ -2779,7 +2779,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); } @@ -3053,7 +3053,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) @@ -3061,6 +3063,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; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 3683e9f5ea3..d34a7ac516c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -79,6 +79,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 }, @@ -86,6 +108,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: @@ -100,7 +135,7 @@ class instance_ulduar : public InstanceMapScript LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadMinionData(minionData); - LoadObjectData(creatureData, nullptr); + LoadObjectData(creatureData, objectData); _algalonTimer = 61; _maxArmorItemLevel = 0; @@ -124,51 +159,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 @@ -239,6 +252,8 @@ class instance_ulduar : public InstanceMapScript void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + if (!TeamInInstance) { Map::PlayerList const& Players = instance->GetPlayers(); @@ -249,40 +264,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 @@ -299,17 +296,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); @@ -343,14 +330,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) @@ -371,9 +351,6 @@ class instance_ulduar : public InstanceMapScript break; // Mimiron - case NPC_MIMIRON: - MimironGUID = creature->GetGUID(); - break; case NPC_LEVIATHAN_MKII: MimironVehicleGUIDs[0] = creature->GetGUID(); break; @@ -383,30 +360,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; @@ -436,12 +391,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 @@ -449,7 +398,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 = instance->GetCreature(AlgalonGUID)) + if (Creature* algalon = GetCreature(BOSS_ALGALON)) algalon->AI()->JustSummoned(creature); break; } @@ -459,34 +408,34 @@ class instance_ulduar : public InstanceMapScript 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: @@ -513,43 +462,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); @@ -580,23 +497,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: @@ -607,40 +513,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) { @@ -686,27 +564,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*/); @@ -851,9 +729,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: @@ -888,30 +766,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: @@ -926,18 +781,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: @@ -946,35 +790,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: @@ -991,8 +814,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: @@ -1003,15 +824,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 @@ -1179,7 +994,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; @@ -1200,8 +1015,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; |