TrinityCore
instance_ulduar.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 "ulduar.h"
19#include "AreaBoundary.h"
20#include "CreatureAI.h"
21#include "EventMap.h"
22#include "GameObject.h"
23#include "InstanceScript.h"
24#include "Item.h"
25#include "Map.h"
26#include "Player.h"
27#include "ScriptMgr.h"
28#include "TemporarySummon.h"
29#include "Vehicle.h"
30
32{
33 { DATA_FLAME_LEVIATHAN, new RectangleBoundary(148.0f, 401.3f, -155.0f, 90.0f) },
34 { DATA_IGNIS, new RectangleBoundary(495.0f, 680.0f, 90.0f, 400.0f) },
35 { DATA_RAZORSCALE, new RectangleBoundary(370.0f, 810.0f, -542.0f, -55.0f) },
36 { DATA_XT002, new RectangleBoundary(755.0f, 940.0f, -125.0f, 95.0f) },
37 { DATA_ASSEMBLY_OF_IRON, new CircleBoundary(Position(1587.2f, 121.0f), 90.0) },
38 { DATA_ALGALON, new CircleBoundary(Position(1632.668f, -307.7656f), 45.0) },
39 { DATA_ALGALON, new ZRangeBoundary(410.0f, 470.0f) },
40 { DATA_HODIR, new EllipseBoundary(Position(2001.5f, -240.0f), 50.0, 75.0) },
41 // Thorim sets boundaries dynamically
42 { DATA_FREYA, new RectangleBoundary(2094.6f, 2520.0f, -250.0f, 200.0f) },
43 { DATA_MIMIRON, new CircleBoundary(Position(2744.0f, 2569.0f), 70.0) },
44 { DATA_VEZAX, new RectangleBoundary(1740.0f, 1930.0f, 31.0f, 228.0f) },
45 { DATA_YOGG_SARON, new CircleBoundary(Position(1980.42f, -27.68f), 105.0) }
46};
47
48static DoorData const doorData[] =
49{
73};
74
76{
80 { 0, 0 } // END
81};
82
84{
98
101 { NPC_SIF, DATA_SIF },
108 { NPC_SARA, DATA_SARA },
117 { 0, 0, }
118};
119
121{
140 { 0, 0 }
141};
142
144{
145 { DATA_FLAME_LEVIATHAN, {{ 1132 }} },
146 { DATA_IGNIS, {{ 1136 }} },
147 { DATA_RAZORSCALE, {{ 1139 }} },
148 { DATA_XT002, {{ 1142 }} },
149 { DATA_ASSEMBLY_OF_IRON, {{ 1140 }} },
150 { DATA_KOLOGARN, {{ 1137 }} },
151 { DATA_AURIAYA, {{ 1131 }} },
152 { DATA_HODIR, {{ 1135 }} },
153 { DATA_THORIM, {{ 1141 }} },
154 { DATA_FREYA, {{ 1133 }} },
155 { DATA_MIMIRON, {{ 1138 }} },
156 { DATA_VEZAX, {{ 1134 }} },
157 { DATA_YOGG_SARON, {{ 1143 }} },
158 { DATA_ALGALON, {{ 1130 }} },
159 { DATA_BRIGHTLEAF, {{ 1164 }} },
160 { DATA_IRONBRANCH, {{ 1165 }} },
161 { DATA_STONEBARK, {{ 1166 }} }
162};
163
164UlduarKeeperDespawnEvent::UlduarKeeperDespawnEvent(Creature* owner, Milliseconds despawnTimerOffset) : _owner(owner), _despawnTimer(despawnTimerOffset)
165{
166}
167
168bool UlduarKeeperDespawnEvent::Execute(uint64 /*eventTime*/, uint32 /*updateTime*/)
169{
172 return true;
173}
174
176{
177 public:
179
181 {
183 {
191
194 TeamInInstance = 0;
196 ColossusData = 0;
197 elderCount = 0;
198 illusion = 0;
199 keepersCount = 0;
200 conSpeedAtory = false;
201 lumberjacked = false;
202 Unbroken = true;
204 _algalonSummoned = false;
205 _summonAlgalon = false;
206 _algalonFirstIntro = true;
207
209 memset(_summonYSKeeper, 0, sizeof(_summonYSKeeper));
210 }
211
212 // Creatures
214
217
222
223 // GameObjects
233
235
236 // Miscellaneous
247
248 void OnPlayerEnter(Player* player) override
249 {
250 if (!TeamInInstance)
251 TeamInInstance = player->GetTeam();
252
253 if (_summonAlgalon)
254 {
255 _summonAlgalon = false;
258 algalon->AI()->DoAction(ACTION_INIT_ALGALON);
259 else
260 algalon->SetImmuneToPC(false);
261 }
262
263 // Keepers at Observation Ring
265 {
268 }
270 {
273 }
275 {
278 }
280 {
283 }
284
285 // Keepers in Yogg-Saron's room
286 if (_summonYSKeeper[0])
288 if (_summonYSKeeper[1])
290 if (_summonYSKeeper[2])
292 if (_summonYSKeeper[3])
294 }
295
296 void OnCreatureCreate(Creature* creature) override
297 {
299
300 switch (creature->GetEntry())
301 {
306 DespawnLeviatanVehicle(creature);
307 else
308 LeviathanVehicleGUIDs.push_back(creature->GetGUID());
309 break;
310
311 // XT-002 Deconstructor
312 case NPC_XT_TOY_PILE:
313 for (uint8 i = 0; i < 4; ++i)
314 {
315 if (!XTToyPileGUIDs[i])
316 {
317 XTToyPileGUIDs[i] = creature->GetGUID();
318 break;
319 }
320 }
321 break;
322
323 // Assembly of Iron
324 case NPC_STEELBREAKER:
325 AssemblyGUIDs[0] = creature->GetGUID();
326 AddMinion(creature, true);
327 break;
328 case NPC_MOLGEIM:
329 AssemblyGUIDs[1] = creature->GetGUID();
330 AddMinion(creature, true);
331 break;
332 case NPC_BRUNDIR:
333 AssemblyGUIDs[2] = creature->GetGUID();
334 AddMinion(creature, true);
335 break;
336
337 // Freya
338 case NPC_IRONBRANCH:
339 ElderGUIDs[0] = creature->GetGUID();
341 creature->DespawnOrUnsummon();
342 break;
343 case NPC_BRIGHTLEAF:
344 ElderGUIDs[1] = creature->GetGUID();
346 creature->DespawnOrUnsummon();
347 break;
348 case NPC_STONEBARK:
349 ElderGUIDs[2] = creature->GetGUID();
351 creature->DespawnOrUnsummon();
352 break;
354 FreyaAchieveTriggerGUID = creature->GetGUID();
355 break;
356
357 // Mimiron
359 MimironVehicleGUIDs[0] = creature->GetGUID();
360 break;
361 case NPC_VX_001:
362 MimironVehicleGUIDs[1] = creature->GetGUID();
363 break;
365 MimironVehicleGUIDs[2] = creature->GetGUID();
366 break;
367
368 // Yogg-Saron
369 case NPC_FREYA_YS:
370 KeeperGUIDs[0] = creature->GetGUID();
371 _summonYSKeeper[0] = false;
372 ++keepersCount;
374 break;
375 case NPC_HODIR_YS:
376 KeeperGUIDs[1] = creature->GetGUID();
377 _summonYSKeeper[1] = false;
378 ++keepersCount;
380 break;
381 case NPC_THORIM_YS:
382 KeeperGUIDs[2] = creature->GetGUID();
383 _summonYSKeeper[2] = false;
384 ++keepersCount;
386 break;
387 case NPC_MIMIRON_YS:
388 KeeperGUIDs[3] = creature->GetGUID();
389 _summonYSKeeper[3] = false;
390 ++keepersCount;
392 break;
393 case NPC_SANITY_WELL:
394 creature->SetReactState(REACT_PASSIVE);
395 break;
396
397 // Algalon
405 if (Creature* algalon = GetCreature(DATA_ALGALON))
406 algalon->AI()->JustSummoned(creature);
407 break;
408 }
409
411 }
412
413 uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
414 {
415 if (!TeamInInstance)
416 {
417 Map::PlayerList const& Players = instance->GetPlayers();
418 if (!Players.isEmpty())
419 if (Player* player = Players.begin()->GetSource())
420 TeamInInstance = player->GetTeam();
421 }
422
423 uint32 entry = data->id;
424 switch (entry)
425 {
446 default:
447 return entry;
448 }
449 }
450
451 void OnCreatureRemove(Creature* creature) override
452 {
454
455 switch (creature->GetEntry())
456 {
457 case NPC_XT_TOY_PILE:
458 for (uint8 i = 0; i < 4; ++i)
459 {
460 if (XTToyPileGUIDs[i] == creature->GetGUID())
461 {
463 break;
464 }
465 }
466 break;
467 case NPC_STEELBREAKER:
468 case NPC_MOLGEIM:
469 case NPC_BRUNDIR:
470 AddMinion(creature, false);
471 break;
472 default:
473 break;
474 }
475 }
476
477 void OnGameObjectCreate(GameObject* gameObject) override
478 {
480
481 switch (gameObject->GetEntry())
482 {
485 KologarnChestGUID = gameObject->GetGUID();
486 break;
488 KologarnBridgeGUID = gameObject->GetGUID();
490 HandleGameObject(ObjectGuid::Empty, false, gameObject);
491 break;
494 break;
497 CacheOfStormsGUID = gameObject->GetGUID();
498 break;
501 CacheOfStormsHardmodeGUID = gameObject->GetGUID();
502 break;
505 HodirRareCacheGUID = gameObject->GetGUID();
506 break;
508 case GO_HODIR_CHEST:
509 HodirChestGUID = gameObject->GetGUID();
510 break;
511 case GO_MIMIRON_TRAM:
512 MimironTramGUID = gameObject->GetGUID();
513 break;
515 LeviathanGateGUID = gameObject->GetGUID();
517 gameObject->SetGoState(GO_STATE_DESTROYED);
518 break;
520 BrainRoomDoorGUIDs[0] = gameObject->GetGUID();
521 break;
523 BrainRoomDoorGUIDs[1] = gameObject->GetGUID();
524 break;
526 BrainRoomDoorGUIDs[2] = gameObject->GetGUID();
527 break;
531 gameObject->SetFlag(GO_FLAG_IN_USE);
532 break;
536 gameObject->SetGoState(GO_STATE_ACTIVE);
537 break;
538 default:
539 break;
540 }
541 }
542
543 void OnUnitDeath(Unit* unit) override
544 {
545 Creature* creature = unit->ToCreature();
546 if (!creature)
547 return;
548
549 switch (creature->GetEntry())
550 {
555 case NPC_MANGROVE_ENT:
559 if (!conSpeedAtory)
560 {
562 conSpeedAtory = true;
563 }
564 break;
565 case NPC_IRONBRANCH:
566 case NPC_STONEBARK:
567 case NPC_BRIGHTLEAF:
568 if (!lumberjacked)
569 {
571 lumberjacked = true;
572 }
573 break;
574 default:
575 break;
576 }
577 }
578
579 void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId, WorldObject* /*invoker*/) override
580 {
581 switch (eventId)
582 {
583 // Flame Leviathan's Tower Event triggers
585 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
586 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
587 break;
589 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
590 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
591 break;
593 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
594 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
595 break;
597 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
598 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
599 break;
600
601 // Yogg-Saron Event triggers
603 if (Creature* freya = instance->GetCreature(KeeperGUIDs[0]))
604 freya->AI()->DoAction(4/*ACTION_SANITY_WELLS*/);
605 break;
607 if (Creature* hodir = instance->GetCreature(KeeperGUIDs[1]))
608 hodir->AI()->DoAction(5/*ACTION_FLASH_FREEZE*/);
609 break;
610 }
611 }
612
613 bool SetBossState(uint32 type, EncounterState state) override
614 {
615 if (!InstanceScript::SetBossState(type, state))
616 return false;
617
618 switch (type)
619 {
621 if (state == DONE)
623 break;
624 case DATA_IGNIS:
625 case DATA_RAZORSCALE:
626 case DATA_XT002:
628 case DATA_AURIAYA:
629 case DATA_VEZAX:
630 case DATA_YOGG_SARON:
631 break;
632 case DATA_MIMIRON:
633 if (state == DONE)
635 break;
636 case DATA_FREYA:
637 if (state == DONE)
639 break;
640 case DATA_IRONBRANCH:
641 case DATA_STONEBARK:
642 case DATA_BRIGHTLEAF:
645 trigger->CastSpell(trigger, SPELL_LUMBERJACKED_CREDIT, true);
646 break;
647 case DATA_KOLOGARN:
648 if (state == DONE)
649 {
651 {
652 gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
653 gameObject->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
654 }
656 }
657 break;
658 case DATA_HODIR:
659 if (state == DONE)
660 {
661 if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID))
663 HodirRareCache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
665 HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
666
668 }
669 break;
670 case DATA_THORIM:
671 if (state == DONE)
672 {
673 if (Creature* thorim = GetCreature(DATA_THORIM))
674 {
676 {
677 cache->SetTapList(thorim->GetTapList());
678 cache->SetRespawnTime(cache->GetRespawnDelay());
679 cache->RemoveFlag(GO_FLAG_LOCKED);
680 cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
681 cache->RemoveFlag(GO_FLAG_NODESPAWN);
682 }
683 }
684
686 }
687 else
688 {
691 }
692 break;
693 case DATA_ALGALON:
694 if (state == DONE)
695 {
697 gift->SetRespawnTime(gift->GetRespawnDelay());
698 // get item level (recheck weapons)
699 Map::PlayerList const& players = instance->GetPlayers();
700 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
701 if (Player* player = itr->GetSource())
702 for (uint8 slot = EQUIPMENT_SLOT_MAINHAND; slot <= EQUIPMENT_SLOT_OFFHAND; ++slot)
703 if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
704 if (item->GetItemLevel(player) > _maxWeaponItemLevel)
705 _maxWeaponItemLevel = item->GetItemLevel(player);
706 }
707 else if (state == IN_PROGRESS)
708 {
709 _algalonFirstIntro = false;
710 // get item level (armor cannot be swapped in combat)
711 Map::PlayerList const& players = instance->GetPlayers();
712 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
713 {
714 if (Player* player = itr->GetSource())
715 {
716 for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
717 {
718 if (slot == EQUIPMENT_SLOT_TABARD || slot == EQUIPMENT_SLOT_BODY)
719 continue;
720
721 if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
722 {
723 if (slot >= EQUIPMENT_SLOT_MAINHAND && slot <= EQUIPMENT_SLOT_OFFHAND)
724 {
725 if (item->GetItemLevel(player) > _maxWeaponItemLevel)
726 _maxWeaponItemLevel = item->GetItemLevel(player);
727 }
728 else if (item->GetItemLevel(player) > _maxArmorItemLevel)
729 _maxArmorItemLevel = item->GetItemLevel(player);
730 }
731 }
732 }
733 }
734 }
735 break;
736 }
737
738 return true;
739 }
740
741 void SetData(uint32 type, uint32 data) override
742 {
743 switch (type)
744 {
745 case DATA_COLOSSUS:
746 ColossusData = data;
747 if (data >= 2 && GetBossState(DATA_FLAME_LEVIATHAN) == NOT_STARTED)
748 {
750 }
751 break;
753 HodirRareCacheData = data;
755 {
756 if (Creature* hodir = GetCreature(DATA_HODIR))
758 hodir->RemoveGameObject(gameObject, false);
759 }
760 break;
761 case DATA_UNBROKEN:
762 Unbroken = data != 0;
763 break;
764 case DATA_ILLUSION:
765 illusion = data;
766 break;
768 IsDriveMeCrazyEligible = data ? true : false;
769 break;
771 _algalonSummoned = true;
772 break;
773 default:
774 break;
775 }
776 }
777
778 void SetGuidData(uint32 /*type*/, ObjectGuid /*data*/) override
779 {
780 }
781
782 ObjectGuid GetGuidData(uint32 data) const override
783 {
784 switch (data)
785 {
786 // XT-002 Deconstructor
787 case DATA_TOY_PILE_0:
788 case DATA_TOY_PILE_1:
789 case DATA_TOY_PILE_2:
790 case DATA_TOY_PILE_3:
791 return XTToyPileGUIDs[data - DATA_TOY_PILE_0];
792
793 // Assembly of Iron
795 return AssemblyGUIDs[0];
796 case DATA_MOLGEIM:
797 return AssemblyGUIDs[1];
798 case DATA_BRUNDIR:
799 return AssemblyGUIDs[2];
800
801 // Freya
802 case DATA_BRIGHTLEAF:
803 return ElderGUIDs[0];
804 case DATA_IRONBRANCH:
805 return ElderGUIDs[1];
806 case DATA_STONEBARK:
807 return ElderGUIDs[2];
808
809 // Mimiron
811 return MimironVehicleGUIDs[0];
812 case DATA_VX_001:
813 return MimironVehicleGUIDs[1];
815 return MimironVehicleGUIDs[2];
816
817 // Yogg-Saron
819 return BrainRoomDoorGUIDs[0];
821 return BrainRoomDoorGUIDs[1];
823 return BrainRoomDoorGUIDs[2];
824 case DATA_FREYA_YS:
825 return KeeperGUIDs[0];
826 case DATA_HODIR_YS:
827 return KeeperGUIDs[1];
828 case DATA_THORIM_YS:
829 return KeeperGUIDs[2];
830 case DATA_MIMIRON_YS:
831 return KeeperGUIDs[3];
832 }
833
834 return InstanceScript::GetGuidData(data);
835 }
836
837 uint32 GetData(uint32 type) const override
838 {
839 switch (type)
840 {
841 case DATA_COLOSSUS:
842 return ColossusData;
844 return HodirRareCacheData;
845 case DATA_UNBROKEN:
846 return uint32(Unbroken);
847 case DATA_ILLUSION:
848 return illusion;
850 return keepersCount;
851 default:
852 break;
853 }
854
855 return 0;
856 }
857
858 bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = nullptr */, uint32 /* = 0 */) override
859 {
860 switch (criteriaId)
861 {
869 return illusion == CHAMBER_ILLUSION;
872 return illusion == ICECROWN_ILLUSION;
902 return false;
903 }
904
905 return false;
906 }
907
908 void AfterDataLoad() override
909 {
912
921 }
922
923 void Update(uint32 diff) override
924 {
925 if (_events.Empty())
926 return;
927
928 _events.Update(diff);
929
930 while (uint32 eventId = _events.ExecuteEvent())
931 {
932 switch (eventId)
933 {
935 // Eject all players from vehicles and make them untargetable.
936 // They will be despawned after a while
937 for (auto const& vehicleGuid : LeviathanVehicleGUIDs)
938 if (Creature* vehicleCreature = instance->GetCreature(vehicleGuid))
939 DespawnLeviatanVehicle(vehicleCreature);
940 break;
942 if (Creature* leviathan = GetCreature(DATA_FLAME_LEVIATHAN))
943 leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
945 gameObject->SetGoState(GO_STATE_DESTROYED);
946 break;
947 }
948 }
949 }
950
951 void DespawnLeviatanVehicle(Creature* vehicleCreature)
952 {
953 if (Vehicle* vehicle = vehicleCreature->GetVehicleKit())
954 {
955 vehicle->RemoveAllPassengers();
956 vehicleCreature->SetUninteractible(true);
957 vehicleCreature->DespawnOrUnsummon(5min);
958 }
959 }
960
961 void UpdateDoorState(GameObject* door) override
962 {
963 // Leviathan doors are set to EncounterStateForOpenDoor::NotInProgress except the one it uses to enter the room
964 // which has to be set to EncounterStateForOpenDoor::Done
965 if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
967 else
969 }
970
971 void AddDoor(GameObject* door, bool add) override
972 {
973 // Leviathan doors are South except the one it uses to enter the room
974 // which is North and should not be used for boundary checks in BossAI::IsInBoundary()
975 if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
976 {
977 if (add)
979 else
981
982 if (add)
983 UpdateDoorState(door);
984 }
985 else
986 InstanceScript::AddDoor(door, add);
987 }
988
989 private:
998 };
999
1001 {
1002 return new instance_ulduar_InstanceMapScript(map);
1003 }
1004};
1005
1007{
1008 new instance_ulduar();
1009}
uint8_t uint8
Definition: Define.h:144
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
EncounterState
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
std::vector< ObjectGuid > GuidVector
Definition: ObjectGuid.h:395
@ EQUIPMENT_SLOT_BODY
Definition: Player.h:634
@ EQUIPMENT_SLOT_MAINHAND
Definition: Player.h:646
@ EQUIPMENT_SLOT_TABARD
Definition: Player.h:649
@ EQUIPMENT_SLOT_END
Definition: Player.h:650
@ EQUIPMENT_SLOT_OFFHAND
Definition: Player.h:647
@ EQUIPMENT_SLOT_START
Definition: Player.h:630
#define INVENTORY_SLOT_BAG_0
Definition: Player.h:625
@ HORDE
@ GO_FLAG_NODESPAWN
@ GO_FLAG_NOT_SELECTABLE
@ GO_FLAG_IN_USE
@ GO_FLAG_LOCKED
@ GO_STATE_READY
@ GO_STATE_DESTROYED
@ GO_STATE_ACTIVE
@ REACT_PASSIVE
Definition: UnitDefines.h:506
#define DataHeader
Position const AlgalonLandPos
Position const ObservationRingKeepersPos[4]
Position const YSKeepersPos[4]
void SetImmuneToPC(bool apply) override
Definition: Creature.h:170
void SetReactState(ReactStates st)
Definition: Creature.h:160
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
CreatureAI * AI() const
Definition: Creature.h:214
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
bool Empty() const
Definition: EventMap.h:84
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void SetGoState(GOState state)
void SetFlag(GameObjectFlags flags)
Definition: GameObject.h:274
void SetBossNumber(uint32 number)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual void OnCreatureCreate(Creature *creature) override
void DoCloseDoorOrButton(ObjectGuid guid)
Creature * GetCreature(uint32 type)
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
void LoadDungeonEncounterData(T const &encounters)
void DoUpdateWorldState(int32 worldStateId, int32 value)
virtual void OnCreatureRemove(Creature *creature) override
virtual ObjectGuid GetGuidData(uint32 type) const override
BossInfo * GetBossInfo(uint32 id)
InstanceMap * instance
void AddMinion(Creature *minion, bool add)
EncounterState GetBossState(uint32 id) const
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
virtual void OnGameObjectCreate(GameObject *go) override
virtual void AddDoor(GameObject *door, bool add)
void LoadMinionData(MinionData const *data)
void LoadDoorData(DoorData const *data)
GameObject * GetGameObject(uint32 type)
void LoadBossBoundaries(BossBoundaryData const &data)
virtual void UpdateDoorState(GameObject *door)
void SetHeaders(std::string const &dataHeaders)
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition: Item.h:170
bool isEmpty() const
Definition: LinkedList.h:110
iterator end()
Definition: MapRefManager.h:35
iterator begin()
Definition: MapRefManager.h:34
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty, SmoothPhasingInfo const *smoothPhasingInfo=nullptr)
Definition: Object.cpp:1836
GameObject * GetGameObject(ObjectGuid const &guid)
Definition: Map.cpp:3489
PlayerList const & GetPlayers() const
Definition: Map.h:367
Creature * GetCreature(ObjectGuid const &guid)
Definition: Map.cpp:3479
static ObjectGuid const Empty
Definition: ObjectGuid.h:274
uint64 LowType
Definition: ObjectGuid.h:278
void Clear()
Definition: ObjectGuid.h:286
static Creature * ToCreature(Object *o)
Definition: Object.h:219
uint32 GetEntry() const
Definition: Object.h:161
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
Team GetTeam() const
Definition: Player.h:2235
FROM * GetSource() const
Definition: Reference.h:96
Milliseconds _despawnTimer
Definition: ulduar.h:515
UlduarKeeperDespawnEvent(Creature *owner, Milliseconds despawnTimerOffset=500ms)
bool Execute(uint64, uint32) override
virtual void DoAction(int32)
Definition: UnitAI.h:72
Definition: Unit.h:627
void SetUninteractible(bool apply)
Definition: Unit.cpp:8147
Vehicle * GetVehicleKit() const
Definition: Unit.h:1711
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
InstanceScript * GetInstanceScript(InstanceMap *map) const override
#define MAX_ENCOUNTER
ObjectData const creatureData[]
ObjectData const objectData[]
MinionData const minionData[]
static DoorData const doorData[]
void AddSC_instance_ulduar()
static BossBoundaryData const boundaries
DungeonEncounterData const encounters[]
std::array< GuidSet, static_cast< uint8 >(EncounterDoorBehavior::Max)> door
constexpr float GetPositionX() const
Definition: Position.h:76
uint32 id
Definition: SpawnData.h:104
bool SetBossState(uint32 type, EncounterState state) override
void OnCreatureRemove(Creature *creature) override
void DespawnLeviatanVehicle(Creature *vehicleCreature)
bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const *, Unit const *, uint32) override
uint32 GetCreatureEntry(ObjectGuid::LowType, CreatureData const *data) override
void SetData(uint32 type, uint32 data) override
void ProcessEvent(WorldObject *, uint32 eventId, WorldObject *) override
ObjectGuid GetGuidData(uint32 data) const override
void OnCreatureCreate(Creature *creature) override
void OnGameObjectCreate(GameObject *gameObject) override
void AddDoor(GameObject *door, bool add) override
@ ICECROWN_ILLUSION
Definition: ulduar.h:500
@ STORMWIND_ILLUSION
Definition: ulduar.h:501
@ CHAMBER_ILLUSION
Definition: ulduar.h:499
@ EVENT_DESPAWN_LEVIATHAN_VEHICLES
Definition: ulduar.h:493
@ ACTION_INIT_ALGALON
Definition: ulduar.h:492
@ EVENT_LEVIATHAN_BREAK_DOOR
Definition: ulduar.h:494
@ DATA_KOLOGARN
Definition: ulduar.h:42
@ DATA_ASSEMBLY_OF_IRON
Definition: ulduar.h:41
@ DATA_HODIR
Definition: ulduar.h:44
@ DATA_STONEBARK
Definition: ulduar.h:53
@ DATA_ALGALON
Definition: ulduar.h:50
@ DATA_FLAME_LEVIATHAN
Definition: ulduar.h:37
@ DATA_VEZAX
Definition: ulduar.h:48
@ DATA_BRIGHTLEAF
Definition: ulduar.h:51
@ DATA_XT002
Definition: ulduar.h:40
@ DATA_RAZORSCALE
Definition: ulduar.h:39
@ DATA_AURIAYA
Definition: ulduar.h:43
@ DATA_MIMIRON
Definition: ulduar.h:47
@ DATA_YOGG_SARON
Definition: ulduar.h:49
@ DATA_THORIM
Definition: ulduar.h:45
@ DATA_IGNIS
Definition: ulduar.h:38
@ DATA_IRONBRANCH
Definition: ulduar.h:52
@ DATA_FREYA
Definition: ulduar.h:46
@ DATA_UNBROKEN
Definition: ulduar.h:479
@ MAX_HERALD_WEAPON_ITEMLEVEL
Definition: ulduar.h:481
@ MAX_HERALD_ARMOR_ITEMLEVEL
Definition: ulduar.h:480
@ SPELL_TELEPORT_KEEPER_VISUAL
Definition: ulduar.h:487
@ SPELL_LUMBERJACKED_CREDIT
Definition: ulduar.h:486
@ DATA_SARA
Definition: ulduar.h:428
@ DATA_MIMIRON_ELEVATOR
Definition: ulduar.h:422
@ DATA_SIGILDOOR_02
Definition: ulduar.h:441
@ DATA_TOY_PILE_3
Definition: ulduar.h:405
@ DATA_MIMIRON_BUTTON
Definition: ulduar.h:424
@ DATA_MOLGEIM
Definition: ulduar.h:410
@ DATA_DRIVE_ME_CRAZY
Definition: ulduar.h:435
@ DATA_THORIM_LEVER
Definition: ulduar.h:453
@ DATA_RAZORSCALE_CONTROL
Definition: ulduar.h:399
@ DATA_DELLORAH
Definition: ulduar.h:464
@ DATA_RUNIC_DOOR
Definition: ulduar.h:456
@ DATA_BRUNDIR
Definition: ulduar.h:411
@ DATA_ILLUSION
Definition: ulduar.h:434
@ DATA_TOY_PILE_0
Definition: ulduar.h:402
@ DATA_RUNE_GIANT
Definition: ulduar.h:455
@ DATA_BRANN_BRONZEBEARD_INTRO
Definition: ulduar.h:462
@ DATA_STONE_DOOR
Definition: ulduar.h:457
@ DATA_LORE_KEEPER_OF_NORGANNON
Definition: ulduar.h:463
@ DATA_SIGILDOOR_01
Definition: ulduar.h:440
@ DATA_BRONZEBEARD_RADIO
Definition: ulduar.h:465
@ DATA_XT002_HEART
Definition: ulduar.h:406
@ DATA_THORIM_HARDMODE
Definition: ulduar.h:458
@ DATA_EXPEDITION_COMMANDER
Definition: ulduar.h:398
@ DATA_STEELBREAKER
Definition: ulduar.h:409
@ DATA_LEVIATHAN_MK_II
Definition: ulduar.h:417
@ DATA_AZEROTH
Definition: ulduar.h:449
@ DATA_BRANN_BRONZEBEARD_ALG
Definition: ulduar.h:447
@ DATA_MIMIRON_YS
Definition: ulduar.h:433
@ DATA_KEEPERS_COUNT
Definition: ulduar.h:436
@ DATA_TOY_PILE_1
Definition: ulduar.h:403
@ DATA_FREYA_YS
Definition: ulduar.h:430
@ DATA_HODIR_RARE_CACHE
Definition: ulduar.h:414
@ DATA_VX_001
Definition: ulduar.h:418
@ DATA_SIF
Definition: ulduar.h:452
@ DATA_BRAIN_OF_YOGG_SARON
Definition: ulduar.h:429
@ DATA_UNIVERSE_FLOOR_02
Definition: ulduar.h:444
@ DATA_THORIM_CONTROLLER
Definition: ulduar.h:459
@ DATA_MIMIRON_WORLD_TRIGGER
Definition: ulduar.h:421
@ DATA_UNIVERSE_GLOBE
Definition: ulduar.h:445
@ DATA_GIFT_OF_THE_OBSERVER
Definition: ulduar.h:448
@ DATA_UNIVERSE_FLOOR_01
Definition: ulduar.h:443
@ DATA_ALGALON_SUMMON_STATE
Definition: ulduar.h:439
@ DATA_SIGILDOOR_03
Definition: ulduar.h:442
@ DATA_RUNIC_COLOSSUS
Definition: ulduar.h:454
@ DATA_TOY_PILE_2
Definition: ulduar.h:404
@ DATA_VOICE_OF_YOGG_SARON
Definition: ulduar.h:427
@ DATA_THORIM_YS
Definition: ulduar.h:432
@ DATA_AERIAL_COMMAND_UNIT
Definition: ulduar.h:419
@ DATA_ALGALON_TRAPDOOR
Definition: ulduar.h:446
@ DATA_COMPUTER
Definition: ulduar.h:420
@ DATA_HODIR_YS
Definition: ulduar.h:431
@ DATA_COLOSSUS
Definition: ulduar.h:395
@ GO_DOODAD_UL_SIGILDOOR_03
Definition: ulduar.h:319
@ GO_DOODAD_UL_UNIVERSEGLOBE01
Definition: ulduar.h:322
@ GO_MIMIRON_ELEVATOR
Definition: ulduar.h:295
@ GO_HODIR_ICE_DOOR
Definition: ulduar.h:276
@ GO_BRAIN_ROOM_DOOR_2
Definition: ulduar.h:311
@ GO_XT_002_DOOR
Definition: ulduar.h:259
@ GO_HODIR_RARE_CACHE_OF_WINTER
Definition: ulduar.h:277
@ GO_DOODAD_UL_SIGILDOOR_01
Definition: ulduar.h:317
@ GO_BRAIN_ROOM_DOOR_3
Definition: ulduar.h:312
@ GO_LEVIATHAN_GATE
Definition: ulduar.h:248
@ GO_THORIM_RUNIC_DOOR
Definition: ulduar.h:287
@ GO_GIFT_OF_THE_OBSERVER_10
Definition: ulduar.h:324
@ GO_ARCHIVUM_DOOR
Definition: ulduar.h:263
@ GO_KOLOGARN_BRIDGE
Definition: ulduar.h:268
@ GO_THORIM_LEVER
Definition: ulduar.h:290
@ GO_CACHE_OF_STORMS_HARDMODE_25
Definition: ulduar.h:286
@ GO_THORIM_ENCOUNTER_DOOR
Definition: ulduar.h:289
@ GO_VEZAX_DOOR
Definition: ulduar.h:306
@ GO_BRAIN_ROOM_DOOR_1
Definition: ulduar.h:310
@ GO_RAZOR_HARPOON_4
Definition: ulduar.h:255
@ GO_DOODAD_UL_SIGILDOOR_02
Definition: ulduar.h:318
@ GO_IRON_COUNCIL_DOOR
Definition: ulduar.h:262
@ GO_HODIR_RARE_CACHE_OF_WINTER_HERO
Definition: ulduar.h:278
@ GO_CELESTIAL_PLANETARIUM_ACCESS_25
Definition: ulduar.h:316
@ GO_HODIR_ENTRANCE
Definition: ulduar.h:274
@ GO_THORIM_STONE_DOOR
Definition: ulduar.h:288
@ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03
Definition: ulduar.h:323
@ GO_HODIR_CHEST
Definition: ulduar.h:280
@ GO_KOLOGARN_CHEST
Definition: ulduar.h:267
@ GO_CACHE_OF_STORMS_HARDMODE_10
Definition: ulduar.h:284
@ GO_THORIM_DARK_IRON_PORTCULLIS
Definition: ulduar.h:291
@ GO_LEVIATHAN_DOOR
Definition: ulduar.h:247
@ GO_HODIR_CHEST_HERO
Definition: ulduar.h:279
@ GO_YOGG_SARON_DOOR
Definition: ulduar.h:309
@ GO_CACHE_OF_STORMS_10
Definition: ulduar.h:283
@ GO_RAZOR_HARPOON_3
Definition: ulduar.h:254
@ GO_RAZOR_HARPOON_2
Definition: ulduar.h:253
@ GO_DOODAD_UL_UNIVERSEFLOOR_01
Definition: ulduar.h:320
@ GO_MIMIRON_BUTTON
Definition: ulduar.h:296
@ GO_MIMIRON_DOOR_3
Definition: ulduar.h:299
@ GO_CACHE_OF_STORMS_25
Definition: ulduar.h:285
@ GO_MIMIRON_DOOR_1
Definition: ulduar.h:297
@ GO_HODIR_DOOR
Definition: ulduar.h:275
@ GO_RAZOR_HARPOON_1
Definition: ulduar.h:252
@ GO_GIFT_OF_THE_OBSERVER_25
Definition: ulduar.h:325
@ GO_KOLOGARN_CHEST_HERO
Definition: ulduar.h:266
@ GO_CELESTIAL_PLANETARIUM_ACCESS_10
Definition: ulduar.h:315
@ GO_DOODAD_UL_UNIVERSEFLOOR_02
Definition: ulduar.h:321
@ GO_MIMIRON_TRAM
Definition: ulduar.h:294
@ GO_MIMIRON_DOOR_2
Definition: ulduar.h:298
@ GO_ANCIENT_GATE_OF_THE_KEEPERS
Definition: ulduar.h:271
@ EVENT_TOWER_OF_STORM_DESTROYED
Definition: ulduar.h:330
@ EVENT_HODIRS_PROTECTIVE_GAZE_PROC
Definition: ulduar.h:335
@ EVENT_TOWER_OF_LIFE_DESTROYED
Definition: ulduar.h:333
@ EVENT_ACTIVATE_SANITY_WELL
Definition: ulduar.h:334
@ EVENT_TOWER_OF_FLAMES_DESTROYED
Definition: ulduar.h:332
@ EVENT_TOWER_OF_FROST_DESTROYED
Definition: ulduar.h:331
@ ACTION_TOWER_OF_FLAMES_DESTROYED
Definition: ulduar.h:342
@ ACTION_TOWER_OF_STORM_DESTROYED
Definition: ulduar.h:340
@ ACTION_MOVE_TO_CENTER_POSITION
Definition: ulduar.h:344
@ ACTION_TOWER_OF_LIFE_DESTROYED
Definition: ulduar.h:343
@ ACTION_TOWER_OF_FROST_DESTROYED
Definition: ulduar.h:341
@ WORLD_STATE_YOGG_SARON_KEEPERS
Definition: ulduar.h:471
@ NPC_VEZAX
Definition: ulduar.h:82
@ NPC_BRIGHTLEAF
Definition: ulduar.h:138
@ NPC_NATURES_BLADE
Definition: ulduar.h:166
@ NPC_FLAME_LEVIATHAN
Definition: ulduar.h:112
@ NPC_COMPUTER
Definition: ulduar.h:134
@ NPC_MOLGEIM
Definition: ulduar.h:69
@ NPC_FIELD_MEDIC_PENNY
Definition: ulduar.h:156
@ NPC_LEVIATHAN_MKII
Definition: ulduar.h:120
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_01
Definition: ulduar.h:239
@ NPC_HODIR_OBSERVATION_RING
Definition: ulduar.h:200
@ NPC_BRUNDIR
Definition: ulduar.h:70
@ NPC_GUARDIAN_LASHER
Definition: ulduar.h:162
@ NPC_AMIRA_BLAZEWEAVER
Definition: ulduar.h:150
@ NPC_MIMIRON_OBSERVATION_RING
Definition: ulduar.h:203
@ NPC_XT_TOY_PILE
Definition: ulduar.h:67
@ NPC_UNLEASHED_DARK_MATTER
Definition: ulduar.h:241
@ NPC_HEART_OF_DECONSTRUCTOR
Definition: ulduar.h:100
@ NPC_IRONROOT_LASHER
Definition: ulduar.h:165
@ NPC_MISGUIDED_NYMPH
Definition: ulduar.h:161
@ NPC_BATTLE_PRIEST_ELIZA
Definition: ulduar.h:154
@ NPC_BRAIN_OF_YOGG_SARON
Definition: ulduar.h:219
@ NPC_WORLD_TRIGGER_MIMIRON
Definition: ulduar.h:133
@ NPC_HIGH_EXPLORER_DELLORAH
Definition: ulduar.h:110
@ NPC_YOGG_SARON
Definition: ulduar.h:83
@ NPC_THORIM_YS
Definition: ulduar.h:209
@ NPC_SARA
Definition: ulduar.h:198
@ NPC_FOREST_SWARMER
Definition: ulduar.h:163
@ NPC_SISSY_FLAMECUFFS
Definition: ulduar.h:153
@ NPC_FREYA
Definition: ulduar.h:81
@ NPC_MERCENARY_CAPTAIN_A
Definition: ulduar.h:175
@ NPC_EIVI_NIGHTFEATHER
Definition: ulduar.h:144
@ NPC_THORIM
Definition: ulduar.h:80
@ NPC_STONEBARK
Definition: ulduar.h:139
@ NPC_SANITY_WELL
Definition: ulduar.h:226
@ NPC_EXPEDITION_COMMANDER
Definition: ulduar.h:91
@ NPC_ALGALON
Definition: ulduar.h:84
@ NPC_XT002
Definition: ulduar.h:66
@ NPC_FREYA_OBSERVATION_RING
Definition: ulduar.h:201
@ NPC_HODIR_YS
Definition: ulduar.h:207
@ NPC_MERCENARY_SOLDIER_H
Definition: ulduar.h:178
@ NPC_RUNE_GIANT
Definition: ulduar.h:181
@ NPC_THORIM_OBSERVATION_RING
Definition: ulduar.h:202
@ NPC_HODIR
Definition: ulduar.h:79
@ NPC_RAZORSCALE_CONTROLLER
Definition: ulduar.h:95
@ NPC_BRANN_BRONZEBEARD_INTRO
Definition: ulduar.h:104
@ NPC_BRONZEBEARD_RADIO
Definition: ulduar.h:111
@ NPC_SALVAGED_SIEGE_ENGINE
Definition: ulduar.h:61
@ NPC_AERIAL_COMMAND_UNIT
Definition: ulduar.h:122
@ NPC_KAR_GREYCLOUD
Definition: ulduar.h:143
@ NPC_THORIM_CONTROLLER
Definition: ulduar.h:195
@ NPC_RUNIC_COLOSSUS
Definition: ulduar.h:180
@ NPC_MISSY_FLAMECUFFS
Definition: ulduar.h:152
@ NPC_VX_001
Definition: ulduar.h:121
@ NPC_MANGROVE_ENT
Definition: ulduar.h:164
@ NPC_BATTLE_PRIEST_GINA
Definition: ulduar.h:155
@ NPC_IGNIS
Definition: ulduar.h:63
@ NPC_LORE_KEEPER_OF_NORGANNON
Definition: ulduar.h:109
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_02
Definition: ulduar.h:240
@ NPC_SPIRITWALKER_YONA
Definition: ulduar.h:147
@ NPC_SALVAGED_CHOPPER
Definition: ulduar.h:62
@ NPC_ELEMENTALIST_MAHFUUN
Definition: ulduar.h:148
@ NPC_GUARDIAN_OF_LIFE
Definition: ulduar.h:167
@ NPC_MIMIRON_YS
Definition: ulduar.h:208
@ NPC_TOR_GREYCLOUD
Definition: ulduar.h:142
@ NPC_STEELBREAKER
Definition: ulduar.h:68
@ NPC_VOICE_OF_YOGG_SARON
Definition: ulduar.h:204
@ NPC_AZEROTH
Definition: ulduar.h:232
@ NPC_MERCENARY_CAPTAIN_H
Definition: ulduar.h:176
@ NPC_KOLOGARN
Definition: ulduar.h:71
@ NPC_IRONBRANCH
Definition: ulduar.h:137
@ NPC_AURIAYA
Definition: ulduar.h:77
@ NPC_SIF
Definition: ulduar.h:193
@ NPC_RAZORSCALE
Definition: ulduar.h:64
@ NPC_SPIRITWALKER_TARA
Definition: ulduar.h:146
@ NPC_ELLIE_NIGHTFEATHER
Definition: ulduar.h:145
@ NPC_ALGALON_VOID_ZONE_VISUAL_STALKER
Definition: ulduar.h:238
@ NPC_MERCENARY_SOLDIER_A
Definition: ulduar.h:177
@ NPC_FREYA_YS
Definition: ulduar.h:206
@ NPC_BRANN_BRONZBEARD_ALG
Definition: ulduar.h:231
@ NPC_CORRUPTED_SERVITOR
Definition: ulduar.h:160
@ NPC_VEESHA_BLAZEWEAVER
Definition: ulduar.h:151
@ NPC_FREYA_ACHIEVE_TRIGGER
Definition: ulduar.h:170
@ NPC_MIMIRON
Definition: ulduar.h:78
@ NPC_ELEMENTALIST_AVUUN
Definition: ulduar.h:149
@ NPC_SALVAGED_DEMOLISHER
Definition: ulduar.h:60
@ NPC_FIELD_MEDIC_JESSI
Definition: ulduar.h:157
#define UlduarScriptName
Definition: ulduar.h:26
@ CRITERIA_C_O_U_VEZAX_25
Definition: ulduar.h:388
@ CRITERIA_C_O_U_THORIM_10
Definition: ulduar.h:371
@ CRITERIA_C_O_U_THORIM_25
Definition: ulduar.h:385
@ CRITERIA_C_O_U_IRON_COUNCIL_25
Definition: ulduar.h:381
@ CRITERIA_WAITS_DREAMING_CHAMBER_25
Definition: ulduar.h:353
@ CRITERIA_C_O_U_KOLOGARN_10
Definition: ulduar.h:368
@ CRITERIA_C_O_U_IGNIS_25
Definition: ulduar.h:378
@ CRITERIA_WAITS_DREAMING_STORMWIND_25
Definition: ulduar.h:352
@ CRITERIA_DRIVE_ME_CRAZY_25
Definition: ulduar.h:359
@ CRITERIA_C_O_U_XT002_10
Definition: ulduar.h:366
@ CRITERIA_C_O_U_AURIAYA_10
Definition: ulduar.h:369
@ CRITERIA_C_O_U_MIMIRON_10
Definition: ulduar.h:373
@ CRITERIA_WAITS_DREAMING_STORMWIND_10
Definition: ulduar.h:355
@ CRITERIA_WAITS_DREAMING_ICECROWN_10
Definition: ulduar.h:357
@ CRITERIA_C_O_U_XT002_25
Definition: ulduar.h:380
@ CRITERIA_C_O_U_LEVIATHAN_10
Definition: ulduar.h:363
@ CRITERIA_C_O_U_IGNIS_10
Definition: ulduar.h:364
@ CRITERIA_C_O_U_YOGG_SARON_10
Definition: ulduar.h:375
@ CRITERIA_CON_SPEED_ATORY
Definition: ulduar.h:349
@ CRITERIA_C_O_U_HODIR_25
Definition: ulduar.h:384
@ CRITERIA_C_O_U_VEZAX_10
Definition: ulduar.h:374
@ CRITERIA_C_O_U_FREYA_10
Definition: ulduar.h:372
@ CRITERIA_C_O_U_KOLOGARN_25
Definition: ulduar.h:382
@ CRITERIA_C_O_U_RAZORSCALE_25
Definition: ulduar.h:379
@ CRITERIA_WAITS_DREAMING_CHAMBER_10
Definition: ulduar.h:356
@ CRITERIA_C_O_U_RAZORSCALE_10
Definition: ulduar.h:365
@ CRITERIA_C_O_U_HODIR_10
Definition: ulduar.h:370
@ CRITERIA_LUMBERJACKED
Definition: ulduar.h:350
@ CRITERIA_DRIVE_ME_CRAZY_10
Definition: ulduar.h:358
@ CRITERIA_HERALD_OF_TITANS
Definition: ulduar.h:360
@ CRITERIA_C_O_U_LEVIATHAN_25
Definition: ulduar.h:377
@ CRITERIA_C_O_U_AURIAYA_25
Definition: ulduar.h:383
@ CRITERIA_WAITS_DREAMING_ICECROWN_25
Definition: ulduar.h:354
@ CRITERIA_C_O_U_FREYA_25
Definition: ulduar.h:386
@ CRITERIA_C_O_U_YOGG_SARON_25
Definition: ulduar.h:389
@ CRITERIA_C_O_U_IRON_COUNCIL_10
Definition: ulduar.h:367
@ CRITERIA_C_O_U_MIMIRON_25
Definition: ulduar.h:387