Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
old_hillsbrad.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/* ScriptData
7SDName: Old_Hillsbrad
8SD%Complete: 40
9SDComment: Quest support: 10283, 10284. All friendly NPC's. Thrall waypoints fairly complete, missing many details, but possible to complete escort.
10SDCategory: Caverns of Time, Old Hillsbrad Foothills
11EndScriptData */
12
13/* ContentData
14npc_erozion
15npc_thrall_old_hillsbrad
16npc_taretha
17EndContentData */
18
19#include "ScriptMgr.h"
20#include "ScriptedCreature.h"
21#include "ScriptedGossip.h"
22#include "ScriptedEscortAI.h"
23#include "old_hillsbrad.h"
24#include "Player.h"
25
34#define GOSSIP_HELLO_EROZION1 "I need a pack of Incendiary Bombs."
35#define GOSSIP_HELLO_EROZION2 "[PH] Teleport please, i'm tired."
36
37/*######
38## npc_erozion
39######*/
40
42{
43public:
44 npc_erozion() : CreatureScript("npc_erozion") { }
45
46 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
47 {
48 player->PlayerTalkClass->ClearMenus();
49 if (action == GOSSIP_ACTION_INFO_DEF+1)
50 {
51 ItemPosCountVec dest;
52 uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_ENTRY_BOMBS, 1);
53 if (msg == EQUIP_ERR_OK)
54 {
55 player->StoreNewItem(dest, ITEM_ENTRY_BOMBS, true);
56 }
57 player->SEND_GOSSIP_MENU(9515, creature->GetGUID());
58 }
59 if (action == GOSSIP_ACTION_INFO_DEF+2)
60 {
61 player->CLOSE_GOSSIP_MENU();
62 }
63 return true;
64 }
65
66 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
67 {
68 if (creature->IsQuestGiver())
69 player->PrepareQuestMenu(creature->GetGUID());
70
71 InstanceScript* instance = creature->GetInstanceScript();
72 if (instance && instance->GetData(TYPE_BARREL_DIVERSION) != DONE && !player->HasItemCount(ITEM_ENTRY_BOMBS))
74
75 if (player->GetQuestStatus(QUEST_ENTRY_RETURN) == QUEST_STATUS_COMPLETE)
77
78 player->SEND_GOSSIP_MENU(9778, creature->GetGUID());
79
80 return true;
81 }
82};
83
84/*######
85## npc_thrall_old_hillsbrad
86######*/
87
88//Thrall texts
90{
102
108
109 //Taretha texts
112
113 //Misc for Thrall
116 SPELL_SUMMON_EROZION_IMAGE = 33954, //if thrall dies during escort?
117
124
125 //Misc Creature entries
128
129 NPC_RIFLE = 17820,
130 NPC_WARDEN = 17833,
131 NPC_VETERAN = 17860,
133 NPC_SENTRY = 17815,
134
138
142
146
150 ENTRY_EPOCH = 18096,
151
153 GOSSIP_ID_SKARLOC1 = 9614, //I'm glad Taretha is alive. We now must find a way to free her...
154 GOSSIP_ID_SKARLOC2 = 9579, //What do you mean by this? Is Taretha in danger?
156 GOSSIP_ID_TARREN = 9597, //tarren mill is beyond these trees
157 GOSSIP_ID_COMPLETE = 9578 //Thank you friends, I owe my freedom to you. Where is Taretha? I hoped to see her
158};
159
160#define SPEED_WALK (0.5f)
161#define SPEED_RUN (1.0f)
162#define SPEED_MOUNT (1.6f)
163
164//gossip items
165#define GOSSIP_ITEM_SKARLOC1 "Taretha cannot see you, Thrall."
166#define GOSSIP_ITEM_SKARLOC2 "The situation is rather complicated, Thrall. It would be best for you to head into the mountains now, before more of Blackmoore's men show up. We'll make sure Taretha is safe."
167#define GOSSIP_ITEM_TARREN "We're ready, Thrall."
168#define GOSSIP_ITEM_WALKING "[PH] Start walking."
169
171{
172public:
173 npc_thrall_old_hillsbrad() : CreatureScript("npc_thrall_old_hillsbrad") { }
174
176 {
177 return new npc_thrall_old_hillsbradAI(creature);
178 }
179
180 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
181 {
182 player->PlayerTalkClass->ClearMenus();
183 InstanceScript* instance = creature->GetInstanceScript();
184 switch (action)
185 {
187 player->CLOSE_GOSSIP_MENU();
188 if (instance)
189 {
192 }
193
194 creature->AI()->Talk(SAY_TH_START_EVENT_PART1);
195
197 pEscortAI->Start(true, true, player->GetGUID());
198
199 CAST_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
200 CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
201 CAST_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
202 break;
203
206 player->SEND_GOSSIP_MENU(GOSSIP_ID_SKARLOC2, creature->GetGUID());
207 break;
208
210 player->SEND_GOSSIP_MENU(GOSSIP_ID_SKARLOC3, creature->GetGUID());
211 creature->SummonCreature(SKARLOC_MOUNT, 2038.81f, 270.26f, 63.20f, 5.41f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 12000);
212 if (instance)
214
215 creature->AI()->Talk(SAY_TH_START_EVENT_PART2);
216
218 break;
219
221 player->CLOSE_GOSSIP_MENU();
222 if (instance)
225 break;
226 }
227 return true;
228 }
229
230 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
231 {
232 if (creature->IsQuestGiver())
233 {
234 player->PrepareQuestMenu(creature->GetGUID());
235 player->SendPreparedQuest(creature->GetGUID());
236 }
237
238 InstanceScript* instance = creature->GetInstanceScript();
239 if (instance)
240 {
241 if (instance->GetData(TYPE_BARREL_DIVERSION) == DONE && !instance->GetData(TYPE_THRALL_EVENT))
242 {
244 player->SEND_GOSSIP_MENU(GOSSIP_ID_START, creature->GetGUID());
245 }
246
247 if (instance->GetData(TYPE_THRALL_PART1) == DONE && !instance->GetData(TYPE_THRALL_PART2))
248 {
250 player->SEND_GOSSIP_MENU(GOSSIP_ID_SKARLOC1, creature->GetGUID());
251 }
252
253 if (instance->GetData(TYPE_THRALL_PART2) == DONE && !instance->GetData(TYPE_THRALL_PART3))
254 {
256 player->SEND_GOSSIP_MENU(GOSSIP_ID_TARREN, creature->GetGUID());
257 }
258 }
259 return true;
260 }
261
263 {
265 {
266 instance = creature->GetInstanceScript();
267 HadMount = false;
268 me->setActive(true);
269 }
270
272
274
275 bool LowHp;
277
279 {
280 if (!instance)
281 return;
282
283 switch (waypointId)
284 {
285 case 8:
286 SetRun(false);
287 me->SummonCreature(18764, 2181.87f, 112.46f, 89.45f, 0.26f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
288 break;
289 case 9:
292 //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO, THRALL_WEAPON_INFO);
293 //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+1, 781);
295 //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+2, THRALL_SHIELD_INFO);
296 //me->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+3, 1038);
297 break;
298 case 10:
299 me->SetDisplayId(THRALL_MODEL_EQUIPPED);
300 break;
301 case 11:
302 SetRun();
303 break;
304 case 15:
305 me->SummonCreature(NPC_RIFLE, 2200.28f, 137.37f, 87.93f, 5.07f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
306 me->SummonCreature(NPC_WARDEN, 2197.44f, 131.83f, 87.93f, 0.78f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
307 me->SummonCreature(NPC_VETERAN, 2203.62f, 135.40f, 87.93f, 3.70f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
308 me->SummonCreature(NPC_VETERAN, 2200.75f, 130.13f, 87.93f, 1.48f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
309 break;
310 case 21:
311 me->SummonCreature(NPC_RIFLE, 2135.80f, 154.01f, 67.45f, 4.98f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
312 me->SummonCreature(NPC_WARDEN, 2144.36f, 151.87f, 67.74f, 4.46f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
313 me->SummonCreature(NPC_VETERAN, 2142.12f, 154.41f, 67.12f, 4.56f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
314 me->SummonCreature(NPC_VETERAN, 2138.08f, 155.38f, 67.24f, 4.60f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
315 break;
316 case 25:
317 me->SummonCreature(NPC_RIFLE, 2102.98f, 192.17f, 65.24f, 6.02f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
318 me->SummonCreature(NPC_WARDEN, 2108.48f, 198.75f, 65.18f, 5.15f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
319 me->SummonCreature(NPC_VETERAN, 2106.11f, 197.29f, 65.18f, 5.63f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
320 me->SummonCreature(NPC_VETERAN, 2104.18f, 194.82f, 65.18f, 5.75f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
321 break;
322 case 29:
324 me->SummonCreature(ENTRY_SCARLOC, 2036.48f, 271.22f, 63.43f, 5.27f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000);
325 //temporary, skarloc should rather be triggered to walk up to thrall
326 break;
327 case 30:
328 SetEscortPaused(true);
330 SetRun(false);
331 break;
332 case 31:
334 DoMount();
335 SetRun();
336 break;
337 case 37:
338 //possibly regular patrollers? If so, remove this and let database handle them
339 me->SummonCreature(NPC_WATCHMAN, 2124.26f, 522.16f, 56.87f, 3.99f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
340 me->SummonCreature(NPC_WATCHMAN, 2121.69f, 525.37f, 57.11f, 4.01f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
341 me->SummonCreature(NPC_SENTRY, 2124.65f, 524.55f, 56.63f, 3.98f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
342 break;
343 case 59:
344 me->SummonCreature(SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 10000);
345 DoUnmount();
346 HadMount = false;
347 SetRun(false);
348 break;
349 case 60:
350 me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION);
351 //make horsie run off
352 SetEscortPaused(true);
355 SetRun();
356 break;
357 case 64:
358 SetRun(false);
359 break;
360 case 68:
361 me->SummonCreature(NPC_BARN_PROTECTOR, 2500.22f, 692.60f, 55.50f, 2.84f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
362 me->SummonCreature(NPC_BARN_LOOKOUT, 2500.13f, 696.55f, 55.51f, 3.38f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
363 me->SummonCreature(NPC_BARN_GUARDSMAN, 2500.55f, 693.64f, 55.50f, 3.14f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
364 me->SummonCreature(NPC_BARN_GUARDSMAN, 2500.94f, 695.81f, 55.50f, 3.14f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
365 break;
366 case 71:
367 SetRun();
368 break;
369 case 81:
370 SetRun(false);
371 break;
372 case 83:
373 me->SummonCreature(NPC_CHURCH_PROTECTOR, 2627.33f, 646.82f, 56.03f, 4.28f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
374 me->SummonCreature(NPC_CHURCH_LOOKOUT, 2624.14f, 648.03f, 56.03f, 4.50f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
375 me->SummonCreature(NPC_CHURCH_GUARDSMAN, 2625.32f, 649.60f, 56.03f, 4.38f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
376 me->SummonCreature(NPC_CHURCH_GUARDSMAN, 2627.22f, 649.00f, 56.03f, 4.34f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5000);
377 break;
378 case 84:
380 SetRun();
381 break;
382 case 91:
383 me->SetWalk(true);
384 SetRun(false);
385 break;
386 case 93:
387 me->SummonCreature(NPC_INN_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
388 me->SummonCreature(NPC_INN_LOOKOUT, 2648.96f, 662.59f, 61.93f, 0.79f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
389 me->SummonCreature(NPC_INN_GUARDSMAN, 2657.36f, 662.34f, 61.93f, 2.68f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
390 me->SummonCreature(NPC_INN_GUARDSMAN, 2656.39f, 659.77f, 61.93f, 2.61f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000);
391 break;
392 case 94:
393 if (uint64 TarethaGUID = instance->GetData64(DATA_TARETHA))
394 {
396 Taretha->AI()->Talk(SAY_TA_ESCAPED, me);
397 }
398 break;
399 case 95:
402 SetEscortPaused(true);
403 break;
404 case 96:
406 break;
407 case 97:
409 SetRun();
410 break;
411 case 98:
412 //trigger epoch Yell("Thrall! Come outside and face your fate! ....")
413 //from here, thrall should not never be allowed to move to point 106 which he currently does.
414 break;
415 case 106:
416 {
417 //trigger taretha to run down outside
418 if (Creature* Taretha = instance->instance->GetCreature(instance->GetData64(DATA_TARETHA)))
419 {
420 if (Player* player = GetPlayerForEscort())
421 CAST_AI(npc_escortAI, (Taretha->AI()))->Start(false, true, player->GetGUID());
422 }
423
424 //kill credit Creature for quest
425 Map* map = me->GetMap();
426 Map::PlayerList const& players = map->GetPlayers();
427 if (!players.isEmpty() && map->IsDungeon())
428 {
429 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
430 {
431 if (Player* player = itr->GetSource())
432 player->KilledMonsterCredit(20156, 0);
433 }
434 }
435
436 //alot will happen here, thrall and taretha talk, erozion appear at spot to explain
437 me->SummonCreature(EROZION_ENTRY, 2646.47f, 680.416f, 55.38f, 4.16f, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 120000);
438 }
439 break;
440 case 108:
441 //last waypoint, just set Thrall invisible, respawn is turned off
442 me->SetVisible(false);
443 break;
444 }
445 }
446
448 {
449 LowHp = false;
450
451 if (HadMount)
452 DoMount();
453
455 {
456 DoUnmount();
457 HadMount = false;
458 me->SetUInt32Value(UNIT_FIELD_VIRTUAL_ITEM_ID, 0);
459 me->SetUInt32Value(UNIT_FIELD_VIRTUAL_ITEM_ID+1, 0);
460 me->SetDisplayId(THRALL_MODEL_UNEQUIPPED);
461 }
463 {
465 }
466 }
467 void StartWP()
468 {
470 SetEscortPaused(false);
471 }
472 void DoMount()
473 {
474 me->Mount(SKARLOC_MOUNT_MODEL);
475 me->SetSpeed(MOVE_RUN, SPEED_MOUNT);
476 }
478 {
479 me->Dismount();
480 me->SetSpeed(MOVE_RUN, SPEED_RUN);
481 }
482 void EnterCombat(Unit* /*who*/) OVERRIDE
483 {
485 if (me->IsMounted())
486 {
487 DoUnmount();
488 HadMount = true;
489 }
490 }
491
493 {
494 switch (summoned->GetEntry())
495 {
499 case NPC_BARN_LOOKOUT:
500 case SKARLOC_MOUNT:
501 case EROZION_ENTRY:
502 break;
503 default:
504 summoned->AI()->AttackStart(me);
505 break;
506 }
507 }
508
509 void KilledUnit(Unit* /*victim*/) OVERRIDE
510 {
512 }
513 void JustDied(Unit* slayer) OVERRIDE
514 {
515 if (instance)
517
518 // Don't do a yell if he kills self (if player goes too far or at the end).
519 if (slayer == me)
520 return;
521
523 }
524
526 {
528
529 if (!UpdateVictim())
530 return;
531
533 if (!LowHp && HealthBelowPct(20))
534 {
536 LowHp = true;
537 }
538 }
539 };
540};
541
542/*######
543## npc_taretha
544######*/
546{
547 GOSSIP_ID_EPOCH1 = 9610, //Thank you for helping Thrall escape, friends. Now I only hope
548 GOSSIP_ID_EPOCH2 = 9613 //Yes, friends. This man was no wizard of
549};
550
551#define GOSSIP_ITEM_EPOCH1 "Strange wizard?"
552#define GOSSIP_ITEM_EPOCH2 "We'll get you out. Taretha. Don't worry. I doubt the wizard would wander too far away."
553
555{
556public:
557 npc_taretha() : CreatureScript("npc_taretha") { }
558
560 {
561 return new npc_tarethaAI(creature);
562 }
563
564 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
565 {
566 player->PlayerTalkClass->ClearMenus();
567 InstanceScript* instance = creature->GetInstanceScript();
568 if (action == GOSSIP_ACTION_INFO_DEF+1)
569 {
571 player->SEND_GOSSIP_MENU(GOSSIP_ID_EPOCH2, creature->GetGUID());
572 }
573 if (action == GOSSIP_ACTION_INFO_DEF+2)
574 {
575 player->CLOSE_GOSSIP_MENU();
576
577 if (instance && instance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
578 {
580 if (instance->GetData64(DATA_EPOCH) == 0)
581 creature->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
582
583 if (uint64 ThrallGUID = instance->GetData64(DATA_THRALL))
584 {
585 Creature* Thrall = (Unit::GetCreature((*creature), ThrallGUID));
586 if (Thrall)
588 }
589 }
590 }
591 return true;
592 }
593
594 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
595 {
596 InstanceScript* instance = creature->GetInstanceScript();
597 if (instance && instance->GetData(TYPE_THRALL_PART3) == DONE && instance->GetData(TYPE_THRALL_PART4) == NOT_STARTED)
598 {
600 player->SEND_GOSSIP_MENU(GOSSIP_ID_EPOCH1, creature->GetGUID());
601 }
602 return true;
603 }
604
606 {
607 npc_tarethaAI(Creature* creature) : npc_escortAI(creature)
608 {
609 instance = creature->GetInstanceScript();
610 }
611
613
615 {
616 switch (waypointId)
617 {
618 case 6:
620 break;
621 case 7:
622 me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
623 break;
624 }
625 }
626
627 void Reset() OVERRIDE { }
628 void EnterCombat(Unit* /*who*/) OVERRIDE { }
629
631 {
633 }
634 };
635};
636
637/*######
638## AddSC
639######*/
640
642{
643 new npc_erozion();
645 new npc_taretha();
646}
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
@ FAIL
@ DONE
@ NOT_STARTED
@ EQUIP_ERR_OK
Definition Item.h:28
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition Object.h:71
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:70
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:68
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:777
@ QUEST_STATUS_COMPLETE
Definition QuestDef.h:87
#define CAST_AI(a, b)
@ STATE_ESCORT_ESCORTING
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
@ EMOTE_ONESHOT_EXCLAMATION
@ EMOTE_ONESHOT_CHEER
@ UNIT_NPC_FLAG_GOSSIP
Definition Unit.h:687
@ NULL_BAG
Definition Unit.h:336
@ NULL_SLOT
Definition Unit.h:337
@ MOVE_RUN
Definition Unit.h:556
@ UNIT_FIELD_VIRTUAL_ITEM_ID
@ UNIT_FIELD_NPC_FLAGS
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureAI * AI() const
Definition Creature.h:483
CreatureScript(const char *name)
bool isEmpty() const
Definition LinkedList.h:86
Definition Map.h:238
bool IsDungeon() const
Definition Map.h:369
MapRefManager PlayerList
Definition Map.h:406
PlayerList const & GetPlayers() const
Definition Map.h:407
iterator end()
iterator begin()
LinkedListHead::Iterator< MapReference const > const_iterator
Definition Unit.h:1367
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:36
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:37
virtual uint64 GetData64(uint32) const
Definition ZoneScript.h:32
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
@ DATA_THRALL
Definition hyjal.h:26
#define QUEST_ENTRY_DIVERSION
#define GOSSIP_HELLO_EROZION2
#define GOSSIP_ITEM_EPOCH1
#define GOSSIP_HELLO_EROZION1
void AddSC_old_hillsbrad()
#define GOSSIP_ITEM_SKARLOC1
#define GOSSIP_ITEM_WALKING
#define GOSSIP_ITEM_EPOCH2
@ GOSSIP_ID_EPOCH1
@ GOSSIP_ID_EPOCH2
#define GOSSIP_ITEM_TARREN
#define GOSSIP_ITEM_SKARLOC2
ThrallOldHillsbrad
@ SAY_TH_RANDOM_DIE
@ NPC_WARDEN
@ SAY_TH_SKARLOC_MEET
@ THRALL_MODEL_UNEQUIPPED
@ NPC_WATCHMAN
@ NPC_BARN_PROTECTOR
@ SAY_TH_EPOCH_WONDER
@ NPC_BARN_GUARDSMAN
@ GOSSIP_ID_COMPLETE
@ ENTRY_ARMORER
@ NPC_INN_GUARDSMAN
@ NPC_CHURCH_LOOKOUT
@ SAY_TH_SKARLOC_TAUNT
@ SAY_TH_RANDOM_LOW_HP
@ ENTRY_EPOCH
@ SAY_TA_ESCAPED
@ SAY_TH_MOUNTS_UP
@ NPC_RIFLE
@ SAY_TH_RANDOM_AGGRO
@ SAY_TH_RANDOM_KILL
@ EROZION_ENTRY
@ SAY_TH_LEAVE_COMBAT
@ GOSSIP_ID_TARREN
@ SAY_TH_EVENT_COMPLETE
@ GOSSIP_ID_SKARLOC1
@ SAY_TH_EPOCH_KILL_TARETHA
@ NPC_INN_PROTECTOR
@ SKARLOC_MOUNT
@ SAY_TH_START_EVENT_PART2
@ NPC_CHURCH_GUARDSMAN
@ SPELL_SUMMON_EROZION_IMAGE
@ GOSSIP_ID_START
@ GOSSIP_ID_SKARLOC3
@ NPC_VETERAN
@ THRALL_MODEL_EQUIPPED
@ NPC_CHURCH_PROTECTOR
@ ENTRY_SCARLOC
@ THRALL_WEAPON_ITEM
@ NPC_SENTRY
@ SAY_TH_CHURCH_END
@ SKARLOC_MOUNT_MODEL
@ NPC_INN_LOOKOUT
@ THRALL_SHIELD_INFO
@ SPELL_SHIELD_BLOCK
@ THRALL_SHIELD_ITEM
@ SAY_TH_START_EVENT_PART1
@ THRALL_WEAPON_INFO
@ SAY_TH_MEET_TARETHA
@ SAY_TH_ARMORY
@ GOSSIP_ID_SKARLOC2
@ NPC_BARN_LOOKOUT
@ SAY_TA_FREE
#define SPEED_MOUNT
#define SPEED_RUN
Erozion
@ QUEST_ENTRY_HILLSBRAD
@ ITEM_ENTRY_BOMBS
@ QUEST_ENTRY_ESCAPE
@ QUEST_ENTRY_RETURN
@ TYPE_THRALL_PART1
@ TYPE_THRALL_PART4
@ TYPE_THRALL_EVENT
@ DATA_TARETHA
@ TYPE_THRALL_PART3
@ TYPE_THRALL_PART2
@ TYPE_BARREL_DIVERSION
Creature * me
bool HealthBelowPct(uint32 pct) const
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Player * GetPlayerForEscort()
void SetRun(bool on=true)
bool HasEscortState(uint32 escortState) const
npc_escortAI(Creature *creature)
void SetEscortPaused(bool on)
void WaypointReached(uint32 waypointId) OVERRIDE
void EnterCombat(Unit *) OVERRIDE
npc_tarethaAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================