aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp14
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp37
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp52
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp8
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp58
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp40
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp91
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp57
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp44
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp325
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;