TrinityCore
Loading...
Searching...
No Matches
old_hillsbrad.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/* ScriptData
19SDName: Old_Hillsbrad
20SD%Complete: 40
21SDComment: Quest support: 10283, 10284. All friendly NPC's. Thrall waypoints fairly complete, missing many details, but possible to complete escort.
22SDCategory: Caverns of Time, Old Hillsbrad Foothills
23EndScriptData */
24
25/* ContentData
26npc_erozion
27npc_thrall_old_hillsbrad
28npc_taretha
29EndContentData */
30
31#include "ScriptMgr.h"
32#include "InstanceScript.h"
33#include "ObjectAccessor.h"
34#include "old_hillsbrad.h"
35#include "Map.h"
36#include "Player.h"
37#include "ScriptedEscortAI.h"
38#include "ScriptedGossip.h"
39
41{
48 GOSSIP_OPTION_BOMB = 0 //I need a pack of Incendiary Bombs.
49};
50#define GOSSIP_HELLO_EROZION2 "[PH] Teleport please, i'm tired." //not in DB,maybe incorrect?
51
52Position const ThrallRespawnPositionAfterSkarloc(2062.934f, 229.14508f, 64.57113f, 2.338741064071655273);
53Position const ThrallRespawnPositionAfterHorseRide(2486.5637f, 624.09796f, 57.95088f, 4.136430263519287109);
54Position const ThrallRespawnPositionAfterMeetingTaretha(2660.0847f, 659.54816f, 62.020317f, 5.864306449890136718);
55
56/*######
57## npc_erozion
58######*/
59
60struct npc_erozion : public ScriptedAI
61{
62 npc_erozion(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
63
65
66 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
67 {
68 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
69 ClearGossipMenuFor(player);
70 if (action == GOSSIP_ACTION_INFO_DEF + 1)
71 {
72 ItemPosCountVec dest;
74 if (msg == EQUIP_ERR_OK)
75 {
76 player->StoreNewItem(dest, ITEM_ENTRY_BOMBS, true);
77 }
78 SendGossipMenuFor(player, 9515, me->GetGUID());
79 }
80 if (action == GOSSIP_ACTION_INFO_DEF + 2)
81 CloseGossipMenuFor(player);
82 return true;
83 }
84
101};
102
103/*######
104## npc_thrall_old_hillsbrad
105######*/
106
107//Thrall texts
109{
121
127
128 //Taretha texts
131
132 //Misc for Thrall
135 SPELL_SUMMON_EROZION_IMAGE = 33954, //if thrall dies during escort?
136
143
144 //Misc Creature entries
147
148 NPC_RIFLE = 17820,
149 NPC_WARDEN = 17833,
150 NPC_VETERAN = 17860,
152 NPC_SENTRY = 17815,
153
157
161
165
169 ENTRY_EPOCH = 18096,
170
172 GOSSIP_ID_SKARLOC1 = 9614, //I'm glad Taretha is alive. We now must find a way to free her...
173 GOSSIP_ID_SKARLOC2 = 9579, //What do you mean by this? Is Taretha in danger?
175 GOSSIP_ID_TARREN = 9597, //tarren mill is beyond these trees
176 GOSSIP_ID_COMPLETE = 9578, //Thank you friends, I owe my freedom to you. Where is Taretha? I hoped to see her
178 GOSSIP_ITEM_DEFAULT_OP = 0, //We are ready to get you out of here, Thrall. Let's go!
179 GOSSIP_ITEM_TARREN_MID = 7840, //We're ready, Thrall.
180 GOSSIP_ITEM_SKARLOC1_MID = 7830, //Taretha cannot see you, Thrall.
181 GOSSIP_ITEM_SKARLOC2_MID = 7829 //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.
183
184#define SPEED_WALK (0.5f)
185#define SPEED_RUN (1.0f)
186#define SPEED_MOUNT (1.6f)
187
188static constexpr uint32 PATH_ESCORT_THRALL_OLD_HILLSBRAD = 143010;
189static constexpr uint32 PATH_ESCORT_TARETHA = 151098;
190
192{
194 {
195 Initialize();
196 instance = creature->GetInstanceScript();
197 HadMount = false;
198 me->setActive(true);
199 me->SetFarVisible(true);
200 }
201
203 {
204 LowHp = false;
205 }
206
207 void InitializeAI() override
208 {
209 /* correct respawn positions after wipe cannot be used because of how waypoints are set up for this creature
210 * it would require splitting the path into 4 segments, moving it out of waypoint_data table and changing
211 * all waypoint ids in WaypointReached function
212 switch (instance->GetData(TYPE_THRALL_EVENT))
213 {
214 case OH_ESCORT_HORSE_RIDE:
215 me->Relocate(ThrallRespawnPositionAfterSkarloc);
216 break;
217 case OH_ESCORT_BARN_TO_TARETHA:
218 me->Relocate(ThrallRespawnPositionAfterHorseRide);
219 break;
220 case OH_ESCORT_EPOCH_HUNTER:
221 me->Relocate(ThrallRespawnPositionAfterMeetingTaretha);
222 break;
223 default:
224 break;
225 }
226
227 if (instance->GetData(TYPE_THRALL_EVENT) != OH_ESCORT_PRISON_TO_SKARLOC)
228 {
229 me->SetVirtualItem(0, THRALL_WEAPON_ITEM);
230 me->SetVirtualItem(1, THRALL_SHIELD_ITEM);
231 me->SetDisplayId(THRALL_MODEL_EQUIPPED);
232 }
233 */
234
237 }
238
240
241 bool LowHp;
243
244 void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
245 {
246 switch (waypointId)
247 {
248 case 8:
249 me->SummonCreature(18764, 2181.87f, 112.46f, 89.45f, 0.26f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
250 break;
251 case 9:
255 break;
256 case 10:
258 break;
259 case 11:
260 break;
261 case 15:
262 me->SummonCreature(NPC_RIFLE, 2200.28f, 137.37f, 87.93f, 5.07f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
263 me->SummonCreature(NPC_WARDEN, 2197.44f, 131.83f, 87.93f, 0.78f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
264 me->SummonCreature(NPC_VETERAN, 2203.62f, 135.40f, 87.93f, 3.70f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
265 me->SummonCreature(NPC_VETERAN, 2200.75f, 130.13f, 87.93f, 1.48f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
266 break;
267 case 21:
268 me->SummonCreature(NPC_RIFLE, 2135.80f, 154.01f, 67.45f, 4.98f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
269 me->SummonCreature(NPC_WARDEN, 2144.36f, 151.87f, 67.74f, 4.46f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
270 me->SummonCreature(NPC_VETERAN, 2142.12f, 154.41f, 67.12f, 4.56f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
271 me->SummonCreature(NPC_VETERAN, 2138.08f, 155.38f, 67.24f, 4.60f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
272 break;
273 case 25:
274 me->SummonCreature(NPC_RIFLE, 2102.98f, 192.17f, 65.24f, 6.02f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
275 me->SummonCreature(NPC_WARDEN, 2108.48f, 198.75f, 65.18f, 5.15f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
276 me->SummonCreature(NPC_VETERAN, 2106.11f, 197.29f, 65.18f, 5.63f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
277 me->SummonCreature(NPC_VETERAN, 2104.18f, 194.82f, 65.18f, 5.75f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
278 break;
279 case 29:
282 me->SummonCreature(ENTRY_SCARLOC, 2036.48f, 271.22f, 63.43f, 5.27f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30s);
283 else
284 {
285 me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); // wipe recovery, prevent repeatedly farming the boss
287 }
288 SetEscortPaused(true);
289 //temporary, skarloc should rather be triggered to walk up to thrall
290 break;
291 case 30:
292 break;
293 case 31:
295 HadMount = true;
296 DoMount();
297 break;
298 case 37:
299 //possibly regular patrollers? If so, remove this and let database handle them
300 me->SummonCreature(NPC_WATCHMAN, 2124.26f, 522.16f, 56.87f, 3.99f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
301 me->SummonCreature(NPC_WATCHMAN, 2121.69f, 525.37f, 57.11f, 4.01f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
302 me->SummonCreature(NPC_SENTRY, 2124.65f, 524.55f, 56.63f, 3.98f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
303 break;
304 case 59:
305 me->SummonCreature(SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 10s);
306 DoUnmount();
307 HadMount = false;
308 break;
309 case 60:
311 //make horsie run off
312 SetEscortPaused(true);
314 break;
315 case 64:
316 break;
317 case 68:
318 me->SummonCreature(NPC_BARN_PROTECTOR, 2500.22f, 692.60f, 55.50f, 2.84f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
319 me->SummonCreature(NPC_BARN_LOOKOUT, 2500.13f, 696.55f, 55.51f, 3.38f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
320 me->SummonCreature(NPC_BARN_GUARDSMAN, 2500.55f, 693.64f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
321 me->SummonCreature(NPC_BARN_GUARDSMAN, 2500.94f, 695.81f, 55.50f, 3.14f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
322 break;
323 case 71:
324 break;
325 case 81:
326 break;
327 case 83:
328 me->SummonCreature(NPC_CHURCH_PROTECTOR, 2627.33f, 646.82f, 56.03f, 4.28f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5s);
329 me->SummonCreature(NPC_CHURCH_LOOKOUT, 2624.14f, 648.03f, 56.03f, 4.50f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5s);
330 me->SummonCreature(NPC_CHURCH_GUARDSMAN, 2625.32f, 649.60f, 56.03f, 4.38f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5s);
331 me->SummonCreature(NPC_CHURCH_GUARDSMAN, 2627.22f, 649.00f, 56.03f, 4.34f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 5s);
332 break;
333 case 84:
335 break;
336 case 93:
337 me->SummonCreature(NPC_INN_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
338 me->SummonCreature(NPC_INN_LOOKOUT, 2648.96f, 662.59f, 61.93f, 0.79f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
339 me->SummonCreature(NPC_INN_GUARDSMAN, 2657.36f, 662.34f, 61.93f, 2.68f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
340 me->SummonCreature(NPC_INN_GUARDSMAN, 2656.39f, 659.77f, 61.93f, 2.61f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5s);
341 break;
342 case 94:
345 break;
346 case 95:
349 SetEscortPaused(true);
350 break;
351 case 96:
353 break;
354 case 97:
356 break;
357 case 98:
358 //trigger epoch Yell("Thrall! Come outside and face your fate! ....")
359 //from here, thrall should not never be allowed to move to point 106 which he currently does.
360 break;
361 case 106:
362 {
363 //trigger taretha to run down outside
365 {
366 if (Player* player = GetPlayerForEscort())
367 {
368 if (EscortAI* ai = CAST_AI(EscortAI, Taretha->AI()))
369 {
370 ai->LoadPath(PATH_ESCORT_TARETHA);
371 ai->Start(false, player->GetGUID());
372 }
373 }
374 }
375
376 //kill credit Creature for quest
377 Map::PlayerList const& players = me->GetMap()->GetPlayers();
378 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
379 {
380 if (Player* player = itr->GetSource())
381 player->KilledMonsterCredit(20156);
382 }
383
384 //alot will happen here, thrall and taretha talk, erozion appear at spot to explain
385 me->SummonCreature(EROZION_ENTRY, 2646.47f, 680.416f, 55.38f, 4.16f, TEMPSUMMON_TIMED_DESPAWN, 2min);
386 }
387 break;
388 case 108:
389 //last waypoint, just set Thrall invisible, respawn is turned off
390 me->SetVisible(false);
391 break;
392 }
393 }
394
395 void Reset() override
396 {
397 Initialize();
398
399 if (HadMount)
400 DoMount();
401
403 {
404 DoUnmount();
405 HadMount = false;
406 me->SetVirtualItem(0, 0);
407 me->SetVirtualItem(1, 0);
409 }
411 {
413 }
414 }
415 void StartWP()
416 {
418 SetEscortPaused(false);
419 }
426 {
427 me->Dismount();
429 }
430 void JustEngagedWith(Unit* /*who*/) override
431 {
433 if (me->IsMounted())
434 DoUnmount();
435 }
436
437 void EnterEvadeMode(EvadeReason why) override
438 {
440 Reset();
441 }
442
443 void JustSummoned(Creature* summoned) override
444 {
445 switch (summoned->GetEntry())
446 {
450 case NPC_BARN_LOOKOUT:
451 case SKARLOC_MOUNT:
452 case EROZION_ENTRY:
453 break;
454 default:
455 summoned->AI()->AttackStart(me);
456 break;
457 }
458 }
459
460 void KilledUnit(Unit* /*victim*/) override
461 {
463 }
464 void JustDied(Unit* killer) override
465 {
467
468 // Don't do a yell if he kills self (if player goes too far or at the end).
469 if (killer == me)
470 return;
471
473 }
474
475 void UpdateAI(uint32 diff) override
476 {
477 EscortAI::UpdateAI(diff);
478
479 if (!UpdateVictim())
480 return;
481
483 if (!LowHp && HealthBelowPct(20))
484 {
486 LowHp = true;
487 }
488 }
489
490 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
491 {
492 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
493 ClearGossipMenuFor(player);
494 switch (action)
495 {
496 case GOSSIP_ACTION_INFO_DEF + 1:
497 CloseGossipMenuFor(player);
498
500
502 Start(true, player->GetGUID());
503
504 SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
505 SetDespawnAtEnd(false);
506 SetDespawnAtFar(false);
507 break;
508
509 case GOSSIP_ACTION_INFO_DEF + 2:
513 break;
514
515 case GOSSIP_ACTION_INFO_DEF + 20:
517 me->SummonCreature(SKARLOC_MOUNT, 2038.81f, 270.26f, 63.20f, 5.41f, TEMPSUMMON_TIMED_DESPAWN, 12s);
518
520
521 StartWP();
522 break;
523
524 case GOSSIP_ACTION_INFO_DEF + 3:
525 CloseGossipMenuFor(player);
526 StartWP();
527 break;
528 }
529 return true;
530 }
531
562};
563
564/*######
565## npc_taretha
566######*/
568{
569 GOSSIP_ID_EPOCH1 = 9610, //Thank you for helping Thrall escape, friends. Now I only hope
570 GOSSIP_ID_EPOCH2 = 9613, //Yes, friends. This man was no wizard of
572 GOSSIP_ITEM_EPOCH1_OID = 0, //Strange wizard?
574 GOSSIP_ITEM_EPOCH2_OID = 0 //We'll get you out, Taretha. Don't worry. I doubt the wizard would wander too far away.
576
577struct npc_taretha : public EscortAI
578{
579 npc_taretha(Creature* creature) : EscortAI(creature)
580 {
581 instance = creature->GetInstanceScript();
582 }
583
585
586 void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
587 {
588 switch (waypointId)
589 {
590 case 6:
592 break;
593 case 7:
595 break;
596 }
597 }
598
599 void Reset() override { }
600 void JustEngagedWith(Unit* /*who*/) override { }
601
602 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
603 {
604 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
605 ClearGossipMenuFor(player);
606
607 if (action == GOSSIP_ACTION_INFO_DEF + 1)
608 {
612 }
613 if (action == GOSSIP_ACTION_INFO_DEF + 2)
614 {
615 CloseGossipMenuFor(player);
616
618 me->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 2min);
619
621 ENSURE_AI(npc_thrall_old_hillsbrad, thrall->AI())->StartWP();
622
624 }
625 return true;
626 }
627
638};
639
640/*######
641## AddSC
642######*/
643
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:60
@ DONE
@ EQUIP_ERR_OK
Definition ItemDefines.h:26
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:624
@ QUEST_STATUS_COMPLETE
Definition QuestDef.h:105
@ STATE_ESCORT_ESCORTING
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
@ EMOTE_ONESHOT_EXCLAMATION
@ EMOTE_ONESHOT_CHEER
#define CAST_AI(a, b)
Definition UnitAI.h:27
#define ENSURE_AI(a, b)
Definition UnitAI.h:28
@ UNIT_NPC_FLAG_GOSSIP
@ MOVE_RUN
@ NULL_BAG
Definition Unit.h:61
@ NULL_SLOT
Definition Unit.h:62
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
void SetDisplayId(uint32 modelId) override
void SetRespawnCompatibilityMode(bool mode=true)
Definition Creature.h:330
CreatureAI * AI() const
Definition Creature.h:154
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
iterator end()
iterator begin()
PlayerList const & GetPlayers() const
Definition Map.h:448
bool IsEmpty() const
Definition ObjectGuid.h:172
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
uint32 GetGossipOptionAction(uint32 selection) const
Definition GossipDef.h:269
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 item, bool update, int32 randomPropertyId=0, GuidSet const &allowedLooters=GuidSet())
Definition Player.cpp:11621
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition Player.cpp:9763
void SendPreparedQuest(ObjectGuid guid)
Definition Player.cpp:14330
void PrepareQuestMenu(ObjectGuid guid)
Definition Player.cpp:14270
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition Player.cpp:15642
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
Definition Player.cpp:9989
PlayerMenu * PlayerTalkClass
Definition Player.h:1969
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:30
Definition Unit.h:769
void SetVisible(bool x)
Definition Unit.cpp:8513
void Dismount()
Definition Unit.cpp:8234
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:1098
bool IsQuestGiver() const
Definition Unit.h:1103
void SetVirtualItem(uint32 slot, uint32 itemId)
Definition Unit.cpp:13868
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:8184
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:1097
bool IsMounted() const
Definition Unit.h:1013
void SetSpeedRate(UnitMoveType mtype, float rate)
Definition Unit.cpp:8678
void HandleEmoteCommand(Emote emoteId)
Definition Unit.cpp:1568
Map * GetMap() const
Definition Object.h:449
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
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:1992
void setActive(bool isActiveObject)
Definition Object.cpp:991
void SetFarVisible(bool on)
Definition Object.cpp:1014
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:55
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:56
@ DATA_THRALL
Definition hyjal.h:37
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
#define GOSSIP_HELLO_EROZION2
static constexpr uint32 PATH_ESCORT_THRALL_OLD_HILLSBRAD
Position const ThrallRespawnPositionAfterHorseRide(2486.5637f, 624.09796f, 57.95088f, 4.136430263519287109)
static constexpr uint32 PATH_ESCORT_TARETHA
void AddSC_old_hillsbrad()
Position const ThrallRespawnPositionAfterMeetingTaretha(2660.0847f, 659.54816f, 62.020317f, 5.864306449890136718)
@ GOSSIP_ITEM_EPOCH2_OID
@ GOSSIP_ITEM_EPOCH2_MID
@ GOSSIP_ITEM_EPOCH1_MID
@ GOSSIP_ID_EPOCH1
@ GOSSIP_ITEM_EPOCH1_OID
@ GOSSIP_ID_EPOCH2
Position const ThrallRespawnPositionAfterSkarloc(2062.934f, 229.14508f, 64.57113f, 2.338741064071655273)
ThrallOldHillsbrad
@ GOSSIP_ITEM_SKARLOC2_MID
@ GOSSIP_ITEM_SKARLOC1_MID
@ SAY_TH_RANDOM_DIE
@ NPC_WARDEN
@ SPELL_STRIKE
@ 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
@ GOSSIP_ITEM_TARREN_MID
@ SAY_TH_RANDOM_AGGRO
@ SAY_TH_RANDOM_KILL
@ EROZION_ENTRY
@ SAY_TH_LEAVE_COMBAT
@ GOSSIP_ID_TARREN
@ SAY_TH_EVENT_COMPLETE
@ GOSSIP_ID_SKARLOC1
@ GOSSIP_ITEM_WALKING_MID
@ 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
@ GOSSIP_ITEM_DEFAULT_OP
@ 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
@ GOSSIP_MENU_EROZION
@ QUEST_ENTRY_DIVERSION
@ QUEST_ENTRY_ESCAPE
@ QUEST_ENTRY_RETURN
@ GOSSIP_OPTION_BOMB
@ OH_ESCORT_PRISON_TO_SKARLOC
@ OH_ESCORT_BARN_TO_TARETHA
@ OH_ESCORT_HORSE_RIDE
@ OH_ESCORT_DEATH_EVENT
@ OH_ESCORT_EPOCH_HUNTER
#define RegisterOldHillsbradCreatureAI(ai_name)
@ DATA_CAPTAIN_SKARLOC
@ DATA_EPOCH_HUNTER
@ TYPE_THRALL_EVENT
@ DATA_TARETHA
@ DATA_LIEUTENANT_DRAKE
@ TYPE_BARREL_DIVERSION
void InitializeAI() override
void SetMaxPlayerDistance(float newMax)
void Start(bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false)
bool HasEscortState(uint32 escortState)
void EnterEvadeMode(EvadeReason=EVADE_REASON_OTHER) override
void SetDespawnAtFar(bool despawn)
void SetDespawnAtEnd(bool despawn)
void LoadPath(uint32 pathId)
Player * GetPlayerForEscort()
void SetEscortPaused(bool on)
void UpdateAI(uint32 diff) override
bool HealthBelowPct(uint32 pct) const
InstanceScript * instance
bool OnGossipHello(Player *player) override
npc_erozion(Creature *creature)
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
npc_taretha(Creature *creature)
void JustEngagedWith(Unit *) override
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
void Reset() override
bool OnGossipHello(Player *player) override
InstanceScript * instance
void WaypointReached(uint32 waypointId, uint32) override
void JustDied(Unit *killer) override
npc_thrall_old_hillsbrad(Creature *creature)
void WaypointReached(uint32 waypointId, uint32) override
void JustSummoned(Creature *summoned) override
void EnterEvadeMode(EvadeReason why) override
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *) override
bool OnGossipHello(Player *player) override
void KilledUnit(Unit *) override
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override