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

Public Member Functions

 instance_violet_hold_InstanceMapScript (Map *map)
 
void Initialize () override
 
bool IsEncounterInProgress () const override
 
void OnCreatureCreate (Creature *creature) override
 
void OnGameObjectCreate (GameObject *go) override
 
bool SetBossState (uint32 id, EncounterState state) override
 
void ProcessEvent (WorldObject *, uint32 eventId) override
 
void DoAction (int32 action) override
 
void SetData (uint32 type, uint32 data) override
 
void SetGuidData (uint32 type, ObjectGuid data) override
 
uint32 GetData (uint32 type) const override
 
ObjectGuid GetGuidData (uint32 identifier) const override
 
void StartBossEncounter (uint32 bossId)
 
void Update (uint32 diff) override
 
void OnPlayerEnter (Player *plr) override
 
bool DoNeedCleanup (bool enter)
 
void InstanceCleanup ()
 
bool CheckAchievementCriteriaMeet (uint32 criteria_id, Player const *, Unit const *, uint32) override
 
void SummonDefenseSystem ()
 
- 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 ()
 
void OnCreatureCreate (Creature *creature) override
 
void OnCreatureRemove (Creature *creature) override
 
void OnGameObjectCreate (GameObject *go) override
 
void OnGameObjectRemove (GameObject *go) override
 
ObjectGuid GetObjectGuid (uint32 type) const
 
ObjectGuid GetGuidData (uint32 type) const override
 
CreatureGetCreature (uint32 type)
 
GameObjectGetGameObject (uint32 type)
 
virtual void OnPlayerLeave (Player *)
 
virtual void OnPlayerAreaUpdate (Player *, uint32, uint32)
 
virtual void OnPlayerInWaterStateUpdate (Player *, bool)
 
void HandleGameObject (ObjectGuid guid, bool open, GameObject *go=nullptr)
 Open or close a GameObject by GUID.
 
void HandleGameObject (uint32 type, bool open)
 Open or close a GameObject registered via LoadObjectData.
 
void DoUseDoorOrButton (ObjectGuid guid, uint32 withRestoreTime=0, bool useAlternativeState=false)
 
void DoRespawnGameObject (ObjectGuid guid, uint32 timeToDespawn=MINUTE)
 
void DoRespawnGameObject (uint32 type)
 
void DoRespawnCreature (ObjectGuid guid, bool force=false)
 
void DoRespawnCreature (uint32 type, bool force=false)
 
void DoUpdateWorldState (uint32 worldstateId, uint32 worldstateValue)
 
void DoSendNotifyToInstance (char const *format,...)
 
void DoUpdateAchievementCriteria (AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
 
void DoStartTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoStopTimedAchievement (AchievementCriteriaTimedTypes type, uint32 entry)
 
void DoRemoveAurasDueToSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayers (uint32 spell)
 
void DoCastSpellOnPlayer (Player *player, uint32 spell, bool includePets, bool includeControlled)
 
bool ServerAllowsTwoSideGroups ()
 
EncounterState GetBossState (uint32 id) const
 
CreatureBoundary const * GetBossBoundary (uint32 id) const
 
BossInfo const * GetBossInfo (uint32 id) const
 
uint32 GetPersistentData (uint32 index) const
 
void StorePersistentData (uint32 index, uint32 data)
 
virtual bool CheckRequiredBosses (uint32, Player const *=nullptr) const
 
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)
 
virtual void FillInitialWorldStates (WorldPackets::WorldState::InitWorldStates &)
 
uint32 GetEncounterCount () const
 
void MarkAreaTriggerDone (uint32 id)
 
void ResetAreaTriggerDone (uint32 id)
 
bool IsAreaTriggerDone (uint32 id) const
 
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 OnUnitDeath (Unit *)
 
virtual void OnCreatureEvade (Creature *)
 
virtual uint64 GetData64 (uint32) const
 
virtual void SetData64 (uint32, uint64)
 

Private Attributes

bool _cleaned { false }
 
uint8 _encounterStatus { NOT_STARTED }
 
EventMap _events
 
uint8 _gateHealth { 100 }
 
uint8 _waveCount { 0 }
 
uint8 _portalLocation { 0 }
 
bool _achievementCompleted { false }
 
bool _defensesUsed { false }
 
GuidVector _activationCrystalGuidList
 
ObjectGuid _guardGuid [4]
 
ObjectGuid _erekemGuardGuid [2]
 
GuidSet _trashMobs
 

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_violet_hold_InstanceMapScript()

instance_violet_hold::instance_violet_hold_InstanceMapScript::instance_violet_hold_InstanceMapScript ( Map map)
inline
74 : InstanceScript(map)
75 {
80 }
#define DataHeader
Definition blackrock_depths.h:23
Definition InstanceScript.h:143
void SetBossNumber(uint32 number)
Definition InstanceScript.h:308
void SetPersistentDataCount(uint32 number)
Definition InstanceScript.h:309
void SetHeaders(std::string const &dataHeaders)
Definition InstanceScript.cpp:159
void LoadObjectData(ObjectData const *creatureData, ObjectData const *gameObjectData)
Definition InstanceScript.cpp:194
@ PERSISTENT_DATA_COUNT
Definition halls_of_reflection.h:123
ObjectData const goData[]
Definition instance_violet_hold.cpp:48
ObjectData const creatureData[]
Definition instance_violet_hold.cpp:33
@ MAX_BOSS
Definition violet_hold.h:141

References creatureData, DataHeader, goData, InstanceScript::LoadObjectData(), MAX_BOSS, PERSISTENT_DATA_COUNT, InstanceScript::SetBossNumber(), InstanceScript::SetHeaders(), and InstanceScript::SetPersistentDataCount().

Member Function Documentation

◆ CheckAchievementCriteriaMeet()

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::CheckAchievementCriteriaMeet ( uint32  criteria_id,
Player const *  ,
Unit const *  ,
uint32   
)
inlineoverridevirtual

Reimplemented from InstanceScript.

581 {
582 switch (criteria_id)
583 {
585 return _gateHealth == 100 && !_defensesUsed;
589 }
590 return false;
591 }
bool _defensesUsed
Definition instance_violet_hold.cpp:607
bool _achievementCompleted
Definition instance_violet_hold.cpp:606
uint8 _gateHealth
Definition instance_violet_hold.cpp:603
@ CRITERIA_DEFENSELESS
Definition violet_hold.h:178
@ CRITERIA_DEHYDRATION
Definition violet_hold.h:180
@ CRITERIA_A_VOID_DANCE
Definition violet_hold.h:179

References _achievementCompleted, _defensesUsed, _gateHealth, CRITERIA_A_VOID_DANCE, CRITERIA_DEFENSELESS, and CRITERIA_DEHYDRATION.

◆ DoAction()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::DoAction ( int32  action)
inlineoverridevirtual

Reimplemented from InstanceScript.

201 {
202 switch (action)
203 {
206 {
208 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
209 {
210 sinclari->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
211 sinclari->AI()->Talk(SAY_SINCLARI_LEAVING);
212 }
215 }
216 break;
219 break;
221 if (_gateHealth > 0)
222 --_gateHealth;
223 if (_gateHealth == 0)
224 {
225 _cleaned = false;
227 }
229 break;
231 if (_waveCount == 6)
233 else
235 break;
236 }
237 }
std::uint32_t uint32
Definition Define.h:107
@ IN_PROGRESS
Definition InstanceScript.h:59
@ NOT_STARTED
Definition InstanceScript.h:58
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
@ WORLD_STATE_VIOLET_HOLD_PRISON_STATE
Definition WorldStateDefines.h:571
Definition Creature.h:47
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:70
Creature * GetCreature(uint32 type)
Definition InstanceScript.cpp:116
uint32 GetPersistentData(uint32 index) const
Definition InstanceScript.h:257
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:632
@ SAY_SINCLARI_LEAVING
Definition instance_violet_hold.cpp:28
uint8 _encounterStatus
Definition instance_violet_hold.cpp:601
void InstanceCleanup()
Definition instance_violet_hold.cpp:480
bool _cleaned
Definition instance_violet_hold.cpp:600
void StartBossEncounter(uint32 bossId)
Definition instance_violet_hold.cpp:284
EventMap _events
Definition instance_violet_hold.cpp:602
uint8 _waveCount
Definition instance_violet_hold.cpp:604
@ EVENT_CHECK_PLAYERS
Definition trial_of_the_champion.h:67
@ DATA_SINCLARI
Definition violet_hold.h:31
@ PERSISTENT_DATA_SECOND_BOSS
Definition violet_hold.h:70
@ PERSISTENT_DATA_FIRST_BOSS
Definition violet_hold.h:69
@ ACTION_PORTAL_DEFEATED
Definition violet_hold.h:62
@ ACTION_START_INSTANCE
Definition violet_hold.h:61
@ ACTION_RELEASE_BOSS
Definition violet_hold.h:63
@ ACTION_DECREASE_DOOR_HEALTH
Definition violet_hold.h:64
@ EVENT_SUMMON_PORTAL
Definition violet_hold.h:165
@ EVENT_GUARDS_FALL_BACK
Definition violet_hold.h:161

References _cleaned, _encounterStatus, _events, _gateHealth, _waveCount, ACTION_DECREASE_DOOR_HEALTH, ACTION_PORTAL_DEFEATED, ACTION_RELEASE_BOSS, ACTION_START_INSTANCE, DATA_SINCLARI, InstanceScript::DoUpdateWorldState(), EVENT_CHECK_PLAYERS, EVENT_GUARDS_FALL_BACK, EVENT_SUMMON_PORTAL, InstanceScript::GetCreature(), InstanceScript::GetPersistentData(), IN_PROGRESS, InstanceCleanup(), NOT_STARTED, PERSISTENT_DATA_FIRST_BOSS, PERSISTENT_DATA_SECOND_BOSS, EventMap::RescheduleEvent(), SAY_SINCLARI_LEAVING, StartBossEncounter(), UNIT_NPC_FLAG_GOSSIP, and WORLD_STATE_VIOLET_HOLD_PRISON_STATE.

◆ DoNeedCleanup()

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::DoNeedCleanup ( bool  enter)
inline
472 {
473 uint32 aliveCount = instance->GetPlayersCountExceptGMs(true);
474 bool need = enter ? aliveCount <= 1 : aliveCount == 0;
475 if (!need && _cleaned)
476 _cleaned = false;
477 return need;
478 }
Map * instance
Definition InstanceScript.h:149
uint32 GetPlayersCountExceptGMs(bool aliveOnly=false) const
Definition Map.cpp:1825

References _cleaned, Map::GetPlayersCountExceptGMs(), and InstanceScript::instance.

Referenced by OnPlayerEnter(), and Update().

◆ GetData()

uint32 instance_violet_hold::instance_violet_hold_InstanceMapScript::GetData ( uint32  type) const
inlineoverridevirtual

Reimplemented from ZoneScript.

261 {
262 switch (type)
263 {
265 return (uint32)_encounterStatus;
266 case DATA_WAVE_COUNT:
267 return (uint32)_waveCount;
269 return _portalLocation;
270 }
271
272 return 0;
273 }
uint8 _portalLocation
Definition instance_violet_hold.cpp:605
@ DATA_ENCOUNTER_STATUS
Definition violet_hold.h:47
@ DATA_WAVE_COUNT
Definition violet_hold.h:50
@ DATA_PORTAL_LOCATION
Definition violet_hold.h:51

References _encounterStatus, _portalLocation, _waveCount, DATA_ENCOUNTER_STATUS, DATA_PORTAL_LOCATION, and DATA_WAVE_COUNT.

Referenced by Update().

◆ GetGuidData()

ObjectGuid instance_violet_hold::instance_violet_hold_InstanceMapScript::GetGuidData ( uint32  identifier) const
inlineoverridevirtual

Reimplemented from ZoneScript.

276 {
277 if (identifier == DATA_EREKEM_GUARD_1_GUID)
278 return _erekemGuardGuid[0];
279 if (identifier == DATA_EREKEM_GUARD_2_GUID)
280 return _erekemGuardGuid[1];
281 return ObjectGuid::Empty;
282 }
static ObjectGuid const Empty
Definition ObjectGuid.h:120
ObjectGuid _erekemGuardGuid[2]
Definition instance_violet_hold.cpp:613
@ DATA_EREKEM_GUARD_2_GUID
Definition violet_hold.h:56
@ DATA_EREKEM_GUARD_1_GUID
Definition violet_hold.h:55

References _erekemGuardGuid, DATA_EREKEM_GUARD_1_GUID, DATA_EREKEM_GUARD_2_GUID, and ObjectGuid::Empty.

◆ Initialize()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::Initialize ( )
inlineoverridevirtual

Reimplemented from InstanceScript.

83 {
84 _cleaned = false;
86 _events.Reset();
87 _gateHealth = 100;
88 _waveCount = 0;
90 _defensesUsed = false;
91
93 }
void Reset()
Definition EventMap.cpp:21
GuidVector _activationCrystalGuidList
Definition instance_violet_hold.cpp:609

References _activationCrystalGuidList, _cleaned, _defensesUsed, _encounterStatus, _events, _gateHealth, _portalLocation, _waveCount, NOT_STARTED, and EventMap::Reset().

◆ InstanceCleanup()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::InstanceCleanup ( )
inline
481 {
482 if (_cleaned)
483 return;
484 _cleaned = true;
485
486 for (ObjectGuid const& guid : _activationCrystalGuidList)
487 if (GameObject* go = instance->GetGameObject(guid))
488 {
490 go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
491 }
492
493 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
494 {
495 sinclari->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
496 sinclari->DespawnOrUnsummon(0ms, 3s);
497 }
498
499 for (ObjectGuid& guid : _guardGuid)
500 {
501 if (Creature* guard = instance->GetCreature(guid))
502 {
503 guard->SetVisible(GetBossState(DATA_CYANIGOSA) != DONE);
504 guard->SetReactState(REACT_AGGRESSIVE);
505 guard->DespawnOrUnsummon(0ms, 3s);
506 }
507 guid.Clear();
508 }
509
511 portal->DespawnOrUnsummon();
512
513 for (ObjectGuid const& guid : _trashMobs)
514 if (Creature* trash = instance->GetCreature(guid))
515 trash->DespawnOrUnsummon();
516
517 _trashMobs.clear();
518
519 if (Creature* doorSeal = GetCreature(DATA_DOOR_SEAL))
520 doorSeal->RemoveAllAuras();
521
523
525 {
534
535 for (uint32 id = BOSS_MORAGG; id <= BOSS_ZURAMAT; ++id)
536 {
537 if (Creature* boss = GetCreature(id))
538 {
539 boss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
540 boss->SetImmuneToNPC(true);
541 boss->DespawnOrUnsummon(0ms, 3s);
542 }
543 }
544
546 {
547 guard1->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
548 guard1->SetImmuneToAll(true);
549 guard1->DespawnOrUnsummon(0ms, 3s);
550 }
553 {
554 guard2->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
555 guard2->SetImmuneToAll(true);
556 guard2->DespawnOrUnsummon(0ms, 3s);
557 }
559
560 if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
561 cyanigosa->DespawnOrUnsummon();
562 }
563
566 _gateHealth = 100;
568 _waveCount = 12;
569 else if (GetBossState(DATA_1ST_BOSS) == DONE)
570 _waveCount = 6;
571 else
572 _waveCount = 0;
573 _defensesUsed = false;
576 _events.Reset();
578 }
@ DONE
Definition InstanceScript.h:61
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1611
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ REACT_AGGRESSIVE
Definition Unit.h:568
@ WORLD_STATE_VIOLET_HOLD_SHOW
Definition WorldStateDefines.h:572
Definition GameObject.h:120
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
Open or close a GameObject by GUID.
Definition InstanceScript.cpp:126
EncounterState GetBossState(uint32 id) const
Definition InstanceScript.h:252
GameObject * GetGameObject(uint32 type)
Definition InstanceScript.cpp:121
Creature * GetCreature(ObjectGuid const &guid)
Definition Map.cpp:2349
Definition ObjectGuid.h:118
void Clear()
Definition ObjectGuid.h:138
GuidSet _trashMobs
Definition instance_violet_hold.cpp:615
ObjectGuid _guardGuid[4]
Definition instance_violet_hold.cpp:612
@ DATA_ZURAMAT_CELL
Definition violet_hold.h:44
@ DATA_LAVANTHOR_CELL
Definition violet_hold.h:42
@ DATA_EREKEM_GUARD_1_CELL
Definition violet_hold.h:39
@ DATA_DOOR_SEAL
Definition violet_hold.h:32
@ DATA_TELEPORTATION_PORTAL
Definition violet_hold.h:33
@ DATA_MAIN_DOOR
Definition violet_hold.h:36
@ DATA_EREKEM_CELL
Definition violet_hold.h:38
@ DATA_XEVOZZ_CELL
Definition violet_hold.h:43
@ DATA_EREKEM_GUARD_2_CELL
Definition violet_hold.h:40
@ DATA_MORAGG_CELL
Definition violet_hold.h:37
@ DATA_ICHORON_CELL
Definition violet_hold.h:41
@ BOSS_ZURAMAT
Definition violet_hold.h:140
@ DATA_2ND_BOSS
Definition violet_hold.h:130
@ BOSS_MORAGG
Definition violet_hold.h:135
@ DATA_1ST_BOSS
Definition violet_hold.h:129
@ DATA_CYANIGOSA
Definition violet_hold.h:131

References _activationCrystalGuidList, _cleaned, _defensesUsed, _encounterStatus, _erekemGuardGuid, _events, _gateHealth, _guardGuid, _trashMobs, _waveCount, BOSS_MORAGG, BOSS_ZURAMAT, ObjectGuid::Clear(), DATA_1ST_BOSS, DATA_2ND_BOSS, DATA_CYANIGOSA, DATA_DOOR_SEAL, DATA_EREKEM_CELL, DATA_EREKEM_GUARD_1_CELL, DATA_EREKEM_GUARD_2_CELL, DATA_ICHORON_CELL, DATA_LAVANTHOR_CELL, DATA_MAIN_DOOR, DATA_MORAGG_CELL, DATA_SINCLARI, DATA_TELEPORTATION_PORTAL, DATA_XEVOZZ_CELL, DATA_ZURAMAT_CELL, DONE, InstanceScript::DoUpdateWorldState(), ObjectGuid::Empty, EVENT_CHECK_PLAYERS, InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetCreature(), Map::GetGameObject(), GO_FLAG_NOT_SELECTABLE, InstanceScript::HandleGameObject(), InstanceScript::instance, NOT_STARTED, REACT_AGGRESSIVE, EventMap::RescheduleEvent(), EventMap::Reset(), UNIT_FLAG_NON_ATTACKABLE, UNIT_NPC_FLAG_GOSSIP, and WORLD_STATE_VIOLET_HOLD_SHOW.

Referenced by DoAction(), OnPlayerEnter(), SetBossState(), and Update().

◆ IsEncounterInProgress()

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::IsEncounterInProgress ( ) const
inlineoverridevirtual

Reimplemented from InstanceScript.

96 {
98 }

References _encounterStatus, and IN_PROGRESS.

◆ OnCreatureCreate()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::OnCreatureCreate ( Creature creature)
inlineoverridevirtual

Reimplemented from ZoneScript.

101 {
103
104 switch (creature->GetEntry())
105 {
107 for (ObjectGuid& guid : _guardGuid)
108 if (!guid)
109 {
110 guid = creature->GetGUID();
111 break;
112 }
113 break;
116 break;
117 case NPC_EREKEM_GUARD:
118 if (!_erekemGuardGuid[0])
119 _erekemGuardGuid[0] = creature->GetGUID();
120 else
121 _erekemGuardGuid[1] = creature->GetGUID();
122 break;
123 }
124 }
@ IMMUNITY_ID
Definition SharedDefines.h:1404
void OnCreatureCreate(Creature *creature) override
Definition InstanceScript.cpp:71
uint32 GetEntry() const
Definition Object.h:117
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:10463
@ NPC_EREKEM_GUARD
Definition violet_hold.h:90
@ NPC_VIOLET_HOLD_GUARD
Definition violet_hold.h:82
@ NPC_DEFENSE_DUMMY_TARGET
Definition violet_hold.h:79
@ SPELL_ARCANE_LIGHTNING
Definition violet_hold.h:149

References _erekemGuardGuid, _guardGuid, Unit::ApplySpellImmune(), Object::GetEntry(), Object::GetGUID(), IMMUNITY_ID, NPC_DEFENSE_DUMMY_TARGET, NPC_EREKEM_GUARD, NPC_VIOLET_HOLD_GUARD, InstanceScript::OnCreatureCreate(), and SPELL_ARCANE_LIGHTNING.

◆ OnGameObjectCreate()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::OnGameObjectCreate ( GameObject go)
inlineoverridevirtual

Reimplemented from ZoneScript.

127 {
129
130 if (go->GetEntry() == GO_ACTIVATION_CRYSTAL)
131 {
134 _activationCrystalGuidList.push_back(go->GetGUID());
135 }
136 }
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:218
void OnGameObjectCreate(GameObject *go) override
Definition InstanceScript.cpp:86
@ GO_ACTIVATION_CRYSTAL
Definition violet_hold.h:123

References _activationCrystalGuidList, ObjectGuid::Empty, Object::GetEntry(), Object::GetGUID(), GO_ACTIVATION_CRYSTAL, GO_FLAG_NOT_SELECTABLE, InstanceScript::HandleGameObject(), InstanceScript::OnGameObjectCreate(), and GameObject::SetGameObjectFlag().

◆ OnPlayerEnter()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::OnPlayerEnter ( Player plr)
inlineoverridevirtual

Reimplemented from InstanceScript.

457 {
459 {
460 if (DoNeedCleanup(plr->IsAlive()))
462
466 }
467 else
469 }
@ WORLD_STATE_VIOLET_HOLD_WAVE_COUNT
Definition WorldStateDefines.h:570
void SendUpdateWorldState(uint32 variable, uint32 value) const
Definition PlayerUpdates.cpp:2235
bool IsAlive() const
Definition Unit.h:1794
bool DoNeedCleanup(bool enter)
Definition instance_violet_hold.cpp:471

References _encounterStatus, _gateHealth, _waveCount, DoNeedCleanup(), IN_PROGRESS, InstanceCleanup(), Unit::IsAlive(), Player::SendUpdateWorldState(), WORLD_STATE_VIOLET_HOLD_PRISON_STATE, WORLD_STATE_VIOLET_HOLD_SHOW, and WORLD_STATE_VIOLET_HOLD_WAVE_COUNT.

◆ ProcessEvent()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::ProcessEvent ( WorldObject ,
uint32  eventId 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

192 {
193 if (eventId == EVENT_ACTIVATE_CRYSTAL)
194 {
195 _defensesUsed = true;
197 }
198 }
void SummonDefenseSystem()
Definition instance_violet_hold.cpp:593
@ EVENT_ACTIVATE_CRYSTAL
Definition violet_hold.h:173

References _defensesUsed, EVENT_ACTIVATE_CRYSTAL, and SummonDefenseSystem().

◆ SetBossState()

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::SetBossState ( uint32  id,
EncounterState  state 
)
inlineoverridevirtual

Reimplemented from InstanceScript.

139 {
140 if (!InstanceScript::SetBossState(id, state))
141 return false;
142
143 switch (id)
144 {
145 case BOSS_MORAGG:
146 case BOSS_EREKEM:
147 case BOSS_ICHORON:
148 case BOSS_LAVANTHOR:
149 case BOSS_XEVOZZ:
150 case BOSS_ZURAMAT:
151 if (state == DONE)
152 {
153 if (_waveCount == 6)
155 else if (_waveCount == 12)
158 }
159 else if (state == FAIL || state == NOT_STARTED)
160 {
161 _cleaned = false;
163 }
164 break;
165 case DATA_CYANIGOSA:
166 if (state == DONE)
167 {
168 _events.Reset();
172 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
173 {
174 sinclari->AI()->Talk(SAY_SINCLARI_COMPLETE);
175 sinclari->DespawnOrUnsummon(0ms, 3s);
176 }
177 }
178 else if (state == FAIL || state == NOT_STARTED)
179 {
180 _cleaned = false;
182 }
183 break;
184 default:
185 break;
186 }
187
188 return true;
189 }
@ FAIL
Definition InstanceScript.h:60
virtual bool SetBossState(uint32 id, EncounterState state)
Definition InstanceScript.cpp:396
@ SAY_SINCLARI_COMPLETE
Definition instance_violet_hold.cpp:30
bool SetBossState(uint32 id, EncounterState state) override
Definition instance_violet_hold.cpp:138
@ BOSS_XEVOZZ
Definition violet_hold.h:139
@ BOSS_LAVANTHOR
Definition violet_hold.h:138
@ BOSS_EREKEM
Definition violet_hold.h:136
@ BOSS_ICHORON
Definition violet_hold.h:137

References _cleaned, _encounterStatus, _events, _waveCount, BOSS_EREKEM, BOSS_ICHORON, BOSS_LAVANTHOR, BOSS_MORAGG, BOSS_XEVOZZ, BOSS_ZURAMAT, DATA_1ST_BOSS, DATA_2ND_BOSS, DATA_CYANIGOSA, DATA_MAIN_DOOR, DATA_SINCLARI, DONE, InstanceScript::DoUpdateWorldState(), EVENT_SUMMON_PORTAL, FAIL, InstanceScript::GetCreature(), InstanceScript::HandleGameObject(), InstanceCleanup(), NOT_STARTED, EventMap::RescheduleEvent(), EventMap::Reset(), SAY_SINCLARI_COMPLETE, InstanceScript::SetBossState(), SetBossState(), and WORLD_STATE_VIOLET_HOLD_SHOW.

Referenced by SetBossState().

◆ SetData()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::SetData ( uint32  type,
uint32  data 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

240 {
241 switch (type)
242 {
244 _portalLocation = data;
245 break;
246 case DATA_ACHIEV:
247 _achievementCompleted = !!data;
248 break;
249 }
250 }
@ DATA_ACHIEV
Definition violet_hold.h:52

References _achievementCompleted, _portalLocation, DATA_ACHIEV, and DATA_PORTAL_LOCATION.

Referenced by Update().

◆ SetGuidData()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::SetGuidData ( uint32  type,
ObjectGuid  data 
)
inlineoverridevirtual

Reimplemented from ZoneScript.

253 {
254 if (type == DATA_ADD_TRASH_MOB)
255 _trashMobs.insert(data);
256 else if (type == DATA_DELETE_TRASH_MOB && !_cleaned)
257 _trashMobs.erase(data);
258 }
@ DATA_DELETE_TRASH_MOB
Definition violet_hold.h:49
@ DATA_ADD_TRASH_MOB
Definition violet_hold.h:48

References _cleaned, _trashMobs, DATA_ADD_TRASH_MOB, and DATA_DELETE_TRASH_MOB.

◆ StartBossEncounter()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::StartBossEncounter ( uint32  bossId)
inline
285 {
286 switch (bossId)
287 {
288 case BOSS_MORAGG:
290 break;
291 case BOSS_EREKEM:
296 {
297 guard1->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
298 guard1->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
299 guard1->SetImmuneToAll(false);
300 guard1->GetMotionMaster()->MovePoint(0, BossStartMove21);
301 }
303 {
304 guard2->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
305 guard2->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
306 guard2->SetImmuneToAll(false);
307 guard2->GetMotionMaster()->MovePoint(0, BossStartMove22);
308 }
309 break;
310 case BOSS_ICHORON:
312 break;
313 case BOSS_LAVANTHOR:
315 break;
316 case BOSS_XEVOZZ:
318 break;
319 case BOSS_ZURAMAT:
321 break;
322 }
323
324 static Position const BossStartPositions[] =
325 {
326 BossStartMove1, // BOSS_MORAGG
327 BossStartMove2, // BOSS_EREKEM
328 BossStartMove3, // BOSS_ICHORON
329 BossStartMove4, // BOSS_LAVANTHOR
330 BossStartMove5, // BOSS_XEVOZZ
331 BossStartMove6, // BOSS_ZURAMAT
332 };
333
334 Creature* boss = GetCreature(bossId);
335 if (boss)
336 {
337 boss->GetMotionMaster()->MovePoint(0, BossStartPositions[bossId - BOSS_MORAGG]);
340 boss->SetImmuneToNPC(false);
343 boss->SetLootMode(0);
344 }
345 }
@ MOVEMENTFLAG_WALKING
Definition UnitDefines.h:380
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:100
void SetLootMode(uint16 lootMode)
Definition Creature.h:247
void MovePoint(uint32 id, const Position &pos, ForcedMovement forcedMovement=FORCED_MOVEMENT_NONE, float speed=0.f, bool generatePath=true, bool forceDestination=true, std::optional< AnimTier > animTier=std::nullopt)
Definition MotionMaster.h:240
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10644
MotionMaster * GetMotionMaster()
Definition Unit.h:1759
void RemoveUnitMovementFlag(uint32 f)
Definition Unit.h:773
void RemoveUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:749
Definition Position.h:27
const Position BossStartMove3
Definition violet_hold.h:196
const Position BossStartMove22
Definition violet_hold.h:195
const Position BossStartMove6
Definition violet_hold.h:199
const Position BossStartMove2
Definition violet_hold.h:193
const Position BossStartMove21
Definition violet_hold.h:194
const Position BossStartMove1
Definition violet_hold.h:192
const Position BossStartMove4
Definition violet_hold.h:197
const Position BossStartMove5
Definition violet_hold.h:198

References _erekemGuardGuid, _waveCount, BOSS_EREKEM, BOSS_ICHORON, BOSS_LAVANTHOR, BOSS_MORAGG, BOSS_XEVOZZ, BOSS_ZURAMAT, BossStartMove1, BossStartMove2, BossStartMove21, BossStartMove22, BossStartMove3, BossStartMove4, BossStartMove5, BossStartMove6, DATA_1ST_BOSS, DATA_2ND_BOSS, DATA_EREKEM_CELL, DATA_EREKEM_GUARD_1_CELL, DATA_EREKEM_GUARD_2_CELL, DATA_ICHORON_CELL, DATA_LAVANTHOR_CELL, DATA_MORAGG_CELL, DATA_XEVOZZ_CELL, DATA_ZURAMAT_CELL, DONE, InstanceScript::GetBossState(), Map::GetCreature(), InstanceScript::GetCreature(), Unit::GetMotionMaster(), InstanceScript::HandleGameObject(), InstanceScript::instance, MOVEMENTFLAG_WALKING, MotionMaster::MovePoint(), REACT_AGGRESSIVE, Unit::RemoveUnitFlag(), Unit::RemoveUnitMovementFlag(), Unit::SetImmuneToNPC(), Creature::SetLootMode(), Creature::SetReactState(), and UNIT_FLAG_NON_ATTACKABLE.

Referenced by DoAction().

◆ SummonDefenseSystem()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::SummonDefenseSystem ( )
inline
594 {
595 Position const pos = {1919.09546f, 812.29724f, 86.2905f, M_PI};
597 }
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:2187
@ NPC_DEFENSE_SYSTEM
Definition violet_hold.h:77

References InstanceScript::instance, NPC_DEFENSE_SYSTEM, and Map::SummonCreature().

Referenced by ProcessEvent(), and Update().

◆ Update()

void instance_violet_hold::instance_violet_hold_InstanceMapScript::Update ( uint32  diff)
inlineoverridevirtual

Reimplemented from InstanceScript.

348 {
349 _events.Update(diff);
350 switch (_events.ExecuteEvent())
351 {
353 if (DoNeedCleanup(false))
355 _events.Repeat(5s);
356 break;
358 for (ObjectGuid const& guid : _guardGuid)
359 if (Creature* guard = instance->GetCreature(guid))
360 {
361 guard->SetReactState(REACT_PASSIVE);
362 guard->CombatStop();
363 guard->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
364 guard->GetMotionMaster()->MovePoint(0, guardMovePosition);
365 }
367 break;
369 for (ObjectGuid const& guid : _guardGuid)
370 if (Creature* guard = instance->GetCreature(guid))
371 guard->SetVisible(false);
373 break;
375 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
376 {
377 sinclari->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
378 sinclari->GetMotionMaster()->MovePoint(0, sinclariOutsidePosition);
379 }
382 break;
384 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
385 {
386 sinclari->AI()->Talk(SAY_SINCLARI_DOOR_LOCK);
387 sinclari->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
388 }
389 if (Creature* doorSeal = GetCreature(DATA_DOOR_SEAL))
390 doorSeal->RemoveAllAuras();
391 _gateHealth = 100;
396
397 for (ObjectGuid const& guid : _activationCrystalGuidList)
398 if (GameObject* go = instance->GetGameObject(guid))
399 {
401 go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
402 }
404 break;
406 ++_waveCount;
409 if (Creature* sinclari = GetCreature(DATA_SINCLARI))
410 {
411 if (_waveCount % 6 != 0)
413 else if (_waveCount == 6 || _waveCount == 12)
414 {
416 {
417 uint32 firstBoss = urand(BOSS_MORAGG, BOSS_ZURAMAT);
418 uint32 secondBoss;
419 do { secondBoss = urand(BOSS_MORAGG, BOSS_ZURAMAT); }
420 while (firstBoss == secondBoss);
423 }
425 }
426 else
427 {
429 {
430 cyanigosa->CastSpell(cyanigosa, SPELL_CYANIGOSA_BLUE_AURA, false);
431 cyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN);
432 cyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f);
433 }
435 }
436 }
437 break;
439 if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
440 {
441 cyanigosa->RemoveAurasDueToSpell(SPELL_CYANIGOSA_BLUE_AURA);
442 cyanigosa->CastSpell(cyanigosa, SPELL_CYANIGOSA_TRANSFORM, 0);
444 }
445 break;
447 if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
448 {
449 cyanigosa->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
450 cyanigosa->SetImmuneToNPC(false);
451 }
452 break;
453 }
454 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:55
@ TEMPSUMMON_CORPSE_DESPAWN
Definition Object.h:53
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
@ REACT_PASSIVE
Definition Unit.h:566
void Update(uint32 time)
Definition EventMap.h:67
void Repeat(Milliseconds time)
Definition EventMap.cpp:76
EventId ExecuteEvent()
Definition EventMap.cpp:86
void StorePersistentData(uint32 index, uint32 data)
Definition InstanceScript.cpp:433
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2393
@ SAY_SINCLARI_DOOR_LOCK
Definition instance_violet_hold.cpp:29
@ CYANIGOSA_SAY_SPAWN
Definition instance_violet_hold.cpp:27
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
void SetData(uint32 type, uint32 data) override
Definition instance_violet_hold.cpp:239
uint32 GetData(uint32 type) const override
Definition instance_violet_hold.cpp:260
const Position PortalLocations[]
Definition violet_hold.h:206
@ NPC_CYANIGOSA
Definition violet_hold.h:92
@ NPC_TELEPORTATION_PORTAL
Definition violet_hold.h:76
const Position sinclariOutsidePosition
Definition violet_hold.h:189
const Position guardMovePosition
Definition violet_hold.h:187
const Position MiddleRoomLocation
Definition violet_hold.h:202
@ SPELL_CYANIGOSA_BLUE_AURA
Definition violet_hold.h:155
@ SPELL_CYANIGOSA_TRANSFORM
Definition violet_hold.h:154
const Position MiddleRoomPortalSaboLocation
Definition violet_hold.h:190
const Position CyanigosasSpawnLocation
Definition violet_hold.h:201
@ EVENT_START_ENCOUNTER
Definition violet_hold.h:164
@ EVENT_GUARDS_DISAPPEAR
Definition violet_hold.h:162
@ EVENT_CYANIGOSA_TRANSFORM
Definition violet_hold.h:166
@ EVENT_SINCLARI_FALL_BACK
Definition violet_hold.h:163
@ EVENT_CYANIGOSA_ATTACK
Definition violet_hold.h:167

References _activationCrystalGuidList, _events, _gateHealth, _guardGuid, _waveCount, BOSS_MORAGG, BOSS_ZURAMAT, CYANIGOSA_SAY_SPAWN, CyanigosasSpawnLocation, DATA_CYANIGOSA, DATA_DOOR_SEAL, DATA_MAIN_DOOR, DATA_PORTAL_LOCATION, DATA_SINCLARI, DoNeedCleanup(), InstanceScript::DoUpdateWorldState(), ObjectGuid::Empty, EVENT_CHECK_PLAYERS, EVENT_CYANIGOSA_ATTACK, EVENT_CYANIGOSA_TRANSFORM, EVENT_GUARDS_DISAPPEAR, EVENT_GUARDS_FALL_BACK, EVENT_SINCLARI_FALL_BACK, EVENT_START_ENCOUNTER, EVENT_SUMMON_PORTAL, EventMap::ExecuteEvent(), Map::GetCreature(), InstanceScript::GetCreature(), GetData(), Map::GetGameObject(), InstanceScript::GetPersistentData(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GO_FLAG_NOT_SELECTABLE, guardMovePosition, InstanceScript::HandleGameObject(), InstanceScript::instance, InstanceCleanup(), MiddleRoomLocation, MiddleRoomPortalSaboLocation, MOVEMENTFLAG_WALKING, NPC_CYANIGOSA, NPC_TELEPORTATION_PORTAL, PERSISTENT_DATA_FIRST_BOSS, PERSISTENT_DATA_SECOND_BOSS, PortalLocations, REACT_PASSIVE, EventMap::Repeat(), EventMap::RescheduleEvent(), SAY_SINCLARI_DOOR_LOCK, SetData(), sinclariOutsidePosition, SPELL_CYANIGOSA_BLUE_AURA, SPELL_CYANIGOSA_TRANSFORM, InstanceScript::StorePersistentData(), WorldObject::SummonCreature(), SummonDefenseSystem(), TEMPSUMMON_CORPSE_DESPAWN, TEMPSUMMON_DEAD_DESPAWN, UNIT_FLAG_NON_ATTACKABLE, UNIT_NPC_FLAG_GOSSIP, EventMap::Update(), urand(), WORLD_STATE_VIOLET_HOLD_PRISON_STATE, WORLD_STATE_VIOLET_HOLD_SHOW, and WORLD_STATE_VIOLET_HOLD_WAVE_COUNT.

Member Data Documentation

◆ _achievementCompleted

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::_achievementCompleted { false }
private
606{ false };

Referenced by CheckAchievementCriteriaMeet(), and SetData().

◆ _activationCrystalGuidList

GuidVector instance_violet_hold::instance_violet_hold_InstanceMapScript::_activationCrystalGuidList
private

◆ _cleaned

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::_cleaned { false }
private

◆ _defensesUsed

bool instance_violet_hold::instance_violet_hold_InstanceMapScript::_defensesUsed { false }
private

◆ _encounterStatus

uint8 instance_violet_hold::instance_violet_hold_InstanceMapScript::_encounterStatus { NOT_STARTED }
private

◆ _erekemGuardGuid

ObjectGuid instance_violet_hold::instance_violet_hold_InstanceMapScript::_erekemGuardGuid[2]
private

◆ _events

EventMap instance_violet_hold::instance_violet_hold_InstanceMapScript::_events
private

◆ _gateHealth

uint8 instance_violet_hold::instance_violet_hold_InstanceMapScript::_gateHealth { 100 }
private

◆ _guardGuid

ObjectGuid instance_violet_hold::instance_violet_hold_InstanceMapScript::_guardGuid[4]
private

◆ _portalLocation

uint8 instance_violet_hold::instance_violet_hold_InstanceMapScript::_portalLocation { 0 }
private
605{ 0 };

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

◆ _trashMobs

GuidSet instance_violet_hold::instance_violet_hold_InstanceMapScript::_trashMobs
private

Referenced by InstanceCleanup(), and SetGuidData().

◆ _waveCount

uint8 instance_violet_hold::instance_violet_hold_InstanceMapScript::_waveCount { 0 }
private

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