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
85 : InstanceScript(map)
86 {
91 }
#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:41
DoorData const doorData[]
Definition instance_hyjal.cpp:34

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.

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

References _bossWave, _currentWave, DATA_BOSS_WAVE, and DATA_WAVE_STATUS.

◆ Initialize()

void instance_hyjal::instance_mount_hyjal_InstanceMapScript::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

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

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.

135 {
136 switch (creature->GetEntry())
137 {
138 // Alliance base
145 case NPC_JAINA:
146 _baseAlliance.insert(creature->GetGUID());
147 break;
148 // Horde base
150 case NPC_HORDE_SHAMAN:
151 case NPC_HORDE_GRUNT:
155 case NPC_HORDE_PEON:
156 case NPC_THRALL:
157 _baseHorde.insert(creature->GetGUID());
158 break;
159 // Elf base
165 case NPC_NELF_ARCHER:
167 case NPC_DRYAD:
168 case NPC_TYRANDE:
169 _baseNightElf.insert(creature->GetGUID());
170 break;
171
173 _infernalTargets.push_back(creature->GetGUID());
174 break;
175
176 case NPC_WINTERCHILL:
177 case NPC_ANETHERON:
178 case NPC_KAZROGAL:
179 case NPC_AZGALOR:
180 case NPC_NECRO:
181 case NPC_ABOMI:
182 case NPC_GHOUL:
183 case NPC_BANSH:
184 case NPC_CRYPT:
185 case NPC_STALK:
186 case NPC_GARGO:
187 case NPC_FROST:
188 case NPC_INFER:
190 creature->AI()->DoAction(_bossWave);
191 else if (_retreat)
192 creature->AI()->DoAction(_retreat);
193
194 if (creature->IsSummon() && _bossWave != TO_BE_DECIDED)
195 {
196 if (_currentWave == 0 && _initialWaves)
197 creature->SetReputationRewardDisabled(true);
198 DoUpdateWorldState(WORLD_STATE_HYJAL_ENEMY_COUNT, ++_trash); // Update the instance wave count on new trash spawn
199 _encounterNPCs.insert(creature->GetGUID()); // Used for despawning on wipe
200 }
201 break;
204 case NPC_DIRE_WOLF:
206 if (creature->IsSummon())
207 {
208 _summonedNPCs.insert(creature->GetGUID());
209 }
210 break;
211 }
213 }
@ WORLD_STATE_HYJAL_ENEMY_COUNT
Definition WorldStateDefines.h:589
@ NPC_GHOUL
Definition chapter1.cpp:305
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:116
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
virtual void DoAction(int32)
Definition UnitAI.h:216
bool IsSummon() const
Definition Unit.h:744
@ 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:406
@ NPC_THRALL
Definition zone_undercity.cpp:435

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.

113 {
114 switch (go->GetEntry())
115 {
116 case GO_ANCIENT_GEM:
117 if (go->GetPositionY() > -2500.f)
118 _ancientGemAlliance.insert(go->GetGUID());
119 else
120 _ancientGemHorde.insert(go->GetGUID());
121 go->DespawnOrUnsummon();
122 break;
123 case GO_FLAME:
124 if (go->GetPositionX() < 5360.f)
125 _roaringFlameAlliance.insert(go->GetGUID());
126 else
127 _roaringFlameHorde.insert(go->GetGUID());
128 go->DespawnOrUnsummon();
129 break;
130 }
132 }
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.

567 {
568 if (inWater && player->GetAreaId() == AREA_NORDRASSIL)
569 {
570 player->CastSpell(player, SPELL_ETERNAL_SILENCE, true);
571 }
572 }
@ AREA_NORDRASSIL
Definition AreaDefines.h:117
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:1179
uint32 GetAreaId() const
Definition Object.cpp:3156
@ SPELL_ETERNAL_SILENCE
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.

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

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
592 {
593 if (Creature* jaina = GetCreature(DATA_JAINA))
594 jaina->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
595 if (Creature* thrall = GetCreature(DATA_THRALL))
596 thrall->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
598 }
@ 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
522 {
523 // No overlapping!
525 _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.
526
527 scheduler.Schedule(1ms, [this, startWaves, maxWaves, timerptr](TaskContext context)
528 {
529 // If all waves reached, cancel scheduling new ones
530 if (_currentWave >= maxWaves)
531 return;
532
533 instance->SummonCreatureGroup(startWaves + _currentWave); // _currentWave should be 0 when this function is first called
534
535 // Check if it's time to summon Infernals
537 {
538 switch (_currentWave + 1)
539 {
540 case 3:
541 case 4:
542 case 7:
544 break;
545 default:
546 break;
547 }
548 }
549
550 context.Repeat(timerptr[_currentWave]);
551 if (++_currentWave < maxWaves && _bossWave != TO_BE_DECIDED)
552 {
555 }
556
558 });
559 }
@ 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.

268 {
269 switch (type)
270 {
274 // Spawn Ancient Gems
275 for (ObjectGuid const& guid : _ancientGemAlliance)
276 if (GameObject* gem = instance->GetGameObject(guid))
277 gem->Respawn();
278
279 // Move all alliance NPCs near Jaina (only happens in this base, not Horde's)
280 if (Creature* jaina = GetCreature(DATA_JAINA))
281 {
282 for (ObjectGuid const& guid : _baseAlliance)
283 {
284 if (Creature* creature = instance->GetCreature(guid))
285 {
286 if (creature->IsAlive())
287 {
288 float x, y, z;
289 jaina->GetNearPoint(creature, x, y, z, 10.f, 0, jaina->GetAngle(creature));
290 creature->SetWalk(true);
291 creature->GetMotionMaster()->MovePoint(1, x, y, z);
292 }
293 }
294 }
295 }
296
297 // Despawn all alliance NPCs
298 scheduler.Schedule(21000ms, [this](TaskContext)
299 {
300 for (ObjectGuid const& guid : _baseAlliance)
301 if (Creature* creature = instance->GetCreature(guid))
302 creature->DespawnOrUnsummon();
303
304 // Spawn Roaring Flame after a delay
305 scheduler.Schedule(30s, [this](TaskContext)
306 {
307 for (ObjectGuid const& guid : _roaringFlameAlliance)
308 {
309 if (GameObject* flame = instance->GetGameObject(guid))
310 flame->Respawn();
311 }
312 });
313 });
314
315 // Spawn Overrun waves
317
318 SaveToDB();
319 break;
323 for (ObjectGuid const& guid : _ancientGemHorde)
324 {
325 if (GameObject* gem = instance->GetGameObject(guid))
326 gem->Respawn();
327 }
328
329 if (Creature* jaina = GetCreature(DATA_JAINA))
330 {
331 for (ObjectGuid const& guid : _baseHorde)
332 {
333 if (Creature* creature = instance->GetCreature(guid))
334 {
335 if (creature->IsAlive())
336 {
337 float x, y, z;
338 jaina->GetNearPoint(creature, x, y, z, 10.f, 0, jaina->GetAngle(creature));
339 creature->SetWalk(true);
340 creature->GetMotionMaster()->MovePoint(1, x, y, z);
341 }
342 }
343 }
344 }
345
346 scheduler.Schedule(21000ms, [this](TaskContext)
347 {
348 for (ObjectGuid const& guid : _baseHorde)
349 if (Creature* creature = instance->GetCreature(guid))
350 creature->DespawnOrUnsummon();
351
352 scheduler.Schedule(30s, [this](TaskContext)
353 {
354 for (ObjectGuid const& guid : _roaringFlameHorde)
355 if (GameObject* flame = instance->GetGameObject(guid))
356 flame->Respawn();
357 });
358 });
359
361
362 SaveToDB();
363 break;
364 case DATA_SPAWN_WAVES:
365 _retreat = 0;
367 {
368 _initialWaves = true;
370 for (ObjectGuid const& guid : _baseAlliance)
371 if (Creature* creature = instance->GetCreature(guid))
372 creature->Respawn();
375 }
376 else if (GetBossState(DATA_ANETHERON) != DONE)
377 {
379 for (ObjectGuid const& guid : _baseAlliance)
380 if (Creature* creature = instance->GetCreature(guid))
381 creature->Respawn();
384 }
385 else if (GetBossState(DATA_KAZROGAL) != DONE)
386 {
388 for (ObjectGuid const& guid : _baseHorde)
389 if (Creature* creature = instance->GetCreature(guid))
390 creature->Respawn();
393 }
394 else if (GetBossState(DATA_AZGALOR) != DONE)
395 {
397 for (ObjectGuid const& guid : _baseHorde)
398 if (Creature* creature = instance->GetCreature(guid))
399 creature->Respawn();
402 }
403 else if (GetBossState(DATA_ARCHIMONDE) != DONE)
404 {
407 }
408
410 {
412 scheduler.Schedule(30s, [this](TaskContext context)
413 {
415 {
416 // Reset the instance if its empty.
417 // This is necessary because bosses get stuck fighting unreachable mobs.
418 // Remove this when we are sure pathing no longer causes this.
421 else
422 context.Repeat();
423 }
424 });
425 }
426
427 break;
429 {
430 uint8 doubleInfernalCount = 2;
431 // Uses SmartAI
432 for (ObjectGuid const& guid : _infernalTargets)
433 {
434 if (Creature* target = instance->GetCreature(guid))
435 {
436 if (doubleInfernalCount > 0)
437 {
438 target->AI()->SetData(DATA_SPAWN_INFERNALS, 2); // Spawns 2 infernals, as there are only 6 spawns, some summon 2
439 doubleInfernalCount--;
440 }
441 else
442 target->AI()->SetData(DATA_SPAWN_INFERNALS, 1);
443 }
444 }
445 }
446 break;
448 if (Creature* archimonde = GetCreature(DATA_ARCHIMONDE))
449 archimonde->DespawnOrUnsummon(0s, 300s);
450 [[fallthrough]];
452 case DATA_RESET_HORDE:
454 {
455 for (ObjectGuid const& guid : _baseAlliance)
456 if (Creature* creature = instance->GetCreature(guid))
457 creature->DespawnOrUnsummon(0s, 300s);
458 }
459
461 {
462 for (ObjectGuid const& guid : _baseHorde)
463 if (Creature* creature = instance->GetCreature(guid))
464 creature->DespawnOrUnsummon(0s, 300s);
465 }
466
467 for (ObjectGuid const& guid : _baseNightElf)
468 if (Creature* creature = instance->GetCreature(guid))
469 creature->DespawnOrUnsummon(0s, 300s);
470
471 for (ObjectGuid const& guid : _encounterNPCs)
472 if (Creature* creature = instance->GetCreature(guid))
473 creature->DespawnOrUnsummon();
474
475 // also force despawn boss summons
476 for (ObjectGuid const& guid : _summonedNPCs)
477 if (Creature* creature = instance->GetCreature(guid))
478 creature->DespawnOrUnsummon();
479
482
484 break;
485 case DATA_RESET_WAVES:
487 _initialWaves = true;
488
490 _encounterNPCs.clear();
491 _summonedNPCs.clear();
492 _currentWave = 0;
493 _trash = 0;
495 _retreat = 0;
499 break;
500 }
501
502 if (data == DONE)
503 {
504 SaveToDB();
505 }
506 }
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:63
Milliseconds hyjalWaveTimers[4][MAX_WAVES_STANDARD]
Definition instance_hyjal.cpp:55
Milliseconds hyjalNightElfWaveTimers[1][MAX_WAVES_NIGHT_ELF]
Definition instance_hyjal.cpp:69
void ScheduleWaves(Milliseconds, uint8 startWaves, uint8 maxWaves, Milliseconds timerptr[])
Definition instance_hyjal.cpp:521

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.

562 {
563 scheduler.Update(diff);
564 }
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: