Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
halls_of_stone.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 "ScriptedGossip.h"
9#include "ScriptedEscortAI.h"
10#include "halls_of_stone.h"
11#include "Player.h"
12
75
86
88{
90
91 // Kadrak
94
95 // Marnak
98
99 // Abedneum
102
104};
105
112
113#define GOSSIP_ITEM_START "Brann, it would be our honor!"
114#define GOSSIP_ITEM_PROGRESS "Let's move Brann, enough of the history lessons!"
115
117{
118 {946.992f, 397.016f, 208.374f, 0.0f},
119 {960.748f, 382.944f, 208.374f, 0.0f},
120};
121
123{
124public:
125 npc_tribuna_controller() : CreatureScript("npc_tribuna_controller") { }
126
128 {
130 {
131 instance = creature->GetInstanceScript();
132 SetCombatMovement(false);
133 }
134
136
140
144
145 std::list<uint64> KaddrakGUIDList;
146
148 {
152
153 bKaddrakActivated = false;
154 bMarnakActivated = false;
155 bAbedneumActivated = false;
156
157 if (instance)
158 {
159 instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false);
160 instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false);
161 instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false);
162 instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false);
163 }
164
165 KaddrakGUIDList.clear();
166 }
167
169 {
170 /*GetCreatureListWithEntryInGrid(lKaddrakGUIDList, me, CREATURE_KADDRAK, 50.0f);
171 if (!lKaddrakGUIDList.empty())
172 {
173 uint32 uiPositionCounter = 0;
174 for (std::list<Creature*>::const_iterator itr = lKaddrakGUIDList.begin(); itr != lKaddrakGUIDList.end(); ++itr)
175 {
176 if ((*itr)->IsAlive())
177 {
178 if (uiPositionCounter == 0)
179 {
180 (*itr)->GetMap()->CreatureRelocation((*itr), 927.265f, 333.200f, 218.780f, (*itr)->GetOrientation());
181 (*itr)->SendMonsterMove(927.265f, 333.200f, 218.780f, 0, (*itr)->GetMovementFlags(), 1);
182 }
183 else
184 {
185 (*itr)->GetMap()->CreatureRelocation((*itr), 921.745f, 328.076f, 218.780f, (*itr)->GetOrientation());
186 (*itr)->SendMonsterMove(921.745f, 328.076f, 218.780f, 0, (*itr)->GetMovementFlags(), 1);
187 }
188 }
189 ++uiPositionCounter;
190 }
191 }*/
192 }
193
195 {
197 {
198 if (uiKaddrakEncounterTimer <= diff)
199 {
200 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
201 if (!KaddrakGUIDList.empty())
202 for (std::list<uint64>::const_iterator itr = KaddrakGUIDList.begin(); itr != KaddrakGUIDList.end(); ++itr)
203 {
204 if (Creature* pKaddrak = Unit::GetCreature(*me, *itr))
205 {
206 if (pKaddrak->IsAlive())
208 }
209 }
211 } else uiKaddrakEncounterTimer -= diff;
212 }
214 {
215 if (uiMarnakEncounterTimer <= diff)
216 {
217 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
218 {
219 if (Creature* summon = me->SummonCreature(NPC_DARK_MATTER_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 1000))
220 {
221 summon->SetDisplayId(11686);
223 summon->CastSpell(target, DUNGEON_MODE(SPELL_DARK_MATTER, H_SPELL_DARK_MATTER), true);
224 }
225 }
226 uiMarnakEncounterTimer = std::rand() % 31000 + 30000;
227 } else uiMarnakEncounterTimer -= diff;
228 }
230 {
231 if (uiAbedneumEncounterTimer <= diff)
232 {
233 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
234 {
235 if (Creature* summon = me->SummonCreature(NPC_SEARING_GAZE_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 1000))
236 {
237 summon->SetDisplayId(11686);
239 summon->CastSpell(target, DUNGEON_MODE(SPELL_SEARING_GAZE, H_SPELL_SEARING_GAZE), true);
240 }
241 }
242 uiAbedneumEncounterTimer = std::rand() % 31000 + 30000;
243 } else uiAbedneumEncounterTimer -= diff;
244 }
245 }
246 };
247
249 {
251 }
252};
253
255{
256public:
257 npc_brann_hos() : CreatureScript("npc_brann_hos") { }
258
259 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
260 {
261 player->PlayerTalkClass->ClearMenus();
262 if (action == GOSSIP_ACTION_INFO_DEF+1 || action == GOSSIP_ACTION_INFO_DEF+2)
263 {
264 player->CLOSE_GOSSIP_MENU();
265 CAST_AI(npc_brann_hos::npc_brann_hosAI, creature->AI())->StartWP();
266 }
267
268 return true;
269 }
270
271 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
272 {
273 if (creature->IsQuestGiver())
274 player->PrepareQuestMenu(creature->GetGUID());
275
277 player->SEND_GOSSIP_MENU(TEXT_ID_START, creature->GetGUID());
278
279 return true;
280 }
281
283 {
284 npc_brann_hosAI(Creature* creature) : npc_escortAI(creature)
285 {
286 instance = creature->GetInstanceScript();
287 }
288
291
293 std::list<uint64> lDwarfGUIDList;
294
296
300
302 {
304 {
305 bIsLowHP = false;
306 bIsBattle = false;
307 uiStep = 0;
308 uiPhaseTimer = 0;
310 brannSparklinNews = true;
311
312 DespawnDwarf();
313
314 if (instance)
315 instance->SetBossState(DATA_BRANN_EVENT, NOT_STARTED);
316 }
317 }
318
320 {
321 if (lDwarfGUIDList.empty())
322 return;
323 for (std::list<uint64>::const_iterator itr = lDwarfGUIDList.begin(); itr != lDwarfGUIDList.end(); ++itr)
324 {
325 Creature* temp = Unit::GetCreature(*me, instance ? (*itr) : 0);
326 if (temp && temp->IsAlive())
327 temp->DespawnOrUnsummon();
328 }
329 lDwarfGUIDList.clear();
330 }
331
333 {
334 switch (waypointId)
335 {
336 case 7:
338 {
339 if (!creature->IsAlive())
340 creature->Respawn();
341 CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, creature->AI())->UpdateFacesList();
342 uiControllerGUID = creature->GetGUID();
343 }
344 break;
345 case 13:
347 SetEscortPaused(true);
348 JumpToNextStep(20000);
349 break;
350 case 17:
352 if (instance)
353 instance->HandleGameObject(instance->GetData64(DATA_GO_TRIBUNAL_CONSOLE), true);
354 me->SetStandState(UNIT_STAND_STATE_KNEEL);
355 SetEscortPaused(true);
356 JumpToNextStep(8500);
357 break;
358 case 18:
359 SetEscortPaused(true);
360 break;
361 }
362 }
363
364 void SpawnDwarf(uint32 uiType)
365 {
366 switch (uiType)
367 {
368 case 1:
369 {
370 uint32 uiSpawnNumber = DUNGEON_MODE(2, 3);
371 for (uint8 i = 0; i < uiSpawnNumber; ++i)
374 break;
375 }
376 case 2:
377 for (uint8 i = 0; i < 2; ++i)
379 break;
380 case 3:
382 break;
383 }
384 }
385
387 {
388 lDwarfGUIDList.push_back(summoned->GetGUID());
389 summoned->AddThreat(me, 0.0f);
390 summoned->AI()->AttackStart(me);
391 }
392
393 void JumpToNextStep(uint32 uiTimer)
394 {
395 uiPhaseTimer = uiTimer;
396 ++uiStep;
397 }
398
399 void StartWP()
400 {
402 SetEscortPaused(false);
403 uiStep = 1;
404 Start();
405 }
406
407 void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/) OVERRIDE
408 {
410 brannSparklinNews = false;
411 }
412
414 {
415 if (type == DATA_BRANN_SPARKLIN_NEWS)
416 return brannSparklinNews ? 1 : 0;
417
418 return 0;
419 }
420
421 void UpdateEscortAI(const uint32 uiDiff) OVERRIDE
422 {
423 if (uiPhaseTimer <= uiDiff)
424 {
425 switch (uiStep)
426 {
427 case 1:
428 if (instance)
429 {
430 if (instance->GetBossState(DATA_BRANN_EVENT) != NOT_STARTED)
431 return;
432 instance->SetBossState(DATA_BRANN_EVENT, IN_PROGRESS);
433 }
434 bIsBattle = false;
436 SetRun(true);
438 break;
439 case 3:
440 SetEscortPaused(false);
442 break;
443 case 5:
444 if (instance)
445 {
446 if (Creature* temp = (Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM))))
447 temp->AI()->Talk(SAY_EVENT_INTRO_3_ABED);
448 }
449 JumpToNextStep(8500);
450 break;
451 case 6:
453 JumpToNextStep(6500);
454 break;
455 case 7:
456 if (instance)
457 {
458 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
459 temp->AI()->Talk(SAY_EVENT_A_2_KADD);
460 }
461 JumpToNextStep(12500);
462 break;
463 case 8:
465 if (instance)
466 instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), true);
468 CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bKaddrakActivated = true;
469 JumpToNextStep(5000);
470 break;
471 case 9:
472 me->SetReactState(REACT_PASSIVE);
473 SpawnDwarf(1);
474 JumpToNextStep(20000);
475 break;
476 case 10:
478 JumpToNextStep(6000);
479 break;
480 case 11:
481 if (instance)
482 {
483 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
484 temp->AI()->Talk(SAY_EVENT_B_2_MARN);
485 }
486 SpawnDwarf(1);
487 JumpToNextStep(20000);
488 break;
489 case 12:
491 if (instance)
492 instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), true);
494 CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bMarnakActivated = true;
495 JumpToNextStep(10000);
496 break;
497 case 13:
498 SpawnDwarf(1);
499 JumpToNextStep(10000);
500 break;
501 case 14:
502 SpawnDwarf(2);
503 JumpToNextStep(20000);
504 break;
505 case 15:
507 SpawnDwarf(1);
508 JumpToNextStep(10000);
509 break;
510 case 16:
511 SpawnDwarf(2);
512 JumpToNextStep(20000);
513 break;
514 case 17:
515 if (instance)
516 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
517 temp->AI()->Talk(SAY_EVENT_C_2_ABED);
518 SpawnDwarf(1);
519 JumpToNextStep(20000);
520 break;
521 case 18:
523 if (instance)
524 instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), true);
526 CAST_AI(npc_tribuna_controller::npc_tribuna_controllerAI, temp->AI())->bAbedneumActivated = true;
527 JumpToNextStep(5000);
528 break;
529 case 19:
530 SpawnDwarf(2);
531 JumpToNextStep(10000);
532 break;
533 case 20:
534 SpawnDwarf(1);
535 JumpToNextStep(15000);
536 break;
537 case 21:
539 SpawnDwarf(3);
540 JumpToNextStep(20000);
541 break;
542 case 22:
543 if (instance)
544 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
545 temp->AI()->Talk(SAY_EVENT_D_2_ABED);
546 SpawnDwarf(1);
547 JumpToNextStep(5000);
548 break;
549 case 23:
550 SpawnDwarf(2);
551 JumpToNextStep(15000);
552 break;
553 case 24:
555 SpawnDwarf(3);
556 JumpToNextStep(5000);
557 break;
558 case 25:
559 SpawnDwarf(1);
560 JumpToNextStep(5000);
561 break;
562 case 26:
563 SpawnDwarf(2);
564 JumpToNextStep(10000);
565 break;
566 case 27:
567 if (instance)
568 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
569 temp->AI()->Talk(SAY_EVENT_D_4_ABED);
570 SpawnDwarf(1);
571 JumpToNextStep(10000);
572 break;
573 case 28:
574 me->SetReactState(REACT_DEFENSIVE);
576 me->SetStandState(UNIT_STAND_STATE_STAND);
577 if (instance)
578 instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), true);
580 temp->DealDamage(temp, temp->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
581 bIsBattle = true;
582 SetEscortPaused(false);
583 JumpToNextStep(6500);
584 break;
585 case 29:
587 if (instance)
588 instance->SetBossState(DATA_BRANN_EVENT, DONE);
589 me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true);
590 JumpToNextStep(5500);
591 break;
592 case 30:
593 if (instance)
594 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
595 temp->AI()->Talk(SAY_EVENT_END_03_ABED);
596 JumpToNextStep(8500);
597 break;
598 case 31:
600 JumpToNextStep(11500);
601 break;
602 case 32:
603 if (instance)
604 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
605 temp->AI()->Talk(SAY_EVENT_END_05_ABED);
606 JumpToNextStep(11500);
607 break;
608 case 33:
610 JumpToNextStep(4500);
611 break;
612 case 34:
613 if (instance)
614 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
615 temp->AI()->Talk(SAY_EVENT_END_07_ABED);
616 JumpToNextStep(22500);
617 break;
618 case 35:
620 JumpToNextStep(7500);
621 break;
622 case 36:
623 if (instance)
624 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
625 temp->AI()->Talk(SAY_EVENT_END_09_KADD);
626 JumpToNextStep(18500);
627 break;
628 case 37:
630 JumpToNextStep(5500);
631 break;
632 case 38:
633 if (instance)
634 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
635 temp->AI()->Talk(SAY_EVENT_END_11_KADD);
636 JumpToNextStep(20500);
637 break;
638 case 39:
640 JumpToNextStep(2500);
641 break;
642 case 40:
643 if (instance)
644 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_KADDRAK)))
645 temp->AI()->Talk(SAY_EVENT_END_13_KADD);
646 JumpToNextStep(19500);
647 break;
648 case 41:
650 JumpToNextStep(10500);
651 break;
652 case 42:
653 if (instance)
654 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
655 temp->AI()->Talk(SAY_EVENT_END_15_MARN);
656 JumpToNextStep(6500);
657 break;
658 case 43:
660 JumpToNextStep(6500);
661 break;
662 case 44:
663 if (instance)
664 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
665 temp->AI()->Talk(SAY_EVENT_END_17_MARN);
666 JumpToNextStep(25500);
667 break;
668 case 45:
670 JumpToNextStep(23500);
671 break;
672 case 46:
673 if (instance)
674 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_MARNAK)))
675 temp->AI()->Talk(SAY_EVENT_END_19_MARN);
676 JumpToNextStep(3500);
677 break;
678 case 47:
680 JumpToNextStep(8500);
681 break;
682 case 48:
683 if (instance)
684 if (Creature* temp = Unit::GetCreature(*me, instance->GetData64(DATA_ABEDNEUM)))
685 temp->AI()->Talk(SAY_EVENT_END_21_ABED);
686 JumpToNextStep(5500);
687 break;
688 case 49:
689 {
690 if (instance)
691 {
692 instance->HandleGameObject(instance->GetData64(DATA_GO_KADDRAK), false);
693 instance->HandleGameObject(instance->GetData64(DATA_GO_MARNAK), false);
694 instance->HandleGameObject(instance->GetData64(DATA_GO_ABEDNEUM), false);
695 instance->HandleGameObject(instance->GetData64(DATA_GO_SKY_FLOOR), false);
696 }
697 Player* player = GetPlayerForEscort();
698 if (player)
701 JumpToNextStep(180000);
702 break;
703 }
704 case 50:
705 SetEscortPaused(false);
706 break;
707 }
708 } else uiPhaseTimer -= uiDiff;
709
710 if (!bIsLowHP && HealthBelowPct(30))
711 {
713 bIsLowHP = true;
714 }
715 else if (bIsLowHP && !HealthBelowPct(30))
716 bIsLowHP = false;
717
718 if (!UpdateVictim())
719 return;
720
722 }
723 };
724
726 {
727 return GetHallsOfStoneAI<npc_brann_hosAI>(creature);
728 }
729};
730
732{
733 public:
734 achievement_brann_spankin_new() : AchievementCriteriaScript("achievement_brann_spankin_new")
735 {
736 }
737
738 bool OnCheck(Player* /*player*/, Unit* target) OVERRIDE
739 {
740 if (!target)
741 return false;
742
743 if (Creature* Brann = target->ToCreature())
744 if (Brann->AI()->GetData(DATA_BRANN_SPARKLIN_NEWS))
745 return true;
746
747 return false;
748 }
749};
750
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
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:46
@ IN_PROGRESS
@ DONE
@ NOT_STARTED
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:70
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Definition Object.h:73
Creature * GetClosestCreatureWithEntry(WorldObject *source, uint32 entry, float maxSearchRange, bool alive)
#define CAST_AI(a, b)
@ STATE_ESCORT_ESCORTING
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
@ SPELL_SCHOOL_MASK_NORMAL
@ UNIT_NPC_FLAG_GOSSIP
Definition Unit.h:687
@ UNIT_STAND_STATE_KNEEL
Definition Unit.h:170
@ UNIT_STAND_STATE_STAND
Definition Unit.h:162
@ REACT_DEFENSIVE
Definition Unit.h:1157
@ REACT_PASSIVE
Definition Unit.h:1156
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ DIRECT_DAMAGE
Definition Unit.h:614
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_NPC_FLAGS
@ UNIT_FIELD_FLAGS
Creatures
#define SAY_DEATH
#define SAY_KILL
AchievementCriteriaScript(const char *name)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
void DespawnOrUnsummon(uint32 msTimeToDespawn=0)
CreatureScript(const char *name)
Creature * ToCreature()
Definition Object.h:207
void GroupEventHappens(uint32 questId, WorldObject const *pEventObject)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
Definition Unit.h:1367
bool IsAlive() const
Definition Unit.h:2032
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
bool OnCheck(Player *, Unit *target) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
@ NPC_TRIBUNAL_OF_THE_AGES
@ NPC_DARK_RUNE_STORMCALLER
@ NPC_SEARING_GAZE_TARGET
@ NPC_DARK_MATTER_TARGET
@ NPC_BRANN_BRONZEBEARD
@ NPC_IRON_GOLEM_CUSTODIAN
@ NPC_DARK_RUNE_PROTECTOR
@ QUEST_HALLS_OF_STONE
@ DATA_BRANN_SPARKLIN_NEWS
@ SPELL_SEARING_GAZE
@ SPELL_DARK_MATTER
@ H_SPELL_GLARE_OF_THE_TRIBUNAL
@ SPELL_GLARE_OF_THE_TRIBUNAL
@ H_SPELL_DARK_MATTER
@ SPELL_REWARD_ACHIEVEMENT
@ H_SPELL_SEARING_GAZE
@ SPELL_STEALTH
void AddSC_halls_of_stone()
#define GOSSIP_ITEM_START
@ SAY_SPAWN_TROGG
@ SAY_EVENT_D_1
@ SAY_EVENT_END_10
@ SAY_EVENT_END_19_MARN
@ SAY_EVENT_END_16
@ SAY_EVENT_END_06
@ SAY_LOW_HEALTH
@ SAY_EVENT_END_21_ABED
@ SAY_SPAWN_DWARF
@ SAY_EVENT_END_12
@ SAY_EVENT_END_20
@ SAY_VICTORY_SJONNIR_1
@ SAY_ESCORT_START
@ SAY_EVENT_END_15_MARN
@ SAY_EVENT_D_4_ABED
@ SAY_VICTORY_SJONNIR_2
@ TEXT_ID_PROGRESS
@ SAY_SPAWN_EARTHEN
@ SAY_EVENT_END_13_KADD
@ SAY_EVENT_END_01
@ SAY_EVENT_END_09_KADD
@ SAY_EVENT_END_17_MARN
@ SAY_EVENT_B_2_MARN
@ SAY_EVENT_C_2_ABED
@ SAY_EVENT_INTRO_3_ABED
@ SAY_SPAWN_OOZE
@ SAY_EVENT_D_3
@ SAY_EVENT_A_2_KADD
@ SAY_EVENT_D_2_ABED
@ SAY_EVENT_END_18
@ SAY_EVENT_END_04
@ SAY_EVENT_B_1
@ SAY_EVENT_INTRO_1
@ SAY_ENTRANCE_MEET
@ SAY_EVENT_A_1
@ SAY_EVENT_END_07_ABED
@ SAY_EVENT_END_11_KADD
@ SAY_EVENT_END_03_ABED
@ SAY_EVENT_A_3
@ SAY_EVENT_END_14
@ SAY_EVENT_END_05_ABED
@ SAY_EVENT_C_1
@ SAY_EVENT_INTRO_2
@ SAY_EVENT_END_02
@ SAY_EVENT_END_08
@ SAY_EVENT_B_3
@ SAY_EVENT_C_3
@ TEXT_ID_START
static Position SpawnLocations[]
AI * GetHallsOfStoneAI(Creature *creature)
@ DATA_GO_SKY_FLOOR
@ DATA_GO_MARNAK
@ DATA_MARNAK
@ DATA_GO_KADDRAK
@ DATA_BRANN_EVENT
@ DATA_ABEDNEUM
@ DATA_GO_ABEDNEUM
@ DATA_GO_TRIBUNAL_CONSOLE
@ DATA_KADDRAK
void SetCombatMovement(bool allowMovement)
Creature * me
bool HealthBelowPct(uint32 pct) const
ScriptedAI(Creature *creature)
const T & DUNGEON_MODE(const T &normal5, const T &heroic5) const
void JumpToNextStep(uint32 uiTimer)
void DamageTaken(Unit *, uint32 &) OVERRIDE
uint32 GetData(uint32 type) const OVERRIDE
npc_brann_hosAI(Creature *creature)
void UpdateEscortAI(const uint32 uiDiff) OVERRIDE
void WaypointReached(uint32 waypointId) OVERRIDE
void JustSummoned(Creature *summoned) OVERRIDE
Player * GetPlayerForEscort()
void SetRun(bool on=true)
bool HasEscortState(uint32 escortState) const
npc_escortAI(Creature *creature)
void SetEscortPaused(bool on)
void Start(bool isActiveAttacker=true, bool run=false, uint64 playerGUID=0, Quest const *quest=NULL, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
static Location SpawnLocations[]