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

Public Member Functions

 instance_mount_hyjal_InstanceMapScript (Map *map)
 
void Initialize () override
 
void OnGameObjectCreate (GameObject *go) override
 
void OnCreatureCreate (Creature *creature) override
 
void OnUnitDeath (Unit *unit) override
 
void SetData (uint32 type, uint32 data) override
 
uint32 GetData (uint32 type) const override
 
void ScheduleWaves (Milliseconds, uint8 startWaves, uint8 maxWaves, Milliseconds timerptr[])
 
void Update (uint32 diff) override
 
void OnPlayerInWaterStateUpdate (Player *player, bool inWater) override
 
- Public Member Functions inherited from InstanceScript
 InstanceScript (Map *map)
 
 ~InstanceScript () override
 
virtual void Load (char const *data)
 
virtual void CreatureLooted (Creature *, LootType)
 
virtual std::string GetSaveData ()
 
void SaveToDB ()
 
virtual bool IsEncounterInProgress () const
 
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 OnPlayerEnter (Player *)
 
virtual void OnPlayerLeave (Player *)
 
virtual void OnPlayerAreaUpdate (Player *, uint32, uint32)
 
void HandleGameObject (ObjectGuid guid, bool open, GameObject *go=nullptr)
 
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 ()
 
virtual bool SetBossState (uint32 id, EncounterState state)
 
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 CheckAchievementCriteriaMeet (uint32, Player const *, Unit const *=nullptr, uint32=0)
 
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)
 
virtual void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &)
 
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)
 
virtual void ProcessEvent (WorldObject *, uint32)
 

Private Member Functions

void ResetWaves ()
 

Private Attributes

int32 _trash
 
uint8 _currentWave
 
uint8 _bossWave
 
uint8 _retreat
 
GuidSet _encounterNPCs
 
GuidSet _summonedNPCs
 
GuidSet _baseAlliance
 
GuidSet _baseHorde
 
GuidVector _infernalTargets
 
GuidSet _baseNightElf
 
GuidSet _ancientGemAlliance
 
GuidSet _ancientGemHorde
 
GuidSet _roaringFlameAlliance
 
GuidSet _roaringFlameHorde
 
bool _initialWaves
 

Additional Inherited Members

- Static Public Member Functions inherited from InstanceScript
static std::string GetBossStateName (uint8 state)
 
- Public Attributes inherited from InstanceScript
Mapinstance
 
TaskScheduler scheduler
 
- 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_mount_hyjal_InstanceMapScript()

instance_hyjal::instance_mount_hyjal_InstanceMapScript::instance_mount_hyjal_InstanceMapScript ( Map map)
inline
84 : InstanceScript(map)
85 {
90 }
#define DataHeader
Definition blackrock_depths.h:23
uint32 const EncounterCount
Definition blackrock_spire.h:23
Definition InstanceScript.h:143
void SetBossNumber(uint32 number)
Definition InstanceScript.h:296
void LoadDoorData(DoorData const *data)
Definition InstanceScript.cpp:176
void SetHeaders(std::string const &dataHeaders)
Definition InstanceScript.cpp:153
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition InstanceScript.cpp:188
ObjectData const creatureData[]
Definition instance_hyjal.cpp:40
DoorData const doorData[]
Definition instance_hyjal.cpp:33

References creatureData, DataHeader, doorData, EncounterCount, InstanceScript::LoadDoorData(), InstanceScript::LoadObjectData(), InstanceScript::SetBossNumber(), and InstanceScript::SetHeaders().

Member Function Documentation

◆ GetData()

uint32 instance_hyjal::instance_mount_hyjal_InstanceMapScript::GetData ( uint32  type) const
inlineoverridevirtual

Reimplemented from ZoneScript.

508 {
509 switch (type)
510 {
511 case DATA_WAVE_STATUS:
512 return _currentWave;
513 break;
514 case DATA_BOSS_WAVE:
515 return _bossWave;
516 }
517 return 0;
518 }
@ DATA_BOSS_WAVE
Definition hyjal.h:51
@ DATA_WAVE_STATUS
Definition hyjal.h:50
uint8 _currentWave
Definition instance_hyjal.cpp:575
uint8 _bossWave
Definition instance_hyjal.cpp:576

References _bossWave, _currentWave, DATA_BOSS_WAVE, and DATA_WAVE_STATUS.

◆ Initialize()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

93 {
95 _retreat = 0;
96 _trash = 0;
97 _currentWave = 0;
98 _initialWaves = false;
99 _encounterNPCs.clear();
100 _summonedNPCs.clear();
101 _baseAlliance.clear();
102 _baseHorde.clear();
103 _infernalTargets.clear();
104 _baseNightElf.clear();
105 _roaringFlameAlliance.clear();
106 _roaringFlameHorde.clear();
107 _ancientGemAlliance.clear();
108 _ancientGemHorde.clear();
109 }
@ TO_BE_DECIDED
Definition InstanceScript.h:63
GuidSet _ancientGemAlliance
Definition instance_hyjal.cpp:584
GuidSet _ancientGemHorde
Definition instance_hyjal.cpp:585
GuidSet _baseNightElf
Definition instance_hyjal.cpp:583
bool _initialWaves
Definition instance_hyjal.cpp:588
GuidVector _infernalTargets
Definition instance_hyjal.cpp:582
GuidSet _baseHorde
Definition instance_hyjal.cpp:581
GuidSet _summonedNPCs
Definition instance_hyjal.cpp:579
GuidSet _roaringFlameAlliance
Definition instance_hyjal.cpp:586
GuidSet _roaringFlameHorde
Definition instance_hyjal.cpp:587
uint8 _retreat
Definition instance_hyjal.cpp:577
GuidSet _baseAlliance
Definition instance_hyjal.cpp:580
GuidSet _encounterNPCs
Definition instance_hyjal.cpp:578
int32 _trash
Definition instance_hyjal.cpp:574

References _ancientGemAlliance, _ancientGemHorde, _baseAlliance, _baseHorde, _baseNightElf, _bossWave, _currentWave, _encounterNPCs, _infernalTargets, _initialWaves, _retreat, _roaringFlameAlliance, _roaringFlameHorde, _summonedNPCs, _trash, and TO_BE_DECIDED.

◆ OnCreatureCreate()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnCreatureCreate ( Creature creature)
inlineoverridevirtual

Reimplemented from ZoneScript.

134 {
135 switch (creature->GetEntry())
136 {
137 // Alliance base
144 case NPC_JAINA:
145 _baseAlliance.insert(creature->GetGUID());
146 break;
147 // Horde base
149 case NPC_HORDE_SHAMAN:
150 case NPC_HORDE_GRUNT:
154 case NPC_HORDE_PEON:
155 case NPC_THRALL:
156 _baseHorde.insert(creature->GetGUID());
157 break;
158 // Elf base
164 case NPC_NELF_ARCHER:
166 case NPC_DRYAD:
167 case NPC_TYRANDE:
168 _baseNightElf.insert(creature->GetGUID());
169 break;
170
172 _infernalTargets.push_back(creature->GetGUID());
173 break;
174
175 case NPC_WINTERCHILL:
176 case NPC_ANETHERON:
177 case NPC_KAZROGAL:
178 case NPC_AZGALOR:
179 case NPC_NECRO:
180 case NPC_ABOMI:
181 case NPC_GHOUL:
182 case NPC_BANSH:
183 case NPC_CRYPT:
184 case NPC_STALK:
185 case NPC_GARGO:
186 case NPC_FROST:
187 case NPC_INFER:
189 creature->AI()->DoAction(_bossWave);
190 else if (_retreat)
191 creature->AI()->DoAction(_retreat);
192
193 if (creature->IsSummon() && _bossWave != TO_BE_DECIDED)
194 {
195 if (_currentWave == 0 && _initialWaves)
196 creature->SetReputationRewardDisabled(true);
197 DoUpdateWorldState(WORLD_STATE_HYJAL_ENEMY_COUNT, ++_trash); // Update the instance wave count on new trash spawn
198 _encounterNPCs.insert(creature->GetGUID()); // Used for despawning on wipe
199 }
200 break;
203 case NPC_DIRE_WOLF:
205 if (creature->IsSummon())
206 {
207 _summonedNPCs.insert(creature->GetGUID());
208 }
209 break;
210 }
212 }
@ WORLD_STATE_HYJAL_ENEMY_COUNT
Definition WorldStateDefines.h:589
@ NPC_GHOUL
Definition chapter1.cpp:393
void SetReputationRewardDisabled(bool disable)
Definition Creature.h:363
CreatureAI * AI() const
Definition Creature.h:141
void OnCreatureCreate(Creature *creature) override
Definition InstanceScript.cpp:70
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:621
uint32 GetEntry() const
Definition Object.h:115
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:112
virtual void DoAction(int32)
Definition UnitAI.h:212
bool IsSummon() const
Definition Unit.h:760
@ NPC_DRUID_OF_THE_TALON
Definition hyjal.h:97
@ NPC_NELF_ANCIENT_OF_WAR
Definition hyjal.h:101
@ NPC_GARGO
Definition hyjal.h:62
@ NPC_WINTERCHILL
Definition hyjal.h:107
@ NPC_HORDE_PEON
Definition hyjal.h:90
@ NPC_STALK
Definition hyjal.h:65
@ NPC_INFER
Definition hyjal.h:64
@ NPC_KAZROGAL
Definition hyjal.h:109
@ NPC_NELF_ANCIENT_OF_LORE
Definition hyjal.h:100
@ NPC_ALLIANCE_KNIGHT
Definition hyjal.h:75
@ NPC_DRYAD
Definition hyjal.h:104
@ NPC_ALLIANCE_FOOTMAN
Definition hyjal.h:76
@ NPC_NELF_ANCIENT_PROT
Definition hyjal.h:99
@ NPC_HORDE_WITCH_DOCTOR
Definition hyjal.h:89
@ NPC_FROST
Definition hyjal.h:63
@ NPC_HORDE_SHAMAN
Definition hyjal.h:85
@ NPC_GUARDIAN_ELEMENTAL
Definition hyjal.h:80
@ NPC_HORDE_HEADHUNTER
Definition hyjal.h:84
@ NPC_DRUID_OF_THE_CLAW
Definition hyjal.h:98
@ NPC_TYRANDE
Definition hyjal.h:96
@ NPC_TOWERING_INFERNAL
Definition hyjal.h:115
@ NPC_LESSER_DOOMGUARD
Definition hyjal.h:116
@ NPC_NECRO
Definition hyjal.h:60
@ NPC_ALLIANCE_RIFLEMAN
Definition hyjal.h:77
@ NPC_HORDE_HEALING_WARD
Definition hyjal.h:87
@ NPC_ABOMI
Definition hyjal.h:59
@ NPC_NELF_HUNTRESS
Definition hyjal.h:103
@ NPC_HORDE_GRUNT
Definition hyjal.h:86
@ NPC_DIRE_WOLF
Definition hyjal.h:93
@ NPC_CRYPT
Definition hyjal.h:58
@ NPC_TAUREN_WARRIOR
Definition hyjal.h:88
@ NPC_ANETHERON
Definition hyjal.h:108
@ NPC_ALLIANCE_PRIEST
Definition hyjal.h:78
@ NPC_ALLIANCE_SORCERESS
Definition hyjal.h:79
@ NPC_BANSH
Definition hyjal.h:61
@ NPC_NELF_ARCHER
Definition hyjal.h:102
@ NPC_AZGALOR
Definition hyjal.h:110
@ NPC_ALLIANCE_PEASANT
Definition hyjal.h:74
@ NPC_INFERNAL_TARGET
Definition karazhan.h:137
@ NPC_JAINA
Definition zone_undercity.cpp:419
@ NPC_THRALL
Definition zone_undercity.cpp:448

References _baseAlliance, _baseHorde, _baseNightElf, _bossWave, _currentWave, _encounterNPCs, _infernalTargets, _initialWaves, _retreat, _summonedNPCs, _trash, Creature::AI(), UnitAI::DoAction(), InstanceScript::DoUpdateWorldState(), Object::GetEntry(), Object::GetGUID(), Unit::IsSummon(), NPC_ABOMI, NPC_ALLIANCE_FOOTMAN, NPC_ALLIANCE_KNIGHT, NPC_ALLIANCE_PEASANT, NPC_ALLIANCE_PRIEST, NPC_ALLIANCE_RIFLEMAN, NPC_ALLIANCE_SORCERESS, NPC_ANETHERON, NPC_AZGALOR, NPC_BANSH, NPC_CRYPT, NPC_DIRE_WOLF, NPC_DRUID_OF_THE_CLAW, NPC_DRUID_OF_THE_TALON, NPC_DRYAD, NPC_FROST, NPC_GARGO, NPC_GHOUL, NPC_GUARDIAN_ELEMENTAL, NPC_HORDE_GRUNT, NPC_HORDE_HEADHUNTER, NPC_HORDE_HEALING_WARD, NPC_HORDE_PEON, NPC_HORDE_SHAMAN, NPC_HORDE_WITCH_DOCTOR, NPC_INFER, NPC_INFERNAL_TARGET, NPC_JAINA, NPC_KAZROGAL, NPC_LESSER_DOOMGUARD, NPC_NECRO, NPC_NELF_ANCIENT_OF_LORE, NPC_NELF_ANCIENT_OF_WAR, NPC_NELF_ANCIENT_PROT, NPC_NELF_ARCHER, NPC_NELF_HUNTRESS, NPC_STALK, NPC_TAUREN_WARRIOR, NPC_THRALL, NPC_TOWERING_INFERNAL, NPC_TYRANDE, NPC_WINTERCHILL, InstanceScript::OnCreatureCreate(), Creature::SetReputationRewardDisabled(), TO_BE_DECIDED, and WORLD_STATE_HYJAL_ENEMY_COUNT.

◆ OnGameObjectCreate()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnGameObjectCreate ( GameObject go)
inlineoverridevirtual

Reimplemented from ZoneScript.

112 {
113 switch (go->GetEntry())
114 {
115 case GO_ANCIENT_GEM:
116 if (go->GetPositionY() > -2500.f)
117 _ancientGemAlliance.insert(go->GetGUID());
118 else
119 _ancientGemHorde.insert(go->GetGUID());
120 go->DespawnOrUnsummon();
121 break;
122 case GO_FLAME:
123 if (go->GetPositionX() < 5360.f)
124 _roaringFlameAlliance.insert(go->GetGUID());
125 else
126 _roaringFlameHorde.insert(go->GetGUID());
127 go->DespawnOrUnsummon();
128 break;
129 }
131 }
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition GameObject.cpp:936
void OnGameObjectCreate(GameObject *go) override
Definition InstanceScript.cpp:85
@ GO_FLAME
Definition hyjal.h:124
@ GO_ANCIENT_GEM
Definition hyjal.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References _ancientGemAlliance, _ancientGemHorde, _roaringFlameAlliance, _roaringFlameHorde, GameObject::DespawnOrUnsummon(), Object::GetEntry(), Object::GetGUID(), Position::GetPositionX(), Position::GetPositionY(), GO_ANCIENT_GEM, GO_FLAME, and InstanceScript::OnGameObjectCreate().

◆ OnPlayerInWaterStateUpdate()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnPlayerInWaterStateUpdate ( Player player,
bool  inWater 
)
inlineoverridevirtual

Reimplemented from InstanceScript.

566 {
567 if (inWater && player->GetAreaId() == AREA_NORDRASSIL)
568 {
569 player->CastSpell(player, SPELL_ETERNAL_SILENCE, true);
570 }
571 }
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1178
uint32 GetAreaId() const
Definition Object.cpp:3156
@ SPELL_ETERNAL_SILENCE
Definition hyjal.h:144
@ AREA_NORDRASSIL
Definition hyjal.h:142

References AREA_NORDRASSIL, Unit::CastSpell(), WorldObject::GetAreaId(), and SPELL_ETERNAL_SILENCE.

◆ OnUnitDeath()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnUnitDeath ( Unit unit)
inlineoverridevirtual

Reimplemented from ZoneScript.

215 {
217
218 if (Creature* creature = unit->ToCreature())
219 {
220 switch (creature->GetEntry())
221 {
222 case NPC_NECRO:
223 case NPC_ABOMI:
224 case NPC_GHOUL:
225 case NPC_BANSH:
226 case NPC_CRYPT:
227 case NPC_GARGO:
228 case NPC_FROST:
229 case NPC_INFER:
230 case NPC_STALK:
231 if (creature->IsSummon())
232 {
234 {
235 DoUpdateWorldState(WORLD_STATE_HYJAL_ENEMY_COUNT, --_trash); // Update the instance wave count on new trash death
236 _encounterNPCs.erase(creature->GetGUID()); // Used for despawning on wipe
237
238 if (_trash == 0) // It can reach negatives if trash spawned after a retreat are killed, it shouldn't affect anything. Also happens on retail
240 }
241 }
242 break;
245 case NPC_DIRE_WOLF:
247 _summonedNPCs.erase(creature->GetGUID());
248 break;
249 case NPC_WINTERCHILL:
250 _initialWaves = false;
251 [[fallthrough]];
252 case NPC_ANETHERON:
253 case NPC_KAZROGAL:
254 case NPC_AZGALOR:
255 ResetWaves();
256 break;
257 }
258 }
259 else if (unit->IsPlayer() && GetBossState(DATA_ARCHIMONDE) == IN_PROGRESS)
260 {
261 if (Creature* archimonde = GetCreature(DATA_ARCHIMONDE))
262 archimonde->AI()->SetGUID(unit->GetGUID(), GUID_GAIN_SOUL_CHARGE_PLAYER);
263 }
264 }
@ IN_PROGRESS
Definition InstanceScript.h:59
Definition Creature.h:43
Creature * GetCreature(uint32 type)
Definition InstanceScript.cpp:115
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:242
bool IsPlayer() const
Definition Object.h:200
Creature * ToCreature()
Definition Object.h:205
virtual void OnUnitDeath(Unit *)
Definition ZoneScript.h:40
@ GUID_GAIN_SOUL_CHARGE_PLAYER
Definition hyjal.h:146
@ DATA_SPAWN_WAVES
Definition hyjal.h:44
@ DATA_ARCHIMONDE
Definition hyjal.h:35
void ResetWaves()
Definition instance_hyjal.cpp:590
void SetData(uint32 type, uint32 data) override
Definition instance_hyjal.cpp:266

References _bossWave, _encounterNPCs, _initialWaves, _summonedNPCs, _trash, DATA_ARCHIMONDE, DATA_SPAWN_WAVES, InstanceScript::DoUpdateWorldState(), InstanceScript::GetBossState(), InstanceScript::GetCreature(), Object::GetGUID(), GUID_GAIN_SOUL_CHARGE_PLAYER, IN_PROGRESS, Object::IsPlayer(), NPC_ABOMI, NPC_ANETHERON, NPC_AZGALOR, NPC_BANSH, NPC_CRYPT, NPC_DIRE_WOLF, NPC_FROST, NPC_GARGO, NPC_GHOUL, NPC_GUARDIAN_ELEMENTAL, NPC_INFER, NPC_KAZROGAL, NPC_LESSER_DOOMGUARD, NPC_NECRO, NPC_STALK, NPC_TOWERING_INFERNAL, NPC_WINTERCHILL, ZoneScript::OnUnitDeath(), ResetWaves(), SetData(), TO_BE_DECIDED, Object::ToCreature(), and WORLD_STATE_HYJAL_ENEMY_COUNT.

◆ ResetWaves()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::ResetWaves ( )
inlineprivate
591 {
592 if (Creature* jaina = GetCreature(DATA_JAINA))
593 jaina->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
594 if (Creature* thrall = GetCreature(DATA_THRALL))
595 thrall->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
597 }
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:315
@ DATA_RESET_WAVES
Definition hyjal.h:49
@ DATA_JAINA
Definition hyjal.h:40
@ DATA_THRALL
Definition hyjal.h:41

References DATA_JAINA, DATA_RESET_WAVES, DATA_THRALL, InstanceScript::GetCreature(), SetData(), and UNIT_NPC_FLAG_GOSSIP.

Referenced by OnUnitDeath().

◆ ScheduleWaves()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::ScheduleWaves ( Milliseconds  ,
uint8  startWaves,
uint8  maxWaves,
Milliseconds  timerptr[] 
)
inline
521 {
522 // No overlapping!
524 _trash = 0; // Reset counter here to avoid resetting the counter from scheduled waves. Required because creatures killed for RP events counts towards the kill counter as well, confirmed in Retail.
525
526 scheduler.Schedule(1ms, [this, startWaves, maxWaves, timerptr](TaskContext context)
527 {
528 // If all waves reached, cancel scheduling new ones
529 if (_currentWave >= maxWaves)
530 return;
531
532 instance->SummonCreatureGroup(startWaves + _currentWave); // _currentWave should be 0 when this function is first called
533
534 // Check if it's time to summon Infernals
536 {
537 switch (_currentWave + 1)
538 {
539 case 3:
540 case 4:
541 case 7:
543 break;
544 default:
545 break;
546 }
547 }
548
549 context.Repeat(timerptr[_currentWave]);
550 if (++_currentWave < maxWaves && _bossWave != TO_BE_DECIDED)
551 {
554 }
555
557 });
558 }
@ DONE
Definition InstanceScript.h:61
@ WORLD_STATE_HYJAL_ENEMY
Definition WorldStateDefines.h:588
@ WORLD_STATE_HYJAL_WAVES
Definition WorldStateDefines.h:590
Map * instance
Definition InstanceScript.h:149
TaskScheduler scheduler
Definition InstanceScript.h:293
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
Definition Object.cpp:2291
Definition TaskScheduler.h:421
TaskContext & Repeat(std::chrono::duration< _Rep, _Period > const &duration)
Definition TaskScheduler.h:493
TaskContext & SetGroup(TaskScheduler::group_t const group)
Sets the event in the given group.
Definition TaskScheduler.cpp:231
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
Definition TaskScheduler.h:232
TaskScheduler & CancelGroup(group_t const group)
Definition TaskScheduler.cpp:53
@ CONTEXT_GROUP_WAVES
Definition hyjal.h:140
@ DATA_SPAWN_INFERNALS
Definition hyjal.h:45
@ DATA_KAZROGAL
Definition hyjal.h:33
@ DATA_AZGALOR
Definition hyjal.h:34

References _bossWave, _currentWave, _trash, TaskScheduler::CancelGroup(), CONTEXT_GROUP_WAVES, DATA_AZGALOR, DATA_KAZROGAL, DATA_SPAWN_INFERNALS, DONE, InstanceScript::DoUpdateWorldState(), InstanceScript::GetBossState(), InstanceScript::instance, TaskContext::Repeat(), TaskScheduler::Schedule(), InstanceScript::scheduler, SetData(), TaskContext::SetGroup(), Map::SummonCreatureGroup(), TO_BE_DECIDED, WORLD_STATE_HYJAL_ENEMY, and WORLD_STATE_HYJAL_WAVES.

Referenced by SetData().

◆ SetData()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::SetData ( uint32  type,
uint32  data 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

267 {
268 switch (type)
269 {
273 // Spawn Ancient Gems
274 for (ObjectGuid const& guid : _ancientGemAlliance)
275 if (GameObject* gem = instance->GetGameObject(guid))
276 gem->Respawn();
277
278 // Move all alliance NPCs near Jaina (only happens in this base, not Horde's)
279 if (Creature* jaina = GetCreature(DATA_JAINA))
280 {
281 for (ObjectGuid const& guid : _baseAlliance)
282 {
283 if (Creature* creature = instance->GetCreature(guid))
284 {
285 if (creature->IsAlive())
286 {
287 float x, y, z;
288 jaina->GetNearPoint(creature, x, y, z, 10.f, 0, jaina->GetAngle(creature));
289 creature->SetWalk(true);
290 creature->GetMotionMaster()->MovePoint(1, x, y, z);
291 }
292 }
293 }
294 }
295
296 // Despawn all alliance NPCs
297 scheduler.Schedule(21000ms, [this](TaskContext)
298 {
299 for (ObjectGuid const& guid : _baseAlliance)
300 if (Creature* creature = instance->GetCreature(guid))
301 creature->DespawnOrUnsummon();
302
303 // Spawn Roaring Flame after a delay
304 scheduler.Schedule(30s, [this](TaskContext)
305 {
306 for (ObjectGuid const& guid : _roaringFlameAlliance)
307 {
308 if (GameObject* flame = instance->GetGameObject(guid))
309 flame->Respawn();
310 }
311 });
312 });
313
314 // Spawn Overrun waves
316
317 SaveToDB();
318 break;
322 for (ObjectGuid const& guid : _ancientGemHorde)
323 {
324 if (GameObject* gem = instance->GetGameObject(guid))
325 gem->Respawn();
326 }
327
328 if (Creature* jaina = GetCreature(DATA_JAINA))
329 {
330 for (ObjectGuid const& guid : _baseHorde)
331 {
332 if (Creature* creature = instance->GetCreature(guid))
333 {
334 if (creature->IsAlive())
335 {
336 float x, y, z;
337 jaina->GetNearPoint(creature, x, y, z, 10.f, 0, jaina->GetAngle(creature));
338 creature->SetWalk(true);
339 creature->GetMotionMaster()->MovePoint(1, x, y, z);
340 }
341 }
342 }
343 }
344
345 scheduler.Schedule(21000ms, [this](TaskContext)
346 {
347 for (ObjectGuid const& guid : _baseHorde)
348 if (Creature* creature = instance->GetCreature(guid))
349 creature->DespawnOrUnsummon();
350
351 scheduler.Schedule(30s, [this](TaskContext)
352 {
353 for (ObjectGuid const& guid : _roaringFlameHorde)
354 if (GameObject* flame = instance->GetGameObject(guid))
355 flame->Respawn();
356 });
357 });
358
360
361 SaveToDB();
362 break;
363 case DATA_SPAWN_WAVES:
364 _retreat = 0;
366 {
367 _initialWaves = true;
369 for (ObjectGuid const& guid : _baseAlliance)
370 if (Creature* creature = instance->GetCreature(guid))
371 creature->Respawn();
374 }
375 else if (GetBossState(DATA_ANETHERON) != DONE)
376 {
378 for (ObjectGuid const& guid : _baseAlliance)
379 if (Creature* creature = instance->GetCreature(guid))
380 creature->Respawn();
383 }
384 else if (GetBossState(DATA_KAZROGAL) != DONE)
385 {
387 for (ObjectGuid const& guid : _baseHorde)
388 if (Creature* creature = instance->GetCreature(guid))
389 creature->Respawn();
392 }
393 else if (GetBossState(DATA_AZGALOR) != DONE)
394 {
396 for (ObjectGuid const& guid : _baseHorde)
397 if (Creature* creature = instance->GetCreature(guid))
398 creature->Respawn();
401 }
402 else if (GetBossState(DATA_ARCHIMONDE) != DONE)
403 {
406 }
407
409 {
411 scheduler.Schedule(30s, [this](TaskContext context)
412 {
414 {
415 // Reset the instance if its empty.
416 // This is necessary because bosses get stuck fighting unreachable mobs.
417 // Remove this when we are sure pathing no longer causes this.
420 else
421 context.Repeat();
422 }
423 });
424 }
425
426 break;
428 {
429 uint8 doubleInfernalCount = 2;
430 // Uses SmartAI
431 for (ObjectGuid const& guid : _infernalTargets)
432 {
433 if (Creature* target = instance->GetCreature(guid))
434 {
435 if (doubleInfernalCount > 0)
436 {
437 target->AI()->SetData(DATA_SPAWN_INFERNALS, 2); // Spawns 2 infernals, as there are only 6 spawns, some summon 2
438 doubleInfernalCount--;
439 }
440 else
441 target->AI()->SetData(DATA_SPAWN_INFERNALS, 1);
442 }
443 }
444 }
445 break;
447 if (Creature* archimonde = GetCreature(DATA_ARCHIMONDE))
448 archimonde->DespawnOrUnsummon(0s, 300s);
449 [[fallthrough]];
451 case DATA_RESET_HORDE:
453 {
454 for (ObjectGuid const& guid : _baseAlliance)
455 if (Creature* creature = instance->GetCreature(guid))
456 creature->DespawnOrUnsummon(0s, 300s);
457 }
458
460 {
461 for (ObjectGuid const& guid : _baseHorde)
462 if (Creature* creature = instance->GetCreature(guid))
463 creature->DespawnOrUnsummon(0s, 300s);
464 }
465
466 for (ObjectGuid const& guid : _baseNightElf)
467 if (Creature* creature = instance->GetCreature(guid))
468 creature->DespawnOrUnsummon(0s, 300s);
469
470 for (ObjectGuid const& guid : _encounterNPCs)
471 if (Creature* creature = instance->GetCreature(guid))
472 creature->DespawnOrUnsummon();
473
474 // also force despawn boss summons
475 for (ObjectGuid const& guid : _summonedNPCs)
476 if (Creature* creature = instance->GetCreature(guid))
477 creature->DespawnOrUnsummon();
478
481
483 break;
484 case DATA_RESET_WAVES:
486 _initialWaves = true;
487
489 _encounterNPCs.clear();
490 _summonedNPCs.clear();
491 _currentWave = 0;
492 _trash = 0;
494 _retreat = 0;
498 break;
499 }
500
501 if (data == DONE)
502 {
503 SaveToDB();
504 }
505 }
std::uint8_t uint8
Definition Define.h:109
@ NOT_STARTED
Definition InstanceScript.h:58
Definition GameObject.h:120
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:385
virtual bool IsEncounterInProgress() const
Definition InstanceScript.cpp:137
void SaveToDB()
Definition InstanceScript.cpp:41
GameObject * GetGameObject(uint32 type)
Definition InstanceScript.cpp:120
GameObject * GetGameObject(ObjectGuid const guid)
Definition Map.cpp:2503
Creature * GetCreature(ObjectGuid const guid)
Definition Map.cpp:2498
uint32 GetPlayersCountExceptGMs() const
Definition Map.cpp:1927
Definition ObjectGuid.h:118
@ START_WAVE_WINTERCHILL
Definition hyjal.h:132
@ MAX_WAVES_RETREAT
Definition hyjal.h:130
@ START_WAVE_ALLIANCE_RETREAT
Definition hyjal.h:136
@ START_WAVE_NIGHT_ELF
Definition hyjal.h:138
@ START_WAVE_ANETHERON
Definition hyjal.h:133
@ START_WAVE_AZGALOR
Definition hyjal.h:135
@ START_WAVE_KAZROGAL
Definition hyjal.h:134
@ START_WAVE_HORDE_RETREAT
Definition hyjal.h:137
@ MAX_WAVES_STANDARD
Definition hyjal.h:129
@ MAX_WAVES_NIGHT_ELF
Definition hyjal.h:131
@ DATA_RESET_HORDE
Definition hyjal.h:47
@ DATA_RESET_NIGHT_ELF
Definition hyjal.h:48
@ DATA_RESET_ALLIANCE
Definition hyjal.h:46
@ DATA_WINTERCHILL
Definition hyjal.h:31
@ DATA_ANETHERON
Definition hyjal.h:32
@ DATA_ALLIANCE_RETREAT
Definition hyjal.h:37
@ DATA_HORDE_RETREAT
Definition hyjal.h:38
Milliseconds hyjalRetreatTimers[2][MAX_WAVES_RETREAT]
Definition instance_hyjal.cpp:62
Milliseconds hyjalWaveTimers[4][MAX_WAVES_STANDARD]
Definition instance_hyjal.cpp:54
Milliseconds hyjalNightElfWaveTimers[1][MAX_WAVES_NIGHT_ELF]
Definition instance_hyjal.cpp:68
void ScheduleWaves(Milliseconds, uint8 startWaves, uint8 maxWaves, Milliseconds timerptr[])
Definition instance_hyjal.cpp:520

References _ancientGemAlliance, _ancientGemHorde, _baseAlliance, _baseHorde, _baseNightElf, _bossWave, _currentWave, _encounterNPCs, _infernalTargets, _initialWaves, _retreat, _roaringFlameAlliance, _roaringFlameHorde, _summonedNPCs, _trash, TaskScheduler::CancelGroup(), CONTEXT_GROUP_WAVES, DATA_ALLIANCE_RETREAT, DATA_ANETHERON, DATA_ARCHIMONDE, DATA_AZGALOR, DATA_HORDE_RETREAT, DATA_JAINA, DATA_KAZROGAL, DATA_RESET_ALLIANCE, DATA_RESET_HORDE, DATA_RESET_NIGHT_ELF, DATA_RESET_WAVES, DATA_SPAWN_INFERNALS, DATA_SPAWN_WAVES, DATA_WINTERCHILL, DONE, InstanceScript::DoUpdateWorldState(), InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetCreature(), Map::GetGameObject(), Map::GetPlayersCountExceptGMs(), hyjalNightElfWaveTimers, hyjalRetreatTimers, hyjalWaveTimers, InstanceScript::instance, InstanceScript::IsEncounterInProgress(), MAX_WAVES_NIGHT_ELF, MAX_WAVES_RETREAT, MAX_WAVES_STANDARD, NOT_STARTED, TaskContext::Repeat(), InstanceScript::SaveToDB(), TaskScheduler::Schedule(), InstanceScript::scheduler, ScheduleWaves(), InstanceScript::SetBossState(), SetData(), START_WAVE_ALLIANCE_RETREAT, START_WAVE_ANETHERON, START_WAVE_AZGALOR, START_WAVE_HORDE_RETREAT, START_WAVE_KAZROGAL, START_WAVE_NIGHT_ELF, START_WAVE_WINTERCHILL, TO_BE_DECIDED, WORLD_STATE_HYJAL_ENEMY, WORLD_STATE_HYJAL_ENEMY_COUNT, and WORLD_STATE_HYJAL_WAVES.

Referenced by OnUnitDeath(), ResetWaves(), ScheduleWaves(), and SetData().

◆ Update()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::Update ( uint32  diff)
inlineoverridevirtual

Reimplemented from InstanceScript.

561 {
562 scheduler.Update(diff);
563 }
TaskScheduler & Update(success_t const &callback=EmptyCallback)
Definition TaskScheduler.cpp:27

References InstanceScript::scheduler, and TaskScheduler::Update().

Member Data Documentation

◆ _ancientGemAlliance

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_ancientGemAlliance
private

◆ _ancientGemHorde

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_ancientGemHorde
private

◆ _baseAlliance

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_baseAlliance
private

◆ _baseHorde

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_baseHorde
private

◆ _baseNightElf

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_baseNightElf
private

◆ _bossWave

uint8 instance_hyjal::instance_mount_hyjal_InstanceMapScript::_bossWave
private

◆ _currentWave

uint8 instance_hyjal::instance_mount_hyjal_InstanceMapScript::_currentWave
private

◆ _encounterNPCs

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_encounterNPCs
private

◆ _infernalTargets

GuidVector instance_hyjal::instance_mount_hyjal_InstanceMapScript::_infernalTargets
private

◆ _initialWaves

bool instance_hyjal::instance_mount_hyjal_InstanceMapScript::_initialWaves
private

◆ _retreat

uint8 instance_hyjal::instance_mount_hyjal_InstanceMapScript::_retreat
private

◆ _roaringFlameAlliance

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_roaringFlameAlliance
private

◆ _roaringFlameHorde

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_roaringFlameHorde
private

◆ _summonedNPCs

GuidSet instance_hyjal::instance_mount_hyjal_InstanceMapScript::_summonedNPCs
private

◆ _trash

int32 instance_hyjal::instance_mount_hyjal_InstanceMapScript::_trash
private

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