TrinityCore
Loading...
Searching...
No Matches
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 "GameObject.h"
22#include "InstanceScript.h"
23#include "Item.h"
24#include "Map.h"
25#include "Player.h"
26#include "ScriptMgr.h"
27#include "TemporarySummon.h"
28#include "Vehicle.h"
29#include "WorldStatePackets.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
74
82
119
142
143UlduarKeeperDespawnEvent::UlduarKeeperDespawnEvent(Creature* owner, Milliseconds despawnTimerOffset) : _owner(owner), _despawnTimer(despawnTimerOffset)
144{
145}
146
147bool UlduarKeeperDespawnEvent::Execute(uint64 /*eventTime*/, uint32 /*updateTime*/)
148{
151 return true;
152}
153
155{
156 public:
158
160 {
189
190 // Creatures
192
195
200
201 // GameObjects
211
213
214 // Miscellaneous
224
226 {
227 packet.Worldstates.emplace_back(WORLD_STATE_ALGALON_TIMER_ENABLED, (_algalonTimer && _algalonTimer <= 60) ? 1 : 0);
228 packet.Worldstates.emplace_back(WORLD_STATE_ALGALON_DESPAWN_TIMER, std::min<int32>(_algalonTimer, 60));
229 }
230
231 void OnPlayerEnter(Player* player) override
232 {
233 if (!TeamInInstance)
234 TeamInInstance = player->GetTeam();
235
236 if (_summonAlgalon)
237 {
238 _summonAlgalon = false;
240 if (_algalonTimer && _algalonTimer <= 60)
241 algalon->AI()->DoAction(ACTION_INIT_ALGALON);
242 else
243 algalon->SetImmuneToPC(false);
244 }
245
246 // Keepers at Observation Ring
248 {
251 }
253 {
256 }
258 {
261 }
263 {
266 }
267
268 // Keepers in Yogg-Saron's room
269 if (_summonYSKeeper[0])
271 if (_summonYSKeeper[1])
273 if (_summonYSKeeper[2])
275 if (_summonYSKeeper[3])
277 }
278
279 void OnCreatureCreate(Creature* creature) override
280 {
282
283 switch (creature->GetEntry())
284 {
289 DespawnLeviatanVehicle(creature);
290 else
291 LeviathanVehicleGUIDs.push_back(creature->GetGUID());
292 break;
293
294 // XT-002 Deconstructor
295 case NPC_XT_TOY_PILE:
296 for (uint8 i = 0; i < 4; ++i)
297 {
298 if (!XTToyPileGUIDs[i])
299 {
300 XTToyPileGUIDs[i] = creature->GetGUID();
301 break;
302 }
303 }
304 break;
305
306 // Assembly of Iron
307 case NPC_STEELBREAKER:
308 AssemblyGUIDs[0] = creature->GetGUID();
309 AddMinion(creature, true);
310 break;
311 case NPC_MOLGEIM:
312 AssemblyGUIDs[1] = creature->GetGUID();
313 AddMinion(creature, true);
314 break;
315 case NPC_BRUNDIR:
316 AssemblyGUIDs[2] = creature->GetGUID();
317 AddMinion(creature, true);
318 break;
319
320 // Freya
321 case NPC_IRONBRANCH:
322 ElderGUIDs[0] = creature->GetGUID();
324 creature->DespawnOrUnsummon();
325 break;
326 case NPC_BRIGHTLEAF:
327 ElderGUIDs[1] = creature->GetGUID();
329 creature->DespawnOrUnsummon();
330 break;
331 case NPC_STONEBARK:
332 ElderGUIDs[2] = creature->GetGUID();
334 creature->DespawnOrUnsummon();
335 break;
337 FreyaAchieveTriggerGUID = creature->GetGUID();
338 break;
339
340 // Mimiron
342 MimironVehicleGUIDs[0] = creature->GetGUID();
343 break;
344 case NPC_VX_001:
345 MimironVehicleGUIDs[1] = creature->GetGUID();
346 break;
348 MimironVehicleGUIDs[2] = creature->GetGUID();
349 break;
350
351 // Yogg-Saron
352 case NPC_FREYA_YS:
353 KeeperGUIDs[0] = creature->GetGUID();
354 _summonYSKeeper[0] = false;
355 SaveToDB();
356 ++keepersCount;
357 break;
358 case NPC_HODIR_YS:
359 KeeperGUIDs[1] = creature->GetGUID();
360 _summonYSKeeper[1] = false;
361 SaveToDB();
362 ++keepersCount;
363 break;
364 case NPC_THORIM_YS:
365 KeeperGUIDs[2] = creature->GetGUID();
366 _summonYSKeeper[2] = false;
367 SaveToDB();
368 ++keepersCount;
369 break;
370 case NPC_MIMIRON_YS:
371 KeeperGUIDs[3] = creature->GetGUID();
372 _summonYSKeeper[3] = false;
373 SaveToDB();
374 ++keepersCount;
375 break;
376 case NPC_SANITY_WELL:
377 creature->SetReactState(REACT_PASSIVE);
378 break;
379
380 // Algalon
388 if (Creature* algalon = GetCreature(DATA_ALGALON))
389 algalon->AI()->JustSummoned(creature);
390 break;
391 }
392 }
393
394 uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
395 {
396 if (!TeamInInstance)
397 {
398 Map::PlayerList const& Players = instance->GetPlayers();
399 if (!Players.isEmpty())
400 if (Player* player = Players.begin()->GetSource())
401 TeamInInstance = player->GetTeam();
402 }
403
404 uint32 entry = data->id;
405 switch (entry)
406 {
411 default:
412 return entry;
413 }
414 }
415
416 void OnCreatureRemove(Creature* creature) override
417 {
419
420 switch (creature->GetEntry())
421 {
422 case NPC_XT_TOY_PILE:
423 for (uint8 i = 0; i < 4; ++i)
424 {
425 if (XTToyPileGUIDs[i] == creature->GetGUID())
426 {
428 break;
429 }
430 }
431 break;
432 case NPC_STEELBREAKER:
433 case NPC_MOLGEIM:
434 case NPC_BRUNDIR:
435 AddMinion(creature, false);
436 break;
437 default:
438 break;
439 }
440 }
441
442 void OnGameObjectCreate(GameObject* gameObject) override
443 {
445
446 switch (gameObject->GetEntry())
447 {
450 KologarnChestGUID = gameObject->GetGUID();
451 break;
453 KologarnBridgeGUID = gameObject->GetGUID();
455 HandleGameObject(ObjectGuid::Empty, false, gameObject);
456 break;
459 break;
462 CacheOfStormsGUID = gameObject->GetGUID();
463 break;
466 CacheOfStormsHardmodeGUID = gameObject->GetGUID();
467 break;
470 HodirRareCacheGUID = gameObject->GetGUID();
471 break;
473 case GO_HODIR_CHEST:
474 HodirChestGUID = gameObject->GetGUID();
475 break;
476 case GO_MIMIRON_TRAM:
477 MimironTramGUID = gameObject->GetGUID();
478 break;
480 LeviathanGateGUID = gameObject->GetGUID();
482 gameObject->SetGoState(GO_STATE_DESTROYED);
483 break;
485 BrainRoomDoorGUIDs[0] = gameObject->GetGUID();
486 break;
488 BrainRoomDoorGUIDs[1] = gameObject->GetGUID();
489 break;
491 BrainRoomDoorGUIDs[2] = gameObject->GetGUID();
492 break;
496 gameObject->SetFlag(GO_FLAG_IN_USE);
497 break;
501 gameObject->SetGoState(GO_STATE_ACTIVE);
502 break;
503 default:
504 break;
505 }
506 }
507
508 void OnUnitDeath(Unit* unit) override
509 {
510 // Champion/Conqueror of Ulduar
511 if (unit->GetTypeId() == TYPEID_PLAYER)
512 {
513 for (uint8 i = 0; i < DATA_ALGALON; ++i)
514 {
515 if (GetBossState(i) == IN_PROGRESS)
516 {
517 _CoUAchivePlayerDeathMask |= (1 << i);
518 SaveToDB();
519 }
520 }
521 }
522
523 Creature* creature = unit->ToCreature();
524 if (!creature)
525 return;
526
527 switch (creature->GetEntry())
528 {
533 case NPC_MANGROVE_ENT:
537 if (!conSpeedAtory)
538 {
540 conSpeedAtory = true;
541 }
542 break;
543 case NPC_IRONBRANCH:
544 case NPC_STONEBARK:
545 case NPC_BRIGHTLEAF:
546 if (!lumberjacked)
547 {
549 lumberjacked = true;
550 }
551 break;
552 default:
553 break;
554 }
555 }
556
557 void ProcessEvent(WorldObject* /*gameObject*/, uint32 eventId) override
558 {
559 switch (eventId)
560 {
561 // Flame Leviathan's Tower Event triggers
563 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
564 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_STORM_DESTROYED);
565 break;
567 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
568 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FROST_DESTROYED);
569 break;
571 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
572 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_FLAMES_DESTROYED);
573 break;
575 if (Creature* flameLeviathan = GetCreature(DATA_FLAME_LEVIATHAN))
576 flameLeviathan->AI()->DoAction(ACTION_TOWER_OF_LIFE_DESTROYED);
577 break;
578
579 // Hodir Event triggers
581 if (Creature* hodir = GetCreature(DATA_HODIR))
582 hodir->AI()->DoAction(ACTION_INITIAL_AGGRO_HODIR);
583 break;
585 if (Creature* hodir = GetCreature(DATA_HODIR))
586 hodir->AI()->DoAction(ACTION_CACHE_SHATTERED);
587 if (GameObject* hodirRareCache = instance->GetGameObject(HodirRareCacheGUID))
588 hodirRareCache->ActivateObject(GameObjectActions(GameObjectActions::Despawn));
589 break;
591 if (Creature* hodir = GetCreature(DATA_HODIR))
592 hodir->AI()->DoAction(ACTION_FLASH_FREEZE_FINISHED);
593 break;
594
595 // Yogg-Saron Event triggers
597 if (Creature* freya = instance->GetCreature(KeeperGUIDs[0]))
598 freya->AI()->DoAction(4/*ACTION_SANITY_WELLS*/);
599 break;
601 if (Creature* hodir = instance->GetCreature(KeeperGUIDs[1]))
602 hodir->AI()->DoAction(5/*ACTION_FLASH_FREEZE*/);
603 break;
604 }
605 }
606
607 bool SetBossState(uint32 type, EncounterState state) override
608 {
609 if (!InstanceScript::SetBossState(type, state))
610 return false;
611
612 switch (type)
613 {
615 if (state == DONE)
617 break;
618 case DATA_IGNIS:
619 case DATA_RAZORSCALE:
620 case DATA_XT002:
622 case DATA_AURIAYA:
623 case DATA_VEZAX:
624 case DATA_YOGG_SARON:
625 break;
626 case DATA_MIMIRON:
627 if (state == DONE)
629 break;
630 case DATA_FREYA:
631 if (state == DONE)
633 break;
634 case DATA_IRONBRANCH:
635 case DATA_STONEBARK:
636 case DATA_BRIGHTLEAF:
639 trigger->CastSpell(trigger, SPELL_LUMBERJACKED_CREDIT, true);
640 break;
641 case DATA_KOLOGARN:
642 if (state == DONE)
643 {
645 {
646 gameObject->SetRespawnTime(gameObject->GetRespawnDelay());
647 gameObject->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
648 }
650 }
651 break;
652 case DATA_HODIR:
653 if (state == DONE)
654 {
655 if (GameObject* hodirRareCache = instance->GetGameObject(HodirRareCacheGUID))
656 hodirRareCache->ActivateObject(GameObjectActions(GameObjectActions::MakeActive));
658 hodirChest->ActivateObject(GameObjectActions(GameObjectActions::MakeActive));
659
661 }
662 break;
663 case DATA_THORIM:
664 if (state == DONE)
665 {
666 if (Creature* thorim = GetCreature(DATA_THORIM))
667 {
669 {
670 cache->SetLootRecipient(thorim->GetLootRecipient());
671 cache->SetRespawnTime(cache->GetRespawnDelay());
673 }
674 }
675
677 }
678 else
679 {
682 }
683 break;
684 case DATA_ALGALON:
685 if (state == DONE)
686 {
690 _algalonTimer = 61;
692 gift->SetRespawnTime(gift->GetRespawnDelay());
693 // get item level (recheck weapons)
694 Map::PlayerList const& players = instance->GetPlayers();
695 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
696 if (Player* player = itr->GetSource())
697 for (uint8 slot = EQUIPMENT_SLOT_MAINHAND; slot <= EQUIPMENT_SLOT_RANGED; ++slot)
698 if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
699 if (item->GetTemplate()->ItemLevel > _maxWeaponItemLevel)
700 _maxWeaponItemLevel = item->GetTemplate()->ItemLevel;
701 }
702 else if (state == IN_PROGRESS)
703 {
704 // get item level (armor cannot be swapped in combat)
705 Map::PlayerList const& players = instance->GetPlayers();
706 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
707 {
708 if (Player* player = itr->GetSource())
709 {
710 for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
711 {
712 if (slot == EQUIPMENT_SLOT_TABARD || slot == EQUIPMENT_SLOT_BODY)
713 continue;
714
715 if (Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot))
716 {
717 if (slot >= EQUIPMENT_SLOT_MAINHAND && slot <= EQUIPMENT_SLOT_RANGED)
718 {
719 if (item->GetTemplate()->ItemLevel > _maxWeaponItemLevel)
720 _maxWeaponItemLevel = item->GetTemplate()->ItemLevel;
721 }
722 else if (item->GetTemplate()->ItemLevel > _maxArmorItemLevel)
723 _maxArmorItemLevel = item->GetTemplate()->ItemLevel;
724 }
725 }
726 }
727 }
728 }
729 break;
730 }
731
732 return true;
733 }
734
735 void SetData(uint32 type, uint32 data) override
736 {
737 switch (type)
738 {
739 case DATA_COLOSSUS:
740 ColossusData = data;
741 if (data >= 2 && GetBossState(DATA_FLAME_LEVIATHAN) == NOT_STARTED)
742 {
744 SaveToDB();
745 }
746 break;
747 case DATA_UNBROKEN:
748 Unbroken = data != 0;
749 break;
750 case DATA_ILLUSION:
751 illusion = data;
752 break;
754 IsDriveMeCrazyEligible = data ? true : false;
755 break;
759 _algalonTimer = 60;
762 break;
764 _algalonSummoned = true;
765 break;
766 default:
767 break;
768 }
769 }
770
771 void SetGuidData(uint32 /*type*/, ObjectGuid /*data*/) override
772 {
773 }
774
775 ObjectGuid GetGuidData(uint32 data) const override
776 {
777 switch (data)
778 {
779 // XT-002 Deconstructor
780 case DATA_TOY_PILE_0:
781 case DATA_TOY_PILE_1:
782 case DATA_TOY_PILE_2:
783 case DATA_TOY_PILE_3:
784 return XTToyPileGUIDs[data - DATA_TOY_PILE_0];
785
786 // Assembly of Iron
788 return AssemblyGUIDs[0];
789 case DATA_MOLGEIM:
790 return AssemblyGUIDs[1];
791 case DATA_BRUNDIR:
792 return AssemblyGUIDs[2];
793
794 // Freya
795 case DATA_BRIGHTLEAF:
796 return ElderGUIDs[0];
797 case DATA_IRONBRANCH:
798 return ElderGUIDs[1];
799 case DATA_STONEBARK:
800 return ElderGUIDs[2];
801
802 // Mimiron
804 return MimironVehicleGUIDs[0];
805 case DATA_VX_001:
806 return MimironVehicleGUIDs[1];
808 return MimironVehicleGUIDs[2];
809
810 // Yogg-Saron
812 return BrainRoomDoorGUIDs[0];
814 return BrainRoomDoorGUIDs[1];
816 return BrainRoomDoorGUIDs[2];
817 case DATA_FREYA_YS:
818 return KeeperGUIDs[0];
819 case DATA_HODIR_YS:
820 return KeeperGUIDs[1];
821 case DATA_THORIM_YS:
822 return KeeperGUIDs[2];
823 case DATA_MIMIRON_YS:
824 return KeeperGUIDs[3];
825 }
826
827 return InstanceScript::GetGuidData(data);
828 }
829
830 uint32 GetData(uint32 type) const override
831 {
832 switch (type)
833 {
834 case DATA_COLOSSUS:
835 return ColossusData;
836 case DATA_UNBROKEN:
837 return uint32(Unbroken);
838 case DATA_ILLUSION:
839 return illusion;
841 return keepersCount;
843 switch (TeamInInstance)
844 {
845 default: return 0;
846 case ALLIANCE: return 1;
847 case HORDE: return 2;
848 }
849 default:
850 break;
851 }
852
853 return 0;
854 }
855
856 bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const*, Unit const* /* = nullptr */, uint32 /* = 0 */) override
857 {
858 switch (criteriaId)
859 {
867 return illusion == CHAMBER_ILLUSION;
870 return illusion == ICECROWN_ILLUSION;
876 return keepersCount <= 3;
879 return keepersCount <= 2;
882 return keepersCount <= 1;
886 return keepersCount == 0;
889 return (_CoUAchivePlayerDeathMask & (1 << DATA_FLAME_LEVIATHAN)) == 0;
892 return (_CoUAchivePlayerDeathMask & (1 << DATA_IGNIS)) == 0;
895 return (_CoUAchivePlayerDeathMask & (1 << DATA_RAZORSCALE)) == 0;
898 return (_CoUAchivePlayerDeathMask & (1 << DATA_XT002)) == 0;
904 return (_CoUAchivePlayerDeathMask & (1 << DATA_KOLOGARN)) == 0;
907 return (_CoUAchivePlayerDeathMask & (1 << DATA_AURIAYA)) == 0;
910 return (_CoUAchivePlayerDeathMask & (1 << DATA_HODIR)) == 0;
913 return (_CoUAchivePlayerDeathMask & (1 << DATA_THORIM)) == 0;
916 return (_CoUAchivePlayerDeathMask & (1 << DATA_FREYA)) == 0;
919 return (_CoUAchivePlayerDeathMask & (1 << DATA_MIMIRON)) == 0;
922 return (_CoUAchivePlayerDeathMask & (1 << DATA_VEZAX)) == 0;
925 return (_CoUAchivePlayerDeathMask & (1 << DATA_YOGG_SARON)) == 0;
926 }
927
928 return false;
929 }
930
931 void WriteSaveDataMore(std::ostringstream& data) override
932 {
933 data << ColossusData << ' ' << _algalonTimer << ' ' << uint32(_algalonSummoned ? 1 : 0);
934
935 for (uint8 i = 0; i < 4; ++i)
936 data << ' ' << uint32(!KeeperGUIDs[i].IsEmpty() ? 1 : 0);
937
938 data << ' ' << _CoUAchivePlayerDeathMask;
939 }
940
941 void ReadSaveDataMore(std::istringstream& data) override
942 {
943 uint32 tempState;
944 data >> tempState;
945 SetData(DATA_COLOSSUS, tempState);
946
947 data >> _algalonTimer;
948 data >> tempState;
949 _algalonSummoned = tempState != 0;
951 {
952 _summonAlgalon = true;
953 if (_algalonTimer && _algalonTimer <= 60)
954 {
958 }
959 }
960
961 for (uint8 i = 0; i < 4; ++i)
962 {
963 data >> tempState;
964 _summonYSKeeper[i] = tempState != 0;
965 }
966
975
977 }
978
979 void Update(uint32 diff) override
980 {
981 if (_events.Empty())
982 return;
983
984 _events.Update(diff);
985
986 while (uint32 eventId = _events.ExecuteEvent())
987 {
988 switch (eventId)
989 {
991 SaveToDB();
993 if (_algalonTimer)
995 else
996 {
999 if (Creature* algalon = GetCreature(DATA_ALGALON))
1000 algalon->AI()->DoAction(EVENT_DESPAWN_ALGALON);
1001 }
1002 break;
1004 // Eject all players from vehicles and make them untargetable.
1005 // They will be despawned after a while
1006 for (auto const& vehicleGuid : LeviathanVehicleGUIDs)
1007 if (Creature* vehicleCreature = instance->GetCreature(vehicleGuid))
1008 DespawnLeviatanVehicle(vehicleCreature);
1009 break;
1011 if (Creature* leviathan = GetCreature(DATA_FLAME_LEVIATHAN))
1012 leviathan->AI()->DoAction(ACTION_MOVE_TO_CENTER_POSITION);
1014 gameObject->SetGoState(GO_STATE_DESTROYED);
1015 break;
1016 }
1017 }
1018 }
1019
1020 void DespawnLeviatanVehicle(Creature* vehicleCreature)
1021 {
1022 if (Vehicle* vehicle = vehicleCreature->GetVehicleKit())
1023 {
1024 vehicle->RemoveAllPassengers();
1025 vehicleCreature->SetUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
1026 vehicleCreature->DespawnOrUnsummon(5min);
1027 }
1028 }
1029
1030 void UpdateDoorState(GameObject* door) override
1031 {
1032 // Leviathan doors are set to DOOR_TYPE_ROOM except the one it uses to enter the room
1033 // which has to be set to DOOR_TYPE_PASSAGE
1034 if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
1036 else
1038 }
1039
1040 void AddDoor(GameObject* door, bool add) override
1041 {
1042 // Leviathan doors are South except the one it uses to enter the room
1043 // which is North and should not be used for boundary checks in BossAI::IsInBoundary()
1044 if (door->GetEntry() == GO_LEVIATHAN_DOOR && door->GetPositionX() > 400.f)
1045 {
1046 if (add)
1048 else
1050
1051 if (add)
1052 UpdateDoorState(door);
1053 }
1054 else
1055 InstanceScript::AddDoor(door, add);
1056 }
1057
1058 private:
1068 };
1069
1071 {
1072 return new instance_ulduar_InstanceMapScript(map);
1073 }
1074};
1075
1077{
1078 new instance_ulduar();
1079}
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:122
uint8_t uint8
Definition Define.h:135
uint64_t uint64
Definition Define.h:132
uint32_t uint32
Definition Define.h:133
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
GameObjectActions
EncounterState
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
@ DOOR_TYPE_SPAWN_HOLE
@ DOOR_TYPE_ROOM
@ DOOR_TYPE_PASSAGE
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
std::vector< ObjectGuid > GuidVector
Definition ObjectGuid.h:262
@ EQUIPMENT_SLOT_BODY
Definition Player.h:555
@ EQUIPMENT_SLOT_MAINHAND
Definition Player.h:567
@ EQUIPMENT_SLOT_TABARD
Definition Player.h:570
@ EQUIPMENT_SLOT_END
Definition Player.h:571
@ EQUIPMENT_SLOT_START
Definition Player.h:551
@ EQUIPMENT_SLOT_RANGED
Definition Player.h:569
#define INVENTORY_SLOT_BAG_0
Definition Player.h:547
@ ALLIANCE
@ 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
@ UNIT_FLAG_UNINTERACTIBLE
#define DataHeader
Position const AlgalonLandPos
Position const ObservationRingKeepersPos[4]
Position const YSKeepersPos[4]
void SetImmuneToPC(bool apply) override
Definition Creature.h:129
void SetLootRecipient(Unit *unit, bool withGroup=true)
void SetReactState(ReactStates st)
Definition Creature.h:119
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
CreatureAI * AI() const
Definition Creature.h:154
void Update(uint32 time)
Definition EventMap.h:67
bool Empty() const
Definition EventMap.h:95
EventId ExecuteEvent()
Definition EventMap.cpp:73
void CancelEvent(EventId eventId)
Definition EventMap.cpp:151
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void SetGoState(GOState state)
void SetFlag(GameObjectFlags flags)
Definition GameObject.h:171
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)
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
virtual void OnGameObjectCreate(GameObject *go) override
virtual void AddDoor(GameObject *door, bool add)
void LoadMinionData(MinionData const *data)
void LoadDoorData(DoorData const *data)
void DoStartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
GameObject * GetGameObject(uint32 type)
void LoadBossBoundaries(BossBoundaryData const &data)
virtual void UpdateDoorState(GameObject *door)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
void SetHeaders(std::string const &dataHeaders)
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition Item.h:62
bool isEmpty() const
Definition LinkedList.h:108
iterator end()
iterator begin()
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Map.cpp:4430
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, uint32 duration=0, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1852
PlayerList const & GetPlayers() const
Definition Map.h:448
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:4397
static ObjectGuid const Empty
Definition ObjectGuid.h:140
uint32 LowType
Definition ObjectGuid.h:142
void Clear()
Definition ObjectGuid.h:150
static Creature * ToCreature(Object *o)
Definition Object.h:186
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
uint32 GetTeam() const
Definition Player.h:1832
FROM * GetSource() const
Definition Reference.h:96
Milliseconds _despawnTimer
Definition ulduar.h:532
UlduarKeeperDespawnEvent(Creature *owner, Milliseconds despawnTimerOffset=500ms)
bool Execute(uint64, uint32) override
virtual void DoAction(int32)
Definition UnitAI.h:154
Definition Unit.h:769
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
Vehicle * GetVehicleKit() const
Definition Unit.h:1735
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
std::vector< WorldStateInfo > Worldstates
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
GuidSet door[MAX_DOOR_TYPES]
float GetPositionX() const
Definition Position.h:79
uint32 id
Definition SpawnData.h:96
void ProcessEvent(WorldObject *, uint32 eventId) override
bool SetBossState(uint32 type, EncounterState state) override
void OnCreatureRemove(Creature *creature) override
bool CheckAchievementCriteriaMeet(uint32 criteriaId, Player const *, Unit const *, uint32) override
void WriteSaveDataMore(std::ostringstream &data) override
uint32 GetCreatureEntry(ObjectGuid::LowType, CreatureData const *data) override
void SetData(uint32 type, uint32 data) override
void FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates &packet) override
void ReadSaveDataMore(std::istringstream &data) 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:517
@ STORMWIND_ILLUSION
Definition ulduar.h:518
@ CHAMBER_ILLUSION
Definition ulduar.h:516
@ EVENT_DESPAWN_LEVIATHAN_VEHICLES
Definition ulduar.h:510
@ EVENT_DESPAWN_ALGALON
Definition ulduar.h:507
@ ACTION_INIT_ALGALON
Definition ulduar.h:509
@ EVENT_LEVIATHAN_BREAK_DOOR
Definition ulduar.h:511
@ EVENT_UPDATE_ALGALON_TIMER
Definition ulduar.h:508
@ DATA_KOLOGARN
Definition ulduar.h:41
@ DATA_ASSEMBLY_OF_IRON
Definition ulduar.h:40
@ DATA_HODIR
Definition ulduar.h:43
@ DATA_STONEBARK
Definition ulduar.h:52
@ DATA_ALGALON
Definition ulduar.h:49
@ DATA_FLAME_LEVIATHAN
Definition ulduar.h:36
@ DATA_VEZAX
Definition ulduar.h:47
@ DATA_BRIGHTLEAF
Definition ulduar.h:50
@ DATA_XT002
Definition ulduar.h:39
@ DATA_RAZORSCALE
Definition ulduar.h:38
@ DATA_AURIAYA
Definition ulduar.h:42
@ DATA_MIMIRON
Definition ulduar.h:46
@ DATA_YOGG_SARON
Definition ulduar.h:48
@ DATA_THORIM
Definition ulduar.h:44
@ DATA_IGNIS
Definition ulduar.h:37
@ DATA_IRONBRANCH
Definition ulduar.h:51
@ DATA_FREYA
Definition ulduar.h:45
@ DATA_UNBROKEN
Definition ulduar.h:494
@ MAX_HERALD_WEAPON_ITEMLEVEL
Definition ulduar.h:496
@ MAX_HERALD_ARMOR_ITEMLEVEL
Definition ulduar.h:495
@ SPELL_TELEPORT_KEEPER_VISUAL
Definition ulduar.h:502
@ SPELL_LUMBERJACKED_CREDIT
Definition ulduar.h:501
@ DATA_SARA
Definition ulduar.h:440
@ DATA_MIMIRON_ELEVATOR
Definition ulduar.h:434
@ DATA_SIGILDOOR_02
Definition ulduar.h:453
@ DATA_TOY_PILE_3
Definition ulduar.h:420
@ DATA_MIMIRON_BUTTON
Definition ulduar.h:436
@ DATA_MOLGEIM
Definition ulduar.h:425
@ DATA_DRIVE_ME_CRAZY
Definition ulduar.h:447
@ DATA_THORIM_LEVER
Definition ulduar.h:465
@ DATA_RAZORSCALE_CONTROL
Definition ulduar.h:414
@ DATA_DELLORAH
Definition ulduar.h:476
@ DATA_RUNIC_DOOR
Definition ulduar.h:468
@ DATA_BRUNDIR
Definition ulduar.h:426
@ DATA_ILLUSION
Definition ulduar.h:446
@ DATA_TOY_PILE_0
Definition ulduar.h:417
@ DATA_RUNE_GIANT
Definition ulduar.h:467
@ DATA_BRANN_BRONZEBEARD_INTRO
Definition ulduar.h:474
@ DATA_STONE_DOOR
Definition ulduar.h:469
@ DATA_LORE_KEEPER_OF_NORGANNON
Definition ulduar.h:475
@ DATA_SIGILDOOR_01
Definition ulduar.h:452
@ DATA_BRONZEBEARD_RADIO
Definition ulduar.h:477
@ DATA_XT002_HEART
Definition ulduar.h:421
@ DATA_THORIM_HARDMODE
Definition ulduar.h:470
@ DATA_EXPEDITION_COMMANDER
Definition ulduar.h:413
@ DATA_STEELBREAKER
Definition ulduar.h:424
@ DATA_LEVIATHAN_MK_II
Definition ulduar.h:429
@ DATA_AZEROTH
Definition ulduar.h:461
@ DATA_BRANN_BRONZEBEARD_ALG
Definition ulduar.h:459
@ DATA_MIMIRON_YS
Definition ulduar.h:445
@ DATA_KEEPERS_COUNT
Definition ulduar.h:448
@ DATA_TOY_PILE_1
Definition ulduar.h:418
@ DATA_FREYA_YS
Definition ulduar.h:442
@ DATA_VX_001
Definition ulduar.h:430
@ DATA_SIF
Definition ulduar.h:464
@ DATA_BRAIN_OF_YOGG_SARON
Definition ulduar.h:441
@ DATA_UNIVERSE_FLOOR_02
Definition ulduar.h:456
@ DATA_THORIM_CONTROLLER
Definition ulduar.h:471
@ DATA_MIMIRON_WORLD_TRIGGER
Definition ulduar.h:433
@ DATA_UNIVERSE_GLOBE
Definition ulduar.h:457
@ DATA_GIFT_OF_THE_OBSERVER
Definition ulduar.h:460
@ DATA_UNIVERSE_FLOOR_01
Definition ulduar.h:455
@ DATA_ALGALON_SUMMON_STATE
Definition ulduar.h:451
@ DATA_SIGILDOOR_03
Definition ulduar.h:454
@ DATA_RUNIC_COLOSSUS
Definition ulduar.h:466
@ DATA_TOY_PILE_2
Definition ulduar.h:419
@ DATA_VOICE_OF_YOGG_SARON
Definition ulduar.h:439
@ DATA_THORIM_YS
Definition ulduar.h:444
@ DATA_AERIAL_COMMAND_UNIT
Definition ulduar.h:431
@ DATA_ALGALON_TRAPDOOR
Definition ulduar.h:458
@ DATA_COMPUTER
Definition ulduar.h:432
@ DATA_HODIR_YS
Definition ulduar.h:443
@ DATA_COLOSSUS
Definition ulduar.h:410
@ GO_DOODAD_UL_SIGILDOOR_03
Definition ulduar.h:318
@ GO_DOODAD_UL_UNIVERSEGLOBE01
Definition ulduar.h:321
@ GO_MIMIRON_ELEVATOR
Definition ulduar.h:294
@ GO_HODIR_ICE_DOOR
Definition ulduar.h:275
@ GO_BRAIN_ROOM_DOOR_2
Definition ulduar.h:310
@ GO_XT_002_DOOR
Definition ulduar.h:258
@ GO_HODIR_RARE_CACHE_OF_WINTER
Definition ulduar.h:276
@ GO_DOODAD_UL_SIGILDOOR_01
Definition ulduar.h:316
@ GO_BRAIN_ROOM_DOOR_3
Definition ulduar.h:311
@ GO_LEVIATHAN_GATE
Definition ulduar.h:247
@ GO_THORIM_RUNIC_DOOR
Definition ulduar.h:286
@ GO_GIFT_OF_THE_OBSERVER_10
Definition ulduar.h:323
@ GO_ARCHIVUM_DOOR
Definition ulduar.h:262
@ GO_KOLOGARN_BRIDGE
Definition ulduar.h:267
@ GO_THORIM_LEVER
Definition ulduar.h:289
@ GO_CACHE_OF_STORMS_HARDMODE_25
Definition ulduar.h:285
@ GO_THORIM_ENCOUNTER_DOOR
Definition ulduar.h:288
@ GO_VEZAX_DOOR
Definition ulduar.h:305
@ GO_BRAIN_ROOM_DOOR_1
Definition ulduar.h:309
@ GO_RAZOR_HARPOON_4
Definition ulduar.h:254
@ GO_DOODAD_UL_SIGILDOOR_02
Definition ulduar.h:317
@ GO_IRON_COUNCIL_DOOR
Definition ulduar.h:261
@ GO_HODIR_RARE_CACHE_OF_WINTER_HERO
Definition ulduar.h:277
@ GO_CELESTIAL_PLANETARIUM_ACCESS_25
Definition ulduar.h:315
@ GO_HODIR_ENTRANCE
Definition ulduar.h:273
@ GO_THORIM_STONE_DOOR
Definition ulduar.h:287
@ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03
Definition ulduar.h:322
@ GO_HODIR_CHEST
Definition ulduar.h:279
@ GO_KOLOGARN_CHEST
Definition ulduar.h:266
@ GO_CACHE_OF_STORMS_HARDMODE_10
Definition ulduar.h:283
@ GO_THORIM_DARK_IRON_PORTCULLIS
Definition ulduar.h:290
@ GO_LEVIATHAN_DOOR
Definition ulduar.h:246
@ GO_HODIR_CHEST_HERO
Definition ulduar.h:278
@ GO_YOGG_SARON_DOOR
Definition ulduar.h:308
@ GO_CACHE_OF_STORMS_10
Definition ulduar.h:282
@ GO_RAZOR_HARPOON_3
Definition ulduar.h:253
@ GO_RAZOR_HARPOON_2
Definition ulduar.h:252
@ GO_DOODAD_UL_UNIVERSEFLOOR_01
Definition ulduar.h:319
@ GO_MIMIRON_BUTTON
Definition ulduar.h:295
@ GO_MIMIRON_DOOR_3
Definition ulduar.h:298
@ GO_CACHE_OF_STORMS_25
Definition ulduar.h:284
@ GO_MIMIRON_DOOR_1
Definition ulduar.h:296
@ GO_HODIR_DOOR
Definition ulduar.h:274
@ GO_RAZOR_HARPOON_1
Definition ulduar.h:251
@ GO_GIFT_OF_THE_OBSERVER_25
Definition ulduar.h:324
@ GO_KOLOGARN_CHEST_HERO
Definition ulduar.h:265
@ GO_CELESTIAL_PLANETARIUM_ACCESS_10
Definition ulduar.h:314
@ GO_DOODAD_UL_UNIVERSEFLOOR_02
Definition ulduar.h:320
@ GO_MIMIRON_TRAM
Definition ulduar.h:293
@ GO_MIMIRON_DOOR_2
Definition ulduar.h:297
@ GO_ANCIENT_GATE_OF_THE_KEEPERS
Definition ulduar.h:270
@ EVENT_INITIAL_AGGRO_HODIR
Definition ulduar.h:333
@ EVENT_TOWER_OF_STORM_DESTROYED
Definition ulduar.h:329
@ EVENT_HODIRS_PROTECTIVE_GAZE_PROC
Definition ulduar.h:337
@ EVENT_TOWER_OF_LIFE_DESTROYED
Definition ulduar.h:332
@ EVENT_CACHE_SHATTERED
Definition ulduar.h:334
@ EVENT_FLASH_FREEZE_FINISHED
Definition ulduar.h:335
@ EVENT_ACTIVATE_SANITY_WELL
Definition ulduar.h:336
@ EVENT_TOWER_OF_FLAMES_DESTROYED
Definition ulduar.h:331
@ EVENT_TOWER_OF_FROST_DESTROYED
Definition ulduar.h:330
@ WORLD_STATE_ALGALON_DESPAWN_TIMER
Definition ulduar.h:483
@ WORLD_STATE_ULDUAR_TEAM_IN_INSTANCE
Definition ulduar.h:482
@ WORLD_STATE_ALGALON_TIMER_ENABLED
Definition ulduar.h:484
@ NPC_VEZAX
Definition ulduar.h:81
@ NPC_BRIGHTLEAF
Definition ulduar.h:137
@ NPC_NATURES_BLADE
Definition ulduar.h:165
@ NPC_FLAME_LEVIATHAN
Definition ulduar.h:111
@ NPC_COMPUTER
Definition ulduar.h:133
@ NPC_MOLGEIM
Definition ulduar.h:68
@ NPC_LEVIATHAN_MKII
Definition ulduar.h:119
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_01
Definition ulduar.h:238
@ NPC_HODIR_OBSERVATION_RING
Definition ulduar.h:199
@ NPC_BRUNDIR
Definition ulduar.h:69
@ NPC_GUARDIAN_LASHER
Definition ulduar.h:161
@ NPC_MIMIRON_OBSERVATION_RING
Definition ulduar.h:202
@ NPC_XT_TOY_PILE
Definition ulduar.h:66
@ NPC_UNLEASHED_DARK_MATTER
Definition ulduar.h:240
@ NPC_HEART_OF_DECONSTRUCTOR
Definition ulduar.h:99
@ NPC_IRONROOT_LASHER
Definition ulduar.h:164
@ NPC_MISGUIDED_NYMPH
Definition ulduar.h:160
@ NPC_BRAIN_OF_YOGG_SARON
Definition ulduar.h:218
@ NPC_WORLD_TRIGGER_MIMIRON
Definition ulduar.h:132
@ NPC_HIGH_EXPLORER_DELLORAH
Definition ulduar.h:109
@ NPC_YOGG_SARON
Definition ulduar.h:82
@ NPC_THORIM_YS
Definition ulduar.h:208
@ NPC_SARA
Definition ulduar.h:197
@ NPC_FOREST_SWARMER
Definition ulduar.h:162
@ NPC_FREYA
Definition ulduar.h:80
@ NPC_MERCENARY_CAPTAIN_A
Definition ulduar.h:174
@ NPC_THORIM
Definition ulduar.h:79
@ NPC_STONEBARK
Definition ulduar.h:138
@ NPC_SANITY_WELL
Definition ulduar.h:225
@ NPC_EXPEDITION_COMMANDER
Definition ulduar.h:90
@ NPC_ALGALON
Definition ulduar.h:83
@ NPC_XT002
Definition ulduar.h:65
@ NPC_FREYA_OBSERVATION_RING
Definition ulduar.h:200
@ NPC_HODIR_YS
Definition ulduar.h:206
@ NPC_MERCENARY_SOLDIER_H
Definition ulduar.h:177
@ NPC_RUNE_GIANT
Definition ulduar.h:180
@ NPC_THORIM_OBSERVATION_RING
Definition ulduar.h:201
@ NPC_HODIR
Definition ulduar.h:78
@ NPC_RAZORSCALE_CONTROLLER
Definition ulduar.h:94
@ NPC_BRANN_BRONZEBEARD_INTRO
Definition ulduar.h:103
@ NPC_BRONZEBEARD_RADIO
Definition ulduar.h:110
@ NPC_SALVAGED_SIEGE_ENGINE
Definition ulduar.h:60
@ NPC_AERIAL_COMMAND_UNIT
Definition ulduar.h:121
@ NPC_THORIM_CONTROLLER
Definition ulduar.h:194
@ NPC_RUNIC_COLOSSUS
Definition ulduar.h:179
@ NPC_VX_001
Definition ulduar.h:120
@ NPC_MANGROVE_ENT
Definition ulduar.h:163
@ NPC_IGNIS
Definition ulduar.h:62
@ NPC_LORE_KEEPER_OF_NORGANNON
Definition ulduar.h:108
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_02
Definition ulduar.h:239
@ NPC_SALVAGED_CHOPPER
Definition ulduar.h:61
@ NPC_GUARDIAN_OF_LIFE
Definition ulduar.h:166
@ NPC_MIMIRON_YS
Definition ulduar.h:207
@ NPC_STEELBREAKER
Definition ulduar.h:67
@ NPC_VOICE_OF_YOGG_SARON
Definition ulduar.h:203
@ NPC_AZEROTH
Definition ulduar.h:231
@ NPC_MERCENARY_CAPTAIN_H
Definition ulduar.h:175
@ NPC_KOLOGARN
Definition ulduar.h:70
@ NPC_IRONBRANCH
Definition ulduar.h:136
@ NPC_AURIAYA
Definition ulduar.h:76
@ NPC_SIF
Definition ulduar.h:192
@ NPC_RAZORSCALE
Definition ulduar.h:63
@ NPC_ALGALON_VOID_ZONE_VISUAL_STALKER
Definition ulduar.h:237
@ NPC_MERCENARY_SOLDIER_A
Definition ulduar.h:176
@ NPC_FREYA_YS
Definition ulduar.h:205
@ NPC_BRANN_BRONZBEARD_ALG
Definition ulduar.h:230
@ NPC_CORRUPTED_SERVITOR
Definition ulduar.h:159
@ NPC_FREYA_ACHIEVE_TRIGGER
Definition ulduar.h:169
@ NPC_MIMIRON
Definition ulduar.h:77
@ NPC_SALVAGED_DEMOLISHER
Definition ulduar.h:59
@ ACTION_TOWER_OF_FLAMES_DESTROYED
Definition ulduar.h:344
@ ACTION_TOWER_OF_STORM_DESTROYED
Definition ulduar.h:342
@ ACTION_MOVE_TO_CENTER_POSITION
Definition ulduar.h:346
@ ACTION_FLASH_FREEZE_FINISHED
Definition ulduar.h:349
@ ACTION_TOWER_OF_LIFE_DESTROYED
Definition ulduar.h:345
@ ACTION_INITIAL_AGGRO_HODIR
Definition ulduar.h:347
@ ACTION_TOWER_OF_FROST_DESTROYED
Definition ulduar.h:343
@ ACTION_CACHE_SHATTERED
Definition ulduar.h:348
#define UlduarScriptName
Definition ulduar.h:25
@ CRITERIA_C_O_U_VEZAX_25
Definition ulduar.h:403
@ CRITERIA_C_O_U_THORIM_10
Definition ulduar.h:386
@ CRITERIA_C_O_U_THORIM_25
Definition ulduar.h:400
@ CRITERIA_C_O_U_IRON_COUNCIL_25
Definition ulduar.h:396
@ CRITERIA_THREE_LIGHTS_IN_THE_DARKNESS_10
Definition ulduar.h:365
@ CRITERIA_WAITS_DREAMING_CHAMBER_25
Definition ulduar.h:358
@ CRITERIA_C_O_U_KOLOGARN_10
Definition ulduar.h:383
@ CRITERIA_C_O_U_IGNIS_25
Definition ulduar.h:393
@ CRITERIA_WAITS_DREAMING_STORMWIND_25
Definition ulduar.h:357
@ CRITERIA_DRIVE_ME_CRAZY_25
Definition ulduar.h:364
@ CRITERIA_THREE_LIGHTS_IN_THE_DARKNESS_25
Definition ulduar.h:366
@ CRITERIA_C_O_U_XT002_10
Definition ulduar.h:381
@ CRITERIA_C_O_U_AURIAYA_10
Definition ulduar.h:384
@ CRITERIA_C_O_U_MIMIRON_10
Definition ulduar.h:388
@ CRITERIA_ONE_LIGHT_IN_THE_DARKNESS_10
Definition ulduar.h:369
@ CRITERIA_WAITS_DREAMING_STORMWIND_10
Definition ulduar.h:360
@ CRITERIA_WAITS_DREAMING_ICECROWN_10
Definition ulduar.h:362
@ CRITERIA_C_O_U_XT002_25
Definition ulduar.h:395
@ CRITERIA_C_O_U_LEVIATHAN_10
Definition ulduar.h:378
@ CRITERIA_TWO_LIGHTS_IN_THE_DARKNESS_25
Definition ulduar.h:368
@ CRITERIA_C_O_U_IGNIS_10
Definition ulduar.h:379
@ CRITERIA_C_O_U_YOGG_SARON_10
Definition ulduar.h:390
@ CRITERIA_CON_SPEED_ATORY
Definition ulduar.h:354
@ CRITERIA_ONE_LIGHT_IN_THE_DARKNESS_25
Definition ulduar.h:370
@ CRITERIA_C_O_U_HODIR_25
Definition ulduar.h:399
@ CRITERIA_C_O_U_VEZAX_10
Definition ulduar.h:389
@ REALM_FIRST_DEATHS_DEMISE
Definition ulduar.h:375
@ CRITERIA_C_O_U_FREYA_10
Definition ulduar.h:387
@ CRITERIA_C_O_U_KOLOGARN_25
Definition ulduar.h:397
@ CRITERIA_C_O_U_RAZORSCALE_25
Definition ulduar.h:394
@ CRITERIA_TWO_LIGHTS_IN_THE_DARKNESS_10
Definition ulduar.h:367
@ CRITERIA_WAITS_DREAMING_CHAMBER_10
Definition ulduar.h:361
@ CRITERIA_C_O_U_RAZORSCALE_10
Definition ulduar.h:380
@ CRITERIA_C_O_U_HODIR_10
Definition ulduar.h:385
@ CRITERIA_LUMBERJACKED
Definition ulduar.h:355
@ CRITERIA_DRIVE_ME_CRAZY_10
Definition ulduar.h:363
@ CRITERIA_HERALD_OF_TITANS
Definition ulduar.h:373
@ CRITERIA_C_O_U_LEVIATHAN_25
Definition ulduar.h:392
@ CRITERIA_C_O_U_AURIAYA_25
Definition ulduar.h:398
@ CRITERIA_ALONE_IN_THE_DARKNESS_25
Definition ulduar.h:372
@ CRITERIA_WAITS_DREAMING_ICECROWN_25
Definition ulduar.h:359
@ CRITERIA_C_O_U_FREYA_25
Definition ulduar.h:401
@ CRITERIA_ALONE_IN_THE_DARKNESS_10
Definition ulduar.h:371
@ CRITERIA_C_O_U_YOGG_SARON_25
Definition ulduar.h:404
@ CRITERIA_C_O_U_IRON_COUNCIL_10
Definition ulduar.h:382
@ CRITERIA_C_O_U_MIMIRON_25
Definition ulduar.h:402