TrinityCore
Loading...
Searching...
No Matches
boss_mimiron.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ScriptMgr.h"
19#include "Containers.h"
20#include "GameObject.h"
21#include "GameObjectAI.h"
22#include "GridNotifiers.h"
23#include "InstanceScript.h"
24#include "Map.h"
25#include "MotionMaster.h"
26#include "ObjectAccessor.h"
27#include "ScriptedCreature.h"
28#include "SpellAuraEffects.h"
29#include "SpellScript.h"
30#include "TemporarySummon.h"
31#include "ulduar.h"
32#include "Vehicle.h"
33
52
69
71{
72 // Mimiron
73 SPELL_WELD = 63339, // Idle aura.
74 SPELL_SEAT_1 = 52391, // Cast on all vehicles, Cycled on MKII
75 SPELL_SEAT_2 = 63313, // Cast on MKII and VX-001, Cycled on MKII
76 SPELL_SEAT_3 = 63314, // Cast on MKII, Cycled on MKII
77 SPELL_SEAT_5 = 63316, // Cast on MKII and VX-001, Cycled on MKII
78 SPELL_SEAT_6 = 63344, // Cast on MKII
79 SPELL_SEAT_7 = 63345, // Cast on MKII
81 SPELL_DESPAWN_ASSAULT_BOTS = 64463, // only despawns assault bots... no equivalent spell for the other adds...
85
86 // Leviathan MK II
93 SPELL_SHOCK_BLAST_AURA = 63632, // Deprecated? It is never cast.
94
95 // VX-001
103
104 // Aerial Command Unit
108
109 // Proximity Mines
110 SPELL_PROXIMITY_MINES = 63027, // Cast by Leviathan MK II
116
117 // Rapid Burst
120 SPELL_RAPID_BURST = 63382, // Cast by VX-001
121 SPELL_RAPID_BURST_TARGET_ME = 64841, // Cast by Burst Target
122 SPELL_SUMMON_BURST_TARGET = 64840, // Cast by VX-001
123
124 // Rocket Strike
126 SPELL_SCRIPT_EFFECT_ROCKET_STRIKE = 63681, // Cast by Rocket (Mimiron Visual)
127 SPELL_ROCKET_STRIKE = 64064, // Added in creature_template_addon
128 SPELL_ROCKET_STRIKE_SINGLE = 64402, // Cast by VX-001
129 SPELL_ROCKET_STRIKE_BOTH = 65034, // Cast by VX-001
130
131 // Flames
132 SPELL_FLAMES_PERIODIC_TRIGGER = 64561, // Added in creature_template_addon
138
139 // Frost Bomb
140 SPELL_SCRIPT_EFFECT_FROST_BOMB = 64623, // Cast by VX-001
141 SPELL_FROST_BOMB_LINKED = 64624, // Added in creature_template_addon
143 SPELL_SUMMON_FROST_BOMB = 64627, // Cast by VX-001
146
147 // Bots
150 SPELL_SUMMON_FIRE_BOT_TRIGGER = 64620, // Cast by Areal Command Unit
151 SPELL_DEAFENING_SIREN = 64616, // Added in creature_template_addon
152 SPELL_FIRE_SEARCH_AURA = 64617, // Added in creature_template_addon
155
157 SPELL_SUMMON_JUNK_BOT_TRIGGER = 63820, // Cast by Areal Command Unit
159
160 SPELL_SUMMON_ASSAULT_BOT_TRIGGER = 64425, // Cast by Areal Command Unit
164
165 SPELL_SUMMON_BOMB_BOT = 63811, // Cast by Areal Command Unit
166 SPELL_BOMB_BOT_AURA = 63767, // Added in creature_template_addon
167
168 // Miscellaneous
172 SPELL_ELEVATOR_KNOCKBACK = 65096, // Cast by worldtrigger.
174 SPELL_EMERGENCY_MODE = 64582, // mkii, vx001, aerial, assault, junk
175 SPELL_EMERGENCY_MODE_TURRET = 65101, // Cast by Leviathan MK II, only hits Leviathan MK II turret
181 SPELL_FREEZE_ANIM_STUN = 63354, // used to prevent mkii from doing stuff?..
182 SPELL_FREEZE_ANIM = 16245 // Idle aura. Freezes animation.
184
195
197{
198 // Leviathan MK II
207
208 // VX-001
216
217 // Aerial Command Unit
222
223 // Mimiron
228
238
245
253
257
258 // Computer
270
271 // Misc
281
308
316
327
334
336{
341};
342
344{
345 { 0.0f, 0.0f, 0.0f},
346 { 2792.070f, 2596.320f, 364.3136f }, // WP_MKII_P1_IDLE
347 { 2765.945f, 2571.095f, 364.0636f }, // WP_MKII_P4_POS_1
348 { 2768.195f, 2573.095f, 364.0636f }, // WP_MKII_P4_POS_2
349 { 2763.820f, 2568.870f, 364.3136f }, // WP_MKII_P4_POS_3
350 { 2761.215f, 2568.875f, 364.0636f }, // WP_MKII_P4_POS_4
351 { 2744.610f, 2569.380f, 364.3136f }, // WP_MKII_P4_POS_5
352 { 2744.62f, 2569.41f, 382.0f, 3.054326f } // WP_AERIAL_P4_POS
353};
354
355Position const VX001SummonPos = { 2744.431f, 2569.385f, 364.3968f, 3.141593f };
356Position const ACUSummonPos = { 2744.650f, 2569.460f, 380.0000f, 3.141593f };
357
358static bool IsEncounterFinished(Unit* who)
359{
360 InstanceScript* instance = who->GetInstanceScript();
361
365 if (!mkii || !vx001 || !aerial)
366 return false;
367
368 if (mkii->GetStandState() == UNIT_STAND_STATE_DEAD &&
371 {
372 Unit::Kill(who, mkii);
373 Unit::Kill(who, vx001);
374 Unit::Kill(who, aerial);
375 mkii->DespawnOrUnsummon(120s);
376 vx001->DespawnOrUnsummon(120s);
377 aerial->DespawnOrUnsummon(120s);
378 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
379 mimiron->AI()->JustDied(who);
380 return true;
381 }
382 return false;
383}
384
386{
387 public:
388 boss_mimiron() : CreatureScript("boss_mimiron") { }
389
390 struct boss_mimironAI : public BossAI
391 {
393 {
395 _fireFighter = false;
396 }
397
398 void DoAction(int32 action) override
399 {
400 switch (action)
401 {
404 break;
407 break;
411 mkii->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_1, VehicleRelocation[WP_MKII_P4_POS_1]);
412 break;
415 break;
417 _fireFighter = true;
419 break;
420 default:
421 break;
422 }
423 }
424
442
443 void JustDied(Unit* /*killer*/) override
444 {
446 events.Reset();
447 me->CombatStop(true);
448 me->SetDisableGravity(false);
451 me->ExitVehicle();
452 // ExitVehicle() offset position is not implemented, so we make up for that with MoveJump()...
453 me->GetMotionMaster()->MoveJump(me->GetPositionX() + (10.f * std::cos(me->GetOrientation())), me->GetPositionY() + (10.f * std::sin(me->GetOrientation())), me->GetPositionZ(), me->GetOrientation(), 10.f, 5.f);
455 }
456
457 void Reset() override
458 {
459 if (instance->GetBossState(DATA_MIMIRON) == DONE) // Mimiron will attempt to reset because he is not dead and will be set to friendly before despawning.
460 return;
461
463 aerial->AI()->EnterEvadeMode();
464
465 _Reset();
467
469 elevator->SetGoState(GO_STATE_ACTIVE);
470
471 if (_fireFighter)
472 if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
473 computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
474
476 {
477 button->SetGoState(GO_STATE_READY);
478 button->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
479 }
480
481 _fireFighter = false;
483
485 DoCast(mkii, SPELL_SEAT_3);
486 }
487
488 void UpdateAI(uint32 diff) override
489 {
491 return;
492
493 events.Update(diff);
494
496 return;
497
498 while (uint32 eventId = events.ExecuteEvent())
499 {
500 switch (eventId)
501 {
506 break;
507 case EVENT_INTRO_1:
510 break;
511 case EVENT_INTRO_2:
512 if (Unit* mkii = me->GetVehicleBase())
513 {
514 DoCast(mkii, SPELL_SEAT_7);
515 mkii->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM);
517 }
519 break;
520 case EVENT_INTRO_3:
521 if (Creature* mkii = me->GetVehicleCreatureBase())
522 mkii->AI()->DoAction(_fireFighter ? DO_HARDMODE_MKII : DO_START_MKII);
523 break;
525 if (Unit* mkii = me->GetVehicleBase())
526 mkii->SetFacingTo(3.686f); // fix magic number
528 break;
530 if (Unit* mkii = me->GetVehicleBase())
531 DoCast(mkii, SPELL_SEAT_6);
533 break;
537 break;
540 elevator->SetGoState(GO_STATE_READY);
542 worldtrigger->CastSpell(worldtrigger, SPELL_ELEVATOR_KNOCKBACK);
544 break;
547 elevator->SetGoState(GO_STATE_DESTROYED);
549 vx001->CastSpell(vx001, SPELL_FREEZE_ANIM);
551 break;
554 DoCast(vx001, SPELL_SEAT_1);
556 break;
560 break;
562 if (Unit* vx001 = me->GetVehicleBase())
563 DoCast(vx001, SPELL_SEAT_2);
565 break;
567 if (Creature* vx001 = me->GetVehicleCreatureBase())
568 vx001->AI()->DoAction(_fireFighter ? DO_HARDMODE_VX001 : DO_START_VX001);
569 break;
571 if (Unit* mkii = me->GetVehicleBase())
572 DoCast(mkii, SPELL_SEAT_5);
574 break;
578 break;
582 break;
585 me->CastSpell(aerial, SPELL_SEAT_1);
587 break;
591 break;
593 if (Creature* acu = me->GetVehicleCreatureBase())
594 acu->AI()->DoAction(_fireFighter? DO_HARDMODE_AERIAL : DO_START_AERIAL);
595 break;
598 mkii->SetFacingTo(float(M_PI));
600 break;
603 {
605 {
606 vx001->RemoveAurasDueToSpell(SPELL_TORSO_DISABLED);
607 vx001->CastSpell(mkii, SPELL_MOUNT_MKII);
608 }
609 }
611 break;
614 mkii->GetMotionMaster()->MovePoint(WP_MKII_P4_POS_4, VehicleRelocation[WP_MKII_P4_POS_4]);
616 break;
619 {
621 {
622 aerial->CastSpell(vx001, SPELL_MOUNT_VX_001);
623 aerial->CastSpell(aerial, SPELL_HALF_HEAL);
624 }
625 }
627 break;
631 break;
634 DoCast(vx001, SPELL_SEAT_2);
636 break;
638 for (uint8 data = DATA_LEVIATHAN_MK_II; data <= DATA_AERIAL_COMMAND_UNIT; ++data)
639 if (Creature* mimironVehicle = ObjectAccessor::GetCreature(*me, instance->GetGuidData(data)))
640 mimironVehicle->AI()->DoAction(DO_ASSEMBLED_COMBAT);
641 break;
642 case EVENT_OUTTRO_1:
647 break;
648 case EVENT_OUTTRO_2:
650 if (_fireFighter)
651 {
652 if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
653 computer->AI()->DoAction(DO_DEACTIVATE_COMPUTER);
654 me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION_FIREFIGHTER, GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO), 2744.040f, 2569.352f, 364.3135f, 3.124123f, QuaternionData(0.f, 0.f, 0.9999619f, 0.008734641f), 420_days);
655 }
656 else
657 me->SummonGameObject(RAID_MODE(GO_CACHE_OF_INNOVATION, GO_CACHE_OF_INNOVATION_HERO), 2744.040f, 2569.352f, 364.3135f, 3.124123f, QuaternionData(0.f, 0.f, 0.9999619f, 0.008734641f), 420_days);
659 break;
660 case EVENT_OUTTRO_3:
663 me->DespawnOrUnsummon(1s); // sniffs say 6 sec after, but it doesnt matter.
664 break;
665 default:
666 break;
667 }
668
670 return;
671 }
672 }
673
674 private:
676 };
677
678 CreatureAI* GetAI(Creature* creature) const override
679 {
680 return GetUlduarAI<boss_mimironAI>(creature);
681 }
682};
683
685{
686 public:
687 boss_leviathan_mk_ii() : CreatureScript("boss_leviathan_mk_ii") { }
688
690 {
692 {
693 _fireFighter = false;
694 _setupMine = true;
695 _setupBomb = true;
696 _setupRocket = true;
697 }
698
699 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
700 {
701 if (damage >= me->GetHealth())
702 {
703 damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
706 me->AttackStop();
709
711 {
712 me->CastStop();
714 turret->KillSelf();
715
716 me->SetSpeedRate(MOVE_RUN, 1.5f);
718 }
720 {
722
723 Unit* ref = who ? who : me;
724 if (IsEncounterFinished(ref))
725 return;
726
727 me->CastStop();
729 }
730 events.Reset();
731 }
732 }
733
766
767 uint32 GetData(uint32 type) const override
768 {
769 switch (type)
770 {
771 case DATA_SETUP_MINE:
772 return _setupMine;
773 case DATA_SETUP_BOMB:
774 return _setupBomb;
776 return _setupRocket;
777 case DATA_FIREFIGHTER:
778 return _fireFighter;
779 default:
780 return 0;
781 }
782 }
783
784 void JustSummoned(Creature* summon) override
785 {
786 summons.Summon(summon);
787 }
788
789 void KilledUnit(Unit* victim) override
790 {
791 if (victim->GetTypeId() == TYPEID_PLAYER)
792 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
794 }
795
796 void MovementInform(uint32 type, uint32 point) override
797 {
798 if (type != POINT_MOTION_TYPE)
799 return;
800
801 switch (point)
802 {
803 case WP_MKII_P1_IDLE:
806
807 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
808 mimiron->AI()->DoAction(DO_ACTIVATE_VX001);
809 break;
810 case WP_MKII_P4_POS_1:
812 break;
813 case WP_MKII_P4_POS_2:
815 break;
816 case WP_MKII_P4_POS_3:
817 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
818 mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_2);
819 break;
820 case WP_MKII_P4_POS_4:
822 break;
823 default:
824 break;
825 }
826 }
827
828 void Reset() override
829 {
830 _Reset();
833 _fireFighter = false;
834 _setupMine = true;
835 _setupBomb = true;
836 _setupRocket = true;
838 }
839
840 void SetData(uint32 id, uint32 data) override
841 {
842 switch (id)
843 {
844 case DATA_SETUP_MINE:
845 _setupMine = data != 0;
846 break;
847 case DATA_SETUP_BOMB:
848 _setupBomb = data != 0;
849 break;
851 _setupRocket = data != 0;
852 break;
853 default:
854 break;
855 }
856 }
857
858 void UpdateAI(uint32 diff) override
859 {
860 if (!UpdateVictim())
861 return;
862
863 events.Update(diff);
864
866 return;
867
868 while (uint32 eventId = events.ExecuteEvent())
869 {
870 switch (eventId)
871 {
875 break;
879
881 events.RescheduleEvent(EVENT_NAPALM_SHELL, 9s, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself.
882 break;
886 break;
890 break;
894
896 events.RescheduleEvent(EVENT_PLASMA_BLAST, 2s, 0, PHASE_LEVIATHAN_MK_II); // The actual spell is cast by the turret, we should not let it interrupt itself.
897 break;
900 break;
903 break;
906 break;
907 default:
908 break;
909 }
910
912 return;
913 }
915 }
916
917 private:
922 };
923
924 CreatureAI* GetAI(Creature* creature) const override
925 {
926 return GetUlduarAI<boss_leviathan_mk_iiAI>(creature);
927 }
928};
929
931{
932 public:
933 boss_vx_001() : CreatureScript("boss_vx_001") { }
934
935 struct boss_vx_001AI : public BossAI
936 {
938 {
939 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.
940 me->SetEmoteState(EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state.
942 _fireFighter = false;
944 }
945
946 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
947 {
948 if (damage >= me->GetHealth())
949 {
950 damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
951 me->AttackStop();
954
956 {
957 me->CastStop();
958 me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_UNINTERACTIBLE);
959 DoCast(me, SPELL_HALF_HEAL); // has no effect, wat
961 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
962 mimiron->AI()->DoAction(DO_ACTIVATE_AERIAL);
963 }
965 {
968
969 Unit* ref = who ? who : me;
970 if (IsEncounterFinished(ref))
971 return;
972
973 me->CastStop();
975 }
976 events.Reset();
977 }
978 }
979
980 void DoAction(int32 action) override
981 {
982 switch (action)
983 {
985 _fireFighter = true;
989 [[fallthrough]];
990 case DO_START_VX001:
992 me->SetImmuneToPC(false);
994 me->SetEmoteState(EMOTE_ONESHOT_NONE); // Remove emotestate.
995 //me->SetHover(true); // Blizzard handles hover animation like this it seems.
997
1002 break;
1006
1011 if (_fireFighter)
1013 break;
1014 default:
1015 break;
1016 }
1017 }
1018
1019 void EnterEvadeMode(EvadeReason /*why*/) override
1020 {
1022 }
1023
1024 void JustSummoned(Creature* summon) override
1025 {
1026 summons.Summon(summon);
1027 if (summon->GetEntry() == NPC_BURST_TARGET)
1029 }
1030
1031 void KilledUnit(Unit* victim) override
1032 {
1033 if (victim->GetTypeId() == TYPEID_PLAYER)
1034 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
1036 }
1037
1038 void SpellHit(WorldObject* caster, SpellInfo const* /*spellInfo*/) override
1039 {
1041 DoCast(caster->ToUnit(), SPELL_RAPID_BURST);
1042 }
1043
1044 void UpdateAI(uint32 diff) override
1045 {
1046 if (!UpdateVictim())
1047 return;
1048
1049 events.Update(diff);
1050
1051 // Handle rotation during SPELL_SPINNING_UP, SPELL_P3WX2_LASER_BARRAGE, SPELL_RAPID_BURST, and SPELL_HAND_PULSE_LEFT/RIGHT
1053 {
1055 me->SetFacingToObject(channelTarget);
1056 return;
1057 }
1058
1059 while (uint32 eventId = events.ExecuteEvent())
1060 {
1061 switch (eventId)
1062 {
1063 case EVENT_RAPID_BURST:
1064 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 120, true))
1067 break;
1072 break;
1073 case EVENT_RELOAD:
1074 for (int8 seat = ROCKET_SEAT_LEFT; seat <= ROCKET_SEAT_RIGHT; ++seat)
1075 if (Unit* rocket = me->GetVehicleKit()->GetPassenger(seat))
1076 rocket->SetDisplayId(rocket->GetNativeDisplayId());
1077 break;
1078 case EVENT_HAND_PULSE:
1079 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 120, true))
1082 break;
1083 case EVENT_FROST_BOMB:
1086 break;
1087 case EVENT_SPINNING_UP:
1089 events.DelayEvents(14s);
1091 break;
1095 break;
1096 default:
1097 break;
1098 }
1099
1101 return;
1102 }
1103 }
1104
1105 private:
1107 };
1108
1109 CreatureAI* GetAI(Creature* creature) const override
1110 {
1111 return GetUlduarAI<boss_vx_001AI>(creature);
1112 }
1113};
1114
1116{
1117 public:
1118 boss_aerial_command_unit() : CreatureScript("boss_aerial_command_unit") { }
1119
1121 {
1123 {
1125 me->SetDisableGravity(true);
1126 fireFigther = false;
1127 }
1128
1129 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
1130 {
1131 if (damage >= me->GetHealth())
1132 {
1133 damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth().
1135 me->AttackStop();
1136 me->SetDisableGravity(true);
1138
1140
1142 {
1143 me->GetMotionMaster()->Clear();
1145 }
1146 else if (events.IsInPhase(PHASE_VOL7RON))
1147 {
1149
1150 Unit* ref = who ? who : me;
1151 if (IsEncounterFinished(ref))
1152 return;
1153
1154 me->CastStop();
1156 }
1157 events.Reset();
1158 }
1159 }
1160
1202
1203 void EnterEvadeMode(EvadeReason /*why*/) override
1204 {
1206 }
1207
1208 void JustSummoned(Creature* summon) override
1209 {
1210 if (fireFigther && (summon->GetEntry() == NPC_ASSAULT_BOT || summon->GetEntry() == NPC_JUNK_BOT))
1211 summon->CastSpell(summon, SPELL_EMERGENCY_MODE);
1212 BossAI::JustSummoned(summon);
1213 }
1214
1215 void KilledUnit(Unit* victim) override
1216 {
1217 if (victim->GetTypeId() == TYPEID_PLAYER)
1218 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
1220 }
1221
1222 void MovementInform(uint32 type, uint32 point) override
1223 {
1224 if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS)
1225 {
1229
1230 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
1231 mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1);
1232 }
1233 }
1234
1274
1275 private:
1277 };
1278
1279 CreatureAI* GetAI(Creature* creature) const override
1280 {
1281 return GetUlduarAI<boss_aerial_command_unitAI>(creature);
1282 }
1283};
1284
1286{
1287 public:
1288 npc_mimiron_assault_bot() : CreatureScript("npc_mimiron_assault_bot") { }
1289
1291 {
1293 {
1294 }
1295
1296 void JustEngagedWith(Unit* /*who*/) override
1297 {
1299 }
1300
1301 void UpdateAI(uint32 diff) override
1302 {
1303 if (!UpdateVictim())
1304 return;
1305
1306 events.Update(diff);
1307
1309 {
1310 if (Unit* newTarget = SelectTarget(SelectTargetMethod::MinDistance, 0, 30.0f, true))
1311 {
1313 AttackStart(newTarget);
1314 }
1315 }
1316
1317 while (uint32 eventId = events.ExecuteEvent())
1318 {
1319 switch (eventId)
1320 {
1324 break;
1325 default:
1326 break;
1327 }
1328 }
1329
1331 }
1332
1333 private:
1335 };
1336
1337 CreatureAI* GetAI(Creature* creature) const override
1338 {
1339 return GetUlduarAI<npc_mimiron_assault_botAI>(creature);
1340 }
1341};
1342
1344{
1345 public:
1346 npc_mimiron_emergency_fire_bot() : CreatureScript("npc_mimiron_emergency_fire_bot") { }
1347
1349 {
1351 {
1353 isWaterSprayReady = true;
1354 moveNew = true;
1355 }
1356
1357 uint32 GetData(uint32 id) const override
1358 {
1359 if (id == DATA_WATERSPRAY)
1360 return isWaterSprayReady;
1361 if (id == DATA_MOVE_NEW)
1362 return moveNew;
1363 return 0;
1364 }
1365
1366 void SetData(uint32 id, uint32 data) override
1367 {
1368 if (id == DATA_WATERSPRAY)
1369 isWaterSprayReady = false;
1370 else if (id == DATA_MOVE_NEW)
1371 moveNew = data ? true : false;
1372 }
1373
1374 void Reset() override
1375 {
1377 isWaterSprayReady = true;
1378 moveNew = true;
1379 }
1380
1381 void UpdateAI(uint32 diff) override
1382 {
1383 if (!isWaterSprayReady)
1384 events.Update(diff);
1385
1386 while (uint32 eventId = events.ExecuteEvent())
1387 {
1388 switch (eventId)
1389 {
1390 case EVENT_WATER_SPRAY:
1391 isWaterSprayReady = true;
1393 break;
1394 default:
1395 break;
1396 }
1397 }
1398 }
1399
1400 private:
1404 };
1405
1406 CreatureAI* GetAI(Creature* creature) const override
1407 {
1408 return GetUlduarAI<npc_mimiron_emergency_fire_botAI>(creature);
1409 }
1410};
1411
1413{
1414 public:
1415 npc_mimiron_computer() : CreatureScript("npc_mimiron_computer") { }
1416
1418 {
1424
1425 void DoAction(int32 action) override
1426 {
1427 switch (action)
1428 {
1432 break;
1437 events.Reset();
1438 break;
1439 default:
1440 break;
1441 }
1442 }
1443
1444 void UpdateAI(uint32 diff) override
1445 {
1446 events.Update(diff);
1447
1448 while (uint32 eventId = events.ExecuteEvent())
1449 {
1450 switch (eventId)
1451 {
1454 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
1455 mimiron->AI()->DoAction(DO_ACTIVATE_HARD_MODE);
1457 break;
1461 break;
1465 break;
1469 break;
1473 break;
1477 break;
1481 break;
1485 break;
1489 break;
1493 break;
1496 if (Creature* mimiron = instance->GetCreature(DATA_MIMIRON))
1497 mimiron->AI()->DoAction(DO_ACTIVATE_SELF_DESTRUCT);
1500 break;
1501 default:
1502 break;
1503 }
1504 }
1505 }
1506
1507 private:
1510 };
1511
1512 CreatureAI* GetAI(Creature* creature) const override
1513 {
1514 return GetUlduarAI<npc_mimiron_computerAI>(creature);
1515 }
1516};
1517
1519{
1520 public:
1521 npc_mimiron_flames() : CreatureScript("npc_mimiron_flames") { }
1522
1524 {
1526 {
1528 }
1529
1530 void Reset() override // Reset is possibly more suitable for this case.
1531 {
1533 }
1534
1535 void UpdateAI(uint32 diff) override
1536 {
1539
1540 events.Update(diff);
1541
1542 while (uint32 eventId = events.ExecuteEvent())
1543 {
1544 switch (eventId)
1545 {
1548 break;
1549 default:
1550 break;
1551 }
1552 }
1553 }
1554
1555 private:
1558 };
1559
1560 CreatureAI* GetAI(Creature* creature) const override
1561 {
1562 return GetUlduarAI<npc_mimiron_flamesAI>(creature);
1563 }
1564};
1565
1567{
1568 public:
1569 npc_mimiron_frost_bomb() : CreatureScript("npc_mimiron_frost_bomb") { }
1570
1572 {
1574 {
1575 }
1576
1577 void Reset() override
1578 {
1580 }
1581
1582 void UpdateAI(uint32 diff) override
1583 {
1584 events.Update(diff);
1585
1586 while (uint32 eventId = events.ExecuteEvent())
1587 {
1588 switch (eventId)
1589 {
1593 break;
1596 me->DespawnOrUnsummon(3s);
1597 break;
1598 default:
1599 break;
1600 }
1601 }
1602 }
1603
1604 private:
1606 };
1607
1608 CreatureAI* GetAI(Creature* creature) const override
1609 {
1610 return GetUlduarAI<npc_mimiron_frost_bombAI>(creature);
1611 }
1612};
1613
1615{
1616 public:
1617 npc_mimiron_proximity_mine() : CreatureScript("npc_mimiron_proximity_mine") { }
1618
1620 {
1622 {
1623 }
1624
1625 void Reset() override
1626 {
1628 }
1629
1630 void UpdateAI(uint32 diff) override
1631 {
1632 events.Update(diff);
1633
1634 while (uint32 eventId = events.ExecuteEvent())
1635 {
1636 switch (eventId)
1637 {
1641 break;
1645 me->DespawnOrUnsummon(1s);
1646 break;
1647 default:
1648 break;
1649 }
1650 }
1651 }
1652
1653 private:
1655 };
1656
1657 CreatureAI* GetAI(Creature* creature) const override
1658 {
1659 return GetUlduarAI<npc_mimiron_proximity_mineAI>(creature);
1660 }
1661};
1662
1664{
1666
1667 void Reset() override
1668 {
1671 }
1672};
1673
1675{
1676 public:
1677 go_mimiron_hardmode_button() : GameObjectScript("go_mimiron_hardmode_button") { }
1678
1680 {
1681 go_mimiron_hardmode_buttonAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
1682
1684
1685 bool OnGossipHello(Player* /*player*/) override
1686 {
1688 return true;
1689
1690 if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
1691 computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
1692
1695 return true;
1696 }
1697 };
1698
1699 GameObjectAI* GetAI(GameObject* go) const override
1700 {
1701 return GetUlduarAI<go_mimiron_hardmode_buttonAI>(go);
1702 }
1703};
1704
1705// 63801 - Bomb Bot
1707{
1708 public:
1709 spell_mimiron_bomb_bot() : SpellScriptLoader("spell_mimiron_bomb_bot") { }
1710
1712 {
1714
1715 void HandleScript(SpellEffIndex /*effIndex*/)
1716 {
1717 if (GetHitPlayer())
1718 if (InstanceScript* instance = GetCaster()->GetInstanceScript())
1719 if (Creature* mkii = ObjectAccessor::GetCreature(*GetCaster(), instance->GetGuidData(DATA_LEVIATHAN_MK_II)))
1720 mkii->AI()->SetData(DATA_SETUP_BOMB, 0);
1721 }
1722
1723 void HandleDespawn(SpellEffIndex /*effIndex*/)
1724 {
1725 if (Creature* target = GetHitCreature())
1726 {
1727 target->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE | UNIT_FLAG_PACIFIED);
1728 target->DespawnOrUnsummon(1s);
1729 }
1730 }
1731
1737 };
1738
1739 SpellScript* GetSpellScript() const override
1740 {
1742 }
1743};
1744
1745// 65192 - Flame Suppressant, 65224 - Clear Fires, 65354 - Clear Fires, 64619 - Water Spray
1772
1773// 64463 - Despawn Assault Bots
1800
1801// 64618 - Fire Search
1803{
1804 public:
1805 spell_mimiron_fire_search() : SpellScriptLoader("spell_mimiron_fire_search") { }
1806
1808 {
1810
1811 public:
1816
1817 private:
1818 bool Validate(SpellInfo const* /*spell*/) override
1819 {
1821 }
1822
1823 void FilterTargets(std::list<WorldObject*>& targets)
1824 {
1825 _noTarget = targets.empty();
1826 if (_noTarget)
1827 return;
1828
1830 targets.clear();
1831 targets.push_back(target);
1832 }
1833
1835 {
1836 if (_noTarget)
1838 }
1839
1840 void HandleScript(SpellEffIndex /*effIndex*/)
1841 {
1842 Unit* caster = GetCaster();
1843
1844 if (UnitAI* ai = caster->GetAI())
1845 {
1846 if (caster->GetDistance2d(GetHitUnit()) <= 15.0f && ai->GetData(DATA_WATERSPRAY))
1847 {
1848 caster->CastSpell(GetHitUnit(), SPELL_WATER_SPRAY, true);
1849 ai->SetData(DATA_WATERSPRAY, 0);
1850 ai->SetData(DATA_MOVE_NEW, 1);
1851 }
1852 else if (caster->GetAI()->GetData(DATA_MOVE_NEW))
1853 {
1854 caster->GetMotionMaster()->MoveChase(GetHitUnit());
1855 ai->SetData(DATA_MOVE_NEW, 0);
1856 }
1857 }
1858 }
1859
1866
1867 private:
1869 };
1870
1871 SpellScript* GetSpellScript() const override
1872 {
1874 }
1875};
1876
1877// 64444 - Magnetic Core Summon
1879{
1881
1883 {
1884 Unit* caster = GetCaster();
1885 Position pos = caster->GetPosition();
1886 float z = caster->GetMap()->GetHeight(pos);
1887 pos.m_positionZ = z;
1888 dest.Relocate(pos);
1889 }
1890
1895};
1896
1897// 64436 - Magnetic Core
1899{
1900 public:
1901 spell_mimiron_magnetic_core() : SpellScriptLoader("spell_mimiron_magnetic_core") { }
1902
1917
1918 SpellScript* GetSpellScript() const override
1919 {
1921 }
1922
1924 {
1926
1927 bool Validate(SpellInfo const* /*spell*/) override
1928 {
1930 }
1931
1932 void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1933 {
1934 if (Creature* target = GetTarget()->ToCreature())
1935 {
1936 target->AI()->DoAction(DO_DISABLE_AERIAL);
1937 target->CastSpell(target, SPELL_MAGNETIC_CORE_VISUAL, true);
1938 }
1939 }
1940
1941 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1942 {
1943 if (Creature* target = GetTarget()->ToCreature())
1944 {
1945 target->AI()->DoAction(DO_ENABLE_AERIAL);
1946 target->RemoveAurasDueToSpell(SPELL_MAGNETIC_CORE_VISUAL);
1947 }
1948 }
1949
1950 void OnRemoveSelf(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
1951 {
1952 if (TempSummon* summ = GetTarget()->ToTempSummon())
1953 summ->DespawnOrUnsummon();
1954 }
1955
1962 };
1963
1964 AuraScript* GetAuraScript() const override
1965 {
1967 }
1968};
1969
1970// 63667 - Napalm Shell
1972{
1973 public:
1974 spell_mimiron_napalm_shell() : SpellScriptLoader("spell_mimiron_napalm_shell") { }
1975
1977 {
1979
1980 bool Validate(SpellInfo const* /*spell*/) override
1981 {
1983 }
1984
1985 void FilterTargets(std::list<WorldObject*>& targets)
1986 {
1987 if (targets.empty())
1988 return;
1989
1991
1992 targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
1993
1994 if (!targets.empty())
1996
1997 targets.clear();
1998 targets.push_back(target);
1999 }
2000
2001 void HandleScript(SpellEffIndex /*effIndex*/)
2002 {
2004 }
2005
2011 };
2012
2013 SpellScript* GetSpellScript() const override
2014 {
2016 }
2017};
2018
2019// 63274 - P3Wx2 Laser Barrage -- HACK! Core will currently not set UNIT_FIELD_CHANNEL_OBJECT automatially if the spell targets more than a single target.
2045
2046// 64542 - Plasma Blast
2048{
2049 public:
2050 spell_mimiron_plasma_blast() : SpellScriptLoader("spell_mimiron_plasma_blast") { }
2051
2053 {
2055
2056 bool Validate(SpellInfo const* /*spell*/) override
2057 {
2059 }
2060
2061 bool Load() override
2062 {
2063 return GetCaster()->GetVehicleKit() != nullptr;
2064 }
2065
2066 void HandleScript(SpellEffIndex /*effIndex*/)
2067 {
2068 if (Unit* caster = GetCaster()->GetVehicleKit()->GetPassenger(3))
2069 caster->CastSpell(GetHitUnit(), SPELL_PLASMA_BLAST);
2070 }
2071
2076 };
2077
2078 SpellScript* GetSpellScript() const override
2079 {
2081 }
2082};
2083
2084// 66351, 63009 - Explosion
2119
2120// 63027 - Proximity Mines
2122{
2123 public:
2124 spell_mimiron_proximity_mines() : SpellScriptLoader("spell_mimiron_proximity_mines") { }
2125
2146
2147 SpellScript* GetSpellScript() const override
2148 {
2150 }
2151};
2152
2153// 65346 - Proximity Mine
2193
2194// 63382 - Rapid Burst
2196{
2197 public:
2198 spell_mimiron_rapid_burst() : SpellScriptLoader("spell_mimiron_rapid_burst") { }
2199
2227
2228 AuraScript* GetAuraScript() const override
2229 {
2231 }
2232};
2233
2234// 64402 - Rocket Strike, 65034 - Rocket Strike
2236{
2237 public:
2238 spell_mimiron_rocket_strike() : SpellScriptLoader("spell_mimiron_rocket_strike") { }
2239
2241 {
2243
2244 bool Validate(SpellInfo const* /*spell*/) override
2245 {
2247 }
2248
2249 void FilterTargets(std::list<WorldObject*>& targets)
2250 {
2251 if (targets.empty())
2252 return;
2253
2254 if (m_scriptSpellId == SPELL_ROCKET_STRIKE_SINGLE && GetCaster()->IsVehicle())
2255 if (WorldObject* target = GetCaster()->GetVehicleKit()->GetPassenger(RAND(ROCKET_SEAT_LEFT, ROCKET_SEAT_RIGHT)))
2256 {
2257 targets.clear();
2258 targets.push_back(target);
2259 }
2260 }
2261
2262 void HandleDummy(SpellEffIndex /*effIndex*/)
2263 {
2265 }
2266
2272 };
2273
2274 SpellScript* GetSpellScript() const override
2275 {
2277 }
2278};
2279
2280// 63041 - Rocket Strike
2282{
2283 public:
2284 spell_mimiron_rocket_strike_damage() : SpellScriptLoader("spell_mimiron_rocket_strike_damage") { }
2285
2321
2322 SpellScript* GetSpellScript() const override
2323 {
2325 }
2326};
2327
2328// 63681 - Rocket Strike
2330{
2331 public:
2332 spell_mimiron_rocket_strike_target_select() : SpellScriptLoader("spell_mimiron_rocket_strike_target_select") { }
2333
2335 {
2337
2338 bool Validate(SpellInfo const* /*spell*/) override
2339 {
2341 }
2342
2343 void FilterTargets(std::list<WorldObject*>& targets)
2344 {
2345 if (targets.empty())
2346 return;
2347
2349
2350 targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
2351
2352 if (!targets.empty())
2354
2355 targets.clear();
2356 targets.push_back(target);
2357 }
2358
2359 void HandleScript(SpellEffIndex /*effIndex*/)
2360 {
2361 if (InstanceScript* instance = GetCaster()->GetInstanceScript())
2363 GetCaster()->SetDisplayId(11686);
2364 }
2365
2371 };
2372
2377};
2378
2379// 64383 - Self Repair
2381{
2382 public:
2383 spell_mimiron_self_repair() : SpellScriptLoader("spell_mimiron_self_repair") { }
2384
2400
2401 SpellScript* GetSpellScript() const override
2402 {
2404 }
2405};
2406
2407// 63414 - Spinning Up -- HACK! Core will currently not set UNIT_FIELD_CHANNEL_OBJECT automatially if the spell targets more than a single target.
2408// eff0 will hit both caster and target due to hack in spellmgr.cpp, it is necessary because caster will interrupt itself if aura is not active on caster.
2410{
2411 public:
2412 spell_mimiron_spinning_up() : SpellScriptLoader("spell_mimiron_spinning_up") { }
2413
2429
2430 SpellScript* GetSpellScript() const override
2431 {
2433 }
2434};
2435
2436// 64426 - Summon Scrap Bot
2438{
2439 public:
2440 spell_mimiron_summon_assault_bot() : SpellScriptLoader("spell_mimiron_summon_assault_bot") { }
2441
2443 {
2445
2446 bool Validate(SpellInfo const* /*spell*/) override
2447 {
2449 }
2450
2451 void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
2452 {
2453 if (Unit* caster = GetCaster())
2454 if (InstanceScript* instance = caster->GetInstanceScript())
2455 if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
2456 caster->CastSpell(caster, SPELL_SUMMON_ASSAULT_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
2457 }
2458
2463 };
2464
2465 AuraScript* GetAuraScript() const override
2466 {
2468 }
2469};
2470
2471// 64425 - Summon Scrap Bot Trigger
2502
2503// 64621 - Summon Fire Bot
2505{
2506 public:
2507 spell_mimiron_summon_fire_bot() : SpellScriptLoader("spell_mimiron_summon_fire_bot") { }
2508
2510 {
2512
2513 bool Validate(SpellInfo const* /*spell*/) override
2514 {
2516 }
2517
2518 void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
2519 {
2520 if (Unit* caster = GetCaster())
2521 if (InstanceScript* instance = caster->GetInstanceScript())
2522 if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
2523 caster->CastSpell(caster, SPELL_SUMMON_FIRE_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
2524 }
2525
2530 };
2531
2532 AuraScript* GetAuraScript() const override
2533 {
2535 }
2536};
2537
2538// 64620 - Summon Fire Bot Trigger
2569
2570// 64562 - Summon Flames Spread Trigger
2572{
2573 public:
2574 spell_mimiron_summon_flames_spread() : SpellScriptLoader("spell_mimiron_summon_flames_spread") { }
2575
2577 {
2579
2580 void FilterTargets(std::list<WorldObject*>& targets)
2581 {
2582 if (targets.empty())
2583 return;
2584
2585 // Flames must chase the closest player
2586 WorldObject* target = targets.front();
2587
2588 for (std::list<WorldObject*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
2589 if (GetCaster()->GetDistance2d(*iter) < GetCaster()->GetDistance2d(target))
2590 target = *iter;
2591
2592 targets.clear();
2593 targets.push_back(target);
2594 }
2595
2596 void OnHit(SpellEffIndex /*effIndex*/)
2597 {
2599 }
2600
2606 };
2607
2608 SpellScript* GetSpellScript() const override
2609 {
2611 }
2612
2635
2636 AuraScript* GetAuraScript() const override
2637 {
2639 }
2640};
2641
2642// 64623 - Frost Bomb
2644{
2645 public:
2646 spell_mimiron_summon_frost_bomb_target() : SpellScriptLoader("spell_mimiron_summon_frost_bomb_target") { }
2647
2649 {
2651
2652 bool Validate(SpellInfo const* /*spell*/) override
2653 {
2655 }
2656
2657 void FilterTargets(std::list<WorldObject*>& targets)
2658 {
2659 if (targets.empty())
2660 return;
2661
2662 targets.remove_if(Trinity::AllWorldObjectsInRange(GetCaster(), 15.0f));
2663
2664 if (targets.empty())
2665 return;
2666
2668
2669 targets.clear();
2670 targets.push_back(target);
2671 }
2672
2673 void HandleScript(SpellEffIndex /*effIndex*/)
2674 {
2676 }
2677
2683 };
2684
2685 SpellScript* GetSpellScript() const override
2686 {
2688 }
2689};
2690
2691// 64398 - Summon Scrap Bot
2693{
2694 public:
2695 spell_mimiron_summon_junk_bot() : SpellScriptLoader("spell_mimiron_summon_junk_bot") { }
2696
2698 {
2700
2701 bool Validate(SpellInfo const* /*spell*/) override
2702 {
2704 }
2705
2706 void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
2707 {
2708 if (Unit* caster = GetCaster())
2709 if (InstanceScript* instance = caster->GetInstanceScript())
2710 if (instance->GetBossState(DATA_MIMIRON) == IN_PROGRESS)
2711 caster->CastSpell(caster, SPELL_SUMMON_JUNK_BOT, { aurEff, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT) });
2712 }
2713
2718 };
2719
2720 AuraScript* GetAuraScript() const override
2721 {
2723 }
2724};
2725
2726// 63820 - Summon Scrap Bot Trigger
2757
2758// 63339 - Weld
2760{
2761 public:
2762 spell_mimiron_weld() : SpellScriptLoader("spell_mimiron_weld") { }
2763
2765 {
2767
2768 void HandleTick(AuraEffect const* aurEff)
2769 {
2770 Unit* caster = GetTarget();
2771 if (Unit* vehicle = caster->GetVehicleBase())
2772 {
2773 if (aurEff->GetTickNumber() % 5 == 0)
2774 caster->CastSpell(vehicle, RepairSpells[urand(0, 3)]);
2775 caster->SetFacingToObject(vehicle);
2776 }
2777 }
2778
2783 };
2784
2785 AuraScript* GetAuraScript() const override
2786 {
2787 return new spell_mimiron_weld_AuraScript();
2788 }
2789};
2790
2792{
2793 public:
2794 achievement_setup_boom() : AchievementCriteriaScript("achievement_setup_boom") { }
2795
2796 bool OnCheck(Player* /*source*/, Unit* target) override
2797 {
2798 return target && target->GetAI()->GetData(DATA_SETUP_BOMB);
2799 }
2800};
2801
2803{
2804 public:
2805 achievement_setup_mine() : AchievementCriteriaScript("achievement_setup_mine") { }
2806
2807 bool OnCheck(Player* /*source*/, Unit* target) override
2808 {
2809 return target && target->GetAI()->GetData(DATA_SETUP_MINE);
2810 }
2811};
2812
2814{
2815 public:
2816 achievement_setup_rocket() : AchievementCriteriaScript("achievement_setup_rocket") { }
2817
2818 bool OnCheck(Player* /*source*/, Unit* target) override
2819 {
2820 return target && target->GetAI()->GetData(DATA_SETUP_ROCKET);
2821 }
2822};
2823
2825{
2826 public:
2827 achievement_firefighter() : AchievementCriteriaScript("achievement_firefighter") { }
2828
2829 bool OnCheck(Player* /*source*/, Unit* target) override
2830 {
2831 return target && target->GetAI()->GetData(DATA_FIREFIGHTER);
2832 }
2833};
2834
2836{
2839 new boss_mimiron();
2840 new boss_vx_001();
2841
2845 new npc_mimiron_flames();
2849
2851
2878 new spell_mimiron_weld();
2879
2884}
Actions
#define M_PI
Definition Common.h:72
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint8_t uint8
Definition Define.h:135
int8_t int8
Definition Define.h:131
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
@ IN_PROGRESS
@ DONE
@ POINT_MOTION_TYPE
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
Spells
Definition PlayerAI.cpp:32
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
SpellEffIndex
@ EFFECT_1
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_APPLY_AURA
@ TARGET_UNIT_SRC_AREA_ENTRY
@ TARGET_DEST_NEARBY_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ EMOTE_STATE_SPECIAL_UNARMED
@ EMOTE_ONESHOT_NONE
@ GO_FLAG_NOT_SELECTABLE
@ FACTION_FRIENDLY
@ SPELL_FAILED_NO_VALID_TARGETS
@ GO_STATE_READY
@ GO_STATE_DESTROYED
@ GO_STATE_ACTIVE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_CONTROL_VEHICLE
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
@ SPELLVALUE_MAX_TARGETS
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellCastFn(F)
#define SpellDestinationTargetSelectFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define SpellHitFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ REACT_PASSIVE
@ REACT_AGGRESSIVE
@ UNIT_STAND_STATE_DEAD
Definition UnitDefines.h:41
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:34
@ MOVE_RUN
@ UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_PACIFIED
@ UNIT_FLAG_UNINTERACTIBLE
@ UNIT_STATE_ROOT
Definition Unit.h:230
@ UNIT_STATE_CASTING
Definition Unit.h:235
DamageEffectType
Definition Unit.h:352
static bool IsEncounterFinished(Unit *who)
Position const VehicleRelocation[]
void AddSC_boss_mimiron()
SeatIds
@ ROCKET_SEAT_LEFT
@ MKII_SEAT_CANNON
@ ROCKET_SEAT_RIGHT
@ DO_ACTIVATE_VX001
@ DO_ACTIVATE_V0L7R0N_1
@ DO_ENABLE_AERIAL
@ DO_ASSEMBLED_COMBAT
@ DO_ACTIVATE_COMPUTER
@ DO_ACTIVATE_AERIAL
@ DO_ACTIVATE_V0L7R0N_2
@ DO_ACTIVATE_HARD_MODE
@ DO_ENCOUNTER_DONE
@ DO_ACTIVATE_SELF_DESTRUCT
@ DO_HARDMODE_MKII
@ DO_START_VX001
@ DO_DEACTIVATE_COMPUTER
@ DO_HARDMODE_VX001
@ DO_DISABLE_AERIAL
@ DO_START_MKII
@ DO_START_AERIAL
@ DO_HARDMODE_AERIAL
@ SAY_AERIAL_SLAY
@ SAY_AERIAL_ACTIVATE
@ SAY_MKII_SLAY
@ SAY_AGGRO
@ SAY_VX001_ACTIVATE
@ SAY_V07TRON_ACTIVATE
@ SAY_AERIAL_DEATH
@ SAY_VX001_DEATH
@ SAY_V07TRON_SLAY
@ SAY_MKII_DEATH
@ SAY_VX001_SLAY
@ SAY_HARDMODE_ON
@ SAY_V07TRON_DEATH
@ SAY_BERSERK
@ SAY_MKII_ACTIVATE
Position const ACUSummonPos
@ SPELL_PROXIMITY_MINE_EXPLOSION
@ SPELL_PLASMA_BLAST
@ SPELL_FREEZE_ANIM
@ SPELL_CLEAR_ALL_DEBUFFS
@ SPELL_SUMMON_ROCKET_STRIKE
@ SPELL_PLASMA_BALL_P2
@ SPELL_PERIODIC_PROXIMITY_AURA
@ SPELL_HALF_HEAL
@ SPELL_FIRE_SEARCH_AURA
@ SPELL_SUMMON_JUNK_BOT
@ SPELL_BOMB_BOT_AURA
@ SPELL_PLASMA_BALL_P1
@ SPELL_SCRIPT_EFFECT_PLASMA_BLAST
@ SPELL_MOUNT_MKII
@ SPELL_PROXIMITY_MINE_PERIODIC_TRIGGER
@ SPELL_JETPACK
@ SPELL_MAGNETIC_FIELD
@ SPELL_SUMMON_FLAMES_SPREAD
@ SPELL_RAPID_BURST_RIGHT
@ SPELL_SHOCK_BLAST
@ SPELL_SHOCK_BLAST_AURA
@ SPELL_HEAT_WAVE_AURA
@ SPELL_NOT_SO_FRIENDLY_FIRE
@ SPELL_SEAT_1
@ SPELL_ELEVATOR_KNOCKBACK
@ SPELL_SELF_DESTRUCTION_AURA
@ SPELL_SCRIPT_EFFECT_FROST_BOMB
@ SPELL_FLAMES_PERIODIC_TRIGGER
@ SPELL_SUMMON_ASSAULT_BOT_TRIGGER
@ SPELL_SUMMON_ASSAULT_BOT_DUMMY
@ SPELL_SUMMON_FIRE_BOT_DUMMY
@ SPELL_FREEZE_ANIM_STUN
@ SPELL_FROST_BOMB_LINKED
@ SPELL_RAPID_BURST
@ SPELL_SUMMON_JUNK_BOT_TRIGGER
@ SPELL_ROCKET_STRIKE
@ SPELL_SEAT_5
@ SPELL_EMERGENCY_MODE
@ SPELL_SEAT_3
@ SPELL_SUMMON_BOMB_BOT
@ SPELL_RAPID_BURST_LEFT
@ SPELL_ROCKET_STRIKE_SINGLE
@ SPELL_SELF_REPAIR
@ SPELL_HAND_PULSE_RIGHT
@ SPELL_EMERGENCY_MODE_TURRET
@ SPELL_SCRIPT_EFFECT_ROCKET_STRIKE
@ SPELL_SUMMON_FIRE_BOT
@ SPELL_TELEPORT_VISUAL
@ SPELL_SUMMON_PROXIMITY_MINE
@ SPELL_FLAMES
@ SPELL_SLEEP_VISUAL_2
@ SPELL_PROXIMITY_MINE_TRIGGER
@ SPELL_SUMMON_FLAMES_INITIAL
@ SPELL_FIRE_SEARCH
@ SPELL_NAPALM_SHELL
@ SPELL_MAGNETIC_CORE
@ SPELL_RAPID_BURST_TARGET_ME
@ SPELL_TORSO_DISABLED
@ SPELL_MAGNETIC_CORE_VISUAL
@ SPELL_FROST_BOMB_DUMMY
@ SPELL_WATER_SPRAY
@ SPELL_SUMMON_FIRE_BOT_TRIGGER
@ SPELL_SCRIPT_EFFECT_SUMMON_FLAMES_INITIAL
@ SPELL_CLEAR_FIRES
@ SPELL_SUMMON_FLAMES_SPREAD_TRIGGER
@ SPELL_FORCE_CAST_NAPALM_SHELL
@ SPELL_ROCKET_STRIKE_BOTH
@ SPELL_SUMMON_BURST_TARGET
@ SPELL_FLAME_SUPPRESSANT_MK
@ SPELL_SEAT_7
@ SPELL_SUMMON_FROST_BOMB
@ SPELL_VEHICLE_DAMAGED
@ SPELL_SEAT_2
@ SPELL_DEAFENING_SIREN
@ SPELL_SPINNING_UP
@ SPELL_MOUNT_VX_001
@ SPELL_SUMMON_JUNK_BOT_DUMMY
@ SPELL_WELD
@ SPELL_HAND_PULSE_LEFT
@ SPELL_SUMMON_ASSAULT_BOT
@ SPELL_PROXIMITY_MINES
@ SPELL_FLAME_SUPPRESSANT_VX
@ SPELL_FROST_BOMB_EXPLOSION
@ SPELL_SEAT_6
@ SPELL_SELF_DESTRUCTION_VISUAL
@ SPELL_SLEEP_VISUAL_1
@ SPELL_DESPAWN_ASSAULT_BOTS
@ PHASE_AERIAL_COMMAND_UNIT
@ PHASE_VX_001
@ PHASE_LEVIATHAN_MK_II
@ PHASE_VOL7RON
ComputerYells
@ SAY_SELF_DESTRUCT_4
@ SAY_SELF_DESTRUCT_7
@ SAY_SELF_DESTRUCT_TERMINATED
@ SAY_SELF_DESTRUCT_10
@ SAY_SELF_DESTRUCT_8
@ SAY_SELF_DESTRUCT_FINALIZED
@ SAY_SELF_DESTRUCT_1
@ SAY_SELF_DESTRUCT_3
@ SAY_SELF_DESTRUCT_5
@ SAY_SELF_DESTRUCT_INITIATED
@ SAY_SELF_DESTRUCT_6
@ SAY_SELF_DESTRUCT_9
@ SAY_SELF_DESTRUCT_2
@ WP_AERIAL_P4_POS
@ WP_MKII_P4_POS_4
@ WP_MKII_P4_POS_2
@ WP_MKII_P4_POS_3
@ WP_MKII_P4_POS_5
@ WP_MKII_P4_POS_1
@ WP_MKII_P1_IDLE
uint32 const RepairSpells[4]
Position const VX001SummonPos
@ DATA_MOVE_NEW
@ DATA_SETUP_MINE
@ DATA_SETUP_BOMB
@ DATA_NOT_SO_FRIENDLY_FIRE
@ DATA_WATERSPRAY
@ DATA_FIREFIGHTER
@ DATA_SETUP_ROCKET
@ EVENT_OUTTRO_1
@ EVENT_SUMMON_JUNK_BOT
@ EVENT_FROST_BOMB_CLEAR_FIRES
@ EVENT_VX001_ACTIVATION_3
@ EVENT_SUMMON_FIRE_BOTS
@ EVENT_SELF_DESTRUCT_2
@ EVENT_SELF_DESTRUCT_8
@ EVENT_MOVE_POINT_5
@ EVENT_VX001_ACTIVATION_7
@ EVENT_INTRO_1
@ EVENT_SELF_DESTRUCT_7
@ EVENT_OUTTRO_3
@ EVENT_INTRO_2
@ EVENT_VX001_ACTIVATION_9
@ EVENT_VOL7RON_ACTIVATION_7
@ EVENT_AERIAL_ACTIVATION_5
@ EVENT_VOL7RON_ACTIVATION_5
@ EVENT_SELF_DESTRUCT_9
@ EVENT_SPREAD_FLAMES
@ EVENT_VX001_ACTIVATION_5
@ EVENT_VOL7RON_ACTIVATION_6
@ EVENT_SUMMON_FLAMES
@ EVENT_SELF_DESTRUCT_FINALIZED
@ EVENT_VOL7RON_ACTIVATION_1
@ EVENT_SELF_DESTRUCT_5
@ EVENT_SELF_DESTRUCT_3
@ EVENT_FROST_BOMB
@ EVENT_FLAME_SUPPRESSANT_VX
@ EVENT_SHOCK_BLAST
@ EVENT_MAGNETIC_FIELD
@ EVENT_FLAME_SUPPRESSANT_MK
@ EVENT_AERIAL_ACTIVATION_6
@ EVENT_VOL7RON_ACTIVATION_3
@ EVENT_AERIAL_ACTIVATION_1
@ EVENT_NAPALM_SHELL
@ EVENT_VX001_ACTIVATION_1
@ EVENT_PROXIMITY_MINE
@ EVENT_MOVE_POINT_3
@ EVENT_VX001_ACTIVATION_2
@ EVENT_AERIAL_ACTIVATION_4
@ EVENT_FROST_BOMB_EXPLOSION
@ EVENT_PROXIMITY_MINE_DETONATION
@ EVENT_SUMMON_ASSAULT_BOT
@ EVENT_VOL7RON_ACTIVATION_2
@ EVENT_SELF_DESTRUCT_4
@ EVENT_WATER_SPRAY
@ EVENT_SELF_DESTRUCT_6
@ EVENT_PLASMA_BLAST
@ EVENT_VX001_ACTIVATION_8
@ EVENT_VX001_ACTIVATION_4
@ EVENT_MOVE_POINT_2
@ EVENT_AERIAL_ACTIVATION_2
@ EVENT_SUMMON_BOMB_BOT
@ EVENT_RAPID_BURST
@ EVENT_VX001_ACTIVATION_6
@ EVENT_OUTTRO_2
@ EVENT_SEARCH_FLAMES
@ EVENT_RELOAD
@ EVENT_INTRO_3
@ EVENT_SPINNING_UP
@ EVENT_ROCKET_STRIKE
@ EVENT_HAND_PULSE
@ EVENT_SELF_DESTRUCT_10
@ EVENT_PROXIMITY_MINE_ARM
@ EVENT_AERIAL_ACTIVATION_3
@ EVENT_VOL7RON_ACTIVATION_4
@ EVENT_SELF_DESTRUCT_1
Data
Yells
uint32 GetTickNumber() const
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
Unit * GetCaster() const
Unit * GetTarget() const
HookList< EffectApplyHandler > OnEffectRemove
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void JustSummoned(Creature *summon) override
SummonList summons
EventMap events
void DoZoneInCombat(Creature *creature=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
void SetImmuneToPC(bool apply) override
Definition Creature.h:129
void SetReactState(ReactStates st)
Definition Creature.h:119
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void ExitVehicle(Position const *exitPosition=nullptr) override
void Update(uint32 time)
Definition EventMap.h:67
Milliseconds GetTimeUntilEvent(EventId eventId) const
Definition EventMap.cpp:179
void DelayEvents(Milliseconds delay)
Definition EventMap.cpp:95
EventId ExecuteEvent()
Definition EventMap.cpp:73
bool IsInPhase(PhaseIndex phase) const
Definition EventMap.h:236
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:52
void SetPhase(PhaseIndex phase)
Definition EventMap.cpp:28
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void Reset()
Definition EventMap.cpp:21
GameObject *const me
void SetGoState(GOState state)
bool HasFlag(GameObjectFlags flags) const
Definition GameObject.h:170
void SetFlag(GameObjectFlags flags)
Definition GameObject.h:171
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
GameObject * GetGameObject(uint32 type)
float GetHeight(float x, float y, float z, bool checkVMap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH) const
Definition Map.cpp:2484
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=EVENT_JUMP, bool hasOrientation=false)
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
void MoveFall(uint32 id=0)
void MoveRandom(float wanderDistance=0.0f)
static Unit * ToUnit(Object *o)
Definition Object.h:192
bool IsUnit() const
Definition Object.h:191
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
HookList< CastHandler > AfterCast
Creature * GetHitCreature() const
Player * GetHitPlayer() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
WorldObject * GetExplTargetWorldObject() const
void FinishCast(SpellCastResult result, uint32 *param1=nullptr, uint32 *param2=nullptr)
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void Summon(Creature const *summon)
virtual void DoAction(int32)
Definition UnitAI.h:154
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
virtual uint32 GetData(uint32) const
Definition UnitAI.h:155
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:166
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:96
bool DoSpellAttackIfReady(uint32 spell)
Definition UnitAI.cpp:78
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:243
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:769
void CastStop(uint32 except_spellid=0)
Definition Unit.cpp:988
void SetAnimTier(AnimTier animTier)
Definition Unit.cpp:10391
void SetChannelObjectGuid(ObjectGuid guid)
Definition Unit.h:1461
ThreatManager & GetThreatManager()
Definition Unit.h:1155
Creature * GetVehicleCreatureBase() const
Definition Unit.cpp:11847
void SetFaction(uint32 faction) override
Definition Unit.h:974
void RemoveAllAurasExceptType(AuraType type)
Definition Unit.cpp:4272
Unit * GetVehicleBase() const
Definition Unit.cpp:11826
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:953
bool SetHover(bool enable, bool updateAnimTier=true)
Definition Unit.cpp:13503
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4535
UnitAI * GetAI() const
Definition Unit.h:800
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
Definition Unit.cpp:13286
void SetFacingToObject(WorldObject const *object, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13259
void SetEmoteState(Emote emote)
Definition Unit.h:967
uint32 GetHealth() const
Definition Unit.h:913
virtual void SetDisplayId(uint32 modelId)
Definition Unit.cpp:10407
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
void SetSpeedRate(UnitMoveType mtype, float rate)
Definition Unit.cpp:8678
ObjectGuid GetChannelObjectGuid() const
Definition Unit.h:1460
bool HasUnitState(const uint32 f) const
Definition Unit.h:876
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
Definition Unit.cpp:13250
void SetStandState(UnitStandStateType state)
Definition Unit.cpp:10363
UnitStandStateType GetStandState() const
Definition Unit.h:1001
static void Kill(Unit *attacker, Unit *victim, bool durabilityLoss=true)
Definition Unit.cpp:10930
void CombatStop(bool includingCast=false, bool mutualPvP=true)
Definition Unit.cpp:5691
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
void SetInFront(WorldObject const *target)
Definition Unit.cpp:13244
Vehicle * GetVehicleKit() const
Definition Unit.h:1735
bool AttackStop()
Definition Unit.cpp:5645
void RemoveUnitFlag(UnitFlags flags)
Definition Unit.h:955
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
Definition Vehicle.cpp:296
Map * GetMap() const
Definition Object.h:449
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1992
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1141
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2015
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
uint32 m_scriptSpellId
bool OnCheck(Player *, Unit *target) override
bool OnCheck(Player *, Unit *target) override
bool OnCheck(Player *, Unit *target) override
bool OnCheck(Player *, Unit *target) override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
GameObjectAI * GetAI(GameObject *go) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
PrepareSpellScript(spell_mimiron_bomb_bot_SpellScript)
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_mimiron_clear_fires_SpellScript)
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_mimiron_fire_search_SpellScript)
SpellScript * GetSpellScript() const override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnRemoveSelf(AuraEffect const *, AuraEffectHandleModes)
PrepareSpellScript(spell_mimiron_magnetic_core_SpellScript)
PrepareSpellScript(spell_mimiron_magnetic_core_summon)
void ModDest(SpellDestination &dest)
SpellScript * GetSpellScript() const override
AuraScript * GetAuraScript() const override
PrepareSpellScript(spell_mimiron_napalm_shell_SpellScript)
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_mimiron_plasma_blast_SpellScript)
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
void AfterRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_mimiron_rapid_burst_AuraScript)
AuraScript * GetAuraScript() const override
PrepareSpellScript(spell_mimiron_rocket_strike_SpellScript)
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_mimiron_self_repair_SpellScript)
SpellScript * GetSpellScript() const override
PrepareSpellScript(spell_mimiron_spinning_up_SpellScript)
SpellScript * GetSpellScript() const override
void OnRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
SpellScript * GetSpellScript() const override
AuraScript * GetAuraScript() const override
void OnRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
SpellScript * GetSpellScript() const override
AuraScript * GetAuraScript() const override
AuraScript * GetAuraScript() const override
SpellScript * GetSpellScript() const override
SpellScript * GetSpellScript() const override
void OnRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
SpellScript * GetSpellScript() const override
AuraScript * GetAuraScript() const override
PrepareAuraScript(spell_mimiron_weld_AuraScript)
AuraScript * GetAuraScript() const override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:108
CastSpellExtraArgs & AddSpellMod(SpellValueMod mod, int32 val)
float m_positionZ
Definition Position.h:58
float GetPositionZ() const
Definition Position.h:81
float GetOrientation() const
Definition Position.h:82
float GetPositionX() const
Definition Position.h:79
void GetPosition(float &x, float &y) const
Definition Position.h:84
float GetPositionY() const
Definition Position.h:80
void AttackStart(Unit *) override
T const & RAID_MODE(T const &normal10, T const &normal25) const
void Relocate(Position const &pos)
Definition Spell.cpp:99
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void MovementInform(uint32 type, uint32 point) override
void MovementInform(uint32 type, uint32 point) override
uint32 GetData(uint32 type) const override
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void JustSummoned(Creature *summon) override
void SetData(uint32 id, uint32 data) override
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
void DoAction(int32 action) override
void JustEngagedWith(Unit *who) override
boss_mimironAI(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void KilledUnit(Unit *victim) override
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void SpellHit(WorldObject *caster, SpellInfo const *) override
void UpdateAI(uint32 diff) override
void DoAction(int32 action) override
void JustSummoned(Creature *summon) override
boss_vx_001AI(Creature *creature)
npc_mimiron_magnetic_core(Creature *creature)
@ DATA_MIMIRON
Definition ulduar.h:46
@ DATA_MIMIRON_ELEVATOR
Definition ulduar.h:434
@ DATA_MIMIRON_BUTTON
Definition ulduar.h:436
@ DATA_LEVIATHAN_MK_II
Definition ulduar.h:429
@ DATA_VX_001
Definition ulduar.h:430
@ DATA_MIMIRON_WORLD_TRIGGER
Definition ulduar.h:433
@ DATA_AERIAL_COMMAND_UNIT
Definition ulduar.h:431
@ DATA_COMPUTER
Definition ulduar.h:432
@ GO_CACHE_OF_INNOVATION_FIREFIGHTER
Definition ulduar.h:300
@ GO_CACHE_OF_INNOVATION_FIREFIGHTER_HERO
Definition ulduar.h:302
@ GO_CACHE_OF_INNOVATION_HERO
Definition ulduar.h:301
@ GO_CACHE_OF_INNOVATION
Definition ulduar.h:299
#define RegisterUlduarCreatureAI(ai_name)
Definition ulduar.h:541
@ NPC_BURST_TARGET
Definition ulduar.h:127
@ NPC_ASSAULT_BOT
Definition ulduar.h:122
@ NPC_AERIAL_COMMAND_UNIT
Definition ulduar.h:121
@ NPC_JUNK_BOT
Definition ulduar.h:124
@ NPC_VX_001
Definition ulduar.h:120
Waypoints
Definition zulaman.cpp:170