AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
instance_ulduar::instance_ulduar_InstanceMapScript Struct Reference
Inheritance diagram for instance_ulduar::instance_ulduar_InstanceMapScript:
InstanceScript ZoneScript

Public Member Functions

 instance_ulduar_InstanceMapScript (Map *map)
 
void Initialize () override
 
void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &packet) override
 
void OnPlayerEnter (Player *player) override
 
bool IsEncounterInProgress () const override
 
void ProcessEvent (WorldObject *, uint32 eventId) override
 
bool SetBossState (uint32 type, EncounterState state) override
 
void SpawnHodirChests (Difficulty diff, Creature *hodir)
 
void OnCreatureCreate (Creature *creature) override
 
void OpenIfDone (uint32 encounter, GameObject *go, GOState state)
 
GameObjectGetHodirChest (bool hardmode)
 
void OnGameObjectCreate (GameObject *gameObject) override
 
void setChestsLootable (uint32 boss)
 
void SetData (uint32 type, uint32 data) override
 
ObjectGuid GetGuidData (uint32 data) const override
 
uint32 GetData (uint32 type) const override
 
void OnUnitDeath (Unit *unit) override
 
void Load (char const *data) override
 
void Update (uint32 diff) override
 
void SpawnLeviathanEncounterVehicles (uint8 mode)
 
bool CheckAchievementCriteriaMeet (uint32 criteria_id, Player const *, Unit const *, uint32) override
 
- Public Member Functions inherited from InstanceScript
 InstanceScript (Map *map)
 
 ~InstanceScript () override
 
virtual void CreatureLooted (Creature *, LootType)
 
virtual std::string GetSaveData ()
 
void SaveToDB ()
 
void OnCreatureCreate (Creature *creature) override
 
void OnCreatureRemove (Creature *creature) override
 
void OnGameObjectCreate (GameObject *go) override
 
void OnGameObjectRemove (GameObject *go) override
 
ObjectGuid GetObjectGuid (uint32 type) const
 
ObjectGuid GetGuidData (uint32 type) const override
 
CreatureGetCreature (uint32 type)
 
GameObjectGetGameObject (uint32 type)
 
virtual void OnPlayerLeave (Player *)
 
virtual void OnPlayerAreaUpdate (Player *, uint32, uint32)
 
virtual void OnPlayerInWaterStateUpdate (Player *, bool)
 
void HandleGameObject (ObjectGuid guid, bool open, GameObject *go=nullptr)
 Open or close a GameObject by GUID.
 
void HandleGameObject (uint32 type, bool open)
 Open or close a GameObject registered via LoadObjectData.
 
void DoUseDoorOrButton (ObjectGuid guid, uint32 withRestoreTime=0, bool useAlternativeState=false)
 
void DoRespawnGameObject (ObjectGuid guid, uint32 timeToDespawn=MINUTE)
 
void DoRespawnGameObject (uint32 type)
 
void DoRespawnCreature (ObjectGuid guid, bool force=false)
 
void DoRespawnCreature (uint32 type, bool force=false)
 
void DoUpdateWorldState (uint32 worldstateId, uint32 worldstateValue)
 
void DoSendNotifyToInstance (char const *format,...)
 
void DoUpdateAchievementCriteria (AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
 
void DoStartTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoStopTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoRemoveAurasDueToSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayer (Player *player, uint32 spell, bool includePets, bool includeControlled)
 
bool ServerAllowsTwoSideGroups ()
 
EncounterState GetBossState (uint32 id) const
 
CreatureBoundary const * GetBossBoundary (uint32 id) const
 
BossInfo const * GetBossInfo (uint32 id) const
 
uint32 GetPersistentData (uint32 index) const
 
void StorePersistentData (uint32 index, uint32 data)
 
virtual bool CheckRequiredBosses (uint32, Player const *=nullptr) const
 
void SetCompletedEncountersMask (uint32 newMask, bool save)
 
uint32 GetCompletedEncounterMask () const
 
void SendEncounterUnit (uint32 type, Unit *unit=nullptr, uint8 param1=0, uint8 param2=0)
 
uint32 GetEncounterCount () const
 
void MarkAreaTriggerDone (uint32 id)
 
void ResetAreaTriggerDone (uint32 id)
 
bool IsAreaTriggerDone (uint32 id) const
 
virtual void DoAction (int32)
 
void DoForAllMinions (uint32 id, std::function< void(Creature *)> exec)
 
void StoreGameObjectState (ObjectGuid::LowType spawnId, uint8 state)
 
uint8 GetStoredGameObjectState (ObjectGuid::LowType spawnId) const
 
void LoadInstanceSavedGameobjectStateData ()
 
bool IsBossDone (uint32 bossId) const
 
bool AllBossesDone () const
 
bool AllBossesDone (std::initializer_list< uint32 > bossIds) const
 
TeamId GetTeamIdInInstance () const
 
void SetTeamIdInInstance (TeamId teamId)
 
bool IsTwoFactionInstance () const
 
- Public Member Functions inherited from ZoneScript
 ZoneScript ()
 
virtual ~ZoneScript ()
 
virtual uint32 GetCreatureEntry (ObjectGuid::LowType, CreatureData const *data)
 
virtual uint32 GetGameObjectEntry (ObjectGuid::LowType, uint32 entry)
 
virtual void OnCreatureEvade (Creature *)
 
virtual void SetGuidData (uint32, ObjectGuid)
 
virtual uint64 GetData64 (uint32) const
 
virtual void SetData64 (uint32, uint64)
 

Public Attributes

ObjectGuid _leviathanVisualTowers [4][2]
 
ObjectGuid _repairSGUID [2]
 
bool _leviathanTowers [4]
 
GuidList _leviathanVehicles
 
bool _hmHodir
 
Position normalChestPosition = { 1967.152588f, -204.188461f, 432.686951f, 5.50957f }
 
Position hardChestPosition = { 2035.94600f, -202.084885f, 432.686859f, 3.164077f }
 
Position const triggerAncientGatePosition = { 1883.65f, 269.272f, 418.406f }
 
EventMap _events
 
bool _mimironTramUsed
 
- Public Attributes inherited from InstanceScript
Mapinstance
 
TaskScheduler scheduler
 

Additional Inherited Members

- Static Public Member Functions inherited from InstanceScript
static std::string GetBossStateName (uint8 state)
 
- Protected Member Functions inherited from InstanceScript
void SetHeaders (std::string const &dataHeaders)
 
void SetBossNumber (uint32 number)
 
void SetPersistentDataCount (uint32 number)
 
void LoadBossBoundaries (BossBoundaryData const &data)
 
void LoadDoorData (DoorData const *data)
 
void LoadMinionData (MinionData const *data)
 
void LoadObjectData (ObjectData const *creatureData, ObjectData const *gameObjectData)
 
void LoadSummonData (ObjectData const *data)
 
void SetSummoner (Creature *creature)
 
void AddObject (Creature *obj, bool add=true)
 
void RemoveObject (Creature *obj)
 
void AddObject (GameObject *obj, bool add=true)
 
void RemoveObject (GameObject *obj)
 
void AddObject (WorldObject *obj, uint32 type, bool add=true)
 
void RemoveObject (WorldObject *obj, uint32 type)
 
void AddDoor (GameObject *door, bool add=true)
 
void RemoveDoor (GameObject *door)
 
void AddMinion (Creature *minion, bool add=true)
 
void RemoveMinion (Creature *minion)
 
void UpdateDoorState (GameObject *door)
 
void UpdateMinionState (Creature *minion, EncounterState state)
 
bool ReadSaveDataHeaders (std::istringstream &data)
 
void ReadSaveDataBossStates (std::istringstream &data)
 
void ReadSavePersistentData (std::istringstream &data)
 
virtual void ReadSaveDataMore (std::istringstream &)
 
void WriteSaveDataHeaders (std::ostringstream &data)
 
void WriteSaveDataBossStates (std::ostringstream &data)
 
void WritePersistentData (std::ostringstream &data)
 
virtual void WriteSaveDataMore (std::ostringstream &)
 

Detailed Description

Constructor & Destructor Documentation

◆ instance_ulduar_InstanceMapScript()

instance_ulduar::instance_ulduar_InstanceMapScript::instance_ulduar_InstanceMapScript ( Map map)
inline
179 : InstanceScript(map)
180 {
186 Initialize();
187 };
#define DataHeader
Definition blackrock_depths.h:23
Definition InstanceScript.h:143
void SetBossNumber(uint32 number)
Definition InstanceScript.h:306
void SetPersistentDataCount(uint32 number)
Definition InstanceScript.h:307
void LoadDoorData(DoorData const *data)
Definition InstanceScript.cpp:181
void SetHeaders(std::string const &dataHeaders)
Definition InstanceScript.cpp:158
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition InstanceScript.cpp:193
ObjectData const creatureData[]
Definition instance_ulduar.cpp:85
DoorData const doorData[]
Definition instance_ulduar.cpp:31
ObjectData const gameobjectData[]
Definition instance_ulduar.cpp:126
@ MAX_PERSISTENT_DATA
Definition magisters_terrace.h:39
void Initialize() override
Definition instance_ulduar.cpp:207
#define MAX_ENCOUNTER
Definition violet_hold.h:21

References creatureData, DataHeader, doorData, gameobjectData, Initialize(), InstanceScript::LoadDoorData(), InstanceScript::LoadObjectData(), MAX_ENCOUNTER, MAX_PERSISTENT_DATA, InstanceScript::SetBossNumber(), InstanceScript::SetHeaders(), and InstanceScript::SetPersistentDataCount().

Member Function Documentation

◆ CheckAchievementCriteriaMeet()

bool instance_ulduar::instance_ulduar_InstanceMapScript::CheckAchievementCriteriaMeet ( uint32  criteria_id,
Player const *  ,
Unit const *  ,
uint32   
)
inlineoverridevirtual

Reimplemented from InstanceScript.

914 {
916 switch (criteria_id)
917 {
918 case 10042:
919 case 10352:
920 return (mask & (1 << BOSS_LEVIATHAN)) == 0;
921 case 10342:
922 case 10355:
923 return (mask & (1 << BOSS_IGNIS)) == 0;
924 case 10340:
925 case 10353:
926 return (mask & (1 << BOSS_RAZORSCALE)) == 0;
927 case 10341:
928 case 10354:
929 return (mask & (1 << BOSS_XT002)) == 0;
930 case 10598:
931 case 10599:
932 return (mask & (1 << BOSS_ASSEMBLY)) == 0;
933 case 10348:
934 case 10357:
935 return (mask & (1 << BOSS_KOLOGARN)) == 0;
936 case 10351:
937 case 10363:
938 return (mask & (1 << BOSS_AURIAYA)) == 0;
939 case 10439:
940 case 10719:
941 return (mask & (1 << BOSS_HODIR)) == 0;
942 case 10403:
943 case 10404:
944 return (mask & (1 << BOSS_THORIM)) == 0;
945 case 10582:
946 case 10583:
947 return (mask & (1 << BOSS_FREYA)) == 0;
948 case 10347:
949 case 10361:
950 return (mask & (1 << BOSS_MIMIRON)) == 0;
951 case 10349:
952 case 10362:
953 return (mask & (1 << BOSS_VEZAX)) == 0;
954 case 10350:
955 case 10364:
956 return (mask & (1 << BOSS_YOGGSARON)) == 0;
957 }
958 return false;
959 }
std::uint32_t uint32
Definition Define.h:107
uint32 GetPersistentData(uint32 index) const
Definition InstanceScript.h:257
@ PERSISTENT_DATA_C_OF_ULDUAR_MASK
Definition ulduar.h:315
@ BOSS_IGNIS
Definition ulduar.h:32
@ BOSS_LEVIATHAN
Definition ulduar.h:31
@ BOSS_RAZORSCALE
Definition ulduar.h:33
@ BOSS_YOGGSARON
Definition ulduar.h:43
@ BOSS_HODIR
Definition ulduar.h:39
@ BOSS_KOLOGARN
Definition ulduar.h:36
@ BOSS_THORIM
Definition ulduar.h:41
@ BOSS_FREYA
Definition ulduar.h:38
@ BOSS_AURIAYA
Definition ulduar.h:37
@ BOSS_XT002
Definition ulduar.h:34
@ BOSS_MIMIRON
Definition ulduar.h:40
@ BOSS_VEZAX
Definition ulduar.h:42
@ BOSS_ASSEMBLY
Definition ulduar.h:35

References BOSS_ASSEMBLY, BOSS_AURIAYA, BOSS_FREYA, BOSS_HODIR, BOSS_IGNIS, BOSS_KOLOGARN, BOSS_LEVIATHAN, BOSS_MIMIRON, BOSS_RAZORSCALE, BOSS_THORIM, BOSS_VEZAX, BOSS_XT002, BOSS_YOGGSARON, InstanceScript::GetPersistentData(), and PERSISTENT_DATA_C_OF_ULDUAR_MASK.

◆ FillInitialWorldStates()

void instance_ulduar::instance_ulduar_InstanceMapScript::FillInitialWorldStates ( WorldPackets::WorldState::InitWorldStates packet)
inlineoverridevirtual

Reimplemented from InstanceScript.

224 {
225 uint32 algalonTimer =
227 packet.Worldstates.reserve(2);
228 packet.Worldstates.emplace_back(
230 (algalonTimer && algalonTimer <= 60) ? 1 : 0);
231 packet.Worldstates.emplace_back(
233 std::min<uint32>(algalonTimer, 60));
234 }
@ WORLD_STATE_ULDUAR_ALGALON_TIMER_ENABLED
Definition WorldStateDefines.h:567
@ WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER
Definition WorldStateDefines.h:566
std::vector< WorldStateInfo > Worldstates
Definition WorldStatePackets.h:46
@ PERSISTENT_DATA_ALGALON_TIMER
Definition ulduar.h:314

References InstanceScript::GetPersistentData(), PERSISTENT_DATA_ALGALON_TIMER, WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER, WORLD_STATE_ULDUAR_ALGALON_TIMER_ENABLED, and WorldPackets::WorldState::InitWorldStates::Worldstates.

◆ GetData()

uint32 instance_ulduar::instance_ulduar_InstanceMapScript::GetData ( uint32  type) const
inlineoverridevirtual

Reimplemented from ZoneScript.

780 {
781 switch (type)
782 {
788
790 return GetPersistentData(
792
793 case DATA_CALL_TRAM:
794 return _mimironTramUsed;
795 }
796
797 return 0;
798 }
bool _mimironTramUsed
Definition instance_ulduar.cpp:205
bool _leviathanTowers[4]
Definition instance_ulduar.cpp:192
@ PERSISTENT_DATA_MAGE_BARRIER
Definition ulduar.h:316
@ EVENT_TOWER_OF_STORM_DESTROYED
Definition ulduar.h:327
@ EVENT_TOWER_OF_LIFE_DESTROYED
Definition ulduar.h:330
@ EVENT_TOWER_OF_FLAMES_DESTROYED
Definition ulduar.h:329
@ EVENT_TOWER_OF_FROST_DESTROYED
Definition ulduar.h:328
@ DATA_MAGE_BARRIER
Definition ulduar.h:142
@ DATA_CALL_TRAM
Definition ulduar.h:118

References _leviathanTowers, _mimironTramUsed, DATA_CALL_TRAM, DATA_MAGE_BARRIER, EVENT_TOWER_OF_FLAMES_DESTROYED, EVENT_TOWER_OF_FROST_DESTROYED, EVENT_TOWER_OF_LIFE_DESTROYED, EVENT_TOWER_OF_STORM_DESTROYED, InstanceScript::GetPersistentData(), and PERSISTENT_DATA_MAGE_BARRIER.

◆ GetGuidData()

ObjectGuid instance_ulduar::instance_ulduar_InstanceMapScript::GetGuidData ( uint32  data) const
inlineoverridevirtual

Reimplemented from ZoneScript.

765 {
766 switch (data)
767 {
768 // Flame Leviathan
770 return _repairSGUID[0];
772 return _repairSGUID[1];
773
774 }
775
776 return GetObjectGuid(data);
777 }
ObjectGuid GetObjectGuid(uint32 type) const
Definition InstanceScript.cpp:98
ObjectGuid _repairSGUID[2]
Definition instance_ulduar.cpp:191
@ DATA_REPAIR_STATION1
Definition ulduar.h:64
@ DATA_REPAIR_STATION2
Definition ulduar.h:65

References _repairSGUID, DATA_REPAIR_STATION1, DATA_REPAIR_STATION2, and InstanceScript::GetObjectGuid().

◆ GetHodirChest()

GameObject * instance_ulduar::instance_ulduar_InstanceMapScript::GetHodirChest ( bool  hardmode)
inline
499 {
500 if (hardmode)
501 {
503 return go;
505 }
506
508 return go;
510 }
Definition GameObject.h:120
GameObject * GetGameObject(uint32 type)
Definition InstanceScript.cpp:120
@ DATA_HODIR_CHEST_NORMAL
Definition ulduar.h:136
@ DATA_HODIR_CHEST_NORMAL_HERO
Definition ulduar.h:138
@ DATA_HODIR_CHEST_HARD
Definition ulduar.h:137
@ DATA_HODIR_CHEST_HARD_HERO
Definition ulduar.h:139

References DATA_HODIR_CHEST_HARD, DATA_HODIR_CHEST_HARD_HERO, DATA_HODIR_CHEST_NORMAL, DATA_HODIR_CHEST_NORMAL_HERO, and InstanceScript::GetGameObject().

Referenced by setChestsLootable(), and SetData().

◆ Initialize()

void instance_ulduar::instance_ulduar_InstanceMapScript::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

208 {
209 // Flame Leviathan
210 for (uint8 i = 0; i < 4; ++i)
211 _leviathanTowers[i] = true;
212
213 _leviathanVehicles.clear();
214
215 // Hodir
216 _hmHodir = true; // If players fail the Hardmode then becomes false
217
218 // Shared
219 _events.Reset();
220 _mimironTramUsed = false;
221 }
std::uint8_t uint8
Definition Define.h:109
void Reset()
Definition EventMap.cpp:21
GuidList _leviathanVehicles
Definition instance_ulduar.cpp:193
EventMap _events
Definition instance_ulduar.cpp:204
bool _hmHodir
Definition instance_ulduar.cpp:196

References _events, _hmHodir, _leviathanTowers, _leviathanVehicles, _mimironTramUsed, and EventMap::Reset().

Referenced by instance_ulduar_InstanceMapScript().

◆ IsEncounterInProgress()

bool instance_ulduar::instance_ulduar_InstanceMapScript::IsEncounterInProgress ( ) const
inlineoverridevirtual

Reimplemented from InstanceScript.

290 {
291 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
292 {
293 if (GetBossState(i) == IN_PROGRESS)
294 return true;
295 }
296
297 // Leviathan does not use IN_PROGRESS type, instead SPECIAL is set and never reset,
298 // Check if he is in combat.
300 if (l->IsInCombat())
301 return true;
302
303 return false;
304 }
@ IN_PROGRESS
Definition InstanceScript.h:59
Definition Creature.h:47
Map * instance
Definition InstanceScript.h:149
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:252
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2336

References BOSS_LEVIATHAN, InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetObjectGuid(), IN_PROGRESS, InstanceScript::instance, and MAX_ENCOUNTER.

◆ Load()

void instance_ulduar::instance_ulduar_InstanceMapScript::Load ( char const *  data)
inlineoverridevirtual

Reimplemented from InstanceScript.

847 {
849
850 if (!data)
852
853 uint32 algalonTimer =
855 if (algalonTimer == TIMER_ALGALON_SUMMONED)
856 {
860 }
861
862 algalonTimer =
864 if (algalonTimer && algalonTimer <= 60
866 {
871 algalonTimer);
872 }
873 }
@ DONE
Definition InstanceScript.h:61
virtual void Load(char const *data)
Definition InstanceScript.cpp:456
void StorePersistentData(uint32 index, uint32 data)
Definition InstanceScript.cpp:427
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:626
@ PERSISTENT_DATA_UNBROKEN
Definition ulduar.h:313
@ TIMER_ALGALON_SUMMONED
Definition ulduar.h:345
@ TIMER_ALGALON_TO_SUMMON
Definition ulduar.h:344
@ BOSS_ALGALON
Definition ulduar.h:44

References BOSS_ALGALON, DONE, InstanceScript::DoUpdateWorldState(), InstanceScript::GetBossState(), InstanceScript::GetPersistentData(), InstanceScript::Load(), PERSISTENT_DATA_ALGALON_TIMER, PERSISTENT_DATA_UNBROKEN, InstanceScript::StorePersistentData(), TIMER_ALGALON_SUMMONED, TIMER_ALGALON_TO_SUMMON, WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER, and WORLD_STATE_ULDUAR_ALGALON_TIMER_ENABLED.

◆ OnCreatureCreate()

void instance_ulduar::instance_ulduar_InstanceMapScript::OnCreatureCreate ( Creature creature)
inlineoverridevirtual

These creatures are summoned by something else than Algalon but need to be controlled/despawned by him - so they need to be registered in his summon list

Reimplemented from ZoneScript.

455 {
457
458 switch (creature->GetEntry())
459 {
460 case NPC_KOLOGARN:
462 {
463 creature->SetDisableGravity(true);
464 creature->SetPosition(creature->GetHomePosition());
466 creature->StopMovingOnCurrentPos();
467 }
468 break;
469 case NPC_HODIR:
471 {
473 }
474 break;
475 case NPC_ALGALON:
477 creature->DespawnOrUnsummon();
478 break;
486 if (Creature* algalon = GetCreature(BOSS_ALGALON))
487 algalon->AI()->JustSummoned(creature);
488 break;
489 }
490 }
void setDeathState(DeathState s, bool despawn=false) override
A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned....
Definition Creature.cpp:1916
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:347
void SetPosition(float x, float y, float z, float o)
Definition Creature.cpp:3197
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2126
void OnCreatureCreate(Creature *creature) override
Definition InstanceScript.cpp:70
Creature * GetCreature(uint32 type)
Definition InstanceScript.cpp:115
Difficulty GetDifficulty() const
Definition Map.h:290
uint32 GetEntry() const
Definition Object.h:117
void StopMovingOnCurrentPos()
Definition Unit.cpp:13036
void SetDisableGravity(bool disable)
Definition Unit.cpp:16462
void SpawnHodirChests(Difficulty diff, Creature *hodir)
Definition instance_ulduar.cpp:387
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_01
Definition ulduar.h:216
@ NPC_UNLEASHED_DARK_MATTER
Definition ulduar.h:218
@ NPC_ALGALON
Definition ulduar.h:174
@ NPC_HODIR
Definition ulduar.h:167
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_02
Definition ulduar.h:217
@ NPC_KOLOGARN
Definition ulduar.h:164
@ NPC_ALGALON_VOID_ZONE_VISUAL_STALKER
Definition ulduar.h:215

References BOSS_ALGALON, BOSS_HODIR, BOSS_KOLOGARN, Creature::DespawnOrUnsummon(), DONE, InstanceScript::GetBossState(), InstanceScript::GetCreature(), Map::GetDifficulty(), Object::GetEntry(), Creature::GetHomePosition(), InstanceScript::GetPersistentData(), InstanceScript::instance, JustDied, NPC_ALGALON, NPC_ALGALON_STALKER_ASTEROID_TARGET_01, NPC_ALGALON_STALKER_ASTEROID_TARGET_02, NPC_ALGALON_VOID_ZONE_VISUAL_STALKER, NPC_HODIR, NPC_KOLOGARN, NPC_UNLEASHED_DARK_MATTER, InstanceScript::OnCreatureCreate(), PERSISTENT_DATA_ALGALON_TIMER, Creature::setDeathState(), Unit::SetDisableGravity(), Creature::SetPosition(), SpawnHodirChests(), and Unit::StopMovingOnCurrentPos().

◆ OnGameObjectCreate()

void instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate ( GameObject gameObject)
inlineoverridevirtual

Reimplemented from ZoneScript.

513 {
515
516 switch (gameObject->GetEntry())
517 {
518 // Flame Leviathan
520 {
521 if (_repairSGUID[0])
522 _repairSGUID[1] = gameObject->GetGUID();
523 else
524 _repairSGUID[0] = gameObject->GetGUID();
525 break;
526 }
529 _leviathanVisualTowers[3][0] = gameObject->GetGUID();
530 break;
533 _leviathanVisualTowers[0][0] = gameObject->GetGUID();
534 break;
537 _leviathanVisualTowers[2][0] = gameObject->GetGUID();
538 break;
541 _leviathanVisualTowers[1][0] = gameObject->GetGUID();
542 break;
545 _leviathanVisualTowers[3][1] = gameObject->GetGUID();
546 break;
549 _leviathanVisualTowers[0][1] = gameObject->GetGUID();
550 break;
553 _leviathanVisualTowers[2][1] = gameObject->GetGUID();
554 break;
557 _leviathanVisualTowers[1][1] = gameObject->GetGUID();
558 break;
562 break;
565 break;
566 case GO_KEEPERS_GATE:
569 break;
570 // Mimiron, Hodir, Vezax
572 gameObject->EnableCollision(false);
573 break;
574 case GO_SNOW_MOUND:
575 gameObject->EnableCollision(false);
576 break;
577 // Mimiron Tram
578 case GO_MIMIRON_TRAM:
580 _mimironTramUsed = true;
581 break;
582 // Algalon the Observer
587 break;
593 gameObject->EnableCollision(false);
594 break;
597 gameObject->SetGoState(GO_STATE_ACTIVE);
598 break;
601 gameObject->SetGoState(GO_STATE_ACTIVE);
602 break;
603 // Herbs
604 case 191019: // Adder's Tongue
605 case 190176: // Frost Lotus
606 case 190171: // Lichbloom
607 case 190170: // Talandra's Rose
608 case 189973: // Goldclover
610 gameObject->SetRespawnTime(7 * DAY);
611 break;
612 }
613 }
constexpr auto DAY
Definition Common.h:49
@ GO_STATE_READY
Definition GameObjectData.h:709
@ GO_STATE_ACTIVE
Definition GameObjectData.h:708
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition GameObjectData.h:710
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1609
@ GO_FLAG_LOCKED
Definition SharedDefines.h:1610
void SetGoState(GOState state)
Definition GameObject.cpp:2492
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:217
void EnableCollision(bool enable)
Definition GameObject.cpp:2619
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1279
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:218
void OnGameObjectCreate(GameObject *go) override
Definition InstanceScript.cpp:85
bool AllBossesDone() const
Definition InstanceScript.cpp:813
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void OpenIfDone(uint32 encounter, GameObject *go, GOState state)
Definition instance_ulduar.cpp:492
ObjectGuid _leviathanVisualTowers[4][2]
Definition instance_ulduar.cpp:190
@ GO_DOODAD_UL_SIGILDOOR_03
Definition ulduar.h:300
@ GO_DOODAD_UL_UNIVERSEGLOBE01
Definition ulduar.h:303
@ GO_MIMIRON_ELEVATOR
Definition ulduar.h:274
@ GO_DOODAD_UL_SIGILDOOR_01
Definition ulduar.h:298
@ GO_KOLOGARN_BRIDGE
Definition ulduar.h:259
@ GO_LEVIATHAN_DOORS
Definition ulduar.h:243
@ GO_THORIMS_TARGETTING_CRYSTAL
Definition ulduar.h:249
@ GO_DOODAD_UL_SIGILDOOR_02
Definition ulduar.h:299
@ GO_MIMIRONS_TARGETTING_CRYSTAL
Definition ulduar.h:246
@ GO_FREYAS_GENERATOR
Definition ulduar.h:251
@ GO_HODIRS_GENERATOR
Definition ulduar.h:252
@ GO_CELESTIAL_PLANETARIUM_ACCESS_25
Definition ulduar.h:297
@ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03
Definition ulduar.h:304
@ GO_DOODAD_UL_UNIVERSEFLOOR_01
Definition ulduar.h:301
@ GO_KEEPERS_GATE
Definition ulduar.h:261
@ GO_THORIMS_GENERATOR
Definition ulduar.h:253
@ GO_REPAIR_STATION_TRAP
Definition ulduar.h:242
@ GO_HODIRS_TARGETTING_CRYSTAL
Definition ulduar.h:248
@ GO_SNOW_MOUND
Definition ulduar.h:283
@ GO_MIMIRONS_GENERATOR
Definition ulduar.h:250
@ GO_CELESTIAL_PLANETARIUM_ACCESS_10
Definition ulduar.h:296
@ GO_DOODAD_UL_UNIVERSEFLOOR_02
Definition ulduar.h:302
@ GO_MIMIRON_TRAM
Definition ulduar.h:265
@ GO_FREYAS_TARGETTING_CRYSTAL
Definition ulduar.h:247

References _leviathanVisualTowers, _mimironTramUsed, _repairSGUID, InstanceScript::AllBossesDone(), BOSS_FREYA, BOSS_HODIR, BOSS_KOLOGARN, BOSS_LEVIATHAN, BOSS_MIMIRON, BOSS_THORIM, DAY, DONE, GameObject::EnableCollision(), InstanceScript::GetBossState(), Object::GetEntry(), Object::GetGUID(), InstanceScript::GetPersistentData(), GO_CELESTIAL_PLANETARIUM_ACCESS_10, GO_CELESTIAL_PLANETARIUM_ACCESS_25, GO_DOODAD_UL_SIGILDOOR_01, GO_DOODAD_UL_SIGILDOOR_02, GO_DOODAD_UL_SIGILDOOR_03, GO_DOODAD_UL_ULDUAR_TRAPDOOR_03, GO_DOODAD_UL_UNIVERSEFLOOR_01, GO_DOODAD_UL_UNIVERSEFLOOR_02, GO_DOODAD_UL_UNIVERSEGLOBE01, GO_FLAG_IN_USE, GO_FLAG_LOCKED, GO_FREYAS_GENERATOR, GO_FREYAS_TARGETTING_CRYSTAL, GO_HODIRS_GENERATOR, GO_HODIRS_TARGETTING_CRYSTAL, GO_KEEPERS_GATE, GO_KOLOGARN_BRIDGE, GO_LEVIATHAN_DOORS, GO_MIMIRON_ELEVATOR, GO_MIMIRON_TRAM, GO_MIMIRONS_GENERATOR, GO_MIMIRONS_TARGETTING_CRYSTAL, GO_REPAIR_STATION_TRAP, GO_SNOW_MOUND, GO_STATE_ACTIVE, GO_STATE_ACTIVE_ALTERNATIVE, GO_STATE_READY, GO_THORIMS_GENERATOR, GO_THORIMS_TARGETTING_CRYSTAL, InstanceScript::OnGameObjectCreate(), OpenIfDone(), PERSISTENT_DATA_ALGALON_TIMER, GameObject::RemoveGameObjectFlag(), GameObject::SetGameObjectFlag(), GameObject::SetGoState(), and GameObject::SetRespawnTime().

◆ OnPlayerEnter()

void instance_ulduar::instance_ulduar_InstanceMapScript::OnPlayerEnter ( Player player)
inlineoverridevirtual

Reimplemented from InstanceScript.

237 {
238 // mimiron tram:
239 if (GameObject* MimironTram = GetGameObject(DATA_MIMIRON_TRAM))
240 {
241 player->UpdateVisibilityOf(MimironTram);
242 if (StaticTransport* t = MimironTram->ToStaticTransport())
243 {
245 if (!go->GetTransport())
246 t->AddPassenger(go, true);
248 if (!go->GetTransport())
249 t->AddPassenger(go, true);
250 }
251 }
252
253 // Spawn Observation Ring keepers for defeated bosses
254 uint32 watchersMask =
256 for (uint8 i = KEEPER_FREYA; i <= KEEPER_THORIM; ++i)
258 && !(watchersMask & (1 << i))
263
264 uint32 algalonTimer =
266 if (!GetObjectGuid(BOSS_ALGALON) && algalonTimer
267 && (algalonTimer <= 60
268 || algalonTimer == TIMER_ALGALON_TO_SUMMON))
269 {
271 if (!algalon)
272 return;
273
274 if (algalonTimer <= 60)
275 {
277 algalon->AI()->DoAction(ACTION_INIT_ALGALON);
278 }
279 else // if (algalonTimer == TIMER_ALGALON_TO_SUMMON)
280 {
284 algalon->SetImmuneToPC(false);
285 }
286 }
287 }
CreatureAI * AI() const
Definition Creature.h:143
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:70
StaticTransport * ToStaticTransport()
Definition GameObject.h:324
bool IsBossDone(uint32 bossId) const
Definition InstanceScript.h:295
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, uint32 duration=0, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, bool visibleBySummonerOnly=false)
Definition Object.cpp:2188
void UpdateVisibilityOf(WorldObject *target)
Definition PlayerUpdates.cpp:1712
Definition Transport.h:115
Definition TemporarySummon.h:50
virtual void DoAction(int32)
Definition UnitAI.h:217
void SetImmuneToPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10597
static Position const ObservationRingKeepersPos[4]
Definition instance_ulduar.cpp:60
static uint32 const ObservationRingKeeperData[4]
Definition instance_ulduar.cpp:74
static uint32 const ObservationRingKeeperBoss[4]
Definition instance_ulduar.cpp:80
static uint32 const ObservationRingKeeperEntry[4]
Definition instance_ulduar.cpp:68
Position const AlgalonLandPos
Definition ulduar.h:369
@ PERSISTENT_DATA_WATCHERS_MASK
Definition ulduar.h:311
@ KEEPER_THORIM
Definition ulduar.h:362
@ ACTION_INIT_ALGALON
Definition ulduar.h:340
@ EVENT_UPDATE_ALGALON_TIMER
Definition ulduar.h:338
@ KEEPER_FREYA
Definition ulduar.h:359
@ DATA_MIMIRON_TRAM
Definition ulduar.h:80
@ DATA_MIMIRON_ACTIVATE_TRAM
Definition ulduar.h:81
@ DATA_MIMIRON_TRAM_ROCKET_BOOSTER
Definition ulduar.h:82

References _events, ACTION_INIT_ALGALON, Creature::AI(), AlgalonLandPos, BOSS_ALGALON, DATA_MIMIRON_ACTIVATE_TRAM, DATA_MIMIRON_TRAM, DATA_MIMIRON_TRAM_ROCKET_BOOSTER, UnitAI::DoAction(), EVENT_UPDATE_ALGALON_TIMER, InstanceScript::GetGameObject(), InstanceScript::GetObjectGuid(), InstanceScript::GetPersistentData(), InstanceScript::instance, InstanceScript::IsBossDone(), KEEPER_FREYA, KEEPER_THORIM, NPC_ALGALON, ObservationRingKeeperBoss, ObservationRingKeeperData, ObservationRingKeeperEntry, ObservationRingKeepersPos, PERSISTENT_DATA_ALGALON_TIMER, PERSISTENT_DATA_WATCHERS_MASK, EventMap::RescheduleEvent(), Unit::SetImmuneToPC(), InstanceScript::StorePersistentData(), Map::SummonCreature(), TIMER_ALGALON_SUMMONED, TIMER_ALGALON_TO_SUMMON, GameObject::ToStaticTransport(), and Player::UpdateVisibilityOf().

◆ OnUnitDeath()

void instance_ulduar::instance_ulduar_InstanceMapScript::OnUnitDeath ( Unit unit)
inlineoverridevirtual

Reimplemented from ZoneScript.

801 {
802 // Feeds on Tears achievement
803 if (unit->IsPlayer())
804 {
806 if (Creature* algalon = GetCreature(BOSS_ALGALON))
807 algalon->AI()->DoAction(ACTION_FEEDS_ON_TEARS_FAILED);
808 }
809 else if (unit->IsCreature() && unit->GetAreaId() == AREA_THE_CONSERVATORY_OF_LIFE)
810 {
811 uint32 conspeedatory =
813 if (GameTime::GetGameTime().count() > (conspeedatory + DAY))
814 {
817 21597 /*CON-SPEED-ATORY_TIMED_CRITERIA*/);
819 GameTime::GetGameTime().count());
820 }
821 }
822
823 // achievement Champion/Conqueror of Ulduar
824 if (unit->IsPlayer())
825 for (uint8 i = 0; i <= 12; ++i)
826 {
827 bool inCombat = false;
828 if (i == BOSS_LEVIATHAN)
829 {
831 if (c->IsInCombat())
832 inCombat = true;
833 }
834 else
835 inCombat = (GetBossState(i) == IN_PROGRESS);
836
837 uint32 mask =
839 if (inCombat && (mask & (1 << i)) == 0)
842 mask | (1 << i));
843 }
844 }
@ AREA_THE_CONSERVATORY_OF_LIFE
Definition AreaDefines.h:164
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:110
void DoStartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
Definition InstanceScript.cpp:670
bool IsPlayer() const
Definition Object.h:201
bool IsCreature() const
Definition Object.h:205
uint32 GetAreaId() const
Definition Object.cpp:3120
Seconds GetGameTime()
Definition GameTime.cpp:38
@ PERSISTENT_DATA_CONSPEEDATORY
Definition ulduar.h:312
@ ACTION_FEEDS_ON_TEARS_FAILED
Definition ulduar.h:339

References ACHIEVEMENT_TIMED_TYPE_EVENT, ACTION_FEEDS_ON_TEARS_FAILED, AREA_THE_CONSERVATORY_OF_LIFE, BOSS_ALGALON, BOSS_LEVIATHAN, DAY, InstanceScript::DoStartTimedAchievement(), WorldObject::GetAreaId(), InstanceScript::GetBossState(), InstanceScript::GetCreature(), GameTime::GetGameTime(), InstanceScript::GetPersistentData(), IN_PROGRESS, Object::IsCreature(), Object::IsPlayer(), PERSISTENT_DATA_C_OF_ULDUAR_MASK, PERSISTENT_DATA_CONSPEEDATORY, and InstanceScript::StorePersistentData().

◆ OpenIfDone()

void instance_ulduar::instance_ulduar_InstanceMapScript::OpenIfDone ( uint32  encounter,
GameObject go,
GOState  state 
)
inline
493 {
494 if (GetBossState(encounter) == DONE)
495 go->SetGoState(state);
496 }

References DONE, InstanceScript::GetBossState(), and GameObject::SetGoState().

Referenced by OnGameObjectCreate().

◆ ProcessEvent()

void instance_ulduar::instance_ulduar_InstanceMapScript::ProcessEvent ( WorldObject ,
uint32  eventId 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

307 {
308 // destory towers
310 SetData(eventId, 0);
311 }
void SetData(uint32 type, uint32 data) override
Definition instance_ulduar.cpp:640

References EVENT_TOWER_OF_FLAMES_DESTROYED, EVENT_TOWER_OF_LIFE_DESTROYED, and SetData().

Referenced by SetData().

◆ SetBossState()

bool instance_ulduar::instance_ulduar_InstanceMapScript::SetBossState ( uint32  type,
EncounterState  state 
)
inlineoverridevirtual

Reimplemented from InstanceScript.

314 {
315 if (!InstanceScript::SetBossState(type, state))
316 return false;
317
318 switch (type)
319 {
320 case BOSS_LEVIATHAN:
321 if (state == DONE)
322 {
323 instance->DoForAllPlayers([&](Player* player)
324 {
325 if (Creature* vehicleCreature = player->GetVehicleCreatureBase())
326 vehicleCreature->DespawnOrUnsummon();
327 });
328
330 go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
331 }
332 break;
333 case BOSS_MIMIRON:
334 if (state == IN_PROGRESS)
335 _mimironTramUsed = true;
336 [[fallthrough]];
337 case BOSS_HODIR:
338 case BOSS_THORIM:
339 case BOSS_FREYA:
341 {
342 scheduler.Schedule(45s, [this](TaskContext /*context*/)
343 {
345 trigger->AI()->Talk(EMOTE_ANCIENT_GATE_UNLOCKED);
346 });
347 }
348 if (type == BOSS_HODIR && state == DONE)
350 if (state == DONE)
351 {
352 uint8 keeperIdx = type - BOSS_FREYA;
355 ObservationRingKeepersPos[keeperIdx]);
356 }
357 break;
358 default:
359 break;
360 }
361
362 // take care of herbs
363 if (type == BOSS_FREYA && state == DONE)
364 {
365 std::list<GameObject*> goList;
366 if (Creature* freya = GetCreature(BOSS_FREYA))
367 {
368 freya->GetGameObjectListWithEntryInGrid(goList, { 191019, 190176, 190171, 190170, 189973 }, 333.0f);
369
370 for (GameObject* herb : goList)
371 herb->SetRespawnTime(7 * DAY);
372 }
373 }
374
375 if (type > BOSS_LEVIATHAN && type < MAX_ENCOUNTER && state == IN_PROGRESS)
376 {
377 instance->DoForAllPlayers([&](Player* player)
378 {
379 if (Creature* vehicleCreature = player->GetVehicleCreatureBase())
380 vehicleCreature->DespawnOrUnsummon();
381 });
382 }
383
384 return true;
385 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:390
TaskScheduler scheduler
Definition InstanceScript.h:303
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:2890
Definition Player.h:1084
Definition TaskScheduler.h:421
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition TaskScheduler.h:232
Creature * GetVehicleCreatureBase() const
Definition Unit.cpp:14972
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2546
Position const triggerAncientGatePosition
Definition instance_ulduar.cpp:201
void setChestsLootable(uint32 boss)
Definition instance_ulduar.cpp:615
@ NPC_ANCIENT_GATE_WORLD_TRIGGER
Definition ulduar.h:354
@ EMOTE_ANCIENT_GATE_UNLOCKED
Definition ulduar.h:355
@ DATA_LEVIATHAN_DOORS
Definition ulduar.h:67

References _mimironTramUsed, InstanceScript::AllBossesDone(), BOSS_FREYA, BOSS_HODIR, BOSS_LEVIATHAN, BOSS_MIMIRON, BOSS_THORIM, DATA_LEVIATHAN_DOORS, DAY, Map::DoForAllPlayers(), DONE, EMOTE_ANCIENT_GATE_UNLOCKED, InstanceScript::GetCreature(), InstanceScript::GetGameObject(), WorldObject::GetGameObjectListWithEntryInGrid(), Unit::GetVehicleCreatureBase(), GO_STATE_ACTIVE_ALTERNATIVE, IN_MILLISECONDS, IN_PROGRESS, InstanceScript::instance, MAX_ENCOUNTER, NPC_ANCIENT_GATE_WORLD_TRIGGER, ObservationRingKeeperEntry, ObservationRingKeepersPos, TaskScheduler::Schedule(), InstanceScript::scheduler, InstanceScript::SetBossState(), setChestsLootable(), Map::SummonCreature(), and triggerAncientGatePosition.

◆ setChestsLootable()

void instance_ulduar::instance_ulduar_InstanceMapScript::setChestsLootable ( uint32  boss)
inline
616 {
617 if (boss)
618 {
619 switch (boss)
620 {
621 case BOSS_HODIR:
622 if (_hmHodir)
623 {
624 if (GameObject* go = GetHodirChest(true))
625 {
626 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
627 go->SetLootRecipient(instance);
628 }
629 }
630 if (GameObject* go = GetHodirChest(false))
631 {
632 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
633 go->SetLootRecipient(instance);
634 }
635 break;
636 }
637 }
638 }
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1613
GameObject * GetHodirChest(bool hardmode)
Definition instance_ulduar.cpp:498

References _hmHodir, BOSS_HODIR, GetHodirChest(), GO_FLAG_NOT_SELECTABLE, and InstanceScript::instance.

Referenced by SetBossState().

◆ SetData()

void instance_ulduar::instance_ulduar_InstanceMapScript::SetData ( uint32  type,
uint32  data 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

641 {
642 switch (type)
643 {
645 if (GameObject* go = GetHodirChest(true))
646 {
647 _hmHodir = false;
648 go->Delete();
649 }
650 break;
654 break;
656 if (Creature* sara = GetCreature(DATA_SARA))
657 sara->AI()->DoAction(ACTION_SARA_UPDATE_SUMMON_KEEPERS);
658 break;
663 {
665 for (uint8 i = 0; i < 2; ++i)
666 {
668 {
669 gameObject->SetGoState(GO_STATE_ACTIVE);
670 }
671 }
672 return;
673 }
674
677 return;
683 return;
692 return;
693 // Achievement
697 return;
698 case DATA_CALL_TRAM:
699 if (GameObject* MimironTram = GetGameObject(DATA_MIMIRON_TRAM))
700 if (StaticTransport* t = MimironTram->ToStaticTransport())
701 {
702 if (data == 0 && t->GetGoState() == GO_STATE_ACTIVE && t->GetPathProgress() == t->GetPauseTime())
703 {
704 MimironTram->SetGoState(GO_STATE_READY);
706 rocketBooster->SetGoState(GO_STATE_ACTIVE);
707 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
708 activateTramButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
709 if (GameObject* callTramCenterButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_CENTER))
710 callTramCenterButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
711 scheduler.Schedule(30s, [this](TaskContext /*context*/)
712 {
714 turnaround1->UseDoorOrButton();
716 rocketBooster->SetGoState(GO_STATE_READY);
717 }).Schedule(60s, [this](TaskContext /*context*/)
718 {
719 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
720 activateTramButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
721 if (GameObject* callTramMimironButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_MIMIRON))
722 callTramMimironButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
723 });
724 }
725 if (data == 1 && t->GetGoState() == GO_STATE_READY && t->GetPathProgress() == 0)
726 {
727 MimironTram->SetGoState(GO_STATE_ACTIVE);
729 rocketBooster->SetGoState(GO_STATE_ACTIVE);
730 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
731 activateTramButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
732 if (GameObject* callTramMimironButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_MIMIRON))
733 callTramMimironButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
734 scheduler.Schedule(33s, [this](TaskContext /*context*/)
735 {
737 turnaround2->UseDoorOrButton();
739 rocketBooster->SetGoState(GO_STATE_READY);
740 }).Schedule(63s, [this](TaskContext /*context*/)
741 {
742 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
743 activateTramButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
744 if (GameObject* callTramCenterButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_CENTER))
745 callTramCenterButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
746 });
747 }
748 }
749 break;
752 cr->TextEmote("Go to your vehicles!", nullptr, true);
753 break;
759 break;
760 }
761
762 }
@ ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET
Definition DBCEnums.h:113
@ ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET
Definition DBCEnums.h:142
void CancelEvent(EventId eventId)
Definition EventMap.cpp:160
void DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition InstanceScript.cpp:661
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Map.cpp:2341
void ProcessEvent(WorldObject *, uint32 eventId) override
Definition instance_ulduar.cpp:306
void SpawnLeviathanEncounterVehicles(uint8 mode)
Definition instance_ulduar.cpp:1005
@ EVENT_KEEPER_TELEPORTED
Definition ulduar.h:351
@ SPELL_DWARFAGEDDON
Definition ulduar.h:365
@ ACTION_SARA_UPDATE_SUMMON_KEEPERS
Definition ulduar.h:358
@ TIMER_ALGALON_DEFEATED
Definition ulduar.h:343
@ DATA_SARA
Definition ulduar.h:126
@ DATA_BRANN_MEMOTESAY
Definition ulduar.h:143
@ DATA_BRANN_BASE_CAMP
Definition ulduar.h:145
@ DATA_MIMIRON_CALL_TRAM_CENTER
Definition ulduar.h:83
@ DATA_MIMIRON_CALL_TRAM_MIMIRON
Definition ulduar.h:84
@ DATA_MIMIRON_TRAM_TURNAROUND_1
Definition ulduar.h:85
@ DATA_DESPAWN_ALGALON
Definition ulduar.h:103
@ DATA_BRANN_EASY_MODE
Definition ulduar.h:144
@ DATA_ALGALON_DEFEATED
Definition ulduar.h:104
@ DATA_MIMIRON_TRAM_TURNAROUND_2
Definition ulduar.h:86
@ TYPE_HODIR_HM_FAIL
Definition ulduar.h:52
@ DATA_VEHICLE_SPAWN
Definition ulduar.h:61
@ DATA_DWARFAGEDDON
Definition ulduar.h:115
@ DATA_ALGALON_SUMMON_STATE
Definition ulduar.h:102

References _events, _hmHodir, _leviathanTowers, _leviathanVisualTowers, ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET, ACTION_SARA_UPDATE_SUMMON_KEEPERS, EventMap::CancelEvent(), DATA_ALGALON_DEFEATED, DATA_ALGALON_SUMMON_STATE, DATA_BRANN_BASE_CAMP, DATA_BRANN_EASY_MODE, DATA_BRANN_MEMOTESAY, DATA_CALL_TRAM, DATA_DESPAWN_ALGALON, DATA_DWARFAGEDDON, DATA_MAGE_BARRIER, DATA_MIMIRON_ACTIVATE_TRAM, DATA_MIMIRON_CALL_TRAM_CENTER, DATA_MIMIRON_CALL_TRAM_MIMIRON, DATA_MIMIRON_TRAM, DATA_MIMIRON_TRAM_ROCKET_BOOSTER, DATA_MIMIRON_TRAM_TURNAROUND_1, DATA_MIMIRON_TRAM_TURNAROUND_2, DATA_SARA, DATA_VEHICLE_SPAWN, InstanceScript::DoStartTimedAchievement(), InstanceScript::DoUpdateAchievementCriteria(), InstanceScript::DoUpdateWorldState(), EVENT_KEEPER_TELEPORTED, EVENT_TOWER_OF_FLAMES_DESTROYED, EVENT_TOWER_OF_FROST_DESTROYED, EVENT_TOWER_OF_LIFE_DESTROYED, EVENT_TOWER_OF_STORM_DESTROYED, EVENT_UPDATE_ALGALON_TIMER, InstanceScript::GetCreature(), Map::GetGameObject(), InstanceScript::GetGameObject(), GetHodirChest(), GO_FLAG_NOT_SELECTABLE, GO_STATE_ACTIVE, GO_STATE_READY, InstanceScript::instance, PERSISTENT_DATA_ALGALON_TIMER, PERSISTENT_DATA_MAGE_BARRIER, ProcessEvent(), EventMap::RescheduleEvent(), TaskScheduler::Schedule(), InstanceScript::scheduler, SpawnLeviathanEncounterVehicles(), SPELL_DWARFAGEDDON, InstanceScript::StorePersistentData(), TIMER_ALGALON_DEFEATED, TIMER_ALGALON_SUMMONED, GameObject::ToStaticTransport(), TYPE_HODIR_HM_FAIL, WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER, and WORLD_STATE_ULDUAR_ALGALON_TIMER_ENABLED.

Referenced by ProcessEvent(), and Update().

◆ SpawnHodirChests()

void instance_ulduar::instance_ulduar_InstanceMapScript::SpawnHodirChests ( Difficulty  diff,
Creature hodir 
)
inline
388 {
389 switch (diff)
390 {
391 case RAID_DIFFICULTY_10MAN_NORMAL: // 10 man chest
392 {
394 {
395 if (GameObject* go = hodir->SummonGameObject(
400 normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
401 {
402 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
403 }
404 }
406 {
407 if (GameObject* go = hodir->SummonGameObject(
412 hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
413 {
414 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
415 _hmHodir = true;
416 }
417 }
418 break;
419 }
420 case RAID_DIFFICULTY_25MAN_NORMAL: // 25 man chest
421 {
423 {
424 if (GameObject* go = hodir->SummonGameObject(
429 normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
430 {
431 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
432 }
433 }
435 {
436 if (GameObject* go = hodir->SummonGameObject(
441 hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
442 {
443 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
444 _hmHodir = true;
445 }
446 }
447 break;
448 }
449 default:
450 break;
451 }
452 }
@ RAID_DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:273
@ RAID_DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:274
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition Object.cpp:2408
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
Position hardChestPosition
Definition instance_ulduar.cpp:198
Position normalChestPosition
Definition instance_ulduar.cpp:197
@ GO_HODIR_CHEST_NORMAL
Definition ulduar.h:228
@ GO_HODIR_CHEST_NORMAL_HERO
Definition ulduar.h:229
@ GO_HODIR_CHEST_HARD_HERO
Definition ulduar.h:231
@ GO_HODIR_CHEST_HARD
Definition ulduar.h:230

References _hmHodir, DATA_HODIR_CHEST_HARD, DATA_HODIR_CHEST_HARD_HERO, DATA_HODIR_CHEST_NORMAL, DATA_HODIR_CHEST_NORMAL_HERO, InstanceScript::GetObjectGuid(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GO_FLAG_NOT_SELECTABLE, GO_HODIR_CHEST_HARD, GO_HODIR_CHEST_HARD_HERO, GO_HODIR_CHEST_NORMAL, GO_HODIR_CHEST_NORMAL_HERO, hardChestPosition, normalChestPosition, RAID_DIFFICULTY_10MAN_NORMAL, RAID_DIFFICULTY_25MAN_NORMAL, and WorldObject::SummonGameObject().

Referenced by OnCreatureCreate().

◆ SpawnLeviathanEncounterVehicles()

void instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles ( uint8  mode)
1006{
1007 if (!_leviathanVehicles.empty())
1008 {
1009 for (ObjectGuid const& guid : _leviathanVehicles)
1010 {
1011 if (Creature* cr = instance->GetCreature(guid))
1012 {
1013 cr->DespawnOrUnsummon();
1014 }
1015 }
1016
1017 _leviathanVehicles.clear();
1018 }
1019
1020 if (mode < VEHICLE_POS_NONE)
1021 {
1022 for (uint8 i = 0; i < (instance->Is25ManRaid() ? 5 : 2); ++i)
1023 {
1025 {
1026 _leviathanVehicles.push_back(veh->GetGUID());
1027 }
1029 {
1030 _leviathanVehicles.push_back(veh->GetGUID());
1031 }
1033 {
1034 _leviathanVehicles.push_back(veh->GetGUID());
1035 }
1036 }
1037 }
1038}
bool Is25ManRaid() const
Definition Map.h:300
Definition ObjectGuid.h:118
const Position vehiclePositions[30]
Definition instance_ulduar.cpp:963
@ VEHICLE_POS_NONE
Definition ulduar.h:325
@ NPC_SALVAGED_SIEGE_ENGINE
Definition ulduar.h:200
@ NPC_VEHICLE_CHOPPER
Definition ulduar.h:202
@ NPC_SALVAGED_DEMOLISHER
Definition ulduar.h:203

References _leviathanVehicles, Map::GetCreature(), InstanceScript::instance, Map::Is25ManRaid(), NPC_SALVAGED_DEMOLISHER, NPC_SALVAGED_SIEGE_ENGINE, NPC_VEHICLE_CHOPPER, Map::SummonCreature(), VEHICLE_POS_NONE, and vehiclePositions.

Referenced by SetData().

◆ Update()

void instance_ulduar::instance_ulduar_InstanceMapScript::Update ( uint32  diff)
inlineoverridevirtual

Reimplemented from InstanceScript.

876 {
878
879 if (_events.Empty())
880 return;
881
882 _events.Update(diff);
883 switch (_events.ExecuteEvent())
884 {
886 {
887 uint32 algalonTimer =
889 if (algalonTimer == TIMER_ALGALON_DEFEATED)
890 return;
891
894 --algalonTimer);
897 algalonTimer);
898 if (algalonTimer)
899 {
900 _events.Repeat(1min);
901 return;
902 }
903
905 if (Creature* algalon = GetCreature(BOSS_ALGALON))
906 algalon->AI()->DoAction(ACTION_DESPAWN_ALGALON);
907 }
908 }
909 }
void Update(uint32 time)
Definition EventMap.h:67
bool Empty() const
Definition EventMap.h:95
void Repeat(Milliseconds time)
Definition EventMap.cpp:76
EventId ExecuteEvent()
Definition EventMap.cpp:86
virtual void Update(uint32)
Definition InstanceScript.cpp:252
@ ACTION_DESPAWN_ALGALON
Definition ulduar.h:341

References _events, ACTION_DESPAWN_ALGALON, BOSS_ALGALON, DATA_ALGALON_DEFEATED, InstanceScript::DoUpdateWorldState(), EventMap::Empty(), EVENT_UPDATE_ALGALON_TIMER, EventMap::ExecuteEvent(), InstanceScript::GetCreature(), InstanceScript::GetPersistentData(), PERSISTENT_DATA_ALGALON_TIMER, EventMap::Repeat(), SetData(), InstanceScript::StorePersistentData(), TIMER_ALGALON_DEFEATED, EventMap::Update(), InstanceScript::Update(), and WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER.

Member Data Documentation

◆ _events

EventMap instance_ulduar::instance_ulduar_InstanceMapScript::_events

◆ _hmHodir

bool instance_ulduar::instance_ulduar_InstanceMapScript::_hmHodir

◆ _leviathanTowers

bool instance_ulduar::instance_ulduar_InstanceMapScript::_leviathanTowers[4]

Referenced by GetData(), Initialize(), and SetData().

◆ _leviathanVehicles

GuidList instance_ulduar::instance_ulduar_InstanceMapScript::_leviathanVehicles

◆ _leviathanVisualTowers

ObjectGuid instance_ulduar::instance_ulduar_InstanceMapScript::_leviathanVisualTowers[4][2]

Referenced by OnGameObjectCreate(), and SetData().

◆ _mimironTramUsed

bool instance_ulduar::instance_ulduar_InstanceMapScript::_mimironTramUsed

◆ _repairSGUID

ObjectGuid instance_ulduar::instance_ulduar_InstanceMapScript::_repairSGUID[2]

Referenced by GetGuidData(), and OnGameObjectCreate().

◆ hardChestPosition

Position instance_ulduar::instance_ulduar_InstanceMapScript::hardChestPosition = { 2035.94600f, -202.084885f, 432.686859f, 3.164077f }
198{ 2035.94600f, -202.084885f, 432.686859f, 3.164077f };

Referenced by SpawnHodirChests().

◆ normalChestPosition

Position instance_ulduar::instance_ulduar_InstanceMapScript::normalChestPosition = { 1967.152588f, -204.188461f, 432.686951f, 5.50957f }
197{ 1967.152588f, -204.188461f, 432.686951f, 5.50957f };

Referenced by SpawnHodirChests().

◆ triggerAncientGatePosition

Position const instance_ulduar::instance_ulduar_InstanceMapScript::triggerAncientGatePosition = { 1883.65f, 269.272f, 418.406f }
201{ 1883.65f, 269.272f, 418.406f };

Referenced by SetBossState().


The documentation for this struct was generated from the following file: