aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2014-06-28 13:49:42 +0200
committerjackpoz <giacomopoz@gmail.com>2014-06-28 13:49:42 +0200
commit22c26548f322d39779ef2a699173bc69ef8f7d07 (patch)
tree619b5683f8460a4f6a0692c48d99bbe1b8080db0
parent0ac6f16896251564cf32dedf7d654929af96b51c (diff)
parent1bd4ff6cb94aa2a1dd44931664947bfb4b4887a5 (diff)
Merge pull request #12382 from TrinityCore/revert-12268-patch_mimironnew
Revert "Scripts/Ulduar: Implement Mimiron"
-rw-r--r--sql/updates/world/2014_06_12_02_world_misc.sql197
-rw-r--r--src/server/game/Spells/SpellMgr.cpp10
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp2929
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp79
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h34
5 files changed, 43 insertions, 3206 deletions
diff --git a/sql/updates/world/2014_06_12_02_world_misc.sql b/sql/updates/world/2014_06_12_02_world_misc.sql
deleted file mode 100644
index da40f46d690..00000000000
--- a/sql/updates/world/2014_06_12_02_world_misc.sql
+++ /dev/null
@@ -1,197 +0,0 @@
---
-DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (33651, 33432);
-INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`) VALUES
-(33651, 34050, 5, 1, 'VX-001 Rocket Seat 6', 8),
-(33651, 34050, 6, 1, 'VX-001 Rocket Seat 7', 8),
-(33432, 34071, 3, 1, 'MKII MKII turret Seat 1', 8);
-
-DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (33651, 33432);
-INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
-(33651, 46598, 1, 1),
-(33432, 46598, 1, 1);
-
-DELETE FROM `spell_script_names` WHERE `spell_id` IN (63274, 63414, 63667, 63382, 64402, 65034, 63681, 64542, 65192, 64570, 63027, 65346, 66351, 65224, 63009, 64620, 63820, 64425, 64426, 64621, 64398, 64567, 64619, 64623, 64627, 65354, 64626, 64618, 65333, 64436, 63340, 64383, 63339, 64562, 63041, 63801, 64463);
-INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
-(63801, 'spell_mimiron_bomb_bot'),
-(65192, 'spell_mimiron_clear_fires'),
-(65224, 'spell_mimiron_clear_fires'),
-(64619, 'spell_mimiron_clear_fires'),
-(65354, 'spell_mimiron_clear_fires'),
-(64463, 'spell_mimiron_despawn_assault_bots'),
-(64618, 'spell_mimiron_fire_search'),
-(64570, 'spell_mimiron_flame_suppressant'),
-(64626, 'spell_mimiron_frost_bomb_explosion'),
-(65333, 'spell_mimiron_frost_bomb_explosion'),
-(64436, 'spell_mimiron_magnetic_core'),
-(63667, 'spell_mimiron_napalm_shell'),
-(63274, 'spell_mimiron_p3wx2_laser_barrage'),
-(64542, 'spell_mimiron_plasma_blast'),
-(63027, 'spell_mimiron_proximity_mines'),
-(66351, 'spell_mimiron_proximity_explosion'),
-(63009, 'spell_mimiron_proximity_explosion'),
-(65346, 'spell_mimiron_proximity_trigger'),
-(63382, 'spell_mimiron_rapid_burst'),
-(64402, 'spell_mimiron_rocket_strike'),
-(65034, 'spell_mimiron_rocket_strike'),
-(63041, 'spell_mimiron_rocket_strike_damage'),
-(63681, 'spell_mimiron_rocket_strike_target_select'),
-(64383, 'spell_mimiron_self_repair'),
-(63414, 'spell_mimiron_spinning_up'),
-(64426, 'spell_mimiron_summon_assault_bot'),
-(64425, 'spell_mimiron_summon_assault_bot_target'),
-(64621, 'spell_mimiron_summon_fire_bot'),
-(64620, 'spell_mimiron_summon_fire_bot_target'),
-(64567, 'spell_mimiron_summon_flames_initial'),
-(64562, 'spell_mimiron_summon_flames_spread'),
-(64627, 'spell_mimiron_summon_frost_bomb'),
-(64623, 'spell_mimiron_summon_frost_bomb_target'),
-(64398, 'spell_mimiron_summon_junk_bot'),
-(63820, 'spell_mimiron_summon_junk_bot_target'),
-(63339, 'spell_mimiron_weld');
-
-DELETE FROM `spelldifficulty_dbc` WHERE `id` IN (66351, 64019, 63387, 62997, 64348, 64352, 63689, 65647, 63677, 63679, 64626);
-INSERT INTO `spelldifficulty_dbc` (`id`, `spellid0`, `spellid1`) VALUES
-(64348, 64348, 64536),
-(64352, 64352, 64537),
-(66351, 66351, 63009),
-(63387, 63387, 64531),
-(64019, 64019, 64532),
-(62997, 62997, 64529),
-(63689, 63689, 64535),
-(65647, 65647, 65648),
-(63677, 63677, 64533),
-(63679, 63679, 64534),
-(64626, 64626, 65333);
-
-DELETE FROM `conditions` WHERE `SourceEntry` IN (65192, 64570, 63274, 66490, 63300, 63414, 64539, 64402, 65034, 63041, 65224, 64620, 63820, 64425, 64619, 64626, 65333, 65354, 64618, 64623, 64436, 64444, 65101, 64463);
-INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
-(13, 1, 65192, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Flame Suppressant VX EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 65192, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Flame Suppressant VX EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 2, 64570, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Flame Suppressant MK EFFECT_1 can only hit NPC_FLAME'),
-(13, 2, 64570, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Flame Suppressant MK EFFECT_1 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 64623, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Frost Bomb EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 64623, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Frost Bomb EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 4, 64626, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Explosion EFFECT_2 can only hit NPC_FLAME'),
-(13, 4, 64626, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Explosion EFFECT_2 can only hit NPC_FLAME_SPREAD'),
-(13, 4, 65333, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Explosion EFFECT_2 can only hit NPC_FLAME'),
-(13, 4, 65333, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Explosion EFFECT_2 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 65224, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Clear Fires EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 65224, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Clear Fires EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 65354, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Clear Fires EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 65354, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Clear Fires EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 64619, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Water Spray EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 64619, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Water Spray EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 64618, 0, 0, 31, 0, 3, 34363, 0, 0, 0, 0, '', 'Fire Search EFFECT_0 can only hit NPC_FLAME'),
-(13, 1, 64618, 0, 1, 31, 0, 3, 34121, 0, 0, 0, 0, '', 'Fire Search EFFECT_0 can only hit NPC_FLAME_SPREAD'),
-(13, 1, 64539, 0, 0, 31, 0, 3, 34071, 0, 0, 0, 0, '', 'Napalm Shell EFFECT_0 can only hit NPC_LEVIATHAN_MKII_TURRET'),
-(13, 1, 63274, 0, 0, 31, 0, 3, 33576, 0, 0, 0, 0, '', 'P3Wx2 Laser Barrage EFFECT_0 can only hit NPC_DB_TARGET'),
-(17, 0, 66490, 0, 0, 31, 0, 3, 33432, 0, 0, 0, 0, '', 'P3Wx2 Laser Barrage can only hit NPC_LEVIATHAN_MKII'),
-(17, 0, 63300, 0, 0, 31, 0, 3, 33651, 0, 0, 0, 0, '', 'P3Wx2 Laser Barrage can only hit NPC_VX_001'),
-(13, 1, 63414, 0, 0, 31, 0, 3, 33576, 0, 0, 0, 0, '', 'Spinning Up EFFECT_0 can only hit NPC_DB_TARGET'),
-(13, 2, 63414, 0, 1, 31, 0, 3, 33432, 0, 0, 0, 0, '', 'Spinning Up EFFECT_1 can only hit NPC_LEVIATHAN_MKII'),
-(13, 1, 64620, 0, 0, 31, 0, 3, 33856, 0, 0, 0, 0, '', 'Summon Fire Bot Trigger EFFECT_0 can only hit NPC_BOT_SUMMON_TRIGGER'),
-(13, 1, 63820, 0, 0, 31, 0, 3, 33856, 0, 0, 0, 0, '', 'Summon Junk Bot Trigger EFFECT_0 can only hit NPC_BOT_SUMMON_TRIGGER'),
-(13, 1, 64425, 0, 0, 31, 0, 3, 33856, 0, 0, 0, 0, '', 'Summon Assault Bot Trigger EFFECT_0 can only hit NPC_BOT_SUMMON_TRIGGER'),
-(13, 1, 64402, 0, 0, 31, 0, 3, 34050, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_0 can only hit NPC_ROCKET_MIMIRON_VISUAL'),
-(13, 1, 65034, 0, 0, 31, 0, 3, 34050, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_0 can only hit NPC_ROCKET_MIMIRON_VISUAL'),
-(13, 2, 64436, 0, 0, 31, 0, 3, 33670, 0, 0, 0, 0, '', 'Magnetic Core EFFECT_1 can only hit NPC_AERIAL_COMMAND_UNIT'),
-(13, 1, 64444, 0, 0, 31, 0, 3, 33670, 0, 0, 0, 0, '', 'Magnetic Core EFFECT_0 can only hit NPC_AERIAL_COMMAND_UNIT'),
-(13, 1, 65101, 0, 0, 31, 0, 3, 34071, 0, 0, 0, 0, '', 'Emergency Mode EFFECT_0 can only hit NPC_LEVIATHAN_MKII_TURRET'),
-(13, 1, 64463, 0, 0, 31, 0, 3, 34057, 0, 0, 0, 0, '', 'Despawn Assault Bots EFFECT_1 can only hit NPC_ASSAULT_BOT'),
-(13, 2, 63041, 0, 0, 31, 0, 3, 34057, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_1 can only hit NPC_ASSAULT_BOT'),
-(13, 4, 63041, 0, 1, 31, 0, 3, 34137, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_2 can only hit NPC_EMERGENCY_FIRE_BOT'),
-(13, 4, 63041, 0, 2, 31, 0, 3, 33855, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_2 can only hit NPC_JUNK_BOT'),
-(13, 4, 63041, 0, 3, 31, 0, 3, 33836, 0, 0, 0, 0, '', 'Rocket Strike EFFECT_2 can only hit NPC_BOMB_BOT');
-
-UPDATE `creature_template` SET `HoverHeight` = 15, `ScriptName` = 'boss_aerial_command_unit', `InhabitType` = 3, `mechanic_immune_mask` = 646135679 WHERE `entry` = 33670;
-UPDATE `creature_template` SET `HoverHeight` = 15, `InhabitType` = 3, `mechanic_immune_mask` = 646135679 WHERE `entry` = 34109;
-UPDATE `creature_template` SET `unit_flags` = 33554438, `ScriptName` = 'boss_vx_001', `mechanic_immune_mask` = 646135679 WHERE `entry` = 33651;
-UPDATE `creature_template` SET `unit_flags` = 33554438, `mechanic_immune_mask` = 646135679 WHERE `entry` = 34108;
-UPDATE `creature_template` SET `ScriptName` = 'boss_leviathan_mk_ii', `mechanic_immune_mask` = 646135679 WHERE `entry` = 33432;
-UPDATE `creature_template` SET `mechanic_immune_mask` = 646135679 WHERE `entry` = 34106;
-UPDATE `creature_template` SET `ScriptName` = 'boss_mimiron' WHERE `entry` = 33350;
-UPDATE `creature_template` SET `unit_flags` = 131078, `ScriptName` = 'npc_mimiron_proximity_mine' WHERE `entry` = 34362;
-UPDATE `creature_template` SET `unit_flags` = 33685510, `faction` = 14, `ScriptName` = 'npc_mimiron_frost_bomb' WHERE `entry` = 34149;
-UPDATE `creature_template` SET `unit_flags` = 33685510 WHERE `entry` IN( 34047, 34110, 34050, 34071);
-UPDATE `creature_template` SET `unit_flags` = 33685510, `ScriptName` = 'npc_magnetic_core' WHERE `entry` = 34068;
-UPDATE `creature_template` SET `unit_flags` = 33554436, `ScriptName` = 'npc_mimiron_flames' WHERE `entry` IN (34363, 34121);
-UPDATE `creature_template` SET `faction` = 14 , `ScriptName` = 'npc_mimiron_emergency_fire_bot' WHERE `entry` = 34147;
-UPDATE `creature_template` SET `faction` = 14 WHERE `entry` IN (34148, 34114, 33855);
-UPDATE `creature_template` SET `dmg_multiplier` = 60, `ScriptName` = 'npc_mimiron_assault_bot' WHERE `entry` = 34057;
-UPDATE `creature_template` SET `dmg_multiplier` = 75 WHERE `entry` = 34115;
-UPDATE `creature_template` SET `ScriptName` = 'npc_mimiron_computer' WHERE `entry` = 34143;
-UPDATE `creature_template` SET `speed_walk` = 2.5 , `speed_run` = 4.5 , `MovementType` = 2 , `InhabitType` = 7, `flags_extra` = 2 WHERE `entry` = 33576;
-
-UPDATE `creature_model_info` SET `bounding_radius` = 0.31 , `combat_reach` = 5 WHERE `modelid` = 28979;
-UPDATE `creature_model_info` SET `bounding_radius` = 0.306 , `combat_reach` = 7 WHERE `modelid` = 28841;
-UPDATE `creature_model_info` SET `bounding_radius` = 0.31 , `combat_reach` = 7.7 WHERE `modelid` = 28831;
-
-UPDATE `gameobject_template` SET `flags` = 32, `ScriptName` = 'go_mimiron_hardmode_button' WHERE `entry` = 194739;
-
-UPDATE `creature_addon` SET `path_id` = 1376200 WHERE `guid` = 137620;
-
-UPDATE `creature` SET `position_x` = 2785.423 , `position_y` = 2673.119, `MovementType` = 2 WHERE `guid` = 137620;
-
-DELETE FROM `creature_template_addon` WHERE `entry` IN (34047, 34148, 33836, 34149, 34147, 33670, 34363, 34121);
-INSERT INTO `creature_template_addon` (`entry`, `bytes1`, `bytes2`, `auras`) VALUES
-(33670, 50331648, 1, ''),
-(34363, 0, 1, '64561'),
-(34121, 0, 1, '64561'),
-(34047, 0, 1, '64064'),
-(34148, 0, 1, '64616 64617'),
-(33836, 0, 1, '63767'),
-(34149, 0, 1, '64624'),
-(34147, 0, 1, '64617');
-
-DELETE FROM `creature_text` WHERE `entry` = 34143;
-INSERT INTO `creature_text` (`entry`, `groupid`, `text`, `type`, `probability`, `sound`, `BroadcastTextID`) VALUES
-(34143, 0, 'Self-destruct sequence initiated.', 14, 100, 15413, 34268),
-(34143, 1, 'Self-destruct sequence terminated. Override code A905..', 14, 100, 15414, 34284),
-(34143, 2, 'This area will self-destruct in ten minutes.', 14, 100, 15415, 34283),
-(34143, 3, 'This area will self-destruct in nine minutes.', 14, 100, 15416, 34282),
-(34143, 4, 'This area will self-destruct in eight minutes.', 14, 100, 15417, 34281),
-(34143, 5, 'This area will self-destruct in seven minutes.', 14, 100, 15418, 34280),
-(34143, 6, 'This area will self-destruct in six minutes.', 14, 100, 15419, 34273),
-(34143, 7, 'This area will self-destruct in five minutes.', 14, 100, 15420, 34274),
-(34143, 8, 'This area will self-destruct in four minutes.', 14, 100, 15421, 34275),
-(34143, 9, 'This area will self-destruct in three minutes.', 14, 100, 15422, 34276),
-(34143, 10, 'This area will self-destruct in two minutes.', 14, 100, 15423, 34277),
-(34143, 11, 'This area will self-destruct in one minute.', 14, 100, 15424, 34278),
-(34143, 12, 'Self-destruct sequence finalized. Have a nice day.', 14, 100, 15425, 34279);
-
-DELETE FROM `waypoint_data` WHERE `id` = 1376200;
-INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_flag`, `action`, `action_chance`, `wpguid`) VALUES
-(1376200, 0, 2785.423, 2673.119, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 1, 2823.024, 2649.059, 371.9791, 0, 0, 1, 0, 100, 0),
-(1376200, 2, 2854.097, 2590.826, 371.9791, 0, 0, 1, 0, 100, 0),
-(1376200, 3, 2852.951, 2547.112, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 4, 2822.796, 2489.515, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 5, 2784.964, 2465.247, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 6, 2741.24, 2456.771, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 7, 2701.036, 2464.319, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 8, 2660.476, 2489.578, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 9, 2636.893, 2525.687, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 10, 2631.294, 2547.831, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 11, 2631.437, 2591.752, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 12, 2637.362, 2613.7, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 13, 2650.221, 2636.163, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 14, 2661.572, 2649.715, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 15, 2696.595, 2672.664, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 16, 2711.099, 2677.791, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 17, 2740.676, 2683.12, 372.3605, 0, 0, 1, 0, 100, 0),
-(1376200, 18, 2771.834, 2677.767, 372.3605, 0, 0, 1, 0, 100, 0);
-
-DELETE FROM `disables` WHERE `sourceType` = 4 AND `entry` IN (10544, 10547, 10543, 10546, 10548, 10545, 10450, 10463, 10406, 10405);
-
-DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (10406, 10405) AND `type` = 18;
-DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (10545,10548,10546,10543,10547,10544, 10450, 10463) AND `type` = 11;
-INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
-(10544, 11, 0, 0, 'achievement_setup_rocket'),
-(10547, 11, 0, 0, 'achievement_setup_rocket'),
-(10543, 11, 0, 0, 'achievement_setup_mine'),
-(10546, 11, 0, 0, 'achievement_setup_mine'),
-(10548, 11, 0, 0, 'achievement_setup_boom'),
-(10545, 11, 0, 0, 'achievement_setup_boom'),
-(10450, 11, 0, 0, 'achievement_firefighter'),
-(10463, 11, 0, 0, 'achievement_firefighter');
---
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index e954b9173ad..6f56c0ebc40 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3347,16 +3347,6 @@ void SpellMgr::LoadSpellInfoCorrections()
// that will be clear if we get more spells with problem like this
spellInfo->AttributesEx |= SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY;
break;
- case 63414: // Spinning Up (Mimiron)
- spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
- spellInfo->ChannelInterruptFlags = 0;
- break;
- case 63036: // Rocket Strike (Mimiron)
- spellInfo->Speed = 0;
- break;
- case 64668: // Magnetic Field (Mimiron)
- spellInfo->Mechanic = MECHANIC_NONE;
- break;
case 64468: // Empowering Shadows (Yogg-Saron)
case 64486: // Empowering Shadows (Yogg-Saron)
spellInfo->MaxAffectedTargets = 3; // same for both modes?
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index a3c3077fd71..f284aacf996 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -15,16 +15,10 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "Cell.h"
-#include "CellImpl.h"
-#include "GridNotifiers.h"
-#include "GridNotifiersImpl.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
-#include "SpellAuraEffects.h"
#include "ulduar.h"
-#include "Vehicle.h"
enum Yells
{
@@ -45,2927 +39,78 @@ enum Yells
SAY_BERSERK = 14
};
-enum ComputerYells
-{
- SAY_SELF_DESTRUCT_INITIATED = 0,
- SAY_SELF_DESTRUCT_TERMINATED = 1,
- SAY_SELF_DESTRUCT_10 = 2,
- SAY_SELF_DESTRUCT_9 = 3,
- SAY_SELF_DESTRUCT_8 = 4,
- SAY_SELF_DESTRUCT_7 = 5,
- SAY_SELF_DESTRUCT_6 = 6,
- SAY_SELF_DESTRUCT_5 = 7,
- SAY_SELF_DESTRUCT_4 = 8,
- SAY_SELF_DESTRUCT_3 = 9,
- SAY_SELF_DESTRUCT_2 = 10,
- SAY_SELF_DESTRUCT_1 = 11,
- SAY_SELF_DESTRUCT_FINALIZED = 12
-};
-
enum Spells
{
- // Mimiron
- SPELL_WELD = 63339, // Idle aura.
- SPELL_SEAT_1 = 52391, // Cast on all vehicles, Cycled on MKII
- SPELL_SEAT_2 = 63313, // Cast on MKII and VX-001, Cycled on MKII
- SPELL_SEAT_3 = 63314, // Cast on MKII, Cycled on MKII
- SPELL_SEAT_5 = 63316, // Cast on MKII and VX-001, Cycled on MKII
- SPELL_SEAT_6 = 63344, // Cast on MKII
- SPELL_SEAT_7 = 63345, // Cast on MKII
SPELL_JETPACK = 63341,
- SPELL_DESPAWN_ASSAULT_BOTS = 64463, // only despawns assault bots... no equivalent spell for the other adds...
- SPELL_TELEPORT_VISUAL = 41232,
- SPELL_SLEEP_VISUAL_1 = 64393,
- SPELL_SLEEP_VISUAL_2 = 64394,
-
+ SPELL_EMERGENCY_MODE = 64582,
+ SPELL_SELF_REPAIR = 64383,
+ SPELL_MAGNETIC_CORE = 64444,
// Leviathan MK II
SPELL_FLAME_SUPPRESSANT_MK = 64570,
SPELL_NAPALM_SHELL = 63666,
- SPELL_FORCE_CAST_NAPALM_SHELL = 64539,
- SPELL_PLASMA_BLAST = 62997,
- SPELL_SCRIPT_EFFECT_PLASMA_BLAST = 64542,
+ SPELL_PLASMA_BLAST = 62977,
+ SPELL_PROXIMITY_MINES = 63027,
SPELL_SHOCK_BLAST = 63631,
- SPELL_SHOCK_BLAST_AURA = 63632, // Deprecated? It is never cast.
-
- // VX-001
+ // VX 001
SPELL_FLAME_SUPPRESSANT_VX = 65192,
+ SPELL_FROSTBOMB = 64623,
+ SPELL_HAND_PULSE = 64348,
SPELL_SPINNING_UP = 63414,
- SPELL_HEAT_WAVE_AURA = 63679,
- SPELL_HAND_PULSE_LEFT = 64348,
- SPELL_HAND_PULSE_RIGHT = 64352,
- SPELL_MOUNT_MKII = 64387,
- SPELL_TORSO_DISABLED = 64120,
-
+ SPELL_RAPID_BURST = 63387,
+ SPELL_P3WX2_LASER_BARRAGE = 63293,
+ SPELL_ROCKET_STRIKE = 63041,
+ SPELL_HEAT_WAVE = 63677,
// Aerial Command Unit
- SPELL_PLASMA_BALL_P1 = 63689,
- SPELL_PLASMA_BALL_P2 = 65647,
- SPELL_MOUNT_VX_001 = 64388,
-
- // Proximity Mines
- SPELL_PROXIMITY_MINES = 63027, // Cast by Leviathan MK II
- SPELL_PROXIMITY_MINE_EXPLOSION = 66351,
- SPELL_PROXIMITY_MINE_TRIGGER = 65346,
- SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER = 65345,
- SPELL_PERIODIC_PROXIMITY_AURA = 65345,
- SPELL_SUMMON_PROXIMITY_MINE = 65347,
-
- // Rapid Burst
- SPELL_RAPID_BURST_LEFT = 63387,
- SPELL_RAPID_BURST_RIGHT = 64019,
- SPELL_RAPID_BURST = 63382, // Cast by VX-001
- SPELL_RAPID_BURST_TARGET_ME = 64841, // Cast by Burst Target
- SPELL_SUMMON_BURST_TARGET = 64840, // Cast by VX-001
-
- // Rocket Strike
- SPELL_SUMMON_ROCKET_STRIKE = 63036,
- SPELL_SCRIPT_EFFECT_ROCKET_STRIKE = 63681, // Cast by Rocket (Mimiron Visual)
- SPELL_ROCKET_STRIKE = 64064, // Added in creature_template_addon
- SPELL_ROCKET_STRIKE_LEFT = 64402, // Cast by VX-001
- SPELL_ROCKET_STRIKE_BOTH = 65034, // Cast by VX-001
-
- // Flames
- SPELL_FLAMES_PERIODIC_TRIGGER = 64561, // Added in creature_template_addon
- SPELL_SUMMON_FLAMES_SPREAD_TRIGGER = 64562,
- SPELL_SUMMON_FLAMES_INITIAL = 64563,
- SPELL_SUMMON_FLAMES_SPREAD = 64564,
- SPELL_FLAMES = 64566,
- SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL = 64567,
-
- // Frost Bomb
- SPELL_SCRIPT_EFFECT_FROST_BOMB = 64623, // Cast by VX-001
- SPELL_FROST_BOMB_LINKED = 64624, // Added in creature_template_addon
- SPELL_FROST_BOMB_DUMMY = 64625,
- SPELL_SUMMON_FROST_BOMB = 64627, // Cast by VX-001
- SPELL_FROST_BOMB_EXPLOSION = 64626,
- SPELL_CLEAR_FIRES = 65354,
-
- // Bots
- SPELL_SUMMON_FIRE_BOT = 64622,
- SPELL_SUMMON_FIRE_BOT_DUMMY = 64621,
- SPELL_SUMMON_FIRE_BOT_TRIGGER = 64620, // Cast by Areal Command Unit
- SPELL_DEAFENING_SIREN = 64616, // Added in creature_template_addon
- SPELL_FIRE_SEARCH_AURA = 64617, // Added in creature_template_addon
- SPELL_FIRE_SEARCH = 64618,
- SPELL_WATER_SPRAY = 64619,
-
- SPELL_SUMMON_JUNK_BOT = 63819,
- SPELL_SUMMON_JUNK_BOT_TRIGGER = 63820, // Cast by Areal Command Unit
- SPELL_SUMMON_JUNK_BOT_DUMMY = 64398,
-
- SPELL_SUMMON_ASSAULT_BOT_TRIGGER = 64425, // Cast by Areal Command Unit
- SPELL_SUMMON_ASSAULT_BOT_DUMMY = 64426,
- SPELL_SUMMON_ASSAULT_BOT = 64427,
+ SPELL_PLASMA_BALL = 63689,
+ // Additonal spells
SPELL_MAGNETIC_FIELD = 64668,
-
- SPELL_SUMMON_BOMB_BOT = 63811, // Cast by Areal Command Unit
- SPELL_BOMB_BOT_AURA = 63767, // Added in creature_template_addon
-
- // Miscellaneous
- SPELL_SELF_DESTRUCTION_AURA = 64610,
- SPELL_SELF_DESTRUCTION_VISUAL = 64613,
- SPELL_NOT_SO_FRIENDLY_FIRE = 65040,
- SPELL_ELEVATOR_KNOCKBACK = 65096, // Cast by worldtrigger.
- SPELL_VEHICLE_DAMAGED = 63415,
- SPELL_EMERGENCY_MODE = 64582, // mkii, vx001, aerial, assault, junk
- SPELL_EMERGENCY_MODE_TURRET = 65101, // Cast by Leviathan MK II, only hits Leviathan MK II turret
- SPELL_SELF_REPAIR = 64383,
- SPELL_MAGNETIC_CORE = 64436,
- SPELL_MAGNETIC_CORE_VISUAL = 64438,
- SPELL_HALF_HEAL = 64188,
- SPELL_CLEAR_ALL_DEBUFFS = 34098, // TODO: make use of this spell...
- SPELL_FREEZE_ANIM_STUN = 63354, // used to prevent mkii from doing stuff?..
- SPELL_FREEZE_ANIM = 16245 // Idle aura. Freezes animation.
-};
-
-enum Data
-{
- DATA_SETUP_MINE,
- DATA_SETUP_BOMB,
- DATA_SETUP_ROCKET,
- DATA_NOT_SO_FRIENDLY_FIRE,
- DATA_FIREFIGHTER,
- DATA_WATERSPRAY,
- DATA_MOVE_NEW
-};
-
-enum Events
-{
- EVENT_NONE,
-
- // Leviathan MK II
- EVENT_PROXIMITY_MINE,
- EVENT_NAPALM_SHELL,
- EVENT_PLASMA_BLAST,
- EVENT_SHOCK_BLAST,
- EVENT_FLAME_SUPPRESSANT_MK,
-
- // VX-001
- EVENT_RAPID_BURST,
- EVENT_SPINNING_UP,
- EVENT_ROCKET_STRIKE,
- EVENT_HAND_PULSE,
- EVENT_FROST_BOMB,
- EVENT_FLAME_SUPPRESSANT_VX,
- EVENT_RELOAD,
-
- // Aerial Command Unit
- EVENT_SUMMON_FIRE_BOTS,
- EVENT_SUMMON_JUNK_BOT,
- EVENT_SUMMON_ASSAULT_BOT,
- EVENT_SUMMON_BOMB_BOT,
-
- // Mimiron
- EVENT_SUMMON_FLAMES,
- EVENT_INTRO_1,
- EVENT_INTRO_2,
- EVENT_INTRO_3,
-
- EVENT_VX001_ACTIVATION_1,
- EVENT_VX001_ACTIVATION_2,
- EVENT_VX001_ACTIVATION_3,
- EVENT_VX001_ACTIVATION_4,
- EVENT_VX001_ACTIVATION_5,
- EVENT_VX001_ACTIVATION_6,
- EVENT_VX001_ACTIVATION_7,
- EVENT_VX001_ACTIVATION_8,
- EVENT_VX001_ACTIVATION_9,
-
- EVENT_AERIAL_ACTIVATION_1,
- EVENT_AERIAL_ACTIVATION_2,
- EVENT_AERIAL_ACTIVATION_3,
- EVENT_AERIAL_ACTIVATION_4,
- EVENT_AERIAL_ACTIVATION_5,
- EVENT_AERIAL_ACTIVATION_6,
-
- EVENT_VOL7RON_ACTIVATION_1,
- EVENT_VOL7RON_ACTIVATION_2,
- EVENT_VOL7RON_ACTIVATION_3,
- EVENT_VOL7RON_ACTIVATION_4,
- EVENT_VOL7RON_ACTIVATION_5,
- EVENT_VOL7RON_ACTIVATION_6,
- EVENT_VOL7RON_ACTIVATION_7,
-
- EVENT_OUTTRO_1,
- EVENT_OUTTRO_2,
- EVENT_OUTTRO_3,
-
- // Computer
- EVENT_SELF_DESTRUCT_10,
- EVENT_SELF_DESTRUCT_9,
- EVENT_SELF_DESTRUCT_8,
- EVENT_SELF_DESTRUCT_7,
- EVENT_SELF_DESTRUCT_6,
- EVENT_SELF_DESTRUCT_5,
- EVENT_SELF_DESTRUCT_4,
- EVENT_SELF_DESTRUCT_3,
- EVENT_SELF_DESTRUCT_2,
- EVENT_SELF_DESTRUCT_1,
- EVENT_SELF_DESTRUCT_FINALIZED
-};
-
-enum Actions
-{
- DO_START_MKII,
- DO_HARDMODE_MKII,
-
- DO_ACTIVATE_VX001,
- DO_START_VX001,
- DO_HARDMODE_VX001,
-
- DO_ACTIVATE_AERIAL,
- DO_START_AERIAL,
- DO_HARDMODE_AERIAL,
- DO_DISABLE_AERIAL,
- DO_ENABLE_AERIAL,
-
- DO_ACTIVATE_V0L7R0N_1,
- DO_ACTIVATE_V0L7R0N_2,
- DO_ASSEMBLED_COMBAT, // All 3 parts use this action, its done on purpose.
-
- DO_ACTIVATE_HARD_MODE,
- DO_ACTIVATE_COMPUTER,
- DO_DEACTIVATE_COMPUTER,
- DO_ACTIVATE_SELF_DESTRUCT,
-
- DO_ENCOUNTER_DONE
-};
-
-enum Waypoints
-{
- WP_NONE,
- WP_MKII_P1_IDLE,
- WP_MKII_P4_POS_1,
- WP_MKII_P4_POS_2,
- WP_MKII_P4_POS_3,
- WP_MKII_P4_POS_4,
- WP_MKII_P4_POS_5,
- WP_AERIAL_P4_POS
-};
-
-enum Phases
-{
- PHASE_NULL,
-
- // Leviathan MK II
- PHASE_LEVIATHAN_SOLO,
- PHASE_LEVIATHAN_ASSEMBLED,
-
- // VX-001
- PHASE_VX001_SOLO,
- PHASE_VX001_ASSEMBLED,
-
- // Aerial Command Unit
- PHASE_AERIAL_SOLO,
- PHASE_AERIAL_ASSEMBLED
-};
-
-uint32 const repairSpells[4] =
-{
- SPELL_SEAT_1,
- SPELL_SEAT_2,
- SPELL_SEAT_3,
- SPELL_SEAT_5
-};
-
-Position const pos[] =
-{
- {},
- { 2792.070f, 2596.320f, 364.3136f }, // WP_MKII_P1_IDLE
- { 2765.945f, 2571.095f, 364.0636f }, // WP_MKII_P4_POS_1
- { 2768.195f, 2573.095f, 364.0636f }, // WP_MKII_P4_POS_2
- { 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
-};
-
-class AerialTargetSelector
-{
- public:
- AerialTargetSelector() {}
-
- bool operator() (WorldObject* target) const
- {
- if (Unit* unit = target->ToUnit())
- {
- if (unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
- return true;
-
- if (unit->GetVehicleBase())
- return true;
- }
- return false;
- }
-};
-
-class EncounterDone
-{
- Unit* _who;
- Creature* _vehiclePart;
- public:
- EncounterDone(Unit* who, Creature* vehiclePart) : _who(who), _vehiclePart(vehiclePart) {}
-
- bool IsEncounterFinished()
- {
- if (InstanceScript* instance = _vehiclePart->GetInstanceScript())
- if (Creature* mkii = ObjectAccessor::GetCreature(*_vehiclePart, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- if (Creature* vx001 = ObjectAccessor::GetCreature(*_vehiclePart, instance->GetData64(DATA_VX_001)))
- if (Creature* aerial = ObjectAccessor::GetCreature(*_vehiclePart, instance->GetData64(DATA_AERIAL_COMMAND_UNIT)))
- if (mkii->getStandState() == UNIT_STAND_STATE_DEAD && vx001->getStandState() == UNIT_STAND_STATE_DEAD && aerial->getStandState() == UNIT_STAND_STATE_DEAD)
- {
- _who->Kill(mkii);
- _who->Kill(vx001);
- _who->Kill(aerial);
- mkii->DespawnOrUnsummon(120000);
- vx001->DespawnOrUnsummon(120000);
- aerial->DespawnOrUnsummon(120000);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*_vehiclePart, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->JustDied(_who);
- return true;
- }
- return false;
- }
-};
-
-class boss_mimiron : public CreatureScript
-{
- public:
- boss_mimiron() : CreatureScript("boss_mimiron") { }
-
- struct boss_mimironAI : public BossAI
- {
- boss_mimironAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
- {
- me->SetReactState(REACT_PASSIVE);
- me->SetDisableGravity(true);
- }
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case DO_ACTIVATE_VX001:
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_1, 1000);
- break;
- case DO_ACTIVATE_AERIAL:
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_1, 5000);
- break;
- case DO_ACTIVATE_V0L7R0N_1:
- Talk(SAY_AERIAL_DEATH);
- if (Creature* mkii = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkii->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_3, pos[WP_MKII_P4_POS_3]); // MovePoint(WP_MKII_P4_POS_1, pos[WP_MKII_P4_POS_1]);
- break;
- case DO_ACTIVATE_V0L7R0N_2:
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_1, 1000);
- break;
- case DO_ACTIVATE_HARD_MODE:
- _fireFighter = true;
- DoZoneInCombat(me);
- break;
- default:
- break;
- }
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- if (!me->GetVehicleBase())
- return;
-
- _EnterCombat();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->RemoveAurasDueToSpell(SPELL_WELD);
- DoCast(me->GetVehicleBase(), SPELL_SEAT_6);
-
- if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MIMIRON_BUTTON)))
- button->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
-
- if (_fireFighter)
- events.ScheduleEvent(EVENT_SUMMON_FLAMES, 3000);
- events.ScheduleEvent(EVENT_INTRO_1, 1500);
- }
-
- void JustDied(Unit* /*who*/) override
- {
- instance->SetBossState(BOSS_MIMIRON, DONE);
- events.Reset();
- me->CombatStop(true);
- me->SetDisableGravity(false);
- DoCast(me, SPELL_SLEEP_VISUAL_1);
- DoCastAOE(SPELL_DESPAWN_ASSAULT_BOTS);
- me->ExitVehicle();
- // ExitVehicle() offset position is not implemented, so we make up for that with MoveJump()...
- me->GetMotionMaster()->MoveJump(me->GetPositionX() + (float)(10 * cos(me->GetOrientation())), me->GetPositionY() + (float)(10 * sin(me->GetOrientation())), me->GetPositionZ(), 10.0f, 5.0f);
- events.ScheduleEvent(EVENT_OUTTRO_1, 7000);
- }
-
- void Reset() override
- {
- 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;
-
- _Reset();
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_ACTIVE);
-
- if (_fireFighter)
- if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_COMPUTER)))
- computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
-
- if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_MIMIRON_BUTTON)))
- {
- button->SetGoState(GO_STATE_READY);
- button->RemoveFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
- }
-
- _fireFighter = false;
- DoCast(me, SPELL_WELD);
-
- if (Unit* mkii = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- DoCast(mkii, SPELL_SEAT_3);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if ((!UpdateVictim() || !CheckInRoom()) && instance->GetBossState(BOSS_MIMIRON) != DONE)
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_SUMMON_FLAMES:
- if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_MIMIRON_WORLD_TRIGGER)))
- worldtrigger->CastSpell((Unit*)NULL, SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL, true, NULL, NULL, me->GetGUID());
- events.RescheduleEvent(EVENT_SUMMON_FLAMES, 28000);
- break;
- case EVENT_INTRO_1:
- Talk(_fireFighter ? SAY_HARDMODE_ON : SAY_MKII_ACTIVATE);
- events.ScheduleEvent(EVENT_INTRO_2, 5000);
- break;
- case EVENT_INTRO_2:
- if (Unit* mkii = me->GetVehicleBase())
- {
- DoCast(mkii, SPELL_SEAT_7);
- mkii->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
- mkii->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- }
- events.ScheduleEvent(EVENT_INTRO_3, 2000);
- break;
- case EVENT_INTRO_3:
- me->GetVehicleBase()->GetAI()->DoAction(_fireFighter? DO_HARDMODE_MKII : DO_START_MKII);
- break;
- case EVENT_VX001_ACTIVATION_1:
- me->GetVehicleBase()->SetFacingTo(3.686f);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_2, 1000);
- break;
- case EVENT_VX001_ACTIVATION_2:
- DoCast(me->GetVehicleBase(), SPELL_SEAT_6);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_3, 1000);
- break;
- case EVENT_VX001_ACTIVATION_3:
- Talk(SAY_MKII_DEATH);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_4, 5000);
- break;
- case EVENT_VX001_ACTIVATION_4:
- instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_READY);
- if (Unit* worldtrigger = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_MIMIRON_WORLD_TRIGGER)))
- worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_5, 6000);
- break;
- case EVENT_VX001_ACTIVATION_5:
- me->SummonCreature(NPC_VX_001, 2744.431f, 2569.385f, 364.3968f, 3.141593f, TEMPSUMMON_MANUAL_DESPAWN);
- instance->SetData(DATA_MIMIRON_ELEVATOR, GO_STATE_ACTIVE_ALTERNATIVE);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_6, 19000);
- break;
- case EVENT_VX001_ACTIVATION_6:
- if (Unit* vx001 = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_VX_001)))
- DoCast(vx001, SPELL_SEAT_1);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_7, 3500);
- break;
- case EVENT_VX001_ACTIVATION_7:
- Talk(SAY_VX001_ACTIVATE);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_8, 4000);
- break;
- case EVENT_VX001_ACTIVATION_8:
- DoCast(me->GetVehicleBase(), SPELL_SEAT_2);
- events.ScheduleEvent(EVENT_VX001_ACTIVATION_9, 3000);
- break;
- case EVENT_VX001_ACTIVATION_9:
- me->GetVehicleBase()->GetAI()->DoAction(_fireFighter ? DO_HARDMODE_VX001 : DO_START_VX001);
- break;
- case EVENT_AERIAL_ACTIVATION_1:
- DoCast(me->GetVehicleBase(), SPELL_SEAT_5);
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_2, 2500);
- break;
- case EVENT_AERIAL_ACTIVATION_2:
- Talk(SAY_VX001_DEATH);
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_3, 5000);
- break;
- case EVENT_AERIAL_ACTIVATION_3:
- me->SummonCreature(NPC_AERIAL_COMMAND_UNIT, 2744.65f, 2569.46f, 380, 0, TEMPSUMMON_MANUAL_DESPAWN);
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_4, 5000);
- break;
- case EVENT_AERIAL_ACTIVATION_4:
- if (Unit* aerial = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_AERIAL_COMMAND_UNIT)))
- me->CastSpell(aerial, SPELL_SEAT_1);
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_5, 2000);
- break;
- case EVENT_AERIAL_ACTIVATION_5:
- Talk(SAY_AERIAL_ACTIVATE);
- events.ScheduleEvent(EVENT_AERIAL_ACTIVATION_6, 8000);
- break;
- case EVENT_AERIAL_ACTIVATION_6:
- me->GetVehicleBase()->GetAI()->DoAction(_fireFighter? DO_HARDMODE_AERIAL : DO_START_AERIAL);
- break;
- case EVENT_VOL7RON_ACTIVATION_1:
- if (Creature* mkii = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkii->SetFacingTo(M_PI);
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_2, 1000);
- break;
- case EVENT_VOL7RON_ACTIVATION_2:
- if (Creature* mkii = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- if (Creature* vx001 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VX_001)))
- {
- vx001->RemoveAurasDueToSpell(SPELL_TORSO_DISABLED);
- vx001->CastSpell(mkii, SPELL_MOUNT_MKII);
- }
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_3, 4500);
- break;
- case EVENT_VOL7RON_ACTIVATION_3:
- if (Creature* mkii = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkii->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_5, pos[WP_MKII_P4_POS_5]); // MovePoint(WP_MKII_P4_POS_4, pos[WP_MKII_P4_POS_4]);
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_4, 5000);
- break;
- case EVENT_VOL7RON_ACTIVATION_4:
- if (Creature* vx001 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VX_001)))
- if (Creature* aerial = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_AERIAL_COMMAND_UNIT)))
- {
- aerial->GetMotionMaster()->MoveLand(0, (aerial->GetPositionX(), aerial->GetPositionY(), aerial->GetPositionZMinusOffset()));
- //aerial->SetDisableGravity(false);
- //aerial->SetHover(false);
- aerial->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- aerial->CastSpell(vx001, SPELL_MOUNT_VX_001);
- aerial->CastSpell(aerial, SPELL_HALF_HEAL);
- }
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_5, 4000);
- break;
- case EVENT_VOL7RON_ACTIVATION_5:
- Talk(SAY_V07TRON_ACTIVATE);
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_6, 3000);
- break;
- case EVENT_VOL7RON_ACTIVATION_6:
- if (Creature* vx001 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_VX_001)))
- DoCast(vx001, SPELL_SEAT_2);
- events.ScheduleEvent(EVENT_VOL7RON_ACTIVATION_7, 5000);
- break;
- case EVENT_VOL7RON_ACTIVATION_7:
- for (uint8 data = DATA_LEVIATHAN_MK_II; data <= DATA_AERIAL_COMMAND_UNIT; data++)
- if (Creature* mimironVehicle = ObjectAccessor::GetCreature(*me, instance->GetData64(data)))
- mimironVehicle->AI()->DoAction(DO_ASSEMBLED_COMBAT);
- break;
- case EVENT_OUTTRO_1:
- me->RemoveAurasDueToSpell(SPELL_SLEEP_VISUAL_1);
- DoCast(me, SPELL_SLEEP_VISUAL_2);
- me->setFaction(35);
- events.ScheduleEvent(EVENT_OUTTRO_2, 3000);
- break;
- case EVENT_OUTTRO_2:
- Talk(SAY_V07TRON_DEATH);
- if (_fireFighter)
- {
- if (Creature* computer = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_COMPUTER)))
- computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
- me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION_FIREFIGHTER, GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO), 2744.65f, 2569.46f, 364.314f, 3.14159f, 0, 0, 0.7f, 0.7f, 604800);
- }
- else
- me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION, GO_CACHE_OF_INNOVATION_HERO), 2744.65f, 2569.46f, 364.314f, 3.14159f, 0, 0, 0.7f, 0.7f, 604800);
- events.ScheduleEvent(EVENT_OUTTRO_3, 11000);
- break;
- case EVENT_OUTTRO_3:
- DoCast(me, SPELL_TELEPORT_VISUAL);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- me->DespawnOrUnsummon(1000); // sniffs say 6 sec after, but it doesnt matter.
- break;
- default:
- break;
- }
- }
- }
-
- private:
- bool _fireFighter;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<boss_mimironAI>(creature);
- }
-};
-
-class boss_leviathan_mk_ii : public CreatureScript
-{
- public:
- boss_leviathan_mk_ii() : CreatureScript("boss_leviathan_mk_ii") { }
-
- struct boss_leviathan_mk_iiAI : public BossAI
- {
- boss_leviathan_mk_iiAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
- {
- }
-
- void DamageTaken(Unit* who, uint32 &damage) override
- {
- 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);
- DoCast(me, SPELL_VEHICLE_DAMAGED, true);
- me->AttackStop();
- me->SetReactState(REACT_PASSIVE);
- me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
-
- if (events.IsInPhase(PHASE_LEVIATHAN_SOLO))
- {
- me->CastStop();
- if (Unit* turret = me->GetVehicleKit()->GetPassenger(3))
- turret->Kill(turret);
-
- me->SetSpeed(MOVE_RUN, 1.5f, true);
- me->GetMotionMaster()->MovePoint(WP_MKII_P1_IDLE, pos[WP_MKII_P1_IDLE]);
- }
- else if (events.IsInPhase(PHASE_LEVIATHAN_ASSEMBLED))
- {
- me->SetStandState(UNIT_STAND_STATE_DEAD);
-
- if (EncounterDone(who, me).IsEncounterFinished())
- return;
-
- me->CastStop();
- DoCast(me, SPELL_SELF_REPAIR);
- }
- events.Reset();
- }
- }
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case DO_HARDMODE_MKII:
- _fireFighter = true;
- DoCast(me, SPELL_EMERGENCY_MODE);
- DoCastAOE(SPELL_EMERGENCY_MODE_TURRET);
- events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_SOLO);
- // Missing break intended.
- case DO_START_MKII:
- _setupMine = true;
- _setupBomb = true;
- _setupRocket = true;
-
- me->SetReactState(REACT_AGGRESSIVE);
- events.SetPhase(PHASE_LEVIATHAN_SOLO);
-
- events.ScheduleEvent(EVENT_NAPALM_SHELL, 3000, 0, PHASE_LEVIATHAN_SOLO);
- events.ScheduleEvent(EVENT_PLASMA_BLAST, 15000, 0, PHASE_LEVIATHAN_SOLO);
- events.ScheduleEvent(EVENT_PROXIMITY_MINE, 5000);
- events.ScheduleEvent(EVENT_SHOCK_BLAST, 18000);
- break;
- case DO_ASSEMBLED_COMBAT:
- me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->SetReactState(REACT_AGGRESSIVE);
-
- events.SetPhase(PHASE_LEVIATHAN_ASSEMBLED);
- events.ScheduleEvent(EVENT_PROXIMITY_MINE, 15000);
- events.ScheduleEvent(EVENT_SHOCK_BLAST, 45000);
- break;
- default:
- break;
- }
- }
-
- uint32 GetData(uint32 type) const override
- {
- switch (type)
- {
- case DATA_SETUP_MINE:
- return _setupMine;
- case DATA_SETUP_BOMB:
- return _setupBomb;
- case DATA_SETUP_ROCKET:
- return _setupRocket;
- case DATA_FIREFIGHTER:
- return _fireFighter;
- default:
- return 0;
- }
- }
-
- void JustDied(Unit* /*who*/) override
- {
- _JustDied();
- me->SetStandState(UNIT_STAND_STATE_DEAD);
- }
-
- void JustSummoned(Creature* summon) override
- {
- summons.Summon(summon);
- }
-
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- if (mimiron->AI())
- mimiron->AI()->Talk(events.IsInPhase(PHASE_LEVIATHAN_SOLO) ? SAY_MKII_SLAY : SAY_V07TRON_SLAY);
- }
-
- void MovementInform(uint32 type, uint32 point) override
- {
- if (type != POINT_MOTION_TYPE)
- return;
-
- switch (point)
- {
- case WP_MKII_P1_IDLE:
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- DoCast(me, SPELL_HALF_HEAL);
-
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_VX001);
- break;
- case WP_MKII_P4_POS_1:
- me->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_2, pos[WP_MKII_P4_POS_2]);
- break;
- case WP_MKII_P4_POS_2:
- me->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_3, pos[WP_MKII_P4_POS_3]);
- break;
- case WP_MKII_P4_POS_3:
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2);
- break;
- case WP_MKII_P4_POS_4:
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_5, pos[WP_MKII_P4_POS_5]);
- break;
- default:
- break;
- }
- }
-
- void Reset() override
- {
- _Reset();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->SetReactState(REACT_PASSIVE);
- _fireFighter = false;
- _setupMine = false;
- _setupBomb = false;
- _setupRocket = false;
- DoCast(me, SPELL_FREEZE_ANIM);
- }
-
- void SetData(uint32 id, uint32 data) override
- {
- switch (id)
- {
- case DATA_SETUP_MINE:
- _setupMine = data;
- break;
- case DATA_SETUP_BOMB:
- _setupBomb = data;
- break;
- case DATA_SETUP_ROCKET:
- _setupRocket = data;
- break;
- case DATA_FIREFIGHTER:
- _fireFighter = data;
- break;
- default:
- break;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim() || !CheckInRoom())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_PROXIMITY_MINE:
- DoCastAOE(SPELL_PROXIMITY_MINES);
- events.RescheduleEvent(EVENT_PROXIMITY_MINE, 35000);
- break;
- case EVENT_PLASMA_BLAST:
- DoCastVictim(SPELL_SCRIPT_EFFECT_PLASMA_BLAST);
- events.RescheduleEvent(EVENT_PLASMA_BLAST, urand(30000, 45000), 0, PHASE_LEVIATHAN_SOLO);
-
- if (events.GetTimeUntilEvent(EVENT_NAPALM_SHELL) < 9000)
- events.RescheduleEvent(EVENT_NAPALM_SHELL, 9000, 0, PHASE_LEVIATHAN_SOLO); // The actual spell is cast by the turret, we should not let it interrupt itself.
- break;
- case EVENT_SHOCK_BLAST:
- DoCastAOE(SPELL_SHOCK_BLAST);
- events.RescheduleEvent(EVENT_SHOCK_BLAST, urand(34000, 36000));
- break;
- case EVENT_FLAME_SUPPRESSANT_MK:
- DoCastAOE(SPELL_FLAME_SUPPRESSANT_MK);
- events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_MK, 60000, 0, PHASE_LEVIATHAN_SOLO);
- break;
- case EVENT_NAPALM_SHELL:
- DoCastAOE(SPELL_FORCE_CAST_NAPALM_SHELL);
- events.RescheduleEvent(EVENT_NAPALM_SHELL, urand(6000, 15000), 0, PHASE_LEVIATHAN_SOLO);
-
- if (events.GetTimeUntilEvent(EVENT_PLASMA_BLAST) < 2000)
- events.RescheduleEvent(EVENT_PLASMA_BLAST, 2000, 0, PHASE_LEVIATHAN_SOLO); // The actual spell is cast by the turret, we should not let it interrupt itself.
- break;
- default:
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
-
- private:
- bool _fireFighter;
- bool _setupMine;
- bool _setupBomb;
- bool _setupRocket;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<boss_leviathan_mk_iiAI>(creature);
- }
-};
-
-class boss_vx_001 : public CreatureScript
-{
- public:
- boss_vx_001() : CreatureScript("boss_vx_001") { }
-
- struct boss_vx_001AI : public BossAI
- {
- boss_vx_001AI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
- {
- me->SetDisableGravity(true); // This is the unfold visual state of VX-001, it has to be set on create as it requires an objectupdate if set later.
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state.
- me->SetReactState(REACT_PASSIVE);
- DoCast(me, SPELL_FREEZE_ANIM);
- _fireFighter = false;
- }
-
- void DamageTaken(Unit* who, uint32 &damage) override
- {
- 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->AttackStop();
- me->SetUInt64Value(UNIT_FIELD_TARGET, NULL); // This should be removed when channel track target implementation is properly functioning.
- DoCast(me, SPELL_VEHICLE_DAMAGED, true);
- me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE, SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT);
-
- if (events.IsInPhase(PHASE_VX001_SOLO))
- {
- me->CastStop();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- DoCast(me, SPELL_HALF_HEAL);
- DoCast(me, SPELL_TORSO_DISABLED);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL);
- }
- else if (events.IsInPhase(PHASE_VX001_ASSEMBLED))
- {
- me->SetStandState(UNIT_STAND_STATE_DEAD);
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
-
- if (EncounterDone(who, me).IsEncounterFinished())
- return;
-
- me->CastStop();
- DoCast(me, SPELL_SELF_REPAIR);
- }
- events.Reset();
- }
- }
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case DO_HARDMODE_VX001:
- _fireFighter = true;
- DoCast(me, SPELL_EMERGENCY_MODE);
- events.ScheduleEvent(EVENT_FROST_BOMB, 1000);
- events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, 6000);
- // Missing break intended.
- case DO_START_VX001:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); // Remove emotestate.
- //me->SetUInt32Value(UNIT_FIELD_BYTES_1, 33554432); Blizzard handles hover animation like this it seems.
- DoCast(me, SPELL_HEAT_WAVE_AURA);
-
- events.SetPhase(PHASE_VX001_SOLO);
- events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000);
- events.ScheduleEvent(EVENT_SPINNING_UP, urand(30000, 35000));
- events.ScheduleEvent(EVENT_RAPID_BURST, 500, 0, PHASE_VX001_SOLO);
- break;
- case DO_ASSEMBLED_COMBAT:
- me->SetStandState(UNIT_STAND_STATE_STAND);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
-
- events.SetPhase(PHASE_VX001_ASSEMBLED);
- events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000);
- events.ScheduleEvent(EVENT_SPINNING_UP, urand(30000, 35000));
- events.ScheduleEvent(EVENT_HAND_PULSE, 500, 0, PHASE_VX001_ASSEMBLED);
- if (_fireFighter)
- events.ScheduleEvent(EVENT_FROST_BOMB, 1000);
- break;
- default:
- break;
- }
- }
-
- void EnterEvadeMode() override
- {
- summons.DespawnAll();
- }
-
- void JustSummoned(Creature* summon) override
- {
- summons.Summon(summon);
- if (summon->GetEntry() == NPC_BURST_TARGET)
- summon->CastSpell(me, SPELL_RAPID_BURST_TARGET_ME);
- }
-
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- if (mimiron->AI())
- mimiron->AI()->Talk(events.IsInPhase(PHASE_VX001_SOLO) ? SAY_VX001_SLAY : SAY_V07TRON_SLAY);
- }
-
- void SpellHit(Unit* caster, SpellInfo const* /*spellProto*/) override
- {
- if (caster->GetEntry() == NPC_BURST_TARGET && !me->HasUnitState(UNIT_STATE_CASTING))
- DoCast(caster, SPELL_RAPID_BURST);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- // Handle rotation during SPELL_SPINNING_UP, SPELL_P3WX2_LASER_BARRAGE, SPELL_RAPID_BURST, and SPELL_HAND_PULSE_LEFT/RIGHT
- if (me->HasUnitState(UNIT_STATE_CASTING))
- {
- if (Creature* channelTarget = ObjectAccessor::GetCreature(*me, me->GetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT)))
- me->SetFacingToObject(channelTarget);
- return;
- }
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_RAPID_BURST:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 120, true))
- DoCast(target, SPELL_SUMMON_BURST_TARGET);
- events.RescheduleEvent(EVENT_RAPID_BURST, 3000, 0, PHASE_VX001_SOLO);
- break;
- case EVENT_ROCKET_STRIKE:
- DoCastAOE(events.IsInPhase(PHASE_VX001_SOLO) ? SPELL_ROCKET_STRIKE_LEFT : SPELL_ROCKET_STRIKE_BOTH);
- events.ScheduleEvent(EVENT_RELOAD, 10000);
- events.RescheduleEvent(EVENT_ROCKET_STRIKE, urand(20000, 25000));
- break;
- case EVENT_RELOAD:
- for (uint8 seat = 6; seat <= 7; seat++)
- if (Unit* rocket = me->GetVehicleKit()->GetPassenger(seat))
- rocket->SetDisplayId(rocket->GetNativeDisplayId());
- break;
- case EVENT_HAND_PULSE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 120, true))
- DoCast(target, urand(0,1) == 0 ? SPELL_HAND_PULSE_LEFT : SPELL_HAND_PULSE_RIGHT);
- events.RescheduleEvent(EVENT_HAND_PULSE, urand(1500, 3000), 0, PHASE_VX001_ASSEMBLED);
- break;
- case EVENT_FROST_BOMB:
- DoCastAOE(SPELL_SCRIPT_EFFECT_FROST_BOMB);
- events.RescheduleEvent(EVENT_FROST_BOMB, 45000);
- break;
- case EVENT_SPINNING_UP:
- DoCastAOE(SPELL_SPINNING_UP);
- events.DelayEvents(14000);
- events.RescheduleEvent(EVENT_SPINNING_UP, urand(55000, 65000));
- break;
- case EVENT_FLAME_SUPPRESSANT_VX:
- DoCastAOE(SPELL_FLAME_SUPPRESSANT_VX);
- events.RescheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, urand(10000, 12000), 0, PHASE_VX001_SOLO);
- break;
- default:
- break;
- }
- }
- }
-
- private:
- bool _fireFighter;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<boss_vx_001AI>(creature);
- }
-};
-
-class boss_aerial_command_unit : public CreatureScript
-{
- public:
- boss_aerial_command_unit() : CreatureScript("boss_aerial_command_unit") { }
-
- struct boss_aerial_command_unitAI : public BossAI
- {
- boss_aerial_command_unitAI(Creature* creature) : BossAI(creature, BOSS_MIMIRON)
- {
- //me->SetDisableGravity(true);
- me->SetReactState(REACT_PASSIVE);
- fireFigther = false;
- }
-
- void DamageTaken(Unit* who, uint32 &damage) override
- {
- 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);
-
- if (events.IsInPhase(PHASE_AERIAL_SOLO))
- {
- me->GetMotionMaster()->Clear(true);
- me->GetMotionMaster()->MovePoint(WP_AERIAL_P4_POS, pos[WP_AERIAL_P4_POS]);
- }
- else if (events.IsInPhase(PHASE_AERIAL_ASSEMBLED))
- {
- me->SetStandState(UNIT_STAND_STATE_DEAD);
-
- if (EncounterDone(who, me).IsEncounterFinished())
- return;
-
- me->CastStop();
- DoCast(me, SPELL_SELF_REPAIR);
- }
- events.Reset();
- }
- }
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case DO_HARDMODE_AERIAL:
- fireFigther = true;
- DoCast(me, SPELL_EMERGENCY_MODE);
- events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1000, 0, PHASE_AERIAL_SOLO);
- // Missing break intended.
- case DO_START_AERIAL:
- //me->SetDisableGravity(false);
- //me->SetHover(true);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->SetReactState(REACT_AGGRESSIVE);
-
- events.SetPhase(PHASE_AERIAL_SOLO);
- events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 5000, 0, PHASE_AERIAL_SOLO);
- events.ScheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 9000, 0, PHASE_AERIAL_SOLO);
- events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 9000, 0, PHASE_AERIAL_SOLO);
- break;
- case DO_DISABLE_AERIAL:
- //me->SetHover(false);
- me->CastStop();
- me->AttackStop();
- me->SetReactState(REACT_PASSIVE);
- me->GetMotionMaster()->MoveFall();
- events.DelayEvents(23000);
- break;
- case DO_ENABLE_AERIAL:
- //me->SetHover(true);
- me->SetReactState(REACT_AGGRESSIVE);
- break;
- case DO_ASSEMBLED_COMBAT:
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
- me->SetReactState(REACT_AGGRESSIVE);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- events.SetPhase(PHASE_AERIAL_ASSEMBLED);
- break;
- default:
- break;
- }
- }
-
- void EnterEvadeMode() override
- {
- summons.DespawnAll();
- }
-
- void JustSummoned(Creature* summon) override
- {
- if (fireFigther && (summon->GetEntry() == NPC_ASSAULT_BOT || summon->GetEntry() == NPC_JUNK_BOT))
- summon->AddAura(SPELL_EMERGENCY_MODE, summon);
- BossAI::JustSummoned(summon);
- }
-
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() == TYPEID_PLAYER)
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- if (mimiron->AI())
- mimiron->AI()->Talk(events.IsInPhase(PHASE_AERIAL_SOLO) ? SAY_AERIAL_SLAY : SAY_V07TRON_SLAY);
- }
-
- void MovementInform(uint32 type, uint32 point) override
- {
- if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS)
- {
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
-
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_SUMMON_FIRE_BOTS:
- DoCastAOE(SPELL_SUMMON_FIRE_BOT_TRIGGER);
- events.RescheduleEvent(EVENT_SUMMON_FIRE_BOTS, 45000, 0, PHASE_AERIAL_SOLO);
- break;
- case EVENT_SUMMON_JUNK_BOT:
- DoCastAOE(SPELL_SUMMON_JUNK_BOT_TRIGGER);
- events.RescheduleEvent(EVENT_SUMMON_JUNK_BOT, urand(11000, 12000), 0, PHASE_AERIAL_SOLO);
- break;
- case EVENT_SUMMON_ASSAULT_BOT:
- DoCastAOE(SPELL_SUMMON_ASSAULT_BOT_TRIGGER);
- events.RescheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 30000, 0, PHASE_AERIAL_SOLO);
- break;
- case EVENT_SUMMON_BOMB_BOT:
- DoCast(me, SPELL_SUMMON_BOMB_BOT);
- events.RescheduleEvent(EVENT_SUMMON_BOMB_BOT, urand(15000, 20000), 0, PHASE_AERIAL_SOLO);
- break;
- default:
- break;
- }
- }
- DoSpellAttackIfReady(events.IsInPhase(PHASE_AERIAL_SOLO) ? SPELL_PLASMA_BALL_P1 : SPELL_PLASMA_BALL_P2);
- }
-
- private:
- bool fireFigther;
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<boss_aerial_command_unitAI>(creature);
- }
-};
-
-class npc_magnetic_core : public CreatureScript
-{
- public:
- npc_magnetic_core() : CreatureScript("npc_magnetic_core") { }
-
- struct npc_magnetic_coreAI : public ScriptedAI
- {
- npc_magnetic_coreAI(Creature* creature) : ScriptedAI(creature)
- {
- DoCast(me, SPELL_MAGNETIC_CORE);
- me->DespawnOrUnsummon(25000); // Just incase handling in aurascript fails to despawn.
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_magnetic_coreAI>(creature);
- }
-};
-
-class npc_mimiron_assault_bot : public CreatureScript
-{
- public:
- npc_mimiron_assault_bot() : CreatureScript("npc_mimiron_assault_bot") { }
-
- struct npc_mimiron_assault_botAI : public ScriptedAI
- {
- npc_mimiron_assault_botAI(Creature* creature) : ScriptedAI(creature)
- {
- magneticTimer = 14000;
- }
-
- uint32 magneticTimer;
-
- void UpdateAI(uint32 diff) override
- {
- if (me->HasUnitState(UNIT_STATE_ROOT))
- if (Unit* newTarget = SelectTarget(SELECT_TARGET_NEAREST, 0, 30.0f, true))
- {
- me->DeleteThreatList();
- AttackStart(newTarget);
- }
-
- if (magneticTimer <= diff)
- {
- DoCastVictim(SPELL_MAGNETIC_FIELD);
- me->ClearUnitState(UNIT_STATE_CASTING);
- magneticTimer = 30000;
- }
- else magneticTimer -= diff;
-
- DoMeleeAttackIfReady();
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_assault_botAI>(creature);
- }
-};
-
-class npc_mimiron_emergency_fire_bot : public CreatureScript
-{
- public:
- npc_mimiron_emergency_fire_bot() : CreatureScript("npc_mimiron_emergency_fire_bot") { }
-
- struct npc_mimiron_emergency_fire_botAI : public ScriptedAI
- {
- npc_mimiron_emergency_fire_botAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetReactState(REACT_PASSIVE);
- watersprayTimer = 7000;
- isWaterSprayReady = true;
- moveNew = true;
- }
-
- uint32 watersprayTimer;
- bool isWaterSprayReady;
- bool moveNew;
-
- uint32 GetData(uint32 id) const override
- {
- if (id == DATA_WATERSPRAY)
- return isWaterSprayReady;
- if (id == DATA_MOVE_NEW)
- return moveNew;
- return 0;
- }
-
- void SetData(uint32 id, uint32 data) override
- {
- if (id == DATA_WATERSPRAY)
- isWaterSprayReady = false;
- else if (id == DATA_MOVE_NEW)
- moveNew = data;
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!isWaterSprayReady)
- {
- if (watersprayTimer <= diff)
- {
- isWaterSprayReady = true;
- watersprayTimer = urand(7000, 9000);
- }
- else watersprayTimer -= diff;
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_emergency_fire_botAI>(creature);
- }
-};
-
-class npc_mimiron_computer : public CreatureScript
-{
- public:
- npc_mimiron_computer() : CreatureScript("npc_mimiron_computer") { }
-
- struct npc_mimiron_computerAI : public ScriptedAI
- {
- npc_mimiron_computerAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
-
- InstanceScript* instance;
- EventMap events;
-
- void DoAction(int32 action) override
- {
- switch (action)
- {
- case DO_ACTIVATE_COMPUTER:
- Talk(SAY_SELF_DESTRUCT_INITIATED);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_10, 3000);
- break;
- case DO_DEACTIVATE_COMPUTER:
- Talk(SAY_SELF_DESTRUCT_TERMINATED);
- me->RemoveAurasDueToSpell(SPELL_SELF_DESTRUCTION_AURA);
- me->RemoveAurasDueToSpell(SPELL_SELF_DESTRUCTION_VISUAL);
- events.Reset();
- break;
- default:
- break;
- }
- }
-
- void UpdateAI(uint32 diff) override
- {
- events.Update(diff);
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_SELF_DESTRUCT_10:
- Talk(SAY_SELF_DESTRUCT_10);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_9, 60000);
- break;
- case EVENT_SELF_DESTRUCT_9:
- Talk(SAY_SELF_DESTRUCT_9);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_8, 60000);
- break;
- case EVENT_SELF_DESTRUCT_8:
- Talk(SAY_SELF_DESTRUCT_8);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_7, 60000);
- break;
- case EVENT_SELF_DESTRUCT_7:
- Talk(SAY_SELF_DESTRUCT_7);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_6, 60000);
- break;
- case EVENT_SELF_DESTRUCT_6:
- Talk(SAY_SELF_DESTRUCT_6);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_5, 60000);
- break;
- case EVENT_SELF_DESTRUCT_5:
- Talk(SAY_SELF_DESTRUCT_5);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_4, 60000);
- break;
- case EVENT_SELF_DESTRUCT_4:
- Talk(SAY_SELF_DESTRUCT_4);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_3, 60000);
- break;
- case EVENT_SELF_DESTRUCT_3:
- Talk(SAY_SELF_DESTRUCT_3);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_2, 60000);
- break;
- case EVENT_SELF_DESTRUCT_2:
- Talk(SAY_SELF_DESTRUCT_2);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_1, 60000);
- break;
- case EVENT_SELF_DESTRUCT_1:
- Talk(SAY_SELF_DESTRUCT_1);
- events.ScheduleEvent(EVENT_SELF_DESTRUCT_FINALIZED, 60000);
- break;
- case EVENT_SELF_DESTRUCT_FINALIZED:
- Talk(SAY_SELF_DESTRUCT_FINALIZED);
- if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_MIMIRON)))
- mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT);
- DoCast(me, SPELL_SELF_DESTRUCTION_AURA);
- DoCast(me, SPELL_SELF_DESTRUCTION_VISUAL);
- break;
- default:
- break;
- }
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_computerAI>(creature);
- }
-};
-
-class npc_mimiron_flames : public CreatureScript
-{
- public:
- npc_mimiron_flames() : CreatureScript("npc_mimiron_flames") { }
-
- struct npc_mimiron_flamesAI : public ScriptedAI
- {
- npc_mimiron_flamesAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- timer = 4000;
- spawnedFlames = false;
- }
-
- uint32 timer;
- bool spawnedFlames;
- InstanceScript* instance;
-
- void UpdateAI(uint32 diff) override
- {
- if (instance->GetBossState(BOSS_MIMIRON) != IN_PROGRESS)
- me->DespawnOrUnsummon();
- if (!spawnedFlames)
- {
- if (timer <= diff)
- {
- DoCastAOE(SPELL_SUMMON_FLAMES_SPREAD_TRIGGER);
- spawnedFlames = true;
- }
- else timer -= diff;
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_flamesAI>(creature);
- }
-};
-
-class npc_mimiron_frost_bomb : public CreatureScript
-{
- public:
- npc_mimiron_frost_bomb() : CreatureScript("npc_mimiron_frost_bomb") { }
-
- struct npc_mimiron_frost_bombAI : public ScriptedAI
- {
- npc_mimiron_frost_bombAI(Creature* creature) : ScriptedAI(creature)
- {
- timer = 10000;
- exploded = false;
- }
-
- uint32 timer;
- bool exploded;
-
- void UpdateAI(uint32 diff) override
- {
- if (timer <= diff)
- {
- if (!exploded)
- {
- DoCastAOE(SPELL_FROST_BOMB_EXPLOSION);
- timer = 3000;
- exploded = true;
- }
- else
- {
- DoCastAOE(SPELL_CLEAR_FIRES);
- me->DespawnOrUnsummon(3000);
- timer = 10000;
- }
- }
- else timer -= diff;
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_frost_bombAI>(creature);
- }
-};
-
-class npc_mimiron_proximity_mine : public CreatureScript
-{
- public:
- npc_mimiron_proximity_mine() : CreatureScript("npc_mimiron_proximity_mine") { }
-
- struct npc_mimiron_proximity_mineAI : public ScriptedAI
- {
- npc_mimiron_proximity_mineAI(Creature* creature) : ScriptedAI(creature)
- {
- explosionTimer = 35000;
- boom = false;
- armed = false;
- }
-
- uint32 explosionTimer;
- bool boom;
- bool armed;
-
- void UpdateAI(uint32 diff) override
- {
- if (!boom)
- {
- if (explosionTimer <= 33500 && !armed)
- {
- DoCast(me, SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER);
- armed = true;
- }
- if (explosionTimer <= diff)
- {
- if (me->HasAura(SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER))
- DoCastAOE(SPELL_PROXIMITY_MINE_EXPLOSION);
- boom = true;
- me->DespawnOrUnsummon(1000);
- }
- else explosionTimer -= diff;
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetUlduarAI<npc_mimiron_proximity_mineAI>(creature);
- }
-};
-
-class go_mimiron_hardmode_button : public GameObjectScript
-{
-public:
- go_mimiron_hardmode_button() : GameObjectScript("go_mimiron_hardmode_button") { }
-
- bool OnGossipHello(Player* /*player*/, GameObject* go)
- {
- InstanceScript* instance = go->GetInstanceScript();
-
- if (!instance)
- return false;
-
- if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_COMPUTER)))
- computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
- go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_NOT_SELECTABLE);
- return true;
- }
-};
-
-// 63801 Bomb Bot
-class spell_mimiron_bomb_bot : public SpellScriptLoader
-{
- public:
- spell_mimiron_bomb_bot() : SpellScriptLoader("spell_mimiron_bomb_bot") { }
-
- class spell_mimiron_bomb_bot_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_bomb_bot_SpellScript);
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (GetHitPlayer())
- if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* mkii = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkii->AI()->SetData(DATA_SETUP_BOMB, 0);
- }
-
- void HandleDespawn(SpellEffIndex /*effIndex*/)
- {
- if (GetHitUnit()->IsSummon())
- {
- GetHitUnit()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED);
- GetHitUnit()->ToTempSummon()->DespawnOrUnsummon(1000);
- }
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_bomb_bot_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_bomb_bot_SpellScript::HandleDespawn, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_bomb_bot_SpellScript();
- }
-};
-
-// 65192 - Flame Suppressant, 65224 - Clear Fires, 65354 - Clear Fires, 64619 - Water Spray
-class spell_mimiron_clear_fires : public SpellScriptLoader
-{
- public:
- spell_mimiron_clear_fires() : SpellScriptLoader("spell_mimiron_clear_fires") { }
-
- class spell_mimiron_clear_fires_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_clear_fires_SpellScript);
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- if (GetHitUnit()->IsSummon())
- GetHitUnit()->ToTempSummon()->DespawnOrUnsummon();
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_clear_fires_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_clear_fires_SpellScript();
- }
-};
-
-// 64463 - Despawn Assault Bots
-class spell_mimiron_despawn_assault_bots : public SpellScriptLoader
-{
- public:
- spell_mimiron_despawn_assault_bots() : SpellScriptLoader("spell_mimiron_despawn_assault_bots") { }
-
- class spell_mimiron_despawn_assault_bots_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_despawn_assault_bots_SpellScript);
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (GetHitUnit()->IsSummon())
- GetHitUnit()->ToTempSummon()->DespawnOrUnsummon();
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_despawn_assault_bots_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_despawn_assault_bots_SpellScript();
- }
-};
-
-// 64626 - Explosion
-class spell_mimiron_frost_bomb_explosion : public SpellScriptLoader
-{
- public:
- spell_mimiron_frost_bomb_explosion() : SpellScriptLoader("spell_mimiron_frost_bomb_explosion") { }
-
- class spell_mimiron_frost_bomb_explosion_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_frost_bomb_explosion_SpellScript);
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->RemoveAurasDueToSpell(SPELL_FLAMES_PERIODIC_TRIGGER);
- }
-
- void HandleUnaura(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->RemoveAurasDueToSpell(SPELL_FROST_BOMB_LINKED);
- }
-
- void Register() override
- {
- OnEffectHit += SpellEffectFn(spell_mimiron_frost_bomb_explosion_SpellScript::HandleUnaura, EFFECT_2, SPELL_EFFECT_DUMMY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_frost_bomb_explosion_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_frost_bomb_explosion_SpellScript();
- }
-};
-
-// 64618 - Fire Search
-class spell_mimiron_fire_search : public SpellScriptLoader
-{
- public:
- spell_mimiron_fire_search() : SpellScriptLoader("spell_mimiron_fire_search") { }
-
- class spell_mimiron_fire_search_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_fire_search_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_WATER_SPRAY))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- {
- GetCaster()->GetMotionMaster()->MoveRandom(15.0f);
- return;
- }
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
-
- if (caster->GetAI())
- {
- if (caster->GetDistance2d(GetHitUnit()) <= 15.0f && caster->GetAI()->GetData(DATA_WATERSPRAY))
- {
- caster->CastSpell(GetHitUnit(), SPELL_WATER_SPRAY, true);
- caster->GetAI()->SetData(DATA_WATERSPRAY, 0);
- caster->GetAI()->SetData(DATA_MOVE_NEW, 1);
- }
- else if (caster->GetAI()->GetData(DATA_MOVE_NEW))
- {
- caster->GetMotionMaster()->MoveChase(GetHitUnit());
- caster->GetAI()->SetData(DATA_MOVE_NEW, 0);
- }
- }
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_fire_search_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_fire_search_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_fire_search_SpellScript();
- }
-};
-
-// 64570 - Flame Suppressant
-class spell_mimiron_flame_suppressant : public SpellScriptLoader
-{
- public:
- spell_mimiron_flame_suppressant() : SpellScriptLoader("spell_mimiron_flame_suppressant") { }
-
- class spell_mimiron_flame_suppressant_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_flame_suppressant_SpellScript);
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->RemoveAurasDueToSpell(SPELL_FLAMES_PERIODIC_TRIGGER);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_flame_suppressant_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_flame_suppressant_SpellScript();
- }
-};
-
-// 64436 - Magnetic Core
-class spell_mimiron_magnetic_core : public SpellScriptLoader
-{
- public:
- spell_mimiron_magnetic_core() : SpellScriptLoader("spell_mimiron_magnetic_core") { }
-
- class spell_mimiron_magnetic_core_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_magnetic_core_SpellScript);
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove_if(AerialTargetSelector());
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_magnetic_core_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENTRY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_magnetic_core_SpellScript();
- }
-
- class spell_mimiron_magnetic_core_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_magnetic_core_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_MAGNETIC_CORE_VISUAL))
- return false;
- return true;
- }
-
- void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- if (target->GetAI())
- target->GetAI()->DoAction(DO_DISABLE_AERIAL);
-
- target->CastSpell(target, SPELL_MAGNETIC_CORE_VISUAL, true);
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- if (target->GetAI())
- target->GetAI()->DoAction(DO_ENABLE_AERIAL);
-
- target->RemoveAurasDueToSpell(SPELL_MAGNETIC_CORE_VISUAL);
- }
-
- void OnRemoveSelf(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (GetTarget()->ToCreature())
- GetTarget()->ToCreature()->DespawnOrUnsummon();
- }
-
- void Register() override
- {
- AfterEffectApply += AuraEffectApplyFn(spell_mimiron_magnetic_core_AuraScript::OnApply, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectRemoveFn(spell_mimiron_magnetic_core_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectRemoveFn(spell_mimiron_magnetic_core_AuraScript::OnRemoveSelf, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_magnetic_core_AuraScript();
- }
-};
-
-// 63667 - Napalm Shell
-class spell_mimiron_napalm_shell : public SpellScriptLoader
-{
- public:
- spell_mimiron_napalm_shell() : SpellScriptLoader("spell_mimiron_napalm_shell") { }
-
- class spell_mimiron_napalm_shell_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_napalm_shell_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_NAPALM_SHELL))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
-
- if (!targets.empty())
- target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetHitUnit(), SPELL_NAPALM_SHELL);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_napalm_shell_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_napalm_shell_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_napalm_shell_SpellScript();
- }
-};
-
-// 63274 - P3Wx2 Laser Barrage -- This should be removed when channel track target implementation is properly functioning.
-class spell_mimiron_p3wx2_laser_barrage : public SpellScriptLoader
-{
- public:
- spell_mimiron_p3wx2_laser_barrage() : SpellScriptLoader("spell_mimiron_p3wx2_laser_barrage") { }
-
- class spell_mimiron_p3wx2_laser_barrage_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_p3wx2_laser_barrage_SpellScript);
-
- void OnHit(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, GetHitUnit()->GetGUID());
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_p3wx2_laser_barrage_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_p3wx2_laser_barrage_SpellScript();
- }
-};
-
-// 64542 - Plasma Blast
-class spell_mimiron_plasma_blast : public SpellScriptLoader
-{
- public:
- spell_mimiron_plasma_blast() : SpellScriptLoader("spell_mimiron_plasma_blast") { }
-
- class spell_mimiron_plasma_blast_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_plasma_blast_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_PLASMA_BLAST))
- return false;
- return true;
- }
-
- bool Load() override
- {
- return GetCaster()->GetVehicleKit();
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (Unit* caster = GetCaster()->GetVehicleKit()->GetPassenger(3))
- caster->CastSpell(GetHitUnit(), SPELL_PLASMA_BLAST);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_plasma_blast_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_plasma_blast_SpellScript();
- }
+ SPELL_DEAFENING_SIREN = 64616,
+ SPELL_WATER_SPRAY = 64619,
+ SPELL_FROST_BOMB_HARD_MODE = 64627,
+ SPELL_EXPLOSION = 66351,
+ SPELL_DISARM = 1842,
+ SPELL_RIDE_VEHICLE = 46598,
+ SPELL_TRIGGER_MISSILE = 65347,
};
-// 66351 - Explosion
-class spell_mimiron_proximity_explosion : public SpellScriptLoader
+enum Npc
{
- public:
- spell_mimiron_proximity_explosion() : SpellScriptLoader("spell_mimiron_proximity_explosion") { }
-
- class spell_mimiron_proximity_explosion_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_proximity_explosion_SpellScript);
-
- void OnHit(SpellEffIndex /*effIndex*/)
- {
- if (GetHitPlayer())
- if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* mkII = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkII->AI()->SetData(DATA_SETUP_MINE, 0);
- }
-
- void HandleAura(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->RemoveAurasDueToSpell(SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_explosion_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_explosion_SpellScript::HandleAura, EFFECT_1, SPELL_EFFECT_APPLY_AURA);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_proximity_explosion_SpellScript();
- }
+ NPC_ASSAULT_BOT = 34057,
+ NPC_BOMB_BOT = 33836,
+ NPC_JUNK_BOT = 33855,
+ NPC_EMERGENCE_FIRE_BOT = 34147,
+ NPC_FROST_BOMB = 34149,
};
-// 63027 - Proximity Mines
-class spell_mimiron_proximity_mines : public SpellScriptLoader
+class spell_ulduar_proximity_mines : public SpellScriptLoader
{
public:
- spell_mimiron_proximity_mines() : SpellScriptLoader("spell_mimiron_proximity_mines") { }
+ spell_ulduar_proximity_mines() : SpellScriptLoader("spell_ulduar_proximity_mines") { }
- class spell_mimiron_proximity_mines_SpellScript : public SpellScript
+ class spell_ulduar_proximity_minesSpellScript : public SpellScript
{
- PrepareSpellScript(spell_mimiron_proximity_mines_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_PROXIMITY_MINE))
- return false;
- return true;
- }
+ PrepareSpellScript(spell_ulduar_proximity_minesSpellScript);
- void HandleScript(SpellEffIndex /*effIndex*/)
+ void HandleScript(SpellEffIndex effIndex)
{
+ PreventHitDefaultEffect(effIndex);
for (uint8 i = 0; i < 10; ++i)
- GetCaster()->CastSpell(GetCaster(), SPELL_SUMMON_PROXIMITY_MINE, true);
+ GetCaster()->CastSpell(GetCaster(), SPELL_TRIGGER_MISSILE, true);
}
void Register() override
{
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_proximity_mines_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ OnEffectHitTarget += SpellEffectFn(spell_ulduar_proximity_minesSpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const override
{
- return new spell_mimiron_proximity_mines_SpellScript();
- }
-};
-
-// 65346 - Proximity Mine
-class spell_mimiron_proximity_trigger : public SpellScriptLoader
-{
- public:
- spell_mimiron_proximity_trigger() : SpellScriptLoader("spell_mimiron_proximity_trigger") { }
-
- class spell_mimiron_proximity_trigger_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_proximity_trigger_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_PROXIMITY_MINE_EXPLOSION))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove(GetExplTargetWorldObject());
-
- if (targets.empty())
- FinishCast(SPELL_FAILED_NO_VALID_TARGETS);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell((Unit*)NULL, SPELL_PROXIMITY_MINE_EXPLOSION, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_proximity_trigger_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHit += SpellEffectFn(spell_mimiron_proximity_trigger_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_proximity_trigger_SpellScript();
- }
-};
-
-// 63382 - Rapid Burst
-class spell_mimiron_rapid_burst : public SpellScriptLoader
-{
- public:
- spell_mimiron_rapid_burst() : SpellScriptLoader("spell_mimiron_rapid_burst") { }
-
- class spell_mimiron_rapid_burst_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_rapid_burst_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_RAPID_BURST_LEFT) || !sSpellMgr->GetSpellInfo(SPELL_RAPID_BURST_RIGHT))
- return false;
- return true;
- }
-
- void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (GetTarget()->IsSummon())
- GetTarget()->ToTempSummon()->DespawnOrUnsummon();
- }
-
- void HandleDummyTick(AuraEffect const* aurEff)
- {
- if (GetCaster())
- GetCaster()->CastSpell(GetTarget(), aurEff->GetTickNumber() % 2 == 0 ? SPELL_RAPID_BURST_RIGHT : SPELL_RAPID_BURST_LEFT, true, NULL, aurEff);
- }
-
- void Register() override
- {
- AfterEffectRemove += AuraEffectApplyFn(spell_mimiron_rapid_burst_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_rapid_burst_AuraScript::HandleDummyTick, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_rapid_burst_AuraScript();
- }
-};
-
-// 64402 - Rocket Strike, 65034 - Rocket Strike
-class spell_mimiron_rocket_strike : public SpellScriptLoader
-{
- public:
- spell_mimiron_rocket_strike() : SpellScriptLoader("spell_mimiron_rocket_strike") { }
-
- class spell_mimiron_rocket_strike_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_rocket_strike_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SCRIPT_EFFECT_ROCKET_STRIKE))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- if (m_scriptSpellId == SPELL_ROCKET_STRIKE_LEFT && GetCaster()->IsVehicle())
- if (WorldObject* target = GetCaster()->GetVehicleKit()->GetPassenger(6))
- {
- targets.clear();
- targets.push_back(target);
- }
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell((Unit*)NULL, SPELL_SCRIPT_EFFECT_ROCKET_STRIKE, true, NULL, NULL, GetCaster()->GetGUID());
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_rocket_strike_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_rocket_strike_SpellScript();
- }
-};
-
-// 63041 - Rocket Strike
-class spell_mimiron_rocket_strike_damage : public SpellScriptLoader
-{
- public:
- spell_mimiron_rocket_strike_damage() : SpellScriptLoader("spell_mimiron_rocket_strike_damage") { }
-
- class spell_mimiron_rocket_strike_damage_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_rocket_strike_damage_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_NOT_SO_FRIENDLY_FIRE))
- return false;
- return true;
- }
-
- void HandleDespawn(SpellEffIndex /*effIndex*/)
- {
- if (GetCaster()->IsSummon())
- GetCaster()->ToTempSummon()->DespawnOrUnsummon(1000);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- if (GetHitPlayer())
- if (InstanceScript* instance = GetCaster()->GetInstanceScript())
- if (Creature* mkii = ObjectAccessor::GetCreature(*GetCaster(), instance->GetData64(DATA_LEVIATHAN_MK_II)))
- mkii->AI()->SetData(DATA_SETUP_ROCKET, 0);
- }
-
- void HandleFriendlyFire(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell((Unit*)NULL, SPELL_NOT_SO_FRIENDLY_FIRE, true);
- }
-
- void Register() override
- {
- OnEffectHit += SpellEffectFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleDespawn, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_damage_SpellScript::HandleFriendlyFire, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_rocket_strike_damage_SpellScript();
- }
-};
-
-// 63681 - Rocket Strike
-class spell_mimiron_rocket_strike_target_select : public SpellScriptLoader
-{
- public:
- spell_mimiron_rocket_strike_target_select() : SpellScriptLoader("spell_mimiron_rocket_strike_target_select") { }
-
- class spell_mimiron_rocket_strike_target_select_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_rocket_strike_target_select_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ROCKET_STRIKE))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
-
- if (!targets.empty())
- target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- InstanceScript* instance = GetCaster()->GetInstanceScript();
- GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_ROCKET_STRIKE, true, NULL, NULL, instance ? instance->GetData64(DATA_VX_001) : GetCaster()->GetGUID());
- GetCaster()->SetDisplayId(11686);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_rocket_strike_target_select_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_rocket_strike_target_select_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_rocket_strike_target_select_SpellScript();
- }
-};
-
-// 64383 - Self Repair
-class spell_mimiron_self_repair : public SpellScriptLoader
-{
- public:
- spell_mimiron_self_repair() : SpellScriptLoader("spell_mimiron_self_repair") { }
-
- class spell_mimiron_self_repair_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_self_repair_SpellScript);
-
- void HandleScript()
- {
- if (GetCaster()->GetAI())
- GetCaster()->GetAI()->DoAction(DO_ASSEMBLED_COMBAT);
- }
-
- void Register() override
- {
- AfterHit += SpellHitFn(spell_mimiron_self_repair_SpellScript::HandleScript);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_self_repair_SpellScript();
- }
-};
-
-// 63414 - Spinning Up -- This should be removed when channel track target implementation is properly functioning.
-class spell_mimiron_spinning_up : public SpellScriptLoader
-{
- public:
- spell_mimiron_spinning_up() : SpellScriptLoader("spell_mimiron_spinning_up") { }
-
- class spell_mimiron_spinning_up_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_spinning_up_SpellScript);
-
- void OnHit(SpellEffIndex /*effIndex*/)
- {
- if (GetHitUnit() != GetCaster())
- GetCaster()->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, GetHitUnit()->GetGUID());
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_spinning_up_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_spinning_up_SpellScript();
- }
-};
-
-// 64426 - Summon Scrap Bot
-class spell_mimiron_summon_assault_bot : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_assault_bot() : SpellScriptLoader("spell_mimiron_summon_assault_bot") { }
-
- class spell_mimiron_summon_assault_bot_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_summon_assault_bot_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ASSAULT_BOT))
- return false;
- return true;
- }
-
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- if (InstanceScript* instance = caster->GetInstanceScript())
- if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
- }
-
- void Register() override
- {
- OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_assault_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_summon_assault_bot_AuraScript();
- }
-};
-
-// 64425 - Summon Scrap Bot Trigger
-class spell_mimiron_summon_assault_bot_target : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_assault_bot_target() : SpellScriptLoader("spell_mimiron_summon_assault_bot_target") { }
-
- class spell_mimiron_summon_assault_bot_target_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_assault_bot_target_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_ASSAULT_BOT_DUMMY))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_ASSAULT_BOT_DUMMY, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_assault_bot_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_assault_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_assault_bot_target_SpellScript();
- }
-};
-
-// 64621 - Summon Fire Bot
-class spell_mimiron_summon_fire_bot : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_fire_bot() : SpellScriptLoader("spell_mimiron_summon_fire_bot") { }
-
- class spell_mimiron_summon_fire_bot_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_summon_fire_bot_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FIRE_BOT))
- return false;
-
- return true;
- }
-
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- if (InstanceScript* instance = caster->GetInstanceScript())
- if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
- }
-
- void Register() override
- {
- OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_fire_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_summon_fire_bot_AuraScript();
- }
-};
-
-// 64620 - Summon Fire Bot Trigger
-class spell_mimiron_summon_fire_bot_target : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_fire_bot_target() : SpellScriptLoader("spell_mimiron_summon_fire_bot_target") { }
-
- class spell_mimiron_summon_fire_bot_target_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_fire_bot_target_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FIRE_BOT_DUMMY))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- Trinity::Containers::RandomResizeList(targets, 3);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_FIRE_BOT_DUMMY, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_fire_bot_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_fire_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_fire_bot_target_SpellScript();
- }
-};
-
-// 64567 - Summon Flames Initial
-class spell_mimiron_summon_flames_initial : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_flames_initial() : SpellScriptLoader("spell_mimiron_summon_flames_initial") { }
-
- class spell_mimiron_summon_flames_initial_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_flames_initial_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FLAMES_INITIAL))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- Trinity::Containers::RandomResizeList(targets, 3);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_FLAMES_INITIAL, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_flames_initial_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_flames_initial_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_flames_initial_SpellScript();
- }
-};
-
-// 64562 - Summon Flames Spread Trigger
-class spell_mimiron_summon_flames_spread : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_flames_spread() : SpellScriptLoader("spell_mimiron_summon_flames_spread") { }
-
- class spell_mimiron_summon_flames_spread_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_flames_spread_SpellScript);
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = targets.front();
-
- for (std::list<WorldObject*>::const_iterator iter = targets.begin(); iter != targets.end(); iter++)
- if (GetCaster()->GetDistance2d(*iter) < GetCaster()->GetDistance2d(target))
- target = *iter;
-
- targets.clear();
- targets.push_back(target);
- }
-
- void OnHit(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->SetInFront(GetHitUnit());
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_flames_spread_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_flames_spread_SpellScript::OnHit, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_flames_spread_SpellScript();
- }
-
- class spell_mimiron_summon_flames_spread_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_summon_flames_spread_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FLAMES_SPREAD))
- return false;
- return true;
- }
-
- void HandleTick(AuraEffect const* /*aurEff*/)
- {
- PreventDefaultAction();
- if (Unit* caster = GetCaster())
- if (caster->HasAura(SPELL_FLAMES_PERIODIC_TRIGGER))
- caster->CastSpell(GetTarget(), SPELL_SUMMON_FLAMES_SPREAD, true);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_summon_flames_spread_AuraScript::HandleTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_summon_flames_spread_AuraScript();
- }
-};
-
-// 64627 - Frost Bomb
-class spell_mimiron_summon_frost_bomb : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_frost_bomb() : SpellScriptLoader("spell_mimiron_summon_frost_bomb") { }
-
- class spell_mimiron_summon_frost_bomb_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_frost_bomb_SpellScript);
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->RemoveAurasDueToSpell(SPELL_FLAMES_PERIODIC_TRIGGER);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_frost_bomb_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_frost_bomb_SpellScript();
- }
-};
-
-// 64623 - Frost Bomb
-class spell_mimiron_summon_frost_bomb_target : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_frost_bomb_target() : SpellScriptLoader("spell_mimiron_summon_frost_bomb_target") { }
-
- class spell_mimiron_summon_frost_bomb_target_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_frost_bomb_target_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_FROST_BOMB))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
-
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleScript(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetHitUnit(), SPELL_SUMMON_FROST_BOMB, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_frost_bomb_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_frost_bomb_target_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_frost_bomb_target_SpellScript();
- }
-};
-
-// 64398 - Summon Scrap Bot
-class spell_mimiron_summon_junk_bot : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_junk_bot() : SpellScriptLoader("spell_mimiron_summon_junk_bot") { }
-
- class spell_mimiron_summon_junk_bot_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_summon_junk_bot_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_JUNK_BOT))
- return false;
- return true;
- }
-
- void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (Unit* caster = GetCaster())
- if (InstanceScript* instance = caster->GetInstanceScript())
- if (instance->GetBossState(BOSS_MIMIRON) == IN_PROGRESS)
- caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, false, NULL, aurEff, instance->GetData64(DATA_AERIAL_COMMAND_UNIT));
- }
-
- void Register() override
- {
- OnEffectRemove += AuraEffectRemoveFn(spell_mimiron_summon_junk_bot_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_summon_junk_bot_AuraScript();
- }
-};
-
-// 63820 - Summon Scrap Bot Trigger
-class spell_mimiron_summon_junk_bot_target : public SpellScriptLoader
-{
- public:
- spell_mimiron_summon_junk_bot_target() : SpellScriptLoader("spell_mimiron_summon_junk_bot_target") { }
-
- class spell_mimiron_summon_junk_bot_target_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_mimiron_summon_junk_bot_target_SpellScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- if (!sSpellMgr->GetSpellInfo(SPELL_SUMMON_JUNK_BOT_DUMMY))
- return false;
- return true;
- }
-
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
-
- targets.clear();
- targets.push_back(target);
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetHitUnit()->CastSpell(GetHitUnit(), SPELL_SUMMON_JUNK_BOT_DUMMY, true);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mimiron_summon_junk_bot_target_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY);
- OnEffectHitTarget += SpellEffectFn(spell_mimiron_summon_junk_bot_target_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_mimiron_summon_junk_bot_target_SpellScript();
- }
-};
-
-// 63339 - Weld
-class spell_mimiron_weld : public SpellScriptLoader
-{
- public:
- spell_mimiron_weld() : SpellScriptLoader("spell_mimiron_weld") { }
-
- class spell_mimiron_weld_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_mimiron_weld_AuraScript);
-
- void HandleTick(AuraEffect const* aurEff)
- {
- Unit* caster = GetTarget();
- if (Unit* vehicle = caster->GetVehicleBase())
- {
- if (aurEff->GetTickNumber() % 5 == 0)
- caster->CastSpell(vehicle, repairSpells[urand(0, 3)]);
- caster->SetFacingToObject(vehicle);
- }
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_mimiron_weld_AuraScript::HandleTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_mimiron_weld_AuraScript();
- }
-};
-
-class achievement_setup_boom : public AchievementCriteriaScript
-{
- public:
- achievement_setup_boom() : AchievementCriteriaScript("achievement_setup_boom") { }
-
- bool OnCheck(Player* /*source*/, Unit* target)
- {
- return target && target->GetAI()->GetData(DATA_SETUP_BOMB);
- }
-};
-
-class achievement_setup_mine : public AchievementCriteriaScript
-{
- public:
- achievement_setup_mine() : AchievementCriteriaScript("achievement_setup_mine") { }
-
- bool OnCheck(Player* /*source*/, Unit* target)
- {
- return target && target->GetAI()->GetData(DATA_SETUP_MINE);
- }
-};
-
-class achievement_setup_rocket : public AchievementCriteriaScript
-{
- public:
- achievement_setup_rocket() : AchievementCriteriaScript("achievement_setup_rocket") { }
-
- bool OnCheck(Player* /*source*/, Unit* target)
- {
- return target && target->GetAI()->GetData(DATA_SETUP_ROCKET);
- }
-};
-
-class achievement_firefighter : public AchievementCriteriaScript
-{
- public:
- achievement_firefighter() : AchievementCriteriaScript("achievement_firefighter") { }
-
- bool OnCheck(Player* /*source*/, Unit* target)
- {
- return target && target->GetAI()->GetData(DATA_FIREFIGHTER);
+ return new spell_ulduar_proximity_minesSpellScript();
}
};
void AddSC_boss_mimiron()
{
- new boss_aerial_command_unit();
- new boss_leviathan_mk_ii();
- new boss_mimiron();
- new boss_vx_001();
-
- new npc_magnetic_core();
- new npc_mimiron_assault_bot();
- new npc_mimiron_emergency_fire_bot();
- new npc_mimiron_computer();
- new npc_mimiron_flames();
- new npc_mimiron_frost_bomb();
- new npc_mimiron_proximity_mine();
-
- new go_mimiron_hardmode_button();
-
- new spell_mimiron_bomb_bot();
- new spell_mimiron_clear_fires();
- new spell_mimiron_despawn_assault_bots();
- new spell_mimiron_fire_search();
- new spell_mimiron_flame_suppressant();
- new spell_mimiron_frost_bomb_explosion();
- new spell_mimiron_magnetic_core();
- new spell_mimiron_napalm_shell();
- new spell_mimiron_p3wx2_laser_barrage();
- new spell_mimiron_plasma_blast();
- new spell_mimiron_proximity_explosion();
- new spell_mimiron_proximity_mines();
- new spell_mimiron_proximity_trigger();
- new spell_mimiron_rapid_burst();
- new spell_mimiron_rocket_strike();
- new spell_mimiron_rocket_strike_damage();
- new spell_mimiron_rocket_strike_target_select();
- new spell_mimiron_self_repair();
- new spell_mimiron_spinning_up();
- new spell_mimiron_summon_assault_bot();
- new spell_mimiron_summon_assault_bot_target();
- new spell_mimiron_summon_fire_bot();
- new spell_mimiron_summon_fire_bot_target();
- new spell_mimiron_summon_flames_initial();
- new spell_mimiron_summon_flames_spread();
- new spell_mimiron_summon_frost_bomb();
- new spell_mimiron_summon_frost_bomb_target();
- new spell_mimiron_summon_junk_bot();
- new spell_mimiron_summon_junk_bot_target();
- new spell_mimiron_weld();
-
- new achievement_setup_boom();
- new achievement_setup_mine();
- new achievement_setup_rocket();
- new achievement_firefighter();
+ new spell_ulduar_proximity_mines();
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index 257518d998b..6437a76ee95 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -32,9 +32,6 @@ static DoorData const doorData[] =
{ GO_HODIR_ENTRANCE, BOSS_HODIR, DOOR_TYPE_ROOM, BOUNDARY_E },
{ GO_HODIR_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_NONE },
{ GO_HODIR_ICE_DOOR, BOSS_HODIR, DOOR_TYPE_PASSAGE, BOUNDARY_W },
- { GO_MIMIRON_DOOR_1, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_W },
- { GO_MIMIRON_DOOR_2, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_E },
- { GO_MIMIRON_DOOR_3, BOSS_MIMIRON, DOOR_TYPE_ROOM, BOUNDARY_S },
{ GO_VEZAX_DOOR, BOSS_VEZAX, DOOR_TYPE_PASSAGE, BOUNDARY_E },
{ GO_YOGG_SARON_DOOR, BOSS_YOGG_SARON, DOOR_TYPE_ROOM, BOUNDARY_S },
{ GO_DOODAD_UL_SIGILDOOR_03, BOSS_ALGALON, DOOR_TYPE_ROOM, BOUNDARY_W },
@@ -73,14 +70,11 @@ class instance_ulduar : public InstanceMapScript
uint64 AssemblyGUIDs[3];
uint64 KologarnGUID;
uint64 AuriayaGUID;
+ uint64 MimironGUID;
uint64 HodirGUID;
uint64 ThorimGUID;
uint64 FreyaGUID;
uint64 ElderGUIDs[3];
- uint64 MimironGUID;
- uint64 MimironVehicleGUIDs[3];
- uint64 MimironComputerGUID;
- uint64 MimironWorldTriggerGUID;
uint64 VezaxGUID;
uint64 YoggSaronGUID;
uint64 VoiceOfYoggSaronGUID;
@@ -98,9 +92,6 @@ class instance_ulduar : public InstanceMapScript
uint64 ThorimChestGUID;
uint64 HodirRareCacheGUID;
uint64 HodirChestGUID;
- uint64 MimironTramGUID;
- uint64 MimironElevatorGUID;
- uint64 MimironButtonGUID;
uint64 BrainRoomDoorGUIDs[3];
uint64 AlgalonSigilDoorGUID[3];
uint64 AlgalonFloorGUID[2];
@@ -135,8 +126,6 @@ class instance_ulduar : public InstanceMapScript
KologarnGUID = 0;
AuriayaGUID = 0;
MimironGUID = 0;
- MimironComputerGUID = 0;
- MimironWorldTriggerGUID = 0;
HodirGUID = 0;
ThorimGUID = 0;
FreyaGUID = 0;
@@ -151,9 +140,6 @@ class instance_ulduar : public InstanceMapScript
ThorimChestGUID = 0;
HodirRareCacheGUID = 0;
HodirChestGUID = 0;
- MimironTramGUID = 0;
- MimironElevatorGUID = 0;
- MimironButtonGUID = 0;
LeviathanGateGUID = 0;
AlgalonUniverseGUID = 0;
AlgalonTrapdoorGUID = 0;
@@ -180,7 +166,6 @@ class instance_ulduar : public InstanceMapScript
memset(AssemblyGUIDs, 0, sizeof(AssemblyGUIDs));
memset(RazorHarpoonGUIDs, 0, sizeof(RazorHarpoonGUIDs));
memset(ElderGUIDs, 0, sizeof(ElderGUIDs));
- memset(MimironVehicleGUIDs, 0, sizeof(MimironVehicleGUIDs));
memset(BrainRoomDoorGUIDs, 0, sizeof(BrainRoomDoorGUIDs));
memset(KeeperGUIDs, 0, sizeof(KeeperGUIDs));
memset(_summonObservationRingKeeper, false, sizeof(_summonObservationRingKeeper));
@@ -304,6 +289,9 @@ class instance_ulduar : public InstanceMapScript
case NPC_AURIAYA:
AuriayaGUID = creature->GetGUID();
break;
+ case NPC_MIMIRON:
+ MimironGUID = creature->GetGUID();
+ break;
// Hodir
case NPC_HODIR:
@@ -366,28 +354,6 @@ class instance_ulduar : public InstanceMapScript
creature->DespawnOrUnsummon();
break;
- // Mimiron
- case NPC_MIMIRON:
- MimironGUID = creature->GetGUID();
- break;
- case NPC_LEVIATHAN_MKII:
- MimironVehicleGUIDs[0] = creature->GetGUID();
- if (GetBossState(BOSS_MIMIRON) == DONE)
- creature->DespawnOrUnsummon();
- break;
- case NPC_VX_001:
- MimironVehicleGUIDs[1] = creature->GetGUID();
- break;
- 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;
@@ -504,15 +470,6 @@ class instance_ulduar : public InstanceMapScript
case GO_HODIR_CHEST:
HodirChestGUID = gameObject->GetGUID();
break;
- 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)
@@ -525,9 +482,6 @@ class instance_ulduar : public InstanceMapScript
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);
@@ -612,9 +566,6 @@ class instance_ulduar : public InstanceMapScript
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:
@@ -823,10 +774,6 @@ class instance_ulduar : public InstanceMapScript
break;
case DATA_UNBROKEN:
Unbroken = bool(data);
- break;
- case DATA_MIMIRON_ELEVATOR:
- if (GameObject* gameObject = instance->GetGameObject(MimironElevatorGUID))
- gameObject->SetGoState((GOState)data);
break;
case DATA_ILLUSION:
illusion = data;
@@ -899,6 +846,8 @@ class instance_ulduar : public InstanceMapScript
return KologarnGUID;
case BOSS_AURIAYA:
return AuriayaGUID;
+ case BOSS_MIMIRON:
+ return MimironGUID;
case BOSS_HODIR:
return HodirGUID;
case BOSS_THORIM:
@@ -913,22 +862,6 @@ class instance_ulduar : public InstanceMapScript
return ElderGUIDs[1];
case BOSS_STONEBARK:
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_BUTTON:
- return MimironButtonGUID;
case BOSS_VEZAX:
return VezaxGUID;
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
index 1c9fa7575d0..3544ff3c079 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.h
@@ -83,18 +83,6 @@ enum UlduarNPCs
NPC_LEVIATHAN_MKII = 33432,
NPC_VX_001 = 33651,
NPC_AERIAL_COMMAND_UNIT = 33670,
- NPC_ASSAULT_BOT = 34057,
- NPC_BOMB_BOT = 33836,
- NPC_JUNK_BOT = 33855,
- NPC_EMERGENCY_FIRE_BOT = 34147,
- NPC_FROST_BOMB = 34149,
- NPC_BURST_TARGET = 34211,
- NPC_FLAME = 34363,
- NPC_FLAME_SPREAD = 34121,
- NPC_DB_TARGET = 33576,
- NPC_ROCKET_MIMIRON_VISUAL = 34050,
- NPC_WORLD_TRIGGER_MIMIRON = 21252,
- NPC_COMPUTER = 34143,
// Freya's Keepers
NPC_IRONBRANCH = 32913,
@@ -216,18 +204,6 @@ enum UlduarGameObjects
GO_THORIM_CHEST_HERO = 194315,
GO_THORIM_CHEST = 194314,
- // Mimiron
- GO_MIMIRON_TRAM = 194675,
- GO_MIMIRON_ELEVATOR = 194749,
- GO_MIMIRON_BUTTON = 194739,
- GO_MIMIRON_DOOR_1 = 194774,
- GO_MIMIRON_DOOR_2 = 194775,
- GO_MIMIRON_DOOR_3 = 194776,
- GO_CACHE_OF_INNOVATION = 194789,
- GO_CACHE_OF_INNOVATION_FIREFIGHTER = 194957,
- GO_CACHE_OF_INNOVATION_HERO = 194956,
- GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO = 194958,
-
// Vezax
GO_VEZAX_DOOR = 194750,
@@ -316,16 +292,6 @@ enum UlduarData
// Hodir
DATA_HODIR_RARE_CACHE,
- // Mimiron
- DATA_LEVIATHAN_MK_II,
- DATA_VX_001,
- DATA_AERIAL_COMMAND_UNIT,
- DATA_COMPUTER,
- DATA_MIMIRON_WORLD_TRIGGER,
- DATA_MIMIRON_ELEVATOR,
- DATA_MIMIRON_TRAM,
- DATA_MIMIRON_BUTTON,
-
// Yogg-Saron
DATA_VOICE_OF_YOGG_SARON,
DATA_SARA,