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