Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_violet_hold.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "InstanceScript.h"
9#include "violet_hold.h"
10#include "Player.h"
11#include "TemporarySummon.h"
12
13#define MAX_ENCOUNTER 3
14
15/* Violet Hold encounters:
160 - First boss
171 - Second boss
182 - Cyanigosa*/
19
20/* Violet hold bosses:
211 - Moragg
222 - Erekem
233 - Ichoron
244 - Lavanthor
255 - Xevozz
266 - Zuramat
277 - Cyanigosa */
28
43
49
54
56{
57 {1877.51f, 850.104f, 44.6599f, 4.7822f }, // WP 1
58 {1918.37f, 853.437f, 47.1624f, 4.12294f}, // WP 2
59 {1936.07f, 803.198f, 53.3749f, 3.12414f}, // WP 3
60 {1927.61f, 758.436f, 51.4533f, 2.20891f}, // WP 4
61 {1890.64f, 753.471f, 48.7224f, 1.71042f}, // WP 5
62 {1908.31f, 809.657f, 38.7037f, 3.08701f} // WP 6
63};
64
65const Position ArcaneSphere = {1887.060059f, 806.151001f, 61.321602f, 0.0f};
66const Position BossStartMove1 = {1894.684448f, 739.390503f, 47.668003f, 0.0f};
67const Position BossStartMove2 = {1875.173950f, 860.832703f, 43.333565f, 0.0f};
68const Position BossStartMove21 = {1858.854614f, 855.071411f, 43.333565f, 0.0f};
69const Position BossStartMove22 = {1891.926636f, 863.388977f, 43.333565f, 0.0f};
70const Position BossStartMove3 = {1916.138062f, 778.152222f, 35.772308f, 0.0f};
71const Position BossStartMove4 = {1853.618286f, 758.557617f, 38.657505f, 0.0f};
72const Position BossStartMove5 = {1906.683960f, 842.348022f, 38.637459f, 0.0f};
73const Position BossStartMove6 = {1928.207031f, 852.864441f, 47.200813f, 0.0f};
74
75const Position CyanigosasSpawnLocation = {1930.281250f, 804.407715f, 52.410946f, 3.139621f};
76const Position MiddleRoomLocation = {1892.291260f, 805.696838f, 38.438862f, 3.139621f};
77const Position MiddleRoomPortalSaboLocation = {1896.622925f, 804.854126f, 38.504772f, 3.139621f};
78
79//Cyanigosa's prefight event data
81{
83};
84
90
92{
93public:
94 instance_violet_hold() : InstanceMapScript("instance_violet_hold", 608) { }
95
100
102 {
104
114
126
128
132
133 std::set<uint64> trashMobs; // to kill with crystal
134
140
142
147 uint8 uiMainEventPhase; // SPECIAL: pre event animations, IN_PROGRESS: event itself
148
150 bool bWiped;
154
155 std::list<uint8> NpcAtDoorCastingList;
156
157 std::string str_data;
158
160 {
161 uiMoragg = 0;
162 uiErekem = 0;
163 uiIchoron = 0;
164 uiLavanthor = 0;
165 uiXevozz = 0;
166 uiZuramat = 0;
167 uiCyanigosa = 0;
168 uiSinclari = 0;
169
170 uiMoraggCell = 0;
171 uiErekemCell = 0;
172 uiErekemGuard[0] = 0;
173 uiErekemGuard[1] = 0;
174 uiIchoronCell = 0;
175 uiLavanthorCell = 0;
176 uiXevozzCell = 0;
177 uiZuramatCell = 0;
178 uiMainDoor = 0;
181
182 trashMobs.clear();
183
184 uiRemoveNpc = 0;
185
186 uiDoorIntegrity = 100;
187
188 uiWaveCount = 0;
189 uiLocation = std::rand() % 5;
190 uiFirstBoss = 0;
191 uiSecondBoss = 0;
195
196 uiActivationTimer = 5000;
197 uiDoorSpellTimer = 2000;
199
200 bActive = false;
201 bIsDoorSpellCasted = false;
202 bCrystalActivated = false;
203 defenseless = true;
205
206 memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
207 }
208
210 {
211 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
212 if (m_auiEncounter[i] == IN_PROGRESS)
213 return true;
214
215 return false;
216 }
217
219 {
220 switch (creature->GetEntry())
221 {
222 case CREATURE_XEVOZZ:
223 uiXevozz = creature->GetGUID();
224 break;
226 uiLavanthor = creature->GetGUID();
227 break;
228 case CREATURE_ICHORON:
229 uiIchoron = creature->GetGUID();
230 break;
231 case CREATURE_ZURAMAT:
232 uiZuramat = creature->GetGUID();
233 break;
234 case CREATURE_EREKEM:
235 uiErekem = creature->GetGUID();
236 break;
238 if (uiCountErekemGuards < 2)
239 {
240 uiErekemGuard[uiCountErekemGuards++] = creature->GetGUID();
242 }
243 break;
244 case CREATURE_MORAGG:
245 uiMoragg = creature->GetGUID();
246 break;
248 uiCyanigosa = creature->GetGUID();
250 break;
252 uiSinclari = creature->GetGUID();
253 break;
254 }
255
256 if (creature->GetGUID() == uiFirstBoss || creature->GetGUID() == uiSecondBoss)
257 {
258 creature->AllLootRemovedFromCorpse();
259 creature->RemoveLootMode(1);
260 }
261 }
262
264 {
265 switch (go->GetEntry())
266 {
268 uiErekemLeftGuardCell = go->GetGUID();
269 break;
271 uiErekemRightGuardCell = go->GetGUID();
272 break;
273 case GO_EREKEM_DOOR:
274 uiErekemCell = go->GetGUID();
275 break;
276 case GO_ZURAMAT_DOOR:
277 uiZuramatCell = go->GetGUID();
278 break;
280 uiLavanthorCell = go->GetGUID();
281 break;
282 case GO_MORAGG_DOOR:
283 uiMoraggCell = go->GetGUID();
284 break;
285 case GO_ICHORON_DOOR:
286 uiIchoronCell = go->GetGUID();
287 break;
288 case GO_XEVOZZ_DOOR:
289 uiXevozzCell = go->GetGUID();
290 break;
291 case GO_MAIN_DOOR:
292 uiMainDoor = go->GetGUID();
293 break;
297 break;
298 }
299 }
300
301 void SetData(uint32 type, uint32 data) OVERRIDE
302 {
303 switch (type)
304 {
307 m_auiEncounter[0] = data;
308 if (data == DONE)
309 SaveToDB();
310 break;
313 m_auiEncounter[1] = data;
314 if (data == DONE)
315 SaveToDB();
316 break;
318 m_auiEncounter[2] = data;
319 if (data == DONE)
320 {
321 SaveToDB();
323 if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
324 pMainDoor->SetGoState(GOState::GO_STATE_ACTIVE);
325 }
326 break;
327 case DATA_WAVE_COUNT:
328 uiWaveCount = data;
329 bActive = true;
330 break;
331 case DATA_REMOVE_NPC:
332 uiRemoveNpc = data;
333 break;
335 uiLocation = (uint8)data;
336 break;
338 uiDoorIntegrity = data;
339 defenseless = false;
341 break;
343 NpcAtDoorCastingList.push_back(data);
344 break;
346 if (!NpcAtDoorCastingList.empty())
347 NpcAtDoorCastingList.pop_back();
348 break;
349 case DATA_MAIN_DOOR:
350 if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
351 {
352 switch (GOState(data))
353 {
355 pMainDoor->SetGoState(GOState::GO_STATE_ACTIVE);
356 break;
358 pMainDoor->SetGoState(GOState::GO_STATE_READY);
359 break;
361 pMainDoor->SetGoState(GOState::GO_STATE_ACTIVE_ALTERNATIVE);
362 break;
363 default:
364 break;
365 }
366 }
367 break;
369 switch (uiWaveCount)
370 {
371 case 6:
373 break;
374 case 12:
376 break;
377 }
378 break;
381 break;
383 uiMainEventPhase = data;
384 if (data == IN_PROGRESS) // Start event
385 {
386 if (GameObject* mainDoor = instance->GetGameObject(uiMainDoor))
387 mainDoor->SetGoState(GOState::GO_STATE_READY);
388 uiWaveCount = 1;
389 bActive = true;
390 for (int i = 0; i < 4; ++i)
391 if (GameObject* crystal = instance->GetGameObject(uiActivationCrystal[i]))
393 uiRemoveNpc = 0; // might not have been reset after a wipe on a boss.
394 }
395 break;
396 }
397 }
398
400 {
401 switch (type)
402 {
404 trashMobs.insert(data);
405 break;
407 trashMobs.erase(data);
408 break;
409 }
410 }
411
413 {
414 switch (type)
415 {
416 case DATA_1ST_BOSS_EVENT: return m_auiEncounter[0];
417 case DATA_2ND_BOSS_EVENT: return m_auiEncounter[1];
418 case DATA_CYANIGOSA_EVENT: return m_auiEncounter[2];
419 case DATA_WAVE_COUNT: return uiWaveCount;
420 case DATA_REMOVE_NPC: return uiRemoveNpc;
421 case DATA_PORTAL_LOCATION: return uiLocation;
424 case DATA_FIRST_BOSS: return uiFirstBoss;
425 case DATA_SECOND_BOSS: return uiSecondBoss;
427 case DATA_DEFENSELESS: return defenseless ? 1 : 0;
428 }
429
430 return 0;
431 }
432
433 uint64 GetData64(uint32 identifier) const OVERRIDE
434 {
435 switch (identifier)
436 {
437 case DATA_MORAGG: return uiMoragg;
438 case DATA_EREKEM: return uiErekem;
439 case DATA_EREKEM_GUARD_1: return uiErekemGuard[0];
440 case DATA_EREKEM_GUARD_2: return uiErekemGuard[1];
441 case DATA_ICHORON: return uiIchoron;
442 case DATA_LAVANTHOR: return uiLavanthor;
443 case DATA_XEVOZZ: return uiXevozz;
444 case DATA_ZURAMAT: return uiZuramat;
445 case DATA_CYANIGOSA: return uiCyanigosa;
446 case DATA_MORAGG_CELL: return uiMoraggCell;
447 case DATA_EREKEM_CELL: return uiErekemCell;
450 case DATA_ICHORON_CELL: return uiIchoronCell;
452 case DATA_XEVOZZ_CELL: return uiXevozzCell;
453 case DATA_ZURAMAT_CELL: return uiZuramatCell;
454 case DATA_MAIN_DOOR: return uiMainDoor;
455 case DATA_SINCLARI: return uiSinclari;
458 }
459
460 return 0;
461 }
462
464 {
465 SetData(DATA_PORTAL_LOCATION, (GetData(DATA_PORTAL_LOCATION) + (std::rand() % 5 + 1))%6);
466 if (Creature* pSinclari = instance->GetCreature(uiSinclari))
468 uiTeleportationPortal = portal->GetGUID();
469 }
470
471 void StartBossEncounter(uint8 uiBoss, bool bForceRespawn = true)
472 {
473 Creature* pBoss = NULL;
474
475 switch (uiBoss)
476 {
477 case BOSS_MORAGG:
478 HandleGameObject(uiMoraggCell, bForceRespawn);
479 pBoss = instance->GetCreature(uiMoragg);
480 if (pBoss)
482 break;
483 case BOSS_EREKEM:
484 HandleGameObject(uiErekemCell, bForceRespawn);
487
488 pBoss = instance->GetCreature(uiErekem);
489
490 if (pBoss)
492
493 if (Creature* pGuard1 = instance->GetCreature(uiErekemGuard[0]))
494 {
495 if (bForceRespawn)
497 else
499 pGuard1->GetMotionMaster()->MovePoint(0, BossStartMove21);
500 }
501
502 if (Creature* pGuard2 = instance->GetCreature(uiErekemGuard[1]))
503 {
504 if (bForceRespawn)
506 else
508 pGuard2->GetMotionMaster()->MovePoint(0, BossStartMove22);
509 }
510 break;
511 case BOSS_ICHORON:
512 HandleGameObject(uiIchoronCell, bForceRespawn);
513 pBoss = instance->GetCreature(uiIchoron);
514 if (pBoss)
516 break;
517 case BOSS_LAVANTHOR:
518 HandleGameObject(uiLavanthorCell, bForceRespawn);
519 pBoss = instance->GetCreature(uiLavanthor);
520 if (pBoss)
522 break;
523 case BOSS_XEVOZZ:
524 HandleGameObject(uiXevozzCell, bForceRespawn);
525 pBoss = instance->GetCreature(uiXevozz);
526 if (pBoss)
528 break;
529 case BOSS_ZURAMAT:
530 HandleGameObject(uiZuramatCell, bForceRespawn);
531 pBoss = instance->GetCreature(uiZuramat);
532 if (pBoss)
534 break;
535 }
536
537 // generic boss state changes
538 if (pBoss)
539 {
542
543 if (!bForceRespawn)
544 {
545 if (pBoss->isDead())
546 {
547 // respawn but avoid to be looted again
548 pBoss->Respawn();
549 pBoss->RemoveLootMode(1);
550 }
552 uiWaveCount = 0;
553 }
554 }
555 }
556
557 void AddWave()
558 {
561
562 switch (uiWaveCount)
563 {
564 case 6:
565 if (uiFirstBoss == 0)
566 uiFirstBoss = std::rand() % 6 + 1;
567 if (Creature* pSinclari = instance->GetCreature(uiSinclari))
568 {
570 uiSaboteurPortal = pPortal->GetGUID();
572 pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false);
573 }
574 break;
575 case 12:
576 if (uiSecondBoss == 0)
577 do
578 {
579 uiSecondBoss = std::rand() % 6 + 1;
580 } while (uiSecondBoss == uiFirstBoss);
581 if (Creature* pSinclari = instance->GetCreature(uiSinclari))
582 {
584 uiSaboteurPortal = pPortal->GetGUID();
586 pAzureSaboteur->CastSpell(pAzureSaboteur, SABOTEUR_SHIELD_EFFECT, false);
587 }
588 break;
589 case 18:
590 {
591 Creature* pSinclari = instance->GetCreature(uiSinclari);
592 if (pSinclari)
594 break;
595 }
596 case 1:
597 {
598 if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
599 pMainDoor->SetGoState(GOState::GO_STATE_READY);
601 // no break
602 }
603 default:
604 SpawnPortal();
605 break;
606 }
607 }
608
609 std::string GetSaveData() OVERRIDE
610 {
612
613 std::ostringstream saveStream;
614 saveStream << "V H " << (uint16)m_auiEncounter[0]
615 << ' ' << (uint16)m_auiEncounter[1]
616 << ' ' << (uint16)m_auiEncounter[2]
617 << ' ' << (uint16)uiFirstBoss
618 << ' ' << (uint16)uiSecondBoss;
619
620 str_data = saveStream.str();
621
623 return str_data;
624 }
625
626 void Load(const char* in) OVERRIDE
627 {
628 if (!in)
629 {
631 return;
632 }
633
635
636 char dataHead1, dataHead2;
637 uint16 data0, data1, data2, data3, data4;
638
639 std::istringstream loadStream(in);
640 loadStream >> dataHead1 >> dataHead2 >> data0 >> data1 >> data2 >> data3 >> data4;
641
642 if (dataHead1 == 'V' && dataHead2 == 'H')
643 {
644 m_auiEncounter[0] = data0;
645 m_auiEncounter[1] = data1;
646 m_auiEncounter[2] = data2;
647
648 for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
649 if (m_auiEncounter[i] == IN_PROGRESS)
651
652 uiFirstBoss = uint8(data3);
653 uiSecondBoss = uint8(data4);
655
657 }
658
660 {
661 Map::PlayerList const &players = instance->GetPlayers();
662 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
663 {
664 Player* player = itr->GetSource();
665 if (player->IsGameMaster())
666 continue;
667
668 if (player->IsAlive())
669 return false;
670 }
671
672 return true;
673 }
674
676 {
677 if (!instance->HavePlayers())
678 return;
679
680 // portals should spawn if other portal is dead and doors are closed
682 {
683 if (uiActivationTimer < diff)
684 {
685 AddWave();
686 bActive = false;
687 // 1 minute waiting time after each boss fight
688 uiActivationTimer = (uiWaveCount == 6 || uiWaveCount == 12) ? 60000 : 5000;
689 } else uiActivationTimer -= diff;
690 }
691
692 // if main event is in progress and players have wiped then reset instance
694 {
698
702
703 for (int i = 0; i < 4; ++i)
704 if (GameObject* crystal = instance->GetGameObject(uiActivationCrystal[i]))
706
707 if (Creature* pSinclari = instance->GetCreature(uiSinclari))
708 {
709 pSinclari->SetVisible(true);
710
711 std::list<Creature*> GuardList;
712 pSinclari->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
713 if (!GuardList.empty())
714 {
715 for (std::list<Creature*>::const_iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr)
716 {
717 if (Creature* pGuard = *itr)
718 {
719 pGuard->SetVisible(true);
720 pGuard->SetReactState(REACT_AGGRESSIVE);
721 pGuard->GetMotionMaster()->MovePoint(1, pGuard->GetHomePosition());
722 }
723 }
724 }
725 pSinclari->GetMotionMaster()->MovePoint(1, pSinclari->GetHomePosition());
726 pSinclari->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
727 }
728 }
729
730 // Cyanigosa is spawned but not tranformed, prefight event
731 Creature* pCyanigosa = instance->GetCreature(uiCyanigosa);
732 if (pCyanigosa && !pCyanigosa->HasAura(CYANIGOSA_SPELL_TRANSFORM))
733 {
734 if (uiCyanigosaEventTimer <= diff)
735 {
736 switch (uiCyanigosaEventPhase)
737 {
738 case 1:
739 pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false);
740 pCyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN);
743 break;
744 case 2:
745 pCyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f);
746 pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_BLUE_AURA, false);
749 break;
750 case 3:
752 pCyanigosa->CastSpell(pCyanigosa, CYANIGOSA_SPELL_TRANSFORM, 0);
754 pCyanigosa->SetReactState(REACT_AGGRESSIVE);
757 break;
758 case 4:
760 break;
761 }
762 } else uiCyanigosaEventTimer -= diff;
763 }
764
765 // if there are NPCs in front of the prison door, which are casting the door seal spell and doors are active
767 {
768 // if door integrity is > 0 then decrase it's integrity state
770 {
771 if (uiDoorSpellTimer < diff)
772 {
774 uiDoorSpellTimer =2000;
775 } else uiDoorSpellTimer -= diff;
776 }
777 // else set door state to active (means door will open and group have failed to sustain mob invasion on the door)
778 else
779 {
782 }
783 }
784 }
785
787 {
788 // just to make things easier we'll get the gameobject from the map
789 GameObject* invoker = instance->GetGameObject(uiActivationCrystal[0]);
790 if (!invoker)
791 return;
792
793 SpellInfo const* spellInfoLightning = sSpellMgr->GetSpellInfo(SPELL_ARCANE_LIGHTNING);
794 if (!spellInfoLightning)
795 return;
796
797 // the orb
799 if (!trigger)
800 return;
801
802 // visuals
803 trigger->CastSpell(trigger, spellInfoLightning, true, 0, 0, trigger->GetGUID());
804
805 // Kill all mobs registered with SetData64(ADD_TRASH_MOB)
806 for (std::set<uint64>::const_iterator itr = trashMobs.begin(); itr != trashMobs.end(); ++itr)
807 {
808 Creature* creature = instance->GetCreature(*itr);
809 if (creature && creature->IsAlive())
810 trigger->Kill(creature);
811 }
812 }
813
814 void ProcessEvent(WorldObject* /*go*/, uint32 uiEventId) OVERRIDE
815 {
816 switch (uiEventId)
817 {
819 bCrystalActivated = true; // Activation by player's will throw event signal
821 break;
822 }
823 }
824 };
825};
826
@ IN_MILLISECONDS
Definition Common.h:125
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
std::uint16_t uint16
Definition Define.h:78
GOState
Definition GameObject.h:575
@ GO_STATE_ACTIVE
Definition GameObject.h:576
@ GO_STATE_READY
Definition GameObject.h:577
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition GameObject.h:578
#define OUT_LOAD_INST_DATA_FAIL
@ IN_PROGRESS
@ FAIL
@ DONE
@ NOT_STARTED
#define OUT_SAVE_INST_DATA_COMPLETE
#define OUT_LOAD_INST_DATA_COMPLETE
#define OUT_SAVE_INST_DATA
#define OUT_LOAD_INST_DATA(a)
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:75
@ TEMPSUMMON_CORPSE_DESPAWN
Definition Object.h:72
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:74
@ GO_FLAG_NOT_SELECTABLE
#define sSpellMgr
Definition SpellMgr.h:744
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_NOT_SELECTABLE
Definition Unit.h:650
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ UNIT_FIELD_FLAGS
@ GAMEOBJECT_FIELD_FLAGS
Position const MiddleRoomLocation
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
void RemoveLootMode(uint16 lootMode)
Definition Creature.h:559
void Respawn(bool force=false)
void SetReactState(ReactStates st)
Definition Creature.h:460
CreatureAI * AI() const
Definition Creature.h:483
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void UpdateEncounterState(EncounterCreditType type, uint32 creditEntry, Unit *source)
void HandleGameObject(uint64 guid, bool open, GameObject *go=NULL)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition Map.h:238
MapRefManager PlayerList
Definition Map.h:406
iterator end()
iterator begin()
LinkedListHead::Iterator< MapReference const > const_iterator
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=EVENT_JUMP)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
uint64 GetGUID() const
Definition Object.h:119
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:1261
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:1280
bool IsGameMaster() const
Definition Player.h:1369
void Kill(Unit *victim, bool durabilityLoss=true)
Definition Unit.cpp:6342
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
bool IsAlive() const
Definition Unit.h:2032
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
bool isDead() const
Definition Unit.h:2040
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ DATA_WAVE_COUNT
float PortalLocation[4][4]
const Position BossStartMove3
const Position BossStartMove22
@ GO_ICHORON_DOOR
@ GO_ACTIVATION_CRYSTAL
@ GO_LAVANTHOR_DOOR
@ GO_INTRO_ACTIVATION_CRYSTAL
@ GO_ZURAMAT_DOOR
@ GO_EREKEM_GUARD_2_DOOR
@ GO_EREKEM_GUARD_1_DOOR
@ CYANIGOSA_SAY_SPAWN
const Position BossStartMove6
void AddSC_instance_violet_hold()
@ CYANIGOSA_SPELL_TRANSFORM
@ CYANIGOSA_BLUE_AURA
const Position BossStartMove2
@ SABOTEUR_SHIELD_EFFECT
@ SABOTEUR_SHIELD_DISRUPTION
const Position BossStartMove21
const Position MiddleRoomLocation
const Position PortalLocation[]
const Position BossStartMove1
const Position BossStartMove4
const Position ArcaneSphere
#define MAX_ENCOUNTER
@ SPELL_ARCANE_LIGHTNING
const Position MiddleRoomPortalSaboLocation
const Position CyanigosasSpawnLocation
const Position BossStartMove5
void StartBossEncounter(uint8 uiBoss, bool bForceRespawn=true)
void ProcessEvent(WorldObject *, uint32 uiEventId) OVERRIDE
@ WORLD_STATE_VH
Definition violet_hold.h:89
@ WORLD_STATE_VH_WAVE_COUNT
Definition violet_hold.h:91
@ WORLD_STATE_VH_PRISON_STATE
Definition violet_hold.h:90
@ CREATURE_SABOTEOUR
Definition violet_hold.h:82
@ CREATURE_SINCLARI
Definition violet_hold.h:81
@ CREATURE_TELEPORTATION_PORTAL
Definition violet_hold.h:70
@ CREATURE_MORAGG
Definition violet_hold.h:79
@ CREATURE_LAVANTHOR
Definition violet_hold.h:74
@ NPC_VIOLET_HOLD_GUARD
Definition violet_hold.h:83
@ NPC_DEFENSE_SYSTEM
Definition violet_hold.h:84
@ CREATURE_ICHORON
Definition violet_hold.h:75
@ CREATURE_CYANIGOSA
Definition violet_hold.h:80
@ CREATURE_ZURAMAT
Definition violet_hold.h:76
@ CREATURE_EREKEM_GUARD
Definition violet_hold.h:78
@ CREATURE_EREKEM
Definition violet_hold.h:77
@ CREATURE_XEVOZZ
Definition violet_hold.h:73
@ DATA_ICHORON
Definition violet_hold.h:35
@ DATA_EREKEM_LEFT_GUARD_CELL
Definition violet_hold.h:42
@ DATA_ZURAMAT
Definition violet_hold.h:38
@ DATA_ZURAMAT_CELL
Definition violet_hold.h:47
@ DATA_LAVANTHOR_CELL
Definition violet_hold.h:45
@ DATA_XEVOZZ
Definition violet_hold.h:37
@ DATA_ADD_TRASH_MOB
Definition violet_hold.h:52
@ DATA_TELEPORTATION_PORTAL
Definition violet_hold.h:50
@ DATA_EREKEM_GUARD_2
Definition violet_hold.h:34
@ DATA_MAIN_DOOR
Definition violet_hold.h:48
@ DATA_CYANIGOSA
Definition violet_hold.h:39
@ DATA_EREKEM_CELL
Definition violet_hold.h:41
@ DATA_XEVOZZ_CELL
Definition violet_hold.h:46
@ DATA_EREKEM
Definition violet_hold.h:32
@ DATA_LAVANTHOR
Definition violet_hold.h:36
@ DATA_EREKEM_GUARD_1
Definition violet_hold.h:33
@ DATA_SINCLARI
Definition violet_hold.h:49
@ DATA_DEL_TRASH_MOB
Definition violet_hold.h:53
@ DATA_EREKEM_RIGHT_GUARD_CELL
Definition violet_hold.h:43
@ DATA_MORAGG_CELL
Definition violet_hold.h:40
@ DATA_ICHORON_CELL
Definition violet_hold.h:44
@ DATA_MORAGG
Definition violet_hold.h:31
@ DATA_SABOTEUR_PORTAL
Definition violet_hold.h:51
@ BOSS_XEVOZZ
Definition violet_hold.h:63
@ BOSS_ZURAMAT
Definition violet_hold.h:64
@ BOSS_MORAGG
Definition violet_hold.h:59
@ BOSS_LAVANTHOR
Definition violet_hold.h:62
@ BOSS_EREKEM
Definition violet_hold.h:60
@ BOSS_ICHORON
Definition violet_hold.h:61
@ DATA_1ST_BOSS_EVENT
Definition violet_hold.h:11
@ DATA_NPC_PRESENCE_AT_DOOR
Definition violet_hold.h:18
@ DATA_2ND_BOSS_EVENT
Definition violet_hold.h:12
@ DATA_CYANIGOSA_EVENT
Definition violet_hold.h:13
@ DATA_SECOND_BOSS
Definition violet_hold.h:23
@ DATA_NPC_PRESENCE_AT_DOOR_ADD
Definition violet_hold.h:19
@ DATA_FIRST_BOSS
Definition violet_hold.h:22
@ DATA_PORTAL_LOCATION
Definition violet_hold.h:16
@ DATA_REMOVE_NPC
Definition violet_hold.h:15
@ DATA_DOOR_INTEGRITY
Definition violet_hold.h:17
@ DATA_DEFENSELESS
Definition violet_hold.h:26
@ DATA_START_BOSS_ENCOUNTER
Definition violet_hold.h:21
@ DATA_ACTIVATE_CRYSTAL
Definition violet_hold.h:24
@ DATA_MAIN_EVENT_PHASE
Definition violet_hold.h:25
@ DATA_NPC_PRESENCE_AT_DOOR_REMOVE
Definition violet_hold.h:20
@ EVENT_ACTIVATE_CRYSTAL
Definition violet_hold.h:96