aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsirikfoll <sirikfoll@hotmail.com>2019-02-25 17:50:24 -0300
committersirikfoll <sirikfoll@hotmail.com>2019-02-25 17:50:24 -0300
commita8033420299d75bbcfd6efec610ec7f34f01bf75 (patch)
tree3ccd6e28765f1f1c7fd27b58357747661115372f /src
parentc2f2db08aa4f729fbd5b21528a215f6df0c131b6 (diff)
Scripts/Ulduar: Mimiron improvements
Closes #23043 Fix Aerial hover Some visual issues
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp65
1 files changed, 54 insertions, 11 deletions
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 16647d42e07..cbe7c7c50d9 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -325,7 +325,8 @@ enum Waypoints
enum SeatIds : int8
{
- ROCKET_SEAT_LEFT = 5,
+ MKII_SEAT_CANNON = 3,
+ ROCKET_SEAT_LEFT = 5,
ROCKET_SEAT_RIGHT = 6
};
@@ -346,7 +347,7 @@ Position const VehicleRelocation[] =
{ 2763.820f, 2568.870f, 364.3136f }, // WP_MKII_P4_POS_3
{ 2761.215f, 2568.875f, 364.0636f }, // WP_MKII_P4_POS_4
{ 2744.610f, 2569.380f, 364.3136f }, // WP_MKII_P4_POS_5
- { 2748.513f, 2569.051f, 364.3136f } // WP_AERIAL_P4_POS
+ { 2744.62f, 2569.41f, 382.0f, 3.054326f } // WP_AERIAL_P4_POS
};
Position const VX001SummonPos = { 2744.431f, 2569.385f, 364.3968f, 3.141593f };
@@ -456,6 +457,9 @@ class boss_mimiron : public CreatureScript
if (instance->GetBossState(BOSS_MIMIRON) == DONE) // Mimiron will attempt to reset because he is not dead and will be set to friendly before despawning.
return;
+ if (Creature* aerial = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT)))
+ aerial->AI()->EnterEvadeMode();
+
_Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -613,7 +617,6 @@ class boss_mimiron : public CreatureScript
{
if (Creature* aerial = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT)))
{
- aerial->GetMotionMaster()->MoveLand(0, (aerial->GetPositionX(), aerial->GetPositionY(), aerial->GetPositionZ()));
aerial->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, 0);
aerial->CastSpell(vx001, SPELL_MOUNT_VX_001);
aerial->CastSpell(aerial, SPELL_HALF_HEAL);
@@ -706,7 +709,7 @@ class boss_leviathan_mk_ii : public CreatureScript
if (events.IsInPhase(PHASE_LEVIATHAN_MK_II))
{
me->CastStop();
- if (Unit* turret = me->GetVehicleKit()->GetPassenger(3))
+ if (Unit* turret = me->GetVehicleKit()->GetPassenger(MKII_SEAT_CANNON))
turret->KillSelf();
me->SetSpeedRate(MOVE_RUN, 1.5f);
@@ -1117,6 +1120,7 @@ class boss_aerial_command_unit : public CreatureScript
boss_aerial_command_unitAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
{
me->SetReactState(REACT_PASSIVE);
+ me->SetDisableGravity(true);
fireFigther = false;
}
@@ -1125,11 +1129,13 @@ class boss_aerial_command_unit : public CreatureScript
if (damage >= me->GetHealth())
{
damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->AttackStop();
me->SetReactState(REACT_PASSIVE);
- DoCast(me, SPELL_VEHICLE_DAMAGED, true);
- me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
+ me->AttackStop();
+ me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_HOVER | UNIT_BYTE1_FLAG_ALWAYS_STAND);
+ me->SetHover(false);
+ me->SetDisableGravity(true);
+
+ DoCastSelf(SPELL_VEHICLE_DAMAGED, true);
if (events.IsInPhase(PHASE_AERIAL_COMMAND_UNIT))
{
@@ -1161,11 +1167,12 @@ class boss_aerial_command_unit : public CreatureScript
events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1s, 0, PHASE_AERIAL_COMMAND_UNIT);
// Missing break intended.
case DO_START_AERIAL:
+ me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_HOVER);
+ me->SetDisableGravity(false);
+ me->SetHover(true);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToPC(false);
me->SetReactState(REACT_AGGRESSIVE);
- me->SetHover(true);
- me->SetDisableGravity(false);
events.SetPhase(PHASE_AERIAL_COMMAND_UNIT);
events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 5s, 0, PHASE_AERIAL_COMMAND_UNIT);
@@ -1174,8 +1181,8 @@ class boss_aerial_command_unit : public CreatureScript
break;
case DO_DISABLE_AERIAL:
me->CastStop();
- me->AttackStop();
me->SetReactState(REACT_PASSIVE);
+ me->AttackStop();
me->GetMotionMaster()->MoveFall();
events.DelayEvents(23000);
break;
@@ -1216,7 +1223,9 @@ class boss_aerial_command_unit : public CreatureScript
{
if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS)
{
+ me->SetFacingTo(VehicleRelocation[WP_AERIAL_P4_POS].GetOrientation());
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS);
if (Creature* mimiron = instance->GetCreature(BOSS_MIMIRON))
mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
@@ -1410,6 +1419,7 @@ class npc_mimiron_computer : public CreatureScript
npc_mimiron_computerAI(Creature* creature) : ScriptedAI(creature)
{
instance = me->GetInstanceScript();
+ me->SetReactState(REACT_PASSIVE);
}
void DoAction(int32 action) override
@@ -1650,6 +1660,17 @@ class npc_mimiron_proximity_mine : public CreatureScript
}
};
+struct npc_mimiron_magnetic_core : public ScriptedAI
+{
+ npc_mimiron_magnetic_core(Creature* creature) : ScriptedAI(creature) { }
+
+ void Reset() override
+ {
+ me->SetReactState(REACT_PASSIVE);
+ DoCastAOE(SPELL_MAGNETIC_CORE, true);
+ }
+};
+
class go_mimiron_hardmode_button : public GameObjectScript
{
public:
@@ -1853,6 +1874,26 @@ class spell_mimiron_fire_search : public SpellScriptLoader
}
};
+// 64444 - Magnetic Core Summon
+class spell_mimiron_magnetic_core_summon : public SpellScript
+{
+ PrepareSpellScript(spell_mimiron_magnetic_core_summon);
+
+ void ModDest(SpellDestination& dest)
+ {
+ Unit* caster = GetCaster();
+ Position pos = caster->GetPosition();
+ float z = caster->GetMap()->GetHeight(pos);
+ pos.m_positionZ = z;
+ dest.Relocate(pos);
+ }
+
+ void Register() override
+ {
+ OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_mimiron_magnetic_core_summon::ModDest, EFFECT_0, TARGET_DEST_NEARBY_ENTRY);
+ }
+};
+
// 64436 - Magnetic Core
class spell_mimiron_magnetic_core : public SpellScriptLoader
{
@@ -2804,6 +2845,7 @@ void AddSC_boss_mimiron()
new npc_mimiron_flames();
new npc_mimiron_frost_bomb();
new npc_mimiron_proximity_mine();
+ RegisterUlduarCreatureAI(npc_mimiron_magnetic_core);
new go_mimiron_hardmode_button();
@@ -2811,6 +2853,7 @@ void AddSC_boss_mimiron()
new spell_mimiron_clear_fires();
new spell_mimiron_despawn_assault_bots();
new spell_mimiron_fire_search();
+ RegisterSpellScript(spell_mimiron_magnetic_core_summon);
new spell_mimiron_magnetic_core();
new spell_mimiron_napalm_shell();
new spell_mimiron_p3wx2_laser_barrage();