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 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
 
bool CheckRequiredBosses (uint32 bossId, Player const *player) const 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)
 
bool _SkipCheckRequiredBosses (Player const *player=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 const triggerAncientGatePosition = { 1883.65f, 269.272f, 418.406f }
 
EventMap _events
 
bool _mimironTramUsed
 
bool _algalonResummonPending
 
- 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
192 : InstanceScript(map)
193 {
201 Initialize();
202 };
#define DataHeader
Definition blackrock_depths.h:23
Definition InstanceScript.h:143
void SetBossNumber(uint32 number)
Definition InstanceScript.h:308
void LoadSummonData(ObjectData const *data)
Definition InstanceScript.cpp:222
void SetPersistentDataCount(uint32 number)
Definition InstanceScript.h:309
void LoadDoorData(DoorData const *data)
Definition InstanceScript.cpp:186
void LoadBossBoundaries(BossBoundaryData const &data)
Definition InstanceScript.cpp:156
void SetHeaders(std::string const &dataHeaders)
Definition InstanceScript.cpp:163
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition InstanceScript.cpp:198
constexpr auto MAX_ENCOUNTER
Definition instance_blackrock_depths.cpp:24
ObjectData const creatureData[]
Definition instance_ulduar.cpp:85
DoorData const doorData[]
Definition instance_ulduar.cpp:31
ObjectData const gameobjectData[]
Definition instance_ulduar.cpp:129
BossBoundaryData const boundaries
Definition instance_ulduar.cpp:175
ObjectData const summonData[]
Definition instance_ulduar.cpp:169
@ MAX_PERSISTENT_DATA
Definition magisters_terrace.h:39
void Initialize() override
Definition instance_ulduar.cpp:221

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

Member Function Documentation

◆ CheckAchievementCriteriaMeet()

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

Reimplemented from InstanceScript.

902 {
904 switch (criteria_id)
905 {
906 case 10042:
907 case 10352:
908 return (mask & (1 << BOSS_LEVIATHAN)) == 0;
909 case 10342:
910 case 10355:
911 return (mask & (1 << BOSS_IGNIS)) == 0;
912 case 10340:
913 case 10353:
914 return (mask & (1 << BOSS_RAZORSCALE)) == 0;
915 case 10341:
916 case 10354:
917 return (mask & (1 << BOSS_XT002)) == 0;
918 case 10598:
919 case 10599:
920 return (mask & (1 << BOSS_ASSEMBLY)) == 0;
921 case 10348:
922 case 10357:
923 return (mask & (1 << BOSS_KOLOGARN)) == 0;
924 case 10351:
925 case 10363:
926 return (mask & (1 << BOSS_AURIAYA)) == 0;
927 case 10439:
928 case 10719:
929 return (mask & (1 << BOSS_HODIR)) == 0;
930 case 10403:
931 case 10404:
932 return (mask & (1 << BOSS_THORIM)) == 0;
933 case 10582:
934 case 10583:
935 return (mask & (1 << BOSS_FREYA)) == 0;
936 case 10347:
937 case 10361:
938 return (mask & (1 << BOSS_MIMIRON)) == 0;
939 case 10349:
940 case 10362:
941 return (mask & (1 << BOSS_VEZAX)) == 0;
942 case 10350:
943 case 10364:
944 return (mask & (1 << BOSS_YOGGSARON)) == 0;
945 }
946 return false;
947 }
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:339
@ 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.

◆ CheckRequiredBosses()

bool instance_ulduar::instance_ulduar_InstanceMapScript::CheckRequiredBosses ( uint32  bossId,
Player const *  player 
) const
inlineoverridevirtual

Reimplemented from InstanceScript.

950 {
951 if (_SkipCheckRequiredBosses(player))
952 return true;
953
954 switch (bossId)
955 {
956 case BOSS_YOGGSARON:
958 return false;
959 break;
960 default:
961 break;
962 }
963
964 return true;
965 }
@ DONE
Definition InstanceScript.h:61
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:252
bool _SkipCheckRequiredBosses(Player const *player=nullptr) const
Definition InstanceScript.cpp:395

References InstanceScript::_SkipCheckRequiredBosses(), BOSS_VEZAX, BOSS_YOGGSARON, DONE, and InstanceScript::GetBossState().

◆ FillInitialWorldStates()

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

Reimplemented from InstanceScript.

239 {
240 uint32 algalonTimer =
242 packet.Worldstates.reserve(2);
243 packet.Worldstates.emplace_back(
245 (algalonTimer && algalonTimer <= 60) ? 1 : 0);
246 packet.Worldstates.emplace_back(
248 std::min<uint32>(algalonTimer, 60));
249 }
@ 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:338

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.

761 {
762 switch (type)
763 {
769
771 return GetPersistentData(
773
774 case DATA_CALL_TRAM:
775 return _mimironTramUsed;
776 }
777
778 return 0;
779 }
bool _mimironTramUsed
Definition instance_ulduar.cpp:218
bool _leviathanTowers[4]
Definition instance_ulduar.cpp:207
@ PERSISTENT_DATA_MAGE_BARRIER
Definition ulduar.h:340
@ EVENT_TOWER_OF_STORM_DESTROYED
Definition ulduar.h:352
@ EVENT_TOWER_OF_LIFE_DESTROYED
Definition ulduar.h:355
@ EVENT_TOWER_OF_FLAMES_DESTROYED
Definition ulduar.h:354
@ EVENT_TOWER_OF_FROST_DESTROYED
Definition ulduar.h:353
@ DATA_MAGE_BARRIER
Definition ulduar.h:145
@ DATA_CALL_TRAM
Definition ulduar.h:120

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.

746 {
747 switch (data)
748 {
749 // Flame Leviathan
751 return _repairSGUID[0];
753 return _repairSGUID[1];
754
755 }
756
757 return GetObjectGuid(data);
758 }
ObjectGuid GetObjectGuid(uint32 type) const
Definition InstanceScript.cpp:103
ObjectGuid _repairSGUID[2]
Definition instance_ulduar.cpp:206
@ 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
453 {
454 if (hardmode)
455 {
457 return go;
459 }
460
462 return go;
464 }
Definition GameObject.h:120
GameObject * GetGameObject(uint32 type)
Definition InstanceScript.cpp:125
@ DATA_HODIR_CHEST_NORMAL
Definition ulduar.h:139
@ DATA_HODIR_CHEST_NORMAL_HERO
Definition ulduar.h:141
@ DATA_HODIR_CHEST_HARD
Definition ulduar.h:140
@ DATA_HODIR_CHEST_HARD_HERO
Definition ulduar.h:142

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

Referenced by ProcessEvent(), setChestsLootable(), and SetData().

◆ Initialize()

void instance_ulduar::instance_ulduar_InstanceMapScript::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

222 {
223 // Flame Leviathan
224 for (uint8 i = 0; i < 4; ++i)
225 _leviathanTowers[i] = true;
226
227 _leviathanVehicles.clear();
228
229 // Hodir
230 _hmHodir = true; // If players fail the Hardmode then becomes false
231
232 // Shared
233 _events.Reset();
234 _mimironTramUsed = false;
236 }
std::uint8_t uint8
Definition Define.h:109
void Reset()
Definition EventMap.cpp:21
GuidList _leviathanVehicles
Definition instance_ulduar.cpp:208
EventMap _events
Definition instance_ulduar.cpp:217
bool _hmHodir
Definition instance_ulduar.cpp:211
bool _algalonResummonPending
Definition instance_ulduar.cpp:219

References _algalonResummonPending, _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.

305 {
306 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
307 {
308 if (GetBossState(i) == IN_PROGRESS)
309 return true;
310 }
311
312 // Leviathan does not use IN_PROGRESS type, instead SPECIAL is set and never reset,
313 // Check if he is in combat.
315 if (l->IsInCombat())
316 return true;
317
318 return false;
319 }
@ IN_PROGRESS
Definition InstanceScript.h:59
Definition Creature.h:47
Map * instance
Definition InstanceScript.h:149
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2414

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.

828 {
830
831 if (!data)
833
834 uint32 algalonTimer =
836 if (algalonTimer == TIMER_ALGALON_SUMMONED)
837 {
841 }
842
843 algalonTimer =
845 if (algalonTimer && algalonTimer <= 60
847 {
852 algalonTimer);
853 }
854 }
virtual void Load(char const *data)
Definition InstanceScript.cpp:469
void StorePersistentData(uint32 index, uint32 data)
Definition InstanceScript.cpp:440
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:639
@ PERSISTENT_DATA_UNBROKEN
Definition ulduar.h:337
@ TIMER_ALGALON_SUMMONED
Definition ulduar.h:375
@ TIMER_ALGALON_TO_SUMMON
Definition ulduar.h:374
@ 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.

415 {
417
418 switch (creature->GetEntry())
419 {
420 case NPC_KOLOGARN:
422 {
423 creature->SetDisableGravity(true);
424 creature->SetPosition(creature->GetHomePosition());
426 creature->StopMovingOnCurrentPos();
427 }
428 break;
429 case NPC_ALGALON:
431 creature->DespawnOrUnsummon();
432 break;
440 if (Creature* algalon = GetCreature(BOSS_ALGALON))
441 algalon->AI()->JustSummoned(creature);
442 break;
443 }
444 }
void setDeathState(DeathState s, bool despawn=false) override
A creature can be in 4 different states: Alive, JustDied, Corpse, and JustRespawned....
Definition Creature.cpp:1956
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:349
void SetPosition(float x, float y, float z, float o)
Definition Creature.cpp:3293
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2199
void OnCreatureCreate(Creature *creature) override
Definition InstanceScript.cpp:75
Creature * GetCreature(uint32 type)
Definition InstanceScript.cpp:120
uint32 GetEntry() const
Definition Object.h:117
void StopMovingOnCurrentPos()
Definition Unit.cpp:13073
void SetDisableGravity(bool disable)
Definition Unit.cpp:16506
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_01
Definition ulduar.h:235
@ NPC_UNLEASHED_DARK_MATTER
Definition ulduar.h:237
@ NPC_ALGALON
Definition ulduar.h:181
@ NPC_ALGALON_STALKER_ASTEROID_TARGET_02
Definition ulduar.h:236
@ NPC_KOLOGARN
Definition ulduar.h:170
@ NPC_ALGALON_VOID_ZONE_VISUAL_STALKER
Definition ulduar.h:234

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

◆ OnGameObjectCreate()

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

Reimplemented from ZoneScript.

467 {
469
470 switch (gameObject->GetEntry())
471 {
472 // Flame Leviathan
474 {
475 if (_repairSGUID[0])
476 _repairSGUID[1] = gameObject->GetGUID();
477 else
478 _repairSGUID[0] = gameObject->GetGUID();
479 break;
480 }
483 _leviathanVisualTowers[3][0] = gameObject->GetGUID();
484 break;
487 _leviathanVisualTowers[0][0] = gameObject->GetGUID();
488 break;
491 _leviathanVisualTowers[2][0] = gameObject->GetGUID();
492 break;
495 _leviathanVisualTowers[1][0] = gameObject->GetGUID();
496 break;
499 _leviathanVisualTowers[3][1] = gameObject->GetGUID();
500 break;
503 _leviathanVisualTowers[0][1] = gameObject->GetGUID();
504 break;
507 _leviathanVisualTowers[2][1] = gameObject->GetGUID();
508 break;
511 _leviathanVisualTowers[1][1] = gameObject->GetGUID();
512 break;
516 break;
519 break;
520 case GO_KEEPERS_GATE:
523 break;
524 // Mimiron, Hodir, Vezax
526 gameObject->EnableCollision(false);
527 break;
528 case GO_SNOW_MOUND:
529 gameObject->EnableCollision(false);
530 break;
531 // Hodir loot chests: spawned locked via gameobject_template_addon,
532 // unlocked by setChestsLootable() when the encounter is defeated
538 {
540 gameObject->SetLootRecipient(instance);
541 }
542 break;
543 // Mimiron Tram
544 case GO_MIMIRON_TRAM:
546 _mimironTramUsed = true;
547 break;
548 // Algalon the Observer
553 break;
559 gameObject->EnableCollision(false);
560 break;
563 gameObject->SetGoState(GO_STATE_ACTIVE);
564 break;
567 gameObject->SetGoState(GO_STATE_ACTIVE);
568 break;
569 // Herbs
570 case 191019: // Adder's Tongue
571 case 190176: // Frost Lotus
572 case 190171: // Lichbloom
573 case 190170: // Talandra's Rose
574 case 189973: // Goldclover
576 gameObject->SetRespawnTime(7 * DAY);
577 break;
578 // Freya Loot
579 case 194324:
580 case 194325:
581 case 194326:
582 case 194327:
583 case 194328:
584 case 194329:
585 case 194330:
586 case 194331:
587 gameObject->SetLootRecipient(instance);
588 break;
589 }
590 }
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_NOT_SELECTABLE
Definition SharedDefines.h:1611
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1607
@ GO_FLAG_LOCKED
Definition SharedDefines.h:1608
void SetGoState(GOState state)
Definition GameObject.cpp:2503
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:218
void EnableCollision(bool enable)
Definition GameObject.cpp:2630
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1287
void SetLootRecipient(Creature *creature)
Definition GameObject.cpp:2672
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:219
void OnGameObjectCreate(GameObject *go) override
Definition InstanceScript.cpp:90
bool AllBossesDone() const
Definition InstanceScript.cpp:826
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void OpenIfDone(uint32 encounter, GameObject *go, GOState state)
Definition instance_ulduar.cpp:446
ObjectGuid _leviathanVisualTowers[4][2]
Definition instance_ulduar.cpp:205
@ GO_DOODAD_UL_SIGILDOOR_03
Definition ulduar.h:324
@ GO_DOODAD_UL_UNIVERSEGLOBE01
Definition ulduar.h:327
@ GO_MIMIRON_ELEVATOR
Definition ulduar.h:290
@ GO_DOODAD_UL_SIGILDOOR_01
Definition ulduar.h:322
@ GO_KOLOGARN_BRIDGE
Definition ulduar.h:276
@ GO_LEVIATHAN_DOORS
Definition ulduar.h:260
@ GO_THORIMS_TARGETTING_CRYSTAL
Definition ulduar.h:266
@ GO_HODIR_CHEST_NORMAL
Definition ulduar.h:247
@ GO_DOODAD_UL_SIGILDOOR_02
Definition ulduar.h:323
@ GO_MIMIRONS_TARGETTING_CRYSTAL
Definition ulduar.h:263
@ GO_FREYAS_GENERATOR
Definition ulduar.h:268
@ GO_HODIR_CHEST_NORMAL_HERO
Definition ulduar.h:248
@ GO_HODIRS_GENERATOR
Definition ulduar.h:269
@ GO_CELESTIAL_PLANETARIUM_ACCESS_25
Definition ulduar.h:321
@ GO_DOODAD_UL_ULDUAR_TRAPDOOR_03
Definition ulduar.h:328
@ GO_HODIR_CHEST_HARD_HERO
Definition ulduar.h:250
@ GO_DOODAD_UL_UNIVERSEFLOOR_01
Definition ulduar.h:325
@ GO_KEEPERS_GATE
Definition ulduar.h:277
@ GO_THORIMS_GENERATOR
Definition ulduar.h:270
@ GO_REPAIR_STATION_TRAP
Definition ulduar.h:259
@ GO_HODIRS_TARGETTING_CRYSTAL
Definition ulduar.h:265
@ GO_SNOW_MOUND
Definition ulduar.h:299
@ GO_MIMIRONS_GENERATOR
Definition ulduar.h:267
@ GO_HODIR_CHEST_HARD
Definition ulduar.h:249
@ GO_CELESTIAL_PLANETARIUM_ACCESS_10
Definition ulduar.h:320
@ GO_DOODAD_UL_UNIVERSEFLOOR_02
Definition ulduar.h:326
@ GO_MIMIRON_TRAM
Definition ulduar.h:281
@ GO_FREYAS_TARGETTING_CRYSTAL
Definition ulduar.h:264

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_FLAG_NOT_SELECTABLE, GO_FREYAS_GENERATOR, GO_FREYAS_TARGETTING_CRYSTAL, GO_HODIR_CHEST_HARD, GO_HODIR_CHEST_HARD_HERO, GO_HODIR_CHEST_NORMAL, GO_HODIR_CHEST_NORMAL_HERO, 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::instance, InstanceScript::OnGameObjectCreate(), OpenIfDone(), PERSISTENT_DATA_ALGALON_TIMER, GameObject::RemoveGameObjectFlag(), GameObject::SetGameObjectFlag(), GameObject::SetGoState(), GameObject::SetLootRecipient(), and GameObject::SetRespawnTime().

◆ OnPlayerEnter()

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

Reimplemented from InstanceScript.

252 {
253 // mimiron tram:
254 if (GameObject* MimironTram = GetGameObject(DATA_MIMIRON_TRAM))
255 {
256 player->UpdateVisibilityOf(MimironTram);
257 if (StaticTransport* t = MimironTram->ToStaticTransport())
258 {
260 if (!go->GetTransport())
261 t->AddPassenger(go, true);
263 if (!go->GetTransport())
264 t->AddPassenger(go, true);
265 }
266 }
267
268 // Spawn Observation Ring keepers for defeated bosses
269 uint32 watchersMask =
271 for (uint8 i = KEEPER_FREYA; i <= KEEPER_THORIM; ++i)
273 && !(watchersMask & (1 << i))
278
279 uint32 algalonTimer =
281 if (!GetObjectGuid(BOSS_ALGALON) && !_algalonResummonPending && algalonTimer
282 && (algalonTimer <= 60
283 || algalonTimer == TIMER_ALGALON_TO_SUMMON))
284 {
286 if (!algalon)
287 return;
288
289 if (algalonTimer <= 60)
290 {
292 algalon->AI()->DoAction(ACTION_INIT_ALGALON);
293 }
294 else // if (algalonTimer == TIMER_ALGALON_TO_SUMMON)
295 {
299 algalon->SetImmuneToPC(false);
300 }
301 }
302 }
CreatureAI * AI() const
Definition Creature.h:144
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:70
StaticTransport * ToStaticTransport()
Definition GameObject.h:325
bool IsBossDone(uint32 bossId) const
Definition InstanceScript.h:297
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:2241
void UpdateVisibilityOf(WorldObject *target)
Definition PlayerUpdates.cpp:1724
Definition Transport.h:120
Definition TemporarySummon.h:50
virtual void DoAction(int32)
Definition UnitAI.h:217
void SetImmuneToPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10631
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:399
@ PERSISTENT_DATA_WATCHERS_MASK
Definition ulduar.h:335
@ KEEPER_THORIM
Definition ulduar.h:392
@ ACTION_INIT_ALGALON
Definition ulduar.h:369
@ EVENT_UPDATE_ALGALON_TIMER
Definition ulduar.h:366
@ KEEPER_FREYA
Definition ulduar.h:389
@ DATA_MIMIRON_TRAM
Definition ulduar.h:81
@ DATA_MIMIRON_ACTIVATE_TRAM
Definition ulduar.h:82
@ DATA_MIMIRON_TRAM_ROCKET_BOOSTER
Definition ulduar.h:83

References _algalonResummonPending, _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.

782 {
783 // Feeds on Tears achievement
784 if (unit->IsPlayer())
785 {
787 if (Creature* algalon = GetCreature(BOSS_ALGALON))
788 algalon->AI()->DoAction(ACTION_FEEDS_ON_TEARS_FAILED);
789 }
790 else if (unit->IsCreature() && unit->GetAreaId() == AREA_THE_CONSERVATORY_OF_LIFE)
791 {
792 uint32 conspeedatory =
794 if (GameTime::GetGameTime().count() > (conspeedatory + DAY))
795 {
798 21597 /*CON-SPEED-ATORY_TIMED_CRITERIA*/);
800 GameTime::GetGameTime().count());
801 }
802 }
803
804 // achievement Champion/Conqueror of Ulduar
805 if (unit->IsPlayer())
806 for (uint8 i = 0; i <= 12; ++i)
807 {
808 bool inCombat = false;
809 if (i == BOSS_LEVIATHAN)
810 {
812 if (c->IsInCombat())
813 inCombat = true;
814 }
815 else
816 inCombat = (GetBossState(i) == IN_PROGRESS);
817
818 uint32 mask =
820 if (inCombat && (mask & (1 << i)) == 0)
823 mask | (1 << i));
824 }
825 }
@ 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:683
bool IsPlayer() const
Definition Object.h:201
bool IsCreature() const
Definition Object.h:205
uint32 GetAreaId() const
Definition Object.cpp:3174
Seconds GetGameTime()
Definition GameTime.cpp:38
@ PERSISTENT_DATA_CONSPEEDATORY
Definition ulduar.h:336
@ ACTION_FEEDS_ON_TEARS_FAILED
Definition ulduar.h:368

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
447 {
448 if (GetBossState(encounter) == DONE)
449 go->SetGoState(state);
450 }

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.

322 {
323 // destory towers
325 SetData(eventId, 0);
326 else if (eventId == EVENT_HODIR_SHATTER_CHEST)
327 {
328 if (GameObject* go = GetHodirChest(true))
329 {
330 go->SetGoState(GO_STATE_ACTIVE);
331 scheduler.Schedule(3s, [this](TaskContext /*context*/)
332 {
335 });
336 }
337 }
338 }
TaskScheduler scheduler
Definition InstanceScript.h:305
Definition TaskScheduler.h:422
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition TaskScheduler.h:233
void SetData(uint32 type, uint32 data) override
Definition instance_ulduar.cpp:617
GameObject * GetHodirChest(bool hardmode)
Definition instance_ulduar.cpp:452
@ EVENT_HODIR_SHATTER_CHEST
Definition ulduar.h:358
@ TYPE_HODIR_HM_FAIL
Definition ulduar.h:52

References BOSS_HODIR, DONE, EVENT_HODIR_SHATTER_CHEST, EVENT_TOWER_OF_FLAMES_DESTROYED, EVENT_TOWER_OF_LIFE_DESTROYED, InstanceScript::GetBossState(), GetHodirChest(), GO_STATE_ACTIVE, TaskScheduler::Schedule(), InstanceScript::scheduler, SetData(), and TYPE_HODIR_HM_FAIL.

Referenced by SetData().

◆ SetBossState()

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

Reimplemented from InstanceScript.

341 {
342 if (!InstanceScript::SetBossState(type, state))
343 return false;
344
345 switch (type)
346 {
347 case BOSS_LEVIATHAN:
348 if (state == DONE)
349 {
350 instance->DoForAllPlayers([&](Player* player)
351 {
352 if (Creature* vehicleCreature = player->GetVehicleCreatureBase())
353 vehicleCreature->DespawnOrUnsummon();
354 });
355
357 go->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
358 }
359 break;
360 case BOSS_MIMIRON:
361 if (state == IN_PROGRESS)
362 _mimironTramUsed = true;
363 [[fallthrough]];
364 case BOSS_HODIR:
365 case BOSS_THORIM:
366 case BOSS_FREYA:
368 {
369 scheduler.Schedule(45s, [this](TaskContext /*context*/)
370 {
372 trigger->AI()->Talk(EMOTE_ANCIENT_GATE_UNLOCKED);
373 });
374 }
375 if (type == BOSS_HODIR && state == DONE)
377 if (state == DONE)
378 {
379 uint8 keeperIdx = type - BOSS_FREYA;
382 ObservationRingKeepersPos[keeperIdx]);
383 }
384 break;
385 default:
386 break;
387 }
388
389 // take care of herbs
390 if (type == BOSS_FREYA && state == DONE)
391 {
392 std::list<GameObject*> goList;
393 if (Creature* freya = GetCreature(BOSS_FREYA))
394 {
395 freya->GetGameObjectListWithEntryInGrid(goList, { 191019, 190176, 190171, 190170, 189973 }, 333.0f);
396
397 for (GameObject* herb : goList)
398 herb->SetRespawnTime(7 * DAY);
399 }
400 }
401
402 if (type > BOSS_LEVIATHAN && type < MAX_ENCOUNTER && state == IN_PROGRESS)
403 {
404 instance->DoForAllPlayers([&](Player* player)
405 {
406 if (Creature* vehicleCreature = player->GetVehicleCreatureBase())
407 vehicleCreature->DespawnOrUnsummon();
408 });
409 }
410
411 return true;
412 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:400
void DoForAllPlayers(std::function< void(Player *)> exec)
Definition Map.cpp:3315
Definition Player.h:1086
Creature * GetVehicleCreatureBase() const
Definition Unit.cpp:15021
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2600
Position const triggerAncientGatePosition
Definition instance_ulduar.cpp:214
void setChestsLootable(uint32 boss)
Definition instance_ulduar.cpp:592
@ NPC_ANCIENT_GATE_WORLD_TRIGGER
Definition ulduar.h:384
@ EMOTE_ANCIENT_GATE_UNLOCKED
Definition ulduar.h:385
@ 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
593 {
594 if (boss)
595 {
596 switch (boss)
597 {
598 case BOSS_HODIR:
599 if (_hmHodir)
600 {
601 if (GameObject* go = GetHodirChest(true))
602 {
603 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
604 go->SetLootRecipient(instance);
605 }
606 }
607 if (GameObject* go = GetHodirChest(false))
608 {
609 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
610 go->SetLootRecipient(instance);
611 }
612 break;
613 }
614 }
615 }

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.

618 {
619 switch (type)
620 {
622 if (GameObject* go = GetHodirChest(true))
623 {
624 _hmHodir = false;
625 go->DespawnOrUnsummon(0ms, 7_days);
626 }
627 break;
631 break;
633 if (Creature* sara = GetCreature(DATA_SARA))
634 sara->AI()->DoAction(ACTION_SARA_UPDATE_SUMMON_KEEPERS);
635 break;
640 {
642 for (uint8 i = 0; i < 2; ++i)
643 {
645 {
646 gameObject->SetGoState(GO_STATE_ACTIVE);
647 }
648 }
649 return;
650 }
651
654 return;
660 return;
664 return;
673 return;
674 // Achievement
678 return;
679 case DATA_CALL_TRAM:
680 if (GameObject* MimironTram = GetGameObject(DATA_MIMIRON_TRAM))
681 if (StaticTransport* t = MimironTram->ToStaticTransport())
682 {
683 if (data == 0 && t->GetGoState() == GO_STATE_ACTIVE && t->GetPathProgress() == t->GetPauseTime())
684 {
685 MimironTram->SetGoState(GO_STATE_READY);
687 rocketBooster->SetGoState(GO_STATE_ACTIVE);
688 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
689 activateTramButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
690 if (GameObject* callTramCenterButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_CENTER))
691 callTramCenterButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
692 scheduler.Schedule(30s, [this](TaskContext /*context*/)
693 {
695 turnaround1->UseDoorOrButton();
697 rocketBooster->SetGoState(GO_STATE_READY);
698 }).Schedule(60s, [this](TaskContext /*context*/)
699 {
700 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
701 activateTramButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
702 if (GameObject* callTramMimironButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_MIMIRON))
703 callTramMimironButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
704 });
705 }
706 if (data == 1 && t->GetGoState() == GO_STATE_READY && t->GetPathProgress() == 0)
707 {
708 MimironTram->SetGoState(GO_STATE_ACTIVE);
710 rocketBooster->SetGoState(GO_STATE_ACTIVE);
711 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
712 activateTramButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
713 if (GameObject* callTramMimironButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_MIMIRON))
714 callTramMimironButton->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
715 scheduler.Schedule(33s, [this](TaskContext /*context*/)
716 {
718 turnaround2->UseDoorOrButton();
720 rocketBooster->SetGoState(GO_STATE_READY);
721 }).Schedule(63s, [this](TaskContext /*context*/)
722 {
723 if (GameObject* activateTramButton = GetGameObject(DATA_MIMIRON_ACTIVATE_TRAM))
724 activateTramButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
725 if (GameObject* callTramCenterButton = GetGameObject(DATA_MIMIRON_CALL_TRAM_CENTER))
726 callTramCenterButton->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
727 });
728 }
729 }
730 break;
733 cr->TextEmote("Go to your vehicles!", nullptr, true);
734 break;
740 break;
741 }
742
743 }
@ 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:674
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Map.cpp:2419
void ProcessEvent(WorldObject *, uint32 eventId) override
Definition instance_ulduar.cpp:321
void SpawnLeviathanEncounterVehicles(uint8 mode)
Definition instance_ulduar.cpp:1011
@ EVENT_KEEPER_TELEPORTED
Definition ulduar.h:381
@ SPELL_DWARFAGEDDON
Definition ulduar.h:395
@ ACTION_SARA_UPDATE_SUMMON_KEEPERS
Definition ulduar.h:388
@ EVENT_RESUMMON_ALGALON
Definition ulduar.h:367
@ TIMER_ALGALON_DEFEATED
Definition ulduar.h:373
@ DATA_SARA
Definition ulduar.h:128
@ DATA_BRANN_MEMOTESAY
Definition ulduar.h:146
@ DATA_BRANN_BASE_CAMP
Definition ulduar.h:148
@ DATA_MIMIRON_CALL_TRAM_CENTER
Definition ulduar.h:84
@ DATA_MIMIRON_CALL_TRAM_MIMIRON
Definition ulduar.h:85
@ DATA_MIMIRON_TRAM_TURNAROUND_1
Definition ulduar.h:86
@ DATA_DESPAWN_ALGALON
Definition ulduar.h:102
@ DATA_BRANN_EASY_MODE
Definition ulduar.h:147
@ DATA_ALGALON_DEFEATED
Definition ulduar.h:103
@ DATA_MIMIRON_TRAM_TURNAROUND_2
Definition ulduar.h:87
@ DATA_VEHICLE_SPAWN
Definition ulduar.h:61
@ DATA_DWARFAGEDDON
Definition ulduar.h:115
@ DATA_ALGALON_SUMMON_STATE
Definition ulduar.h:101
@ DATA_RESUMMON_ALGALON
Definition ulduar.h:112

References _algalonResummonPending, _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_RESUMMON_ALGALON, DATA_SARA, DATA_VEHICLE_SPAWN, InstanceScript::DoStartTimedAchievement(), InstanceScript::DoUpdateAchievementCriteria(), InstanceScript::DoUpdateWorldState(), EVENT_KEEPER_TELEPORTED, EVENT_RESUMMON_ALGALON, 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().

◆ SpawnLeviathanEncounterVehicles()

void instance_ulduar::instance_ulduar_InstanceMapScript::SpawnLeviathanEncounterVehicles ( uint8  mode)
1012{
1013 if (!_leviathanVehicles.empty())
1014 {
1015 for (ObjectGuid const& guid : _leviathanVehicles)
1016 {
1017 if (Creature* cr = instance->GetCreature(guid))
1018 {
1019 cr->DespawnOrUnsummon();
1020 }
1021 }
1022
1023 _leviathanVehicles.clear();
1024 }
1025
1026 if (mode < VEHICLE_POS_NONE)
1027 {
1028 for (uint8 i = 0; i < (instance->Is25ManRaid() ? 5 : 2); ++i)
1029 {
1031 {
1032 _leviathanVehicles.push_back(veh->GetGUID());
1033 }
1035 {
1036 _leviathanVehicles.push_back(veh->GetGUID());
1037 }
1039 {
1040 _leviathanVehicles.push_back(veh->GetGUID());
1041 }
1042 }
1043 }
1044}
bool Is25ManRaid() const
Definition Map.h:304
Definition ObjectGuid.h:121
const Position vehiclePositions[30]
Definition instance_ulduar.cpp:969
@ VEHICLE_POS_NONE
Definition ulduar.h:350
@ NPC_SALVAGED_SIEGE_ENGINE
Definition ulduar.h:219
@ NPC_VEHICLE_CHOPPER
Definition ulduar.h:221
@ NPC_SALVAGED_DEMOLISHER
Definition ulduar.h:222

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.

857 {
859
860 if (_events.Empty())
861 return;
862
863 _events.Update(diff);
864 switch (_events.ExecuteEvent())
865 {
867 {
868 uint32 algalonTimer =
870 if (algalonTimer == TIMER_ALGALON_DEFEATED)
871 return;
872
875 --algalonTimer);
878 algalonTimer);
879 if (algalonTimer)
880 {
881 _events.Repeat(1min);
882 return;
883 }
884
886 if (Creature* algalon = GetCreature(BOSS_ALGALON))
887 algalon->AI()->DoAction(ACTION_DESPAWN_ALGALON);
888 break;
889 }
894 algalon->AI()->DoAction(ACTION_START_INTRO);
895 break;
896 }
897 }
@ ACTION_START_INTRO
Definition boss_nightbane.cpp:57
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:257
@ ACTION_DESPAWN_ALGALON
Definition ulduar.h:370
Position const AlgalonSummonPos
Definition ulduar.h:398

References _algalonResummonPending, _events, ACTION_DESPAWN_ALGALON, ACTION_START_INTRO, AlgalonSummonPos, BOSS_ALGALON, DATA_ALGALON_DEFEATED, InstanceScript::DoUpdateWorldState(), EventMap::Empty(), EVENT_RESUMMON_ALGALON, EVENT_UPDATE_ALGALON_TIMER, EventMap::ExecuteEvent(), InstanceScript::GetCreature(), InstanceScript::GetPersistentData(), InstanceScript::instance, NPC_ALGALON, PERSISTENT_DATA_ALGALON_TIMER, EventMap::Repeat(), SetData(), InstanceScript::StorePersistentData(), Map::SummonCreature(), TIMER_ALGALON_DEFEATED, EventMap::Update(), InstanceScript::Update(), and WORLD_STATE_ULDUAR_ALGALON_DESPAWN_TIMER.

Member Data Documentation

◆ _algalonResummonPending

bool instance_ulduar::instance_ulduar_InstanceMapScript::_algalonResummonPending

◆ _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().

◆ triggerAncientGatePosition

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

Referenced by SetBossState().


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