diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-03-23 03:23:48 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-03-23 17:15:02 -0300 |
commit | b74cc8085946fed1eb41a6332e3a5cca6f9edd7f (patch) | |
tree | f705407c7d78de782f87fb10c6c7ec5aa19ddc65 /src | |
parent | 986d830ae7b4b44c24e592209c1c31b2616c516d (diff) |
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)
Diffstat (limited to 'src')
12 files changed, 277 insertions, 453 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 e1cdb3477d1..17f4b814956 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 @@ -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); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 557679018f0..8fd85e1c130 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -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); } }; 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 0c493e39a8e..72a775ba160 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -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); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index a3f1189da74..e2173f51fc7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -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); } }; 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 76bd8b939ff..00370d87516 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -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); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 5ffa4508eb6..f8fae195e09 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -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; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 164f6c814ca..399718d49cf 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -325,7 +325,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 cb40e167bd7..fcfff0766dd 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -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); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index e771000bc02..e6aa2654d54 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -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); } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index b5ed97f2dec..863740fa70f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -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); + } }; 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 ddfddfbd605..05c9d44d48e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -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); } @@ -2804,7 +2804,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); } @@ -3084,7 +3084,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) @@ -3092,6 +3094,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 5abb0b73ea5..c1695b2466c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -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 @@ -1173,7 +986,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; @@ -1194,8 +1007,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; |