TrinityCore
Loading...
Searching...
No Matches
karazhan.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ScriptMgr.h"
19#include "GameObject.h"
20#include "InstanceScript.h"
21#include "karazhan.h"
22#include "Map.h"
23#include "MotionMaster.h"
24#include "ObjectAccessor.h"
25#include "Player.h"
26#include "ScriptedCreature.h"
27#include "ScriptedGossip.h"
28#include "SpellScript.h"
29#include "TemporarySummon.h"
30
47
75
83
94
101
102static constexpr const char* GOSSIP_OPTION_GM_1 = "[GM] Change event to EVENT_OZ";
103static constexpr const char* GOSSIP_OPTION_GM_2 = "[GM] Change event to EVENT_HOOD";
104static constexpr const char* GOSSIP_OPTION_GM_3 = "[GM] Change event to EVENT_RAJ";
105
106// 16812 - Barnes
107struct npc_barnes : public ScriptedAI
108{
109 npc_barnes(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { }
110
111 void DoAction(int32 action) override
112 {
113 switch (action)
114 {
116 _scheduler.Schedule(0s, [this](TaskContext task)
117 {
118 switch (task.GetRepeatCounter())
119 {
120 case 0:
121 Talk(SAY_BEGIN);
122 me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
123 _instance->SetBossState(DATA_OPERA_PERFORMANCE, IN_PROGRESS);
124 _instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_DOOR_LEFT));
125 task.Repeat(3400ms);
126 break;
127 case 1:
128 DoCastSelf(SPELL_TUXEDO);
129 me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_1, false);
130 break;
131 default:
132 break;
133 }
134 });
135 break;
139 break;
140 default:
141 break;
142 }
143 }
144
145 void WaypointPathEnded(uint32 /*waypointId*/, uint32 pathId) override
146 {
147 if (pathId == PATH_ANNOUNCE_1)
148 {
150 {
151 case EVENT_HOOD:
152 _scheduler.Schedule(0s, [this](TaskContext task)
153 {
154 switch (task.GetRepeatCounter())
155 {
156 case 0:
157 me->SetFacingTo(4.590215682983398437f);
158 me->SetEmoteState(EMOTE_STATE_TALK);
159 Talk(SAY_HOOD_1);
160
161 if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
162 helper->PlayDirectSound(SOUND_AMBIENCE_HOOD);
163
164 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
165
166 task.Repeat(7s);
167 break;
168 case 1:
169 Talk(SAY_HOOD_2);
170 task.Repeat(7s);
171 break;
172 case 2:
173 me->SetEmoteState(EMOTE_ONESHOT_NONE);
174 task.Repeat(3600ms);
175 break;
176 case 3:
177 Talk(SAY_HOOD_3);
178 me->SetEmoteState(EMOTE_STATE_TALK);
179 task.Repeat(10s);
180 break;
181 case 4:
182 Talk(SAY_HOOD_4);
183 task.Repeat(10s);
184 break;
185 case 5:
186 me->SetEmoteState(EMOTE_ONESHOT_NONE);
187 task.Repeat(1200ms);
188 break;
189 case 6:
190 me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
191 task.Repeat(3600ms);
192 break;
193 case 7:
194 me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
195 me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
196 break;
197 default:
198 break;
199 }
200 });
201 break;
202 case EVENT_OZ:
203 _scheduler.Schedule(0s, [this](TaskContext task)
204 {
205 switch (task.GetRepeatCounter())
206 {
207 case 0:
208 me->SetFacingTo(4.590215682983398437f);
209 me->SetEmoteState(EMOTE_STATE_TALK);
210 Talk(SAY_OZ_1);
211
212 if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
213 helper->PlayDirectSound(SOUND_AMBIENCE_OZ);
214
215 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
216
217 task.Repeat(7s);
218 break;
219 case 1:
220 Talk(SAY_OZ_2);
221 task.Repeat(15s);
222 break;
223 case 2:
224 me->SetEmoteState(EMOTE_ONESHOT_NONE);
225 task.Repeat(3600ms);
226 break;
227 case 3:
228 Talk(SAY_OZ_3);
229 me->SetEmoteState(EMOTE_STATE_TALK);
230 task.Repeat(6s);
231 break;
232 case 4:
233 me->SetEmoteState(EMOTE_ONESHOT_NONE);
234 task.Repeat(3600ms);
235 break;
236 case 5:
237 Talk(SAY_OZ_4);
238 me->SetEmoteState(EMOTE_STATE_TALK);
239 task.Repeat(7s);
240 break;
241 case 6:
242 me->SetEmoteState(EMOTE_ONESHOT_NONE);
243 task.Repeat(1200ms);
244 break;
245 case 7:
246 me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
247 task.Repeat(3600ms);
248 break;
249 case 8:
250 me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
251 me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
252 break;
253 default:
254 break;
255 }
256 });
257 break;
258 case EVENT_RAJ:
259 _scheduler.Schedule(0s, [this](TaskContext task)
260 {
261 switch (task.GetRepeatCounter())
262 {
263 case 0:
264 me->SetFacingTo(4.590215682983398437f);
265 me->SetEmoteState(EMOTE_STATE_TALK);
266 Talk(SAY_RAJ_1);
267
268 if (Creature* helper = me->FindNearestCreature(NPC_CROWD_HELPER, 100.0f))
269 helper->PlayDirectSound(SOUND_AMBIENCE_RAJ);
270
271 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_SPOTLIGHT, true);
272
273 task.Repeat(6s);
274 break;
275 case 1:
276 Talk(SAY_RAJ_2);
277 task.Repeat(4800ms);
278 break;
279 case 2:
280 me->SetEmoteState(EMOTE_ONESHOT_NONE);
281 task.Repeat(3600ms);
282 break;
283 case 3:
284 Talk(SAY_RAJ_3);
285 me->SetEmoteState(EMOTE_STATE_TALK);
286 task.Repeat(11s);
287 break;
288 case 4:
289 me->SetEmoteState(EMOTE_ONESHOT_NONE);
290 task.Repeat(3600ms);
291 break;
292 case 5:
293 Talk(SAY_RAJ_4);
294 me->SetEmoteState(EMOTE_STATE_TALK);
295 task.Repeat(8400ms);
296 break;
297 case 6:
298 me->SetEmoteState(EMOTE_ONESHOT_NONE);
299 task.Repeat(1200ms);
300 break;
301 case 7:
302 me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
303 task.Repeat(3600ms);
304 break;
305 case 8:
306 me->GetMotionMaster()->MovePath(PATH_ANNOUNCE_2, false);
307 me->GetMap()->SpawnGroupDespawn(SPAWN_GROUP_SPOTLIGHT);
308 break;
309 default:
310 break;
311 }
312 });
313 break;
314 default:
315 break;
316 }
317 }
318 else if (pathId == PATH_ANNOUNCE_2)
319 {
321 {
322 case EVENT_HOOD:
323 _scheduler.Schedule(0s, [this](TaskContext task)
324 {
325 switch (task.GetRepeatCounter())
326 {
327 case 0:
328 me->SetFacingTo(1.448623299598693847f);
329 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_HOOD);
330 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_GRANDMOTHER, true);
331 task.Repeat(7s);
332 break;
333 case 1:
334 _instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
335 break;
336 default:
337 break;
338 }
339 });
340 break;
341 case EVENT_OZ:
342 _scheduler.Schedule(0s, [this](TaskContext task)
343 {
344 switch (task.GetRepeatCounter())
345 {
346 case 0:
347 me->SetFacingTo(1.448623299598693847f);
348 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_OZ);
349 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_TINHEAD, true);
350 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_STRAWMAN, true);
351 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_ROAR, true);
352 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DOROTHEE, true);
353 task.Repeat(1200ms);
354 break;
355 case 1:
356 _instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
357 break;
358 default:
359 break;
360 }
361 });
362 break;
363 case EVENT_RAJ:
364 _scheduler.Schedule(0s, [this](TaskContext task)
365 {
366 switch (task.GetRepeatCounter())
367 {
368 case 0:
369 me->SetFacingTo(1.448623299598693847f);
370 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_DECORATIONS_RAJ);
371 me->GetMap()->SpawnGroupSpawn(SPAWN_GROUP_JULIANNE, true);
372 task.Repeat(4s);
373 break;
374 case 1:
375 _instance->HandleGameObject(ObjectGuid::Empty, true, _instance->GetGameObject(DATA_GO_STAGE_CURTAIN));
376 break;
377 default:
378 break;
379 }
380 });
381 break;
382 default:
383 break;
384 }
385 }
386 }
387
388 void UpdateAI(uint32 diff) override
389 {
390 _scheduler.Update(diff);
391 }
392
393 bool OnGossipHello(Player* player) override
394 {
396 {
399 return true;
400 }
401 else
402 {
404 {
405 case NOT_STARTED:
407
409
410 if (player->IsGameMaster())
411 {
415 }
416
418 break;
419 case FAIL:
421
422 if (player->IsGameMaster())
423 {
427 }
428
430 {
431 case EVENT_HOOD:
434 break;
435 case EVENT_OZ:
438 break;
439 case EVENT_RAJ:
442 break;
443 default:
444 break;
445 }
446 break;
447 case DONE:
450 break;
451 default:
452 break;
453 }
454
455 return true;
456 }
457 }
458
459 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
460 {
461 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
462 ClearGossipMenuFor(player);
463
464 switch (action)
465 {
466 case GOSSIP_ACTION_INFO_DEF + 1:
470 break;
471 case GOSSIP_ACTION_INFO_DEF + 2:
472 CloseGossipMenuFor(player);
474 break;
475 case GOSSIP_ACTION_INFO_DEF + 10:
476 CloseGossipMenuFor(player);
478 break;
479 case GOSSIP_ACTION_INFO_DEF + 11:
480 CloseGossipMenuFor(player);
482 break;
483 case GOSSIP_ACTION_INFO_DEF + 12:
484 CloseGossipMenuFor(player);
486 break;
487 }
488
489 return true;
490 }
491
492private:
495};
496
509
519
520static float MedivPos[4] = {-11161.49f, -1902.24f, 91.48f, 1.94f};
521static float ArcanagosPos[4] = {-11169.75f, -1881.48f, 95.39f, 4.83f};
522
524{
525public:
526 npc_image_of_medivh() : CreatureScript("npc_image_of_medivh") { }
527
528 CreatureAI* GetAI(Creature* creature) const override
529 {
530 return GetKarazhanAI<npc_image_of_medivhAI>(creature);
531 }
532
534 {
536 {
537 Initialize();
538 Step = 0;
540 FireMedivhTimer = 0;
541 instance = creature->GetInstanceScript();
542 }
543
545 {
547 EventStarted = false;
548 YellTimer = 0;
549 }
550
552
554
559
561
562 void Reset() override
563 {
564 Initialize();
566
568 {
570 (*me).GetMotionMaster()->MovePoint(1, MedivPos[0], MedivPos[1], MedivPos[2]);
571 Step = 0;
572 }
573 else
574 {
576 }
577 }
578 void JustEngagedWith(Unit* /*who*/) override { }
579
580 void MovementInform(uint32 type, uint32 id) override
581 {
582 if (type != POINT_MOTION_TYPE)
583 return;
584 if (id == 1)
585 {
586 StartEvent();
589 }
590 }
591
593 {
594 Step = 1;
595 EventStarted = true;
597 if (!Arcanagos)
598 return;
599 ArcanagosGUID = Arcanagos->GetGUID();
600 Arcanagos->SetDisableGravity(true);
602 Arcanagos->SetOrientation(ArcanagosPos[3]);
604 YellTimer = 10000;
605 }
606
608 {
609 switch (step)
610 {
611 case 0: return 9999999;
612 case 1:
614 return 10000;
615 case 2:
617 arca->AI()->Talk(SAY_DIALOG_ARCANAGOS_2);
618 return 20000;
619 case 3:
621 return 10000;
622 case 4:
624 arca->AI()->Talk(SAY_DIALOG_ARCANAGOS_4);
625 return 20000;
626 case 5:
628 return 20000;
629 case 6:
631 arca->AI()->Talk(SAY_DIALOG_ARCANAGOS_6);
632 return 10000;
633 case 7:
634 FireArcanagosTimer = 500;
635 return 5000;
636 case 8:
637 FireMedivhTimer = 500;
639 return 10000;
640 case 9:
642 return 10000;
643 case 10:
645 DoCast(arca, SPELL_CONFLAGRATION_BLAST, false);
646 return 1000;
647 case 11:
649 arca->AI()->Talk(SAY_DIALOG_ARCANAGOS_8);
650 return 5000;
651 case 12:
653 {
654 arca->GetMotionMaster()->MovePoint(0, -11010.82f, -1761.18f, 156.47f);
655 arca->setActive(true);
656 arca->SetFarVisible(true);
657 arca->InterruptNonMeleeSpells(true);
658 arca->SetSpeedRate(MOVE_FLIGHT, 2.0f);
659 }
660 return 10000;
661 case 13:
663 return 10000;
664 case 14:
665 {
666 me->SetVisible(false);
667 me->ClearInCombat();
668
669 InstanceMap::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
670 for (InstanceMap::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
671 {
672 if (i->GetSource()->IsAlive())
673 {
674 if (i->GetSource()->GetQuestStatus(9645) == QUEST_STATUS_INCOMPLETE)
675 i->GetSource()->CompleteQuest(9645);
676 }
677 }
678 return 50000;
679 }
680 case 15:
682 arca->KillSelf();
683 return 5000;
684 default:
685 return 9999999;
686 }
687 }
688
689 void UpdateAI(uint32 diff) override
690 {
691 if (YellTimer <= diff)
692 {
693 if (EventStarted)
695 } else YellTimer -= diff;
696
697 if (Step >= 7 && Step <= 12)
698 {
700
701 if (FireArcanagosTimer <= diff)
702 {
703 if (arca)
704 arca->CastSpell(me, SPELL_FIRE_BALL, false);
705 FireArcanagosTimer = 6000;
706 } else FireArcanagosTimer -= diff;
707
708 if (FireMedivhTimer <= diff)
709 {
710 if (arca)
711 DoCast(arca, SPELL_FIRE_BALL);
712 FireMedivhTimer = 5000;
713 } else FireMedivhTimer -= diff;
714 }
715 }
716 };
717};
718
720{
721 SPELL_FEAR = 29321
723
724// 29320 - Charge
726{
728
729 bool Validate(SpellInfo const* /*spellInfo*/) override
730 {
731 return ValidateSpellInfo({ SPELL_FEAR });
732 }
733
735 {
737 }
738
743};
744
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
@ GOSSIP_ICON_DOT
Definition GossipDef.h:71
@ FAIL
@ DONE
@ NOT_STARTED
@ POINT_MOTION_TYPE
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:106
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
void SendGossipMenuFor(Player *player, uint32 npcTextID, ObjectGuid const &guid)
void AddGossipItemFor(Player *player, GossipOptionIcon icon, std::string const &text, uint32 sender, uint32 action)
void ClearGossipMenuFor(Player *player)
void InitGossipMenuFor(Player *player, uint32 menuId)
void CloseGossipMenuFor(Player *player)
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
#define SpellHitFn(F)
@ UNIT_NPC_FLAG_GOSSIP
@ MOVE_FLIGHT
@ UNIT_FLAG_NON_ATTACKABLE
Creature *const me
Definition CreatureAI.h:82
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
iterator end()
iterator begin()
PlayerList const & GetPlayers() const
Definition Map.h:468
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
bool IsEmpty() const
Definition ObjectGuid.h:172
void Clear()
Definition ObjectGuid.h:150
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
uint32 GetGossipOptionAction(uint32 selection) const
Definition GossipDef.h:270
bool IsGameMaster() const
Definition Player.h:976
PlayerMenu * PlayerTalkClass
Definition Player.h:1956
Unit * GetCaster() const
HookList< HitHandler > AfterHit
TaskScheduler::repeated_t GetRepeatCounter() const
Returns the repeat counter which increases every time the task is repeated.
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
TaskScheduler & Update(success_t const &callback=EmptyCallback)
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:783
void SetVisible(bool x)
Definition Unit.cpp:8453
MotionMaster * GetMotionMaster()
Definition Unit.h:1683
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
Definition Unit.cpp:13262
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:1111
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3807
void ClearInCombat()
Definition Unit.h:1161
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:968
Map * GetMap() const
Definition Object.h:451
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1088
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2833
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1993
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:55
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:56
virtual void SetGuidData(uint32, ObjectGuid)
Definition ZoneScript.h:49
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
CreatureAI * GetAI(Creature *creature) const override
Definition karazhan.cpp:528
bool Validate(SpellInfo const *) override
Definition karazhan.cpp:729
void Register() override
Definition karazhan.cpp:739
PrepareSpellScript(spell_karazhan_charge)
static float ArcanagosPos[4]
Definition karazhan.cpp:521
BarnesTexts
Definition karazhan.cpp:32
@ SAY_RAJ_2
Definition karazhan.cpp:43
@ SAY_HOOD_1
Definition karazhan.cpp:34
@ SAY_HOOD_3
Definition karazhan.cpp:36
@ SAY_OZ_3
Definition karazhan.cpp:40
@ SAY_RAJ_3
Definition karazhan.cpp:44
@ SAY_HOOD_4
Definition karazhan.cpp:37
@ SAY_HOOD_2
Definition karazhan.cpp:35
@ SAY_RAJ_4
Definition karazhan.cpp:45
@ SAY_OZ_1
Definition karazhan.cpp:38
@ SAY_BEGIN
Definition karazhan.cpp:33
@ SAY_OZ_2
Definition karazhan.cpp:39
@ SAY_RAJ_1
Definition karazhan.cpp:42
@ SAY_OZ_4
Definition karazhan.cpp:41
static float MedivPos[4]
Definition karazhan.cpp:520
KarazhanCharge
Definition karazhan.cpp:720
@ SPELL_FEAR
Definition karazhan.cpp:721
static constexpr const char * GOSSIP_OPTION_GM_3
Definition karazhan.cpp:104
BarnesMisc
Definition karazhan.cpp:49
@ SPELL_TUXEDO
Definition karazhan.cpp:50
@ GOSSIP_OPTION_FAIL_OZ
Definition karazhan.cpp:65
@ GOSSIP_TEXT_FAIL_RAJ
Definition karazhan.cpp:60
@ GOSSIP_OPTION_MAIN
Definition karazhan.cpp:63
@ GOSSIP_TEXT_MOROES_ALIVE
Definition karazhan.cpp:55
@ GOSSIP_TEXT_DONE
Definition karazhan.cpp:61
@ GOSSIP_TEXT_MAIN_2
Definition karazhan.cpp:57
@ NPC_CROWD_HELPER
Definition karazhan.cpp:73
@ GOSSIP_TEXT_FAIL_HOOD
Definition karazhan.cpp:58
@ GOSSIP_OPTION_FAIL_HOOD
Definition karazhan.cpp:64
@ GOSSIP_MENU_MAIN
Definition karazhan.cpp:52
@ GOSSIP_MENU_MAIN_2
Definition karazhan.cpp:53
@ PATH_ANNOUNCE_2
Definition karazhan.cpp:69
@ PATH_ANNOUNCE_1
Definition karazhan.cpp:68
@ GOSSIP_TEXT_FAIL_OZ
Definition karazhan.cpp:59
@ ACTION_START_ANNOUNCE
Definition karazhan.cpp:71
@ GOSSIP_OPTION_FAIL_RAJ
Definition karazhan.cpp:66
@ GOSSIP_TEXT_MAIN_1
Definition karazhan.cpp:56
static constexpr const char * GOSSIP_OPTION_GM_1
Definition karazhan.cpp:102
static constexpr const char * GOSSIP_OPTION_GM_2
Definition karazhan.cpp:103
ImageOfMedivhTexts
Definition karazhan.cpp:498
@ SAY_DIALOG_MEDIVH_1
Definition karazhan.cpp:499
@ SAY_DIALOG_ARCANAGOS_8
Definition karazhan.cpp:506
@ SAY_DIALOG_MEDIVH_9
Definition karazhan.cpp:507
@ SAY_DIALOG_ARCANAGOS_4
Definition karazhan.cpp:502
@ SAY_DIALOG_ARCANAGOS_2
Definition karazhan.cpp:500
@ SAY_DIALOG_MEDIVH_5
Definition karazhan.cpp:503
@ SAY_DIALOG_ARCANAGOS_6
Definition karazhan.cpp:504
@ SAY_DIALOG_MEDIVH_3
Definition karazhan.cpp:501
@ EMOTE_DIALOG_MEDIVH_7
Definition karazhan.cpp:505
BarnesCreatureSpawnGroups
Definition karazhan.cpp:85
@ SPAWN_GROUP_SPOTLIGHT
Definition karazhan.cpp:86
@ SPAWN_GROUP_TINHEAD
Definition karazhan.cpp:88
@ SPAWN_GROUP_GRANDMOTHER
Definition karazhan.cpp:87
@ SPAWN_GROUP_JULIANNE
Definition karazhan.cpp:92
@ SPAWN_GROUP_ROAR
Definition karazhan.cpp:90
@ SPAWN_GROUP_STRAWMAN
Definition karazhan.cpp:89
@ SPAWN_GROUP_DOROTHEE
Definition karazhan.cpp:91
ImageOfMedivhMisc
Definition karazhan.cpp:511
@ SPELL_FIRE_BALL
Definition karazhan.cpp:512
@ NPC_ARCANAGOS
Definition karazhan.cpp:517
@ SPELL_CONFLAGRATION_BLAST
Definition karazhan.cpp:514
@ SPELL_MANA_SHIELD
Definition karazhan.cpp:515
@ SPELL_UBER_FIREBALL
Definition karazhan.cpp:513
BarnesSounds
Definition karazhan.cpp:77
@ SOUND_APPLAUSE
Definition karazhan.cpp:78
@ SOUND_AMBIENCE_RAJ
Definition karazhan.cpp:81
@ SOUND_AMBIENCE_OZ
Definition karazhan.cpp:80
@ SOUND_AMBIENCE_HOOD
Definition karazhan.cpp:79
BarnesObjectSpawnGroups
Definition karazhan.cpp:96
@ SPAWN_GROUP_DECORATIONS_OZ
Definition karazhan.cpp:98
@ SPAWN_GROUP_DECORATIONS_HOOD
Definition karazhan.cpp:97
@ SPAWN_GROUP_DECORATIONS_RAJ
Definition karazhan.cpp:99
void AddSC_karazhan()
Definition karazhan.cpp:745
@ ACTION_OPERA_FINISHED
Definition karazhan.h:121
@ EVENT_HOOD
Definition karazhan.h:70
@ EVENT_OZ
Definition karazhan.h:71
@ EVENT_RAJ
Definition karazhan.h:72
@ DATA_IMAGE_OF_MEDIVH
Definition karazhan.h:50
@ DATA_OPERA_VARIATION
Definition karazhan.h:59
@ DATA_MOROES
Definition karazhan.h:31
@ DATA_OPERA_PERFORMANCE
Definition karazhan.h:34
#define RegisterKarazhanCreatureAI(ai_name)
Definition karazhan.h:135
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void SetOrientation(float orientation)
Definition Position.h:74
void DoAction(int32 action) override
Definition karazhan.cpp:111
npc_barnes(Creature *creature)
Definition karazhan.cpp:109
bool OnGossipHello(Player *player) override
Definition karazhan.cpp:393
void UpdateAI(uint32 diff) override
Definition karazhan.cpp:388
void WaypointPathEnded(uint32, uint32 pathId) override
Definition karazhan.cpp:145
TaskScheduler _scheduler
Definition karazhan.cpp:494
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
Definition karazhan.cpp:459
InstanceScript * _instance
Definition karazhan.cpp:493
void MovementInform(uint32 type, uint32 id) override
Definition karazhan.cpp:580
void UpdateAI(uint32 diff) override
Definition karazhan.cpp:689