TrinityCore
zone_elwynn_forest.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 "AreaTrigger.h"
19#include "AreaTriggerAI.h"
20#include "Containers.h"
21#include "Conversation.h"
22#include "CreatureAIImpl.h"
23#include "CreatureGroups.h"
24#include "MotionMaster.h"
25#include "ObjectAccessor.h"
26#include "PhasingHandler.h"
27#include "Player.h"
28#include "ScriptMgr.h"
29#include "ScriptedCreature.h"
30#include "ScriptedGossip.h"
31#include "SpellScript.h"
32#include "TemporarySummon.h"
33#include "WorldSession.h"
34
36{
39 WOODS_PATH = 644016,
40 HOUSE_PATH = 644024,
41 LISA_PATH = 645600
42};
43
45{
51};
52
54{
60 GHOSTDEATH = 3416
61};
62
64{
65 NPC_DANA = 804,
67 NPC_JOHN = 806,
68 NPC_LISA = 807,
69 NPC_AARON = 810,
70 NPC_JOSE = 811
71};
72
74{
81};
82
84{
86};
87
88struct npc_cameron : public ScriptedAI
89{
90 npc_cameron(Creature* creature) : ScriptedAI(creature)
91 {
92 _started = false;
93 }
94
96 {
97 return RAND(
104 );
105 }
106
108 {
109 std::vector<Position> MovePosPositions =
110 {
111 { -9373.521f, -67.71767f, 69.201965f, 1.117011f },
112 { -9374.94f, -62.51654f, 69.201965f, 5.201081f },
113 { -9371.013f, -71.20811f, 69.201965f, 1.937315f },
114 { -9368.419f, -66.47543f, 69.201965f, 3.141593f },
115 { -9372.376f, -65.49946f, 69.201965f, 4.206244f },
116 { -9377.477f, -67.8297f, 69.201965f, 0.296706f }
117 };
118
119 Trinity::Containers::RandomShuffle(MovePosPositions);
120
121 // first we break formation because children will need to move on their own now
122 for (ObjectGuid guid : _childrenGUIDs)
123 if (Creature* child = ObjectAccessor::GetCreature(*me, guid))
124 if (child->GetFormation())
125 child->GetFormation()->RemoveMember(child);
126
127 // Move each child to an random position
128 for (uint32 i = 0; i < _childrenGUIDs.size(); ++i)
129 {
131 {
132 children->SetWalk(true);
133 children->GetMotionMaster()->MovePoint(0, MovePosPositions[i], true, MovePosPositions[i].GetOrientation());
134 }
135 }
136 me->SetWalk(true);
137 me->GetMotionMaster()->MovePoint(0, MovePosPositions.back(), true, MovePosPositions.back().GetOrientation());
138 }
139
140 void WaypointReached(uint32 waypointId, uint32 pathId) override
141 {
142 switch (pathId)
143 {
144 case STORMWIND_PATH:
145 {
146 if (waypointId == STORMWIND_WAYPOINT)
147 {
148 me->GetMotionMaster()->MoveRandom(10.f);
150 }
151
152 break;
153 }
154 case GOLDSHIRE_PATH:
155 {
156 if (waypointId == GOLDSHIRE_WAYPOINT)
157 {
158 me->GetMotionMaster()->MoveRandom(10.f);
160 }
161 break;
162 }
163 case WOODS_PATH:
164 {
165 if (waypointId == WOODS_WAYPOINT)
166 {
167 me->GetMotionMaster()->MoveRandom(10.f);
170 }
171
172 break;
173 }
174 case HOUSE_PATH:
175 {
176 if (waypointId == HOUSE_WAYPOINT)
177 {
178 // Move childeren at last point
180
181 // After 30 seconds a random sound should play
183 }
184 break;
185 }
186 }
187 }
188
189 void OnGameEvent(bool start, uint16 eventId) override
190 {
191 if (start && eventId == GAME_EVENT_CHILDREN_OF_GOLDSHIRE)
192 {
193 // Start event at 7 am
194 // Begin pathing
196 _started = true;
197 }
198 else if (!start && eventId == GAME_EVENT_CHILDREN_OF_GOLDSHIRE)
199 {
200 // Reset event at 8 am
201 _started = false;
202 _events.Reset();
203 }
204 }
205
206 void UpdateAI(uint32 diff) override
207 {
208 if (!_started)
209 return;
210
211 _events.Update(diff);
212
213 while (uint32 eventId = _events.ExecuteEvent())
214 {
215 switch (eventId)
216 {
219 break;
222 break;
225 break;
227 for (ObjectGuid guid : _childrenGUIDs)
228 {
229 if (Creature* child = ObjectAccessor::GetCreature(*me, guid))
230 {
231 if (child->GetEntry() == NPC_LISA)
232 {
233 child->GetMotionMaster()->MovePath(LISA_PATH, false);
234 break;
235 }
236 }
237 }
238 break;
241 break;
243 {
244 _childrenGUIDs.clear();
245
246 // Get all childeren's guid's.
247 if (Creature* dana = me->FindNearestCreature(NPC_DANA, 25.0f))
248 _childrenGUIDs.push_back(dana->GetGUID());
249
250 if (Creature* john = me->FindNearestCreature(NPC_JOHN, 25.0f))
251 _childrenGUIDs.push_back(john->GetGUID());
252
253 if (Creature* lisa = me->FindNearestCreature(NPC_LISA, 25.0f))
254 _childrenGUIDs.push_back(lisa->GetGUID());
255
256 if (Creature* aaron = me->FindNearestCreature(NPC_AARON, 25.0f))
257 _childrenGUIDs.push_back(aaron->GetGUID());
258
259 if (Creature* jose = me->FindNearestCreature(NPC_JOSE, 25.0f))
260 _childrenGUIDs.push_back(jose->GetGUID());
261
262 // If Formation was disbanded, remake.
263 if (!me->GetFormation()->IsFormed())
264 for (ObjectGuid guid : _childrenGUIDs)
265 if (Creature* child = ObjectAccessor::GetCreature(*me, guid))
266 child->SearchFormation();
267
268 // Start movement
270
271 break;
272 }
273 default:
274 break;
275 }
276 }
277 }
278
279private:
283};
284
286{
288
291
294
298
301
304
306
309
313};
314
316{
323
325{
328
331
333{
335
338
340{
342
344
347
350
352
356
358{
364
365Position const VanessaClonePosition = { -9462.44f, -11.7101f, 50.161f, 2.99500f };
366Position const VanessaStaticPosition = { -9468.16f, -3.6128f, 49.876f, 4.47226f };
367
368// 198896 - Master Mathias Shaw
370{
372
373 void OnQuestAccept(Player* player, Quest const* quest) override
374 {
376 {
378 Conversation::CreateConversation(CONVO_THE_NEW_CLASSINGTON_ESTATE, player, *player, player->GetGUID(), nullptr, false);
379 }
380 }
381
382 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
383 {
384 // Quest 72408 - A Window to the Past
386 {
387 CloseGossipMenuFor(player);
388
389 player->CastSpell(nullptr, SPELL_PLAY_ONYXIA_SCENE, true);
390 }
391
392 // Quest 72405 - An Unlikely Informant
393 else if (menuId == GOSSIP_MENU_SIGNAL_INFORMANT && gossipListId == GOSSIP_OPTION_SIGNAL_INFORMANT)
394 {
395 CloseGossipMenuFor(player);
396
397 Conversation::CreateConversation(CONVO_AN_UNLIKELY_INFORMANT, player, *player, player->GetGUID(), nullptr, false);
398 }
399 return true;
400 }
401};
402
403// 198883 - Vanessa VanCleef
405{
407
408 void OnQuestAccept(Player* player, Quest const* quest) override
409 {
411 Conversation::CreateConversation(CONVO_ROTTEN_OLD_MEMORIES, player, *player, player->GetGUID(), nullptr);
412 }
413
414 void MovementInform(uint32 type, uint32 pointId) override
415 {
416 if (type != POINT_MOTION_TYPE)
417 return;
418
419 if (pointId == POINT_VANESSA_FINISH)
421 }
422
423 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
424 {
427 }
428
429 void UpdateAI(uint32 diff) override
430 {
431 _events.Update(diff);
432
433 while (uint32 eventId = _events.ExecuteEvent())
434 {
435 switch (eventId)
436 {
438 me->SetVirtualItem(1, 0);
440 me->SetFacingTo(4.47226f);
442 break;
447 break;
448 default:
449 break;
450 }
451 }
452 }
453private:
455};
456
458{
460
461 void OnUnitEnter(Unit* unit) override
462 {
463 Player* player = unit->ToPlayer();
465 return;
466
468 }
469};
470
471// 20342 - Conversation
473{
474public:
475 conversation_an_unlikely_informant() : ConversationScript("conversation_an_unlikely_informant") { }
476
477 void OnConversationCreate(Conversation* conversation, Unit* creator) override
478 {
479 Creature* mathiasObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_MATHIAS_SHAW, .IgnorePhases = true });
480 Creature* vanessaObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_VANESSA_VANCLEEF, .IgnorePhases = true });
481 if (!mathiasObject || !vanessaObject)
482 return;
483
484 TempSummon* mathiasClone = mathiasObject->SummonPersonalClone(mathiasObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
485 TempSummon* vanessaClone = vanessaObject->SummonPersonalClone(VanessaClonePosition, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
486 if (!mathiasClone || !vanessaClone)
487 return;
488
491 vanessaClone->SetVirtualItem(1, vanessaClone->GetVirtualItemId(0)); // add 2nd dagger to hands
492
495 conversation->Start();
496 }
497
498 void OnConversationStart(Conversation* conversation) override
499 {
500 LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
501
502 if (Milliseconds const* teleportLineStartTime = conversation->GetLineStartTime(privateOwnerLocale, CONVO_LINE_VANESSA_TELEPORT))
503 _events.ScheduleEvent(EVENT_VANESSA_TELEPORT, *teleportLineStartTime);
504
505 if (Milliseconds const* movementStartTime = conversation->GetLineStartTime(privateOwnerLocale, CONVO_LINE_VANESSA_MOVEMENT))
506 _events.ScheduleEvent(EVENT_VANESSA_MOVE, *movementStartTime);
507
508 if (Milliseconds const* questCreditStartTime = conversation->GetLineStartTime(privateOwnerLocale, CONVO_LINE_MATHIAS_QUEST_CREDIT))
509 _events.ScheduleEvent(EVENT_MATHIAS_QUEST_CREDIT, *questCreditStartTime);
510
511 _events.ScheduleEvent(EVENT_MATHIAS_CLONE_DESPAWN, conversation->GetLastLineEndTime(privateOwnerLocale));
512 }
513
514 void OnConversationUpdate(Conversation* conversation, uint32 diff) override
515 {
516 _events.Update(diff);
517
518 switch (_events.ExecuteEvent())
519 {
521 {
522 Unit* privateObjectOwner = ObjectAccessor::GetUnit(*conversation, conversation->GetPrivateObjectOwner());
523 if (!privateObjectOwner)
524 break;
525
526 Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA);
527 if (!vanessaClone)
528 break;
529
530 vanessaClone->CastSpell(privateObjectOwner, SPELL_VANESSA_TELEPORT_BEHIND, true);
531 vanessaClone->CastSpell(privateObjectOwner, SPELL_VANESSA_CHEAP_SHOT, true);
533 vanessaClone->SetEmoteState(EMOTE_STATE_READY1H);
534 break;
535 }
537 {
538 Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA);
539 if (!vanessaClone)
540 break;
541
542 vanessaClone->SetWalk(true);
543 vanessaClone->SetEmoteState(EMOTE_STATE_NONE);
545 break;
546 }
548 {
549 Unit* privateObjectOwner = ObjectAccessor::GetUnit(*conversation, conversation->GetPrivateObjectOwner());
550 if (!privateObjectOwner)
551 break;
552
553 Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA);
554 if (!vanessaClone)
555 break;
556
557 Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS);
558 if (!mathiasClone)
559 break;
560
561 privateObjectOwner->ToPlayer()->KilledMonsterCredit(NPC_MATHIAS_SHAW);
562 vanessaClone->DespawnOrUnsummon();
564 break;
565 }
567 {
568 Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS);
569 if (!mathiasClone)
570 break;
571
572 mathiasClone->DespawnOrUnsummon();
573 break;
574 }
575 default:
576 break;
577 }
578 }
579
580private:
582};
583
584// 20387 - Conversation
586{
587public:
588 conversation_the_new_classington_estate() : ConversationScript("conversation_the_new_classington_estate") { }
589
590 void OnConversationCreate(Conversation* conversation, Unit* creator) override
591 {
592 Creature* mathiasObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_MATHIAS_SHAW, .IgnorePhases = true });
593 Creature* vanessaObject = GetClosestCreatureWithOptions(creator, 15.0f, { .CreatureId = NPC_VANESSA_VANCLEEF, .IgnorePhases = true });
594 if (!mathiasObject || !vanessaObject)
595 return;
596
597 TempSummon* mathiasClone = mathiasObject->SummonPersonalClone(mathiasObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
598 TempSummon* vanessaClone = vanessaObject->SummonPersonalClone(VanessaStaticPosition, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
599 if (!mathiasClone || !vanessaClone)
600 return;
601
604 vanessaClone->SetVirtualItem(1, vanessaClone->GetVirtualItemId(0)); // add 2nd dagger to hands
605
608 conversation->Start();
609 }
610
611 void OnConversationStart(Conversation* conversation) override
612 {
613 LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
614
616
617 if (Milliseconds const* facingLineStartTime = conversation->GetLineStartTime(privateOwnerLocale, CONVO_LINE_HANDLE_CLONE_FACING))
618 _events.ScheduleEvent(EVENT_MATHIAS_SET_FACING, *facingLineStartTime);
619
621
622 _events.ScheduleEvent(EVENT_MATHIAS_CLONE_DESPAWN, conversation->GetLastLineEndTime(privateOwnerLocale));
623 }
624
625 void OnConversationUpdate(Conversation* conversation, uint32 diff) override
626 {
627 _events.Update(diff);
628
629 switch (_events.ExecuteEvent())
630 {
632 {
634 if (!vanessaClone)
635 break;
636
638 if (!mathiasClone)
639 break;
640
641 mathiasClone->SetFacingTo(mathiasClone->GetHomePosition().GetOrientation());
642 // @ToDo: use emote data of broadcast text
643 vanessaClone->SetEmoteState(EMOTE_STATE_NONE);
645 break;
646 }
648 {
650 if (!vanessaClone)
651 break;
652
654 if (!mathiasClone)
655 break;
656
658 mathiasClone->SetFacingToObject(vanessaClone);
659 break;
660 }
662 {
664 if (!vanessaClone)
665 break;
666
668 if (!mathiasClone)
669 break;
670
671 vanessaClone->SetFacingToObject(mathiasClone);
672 break;
673 }
675 {
677 if (!mathiasClone)
678 break;
679
680 mathiasClone->DespawnOrUnsummon();
681 break;
682 }
683 default:
684 break;
685 }
686 }
687
688private:
690};
691
692// 228928 - Stealth
694{
695 void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
696 {
698 }
699
700 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
701 {
703 }
704
705 void Register() override
706 {
709 }
710};
711
713{
714 // Creature
718
719 // Spells
721
722 // Conversation
725
726 // AreaTrigger
728}
LocaleConstant
Definition: Common.h:48
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition: Duration.h:29
@ POINT_MOTION_TYPE
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: ObjectDefines.h:70
std::vector< ObjectGuid > GuidVector
Definition: ObjectGuid.h:395
@ QUEST_STATUS_INCOMPLETE
Definition: QuestDef.h:145
#define RegisterCreatureAI(ai_name)
Definition: ScriptMgr.h:1380
#define RegisterAreaTriggerAI(ai_name)
Definition: ScriptMgr.h:1416
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
Creature * GetClosestCreatureWithOptions(WorldObject *source, float maxSearchRange, FindCreatureOptions const &options)
void CloseGossipMenuFor(Player *player)
@ EFFECT_1
Definition: SharedDefines.h:31
@ EMOTE_STATE_READY1H
@ EMOTE_STATE_WALEAN02
@ EMOTE_ONESHOT_LAUGH
@ EMOTE_STATE_NONE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_ANIM_REPLACEMENT_SET
#define AuraEffectRemoveFn(F, I, N, M)
Definition: SpellScript.h:2040
NPCFlags
Non Player Character flags.
Definition: UnitDefines.h:295
@ UNIT_NPC_FLAG_GOSSIP
Definition: UnitDefines.h:297
@ UNIT_NPC_FLAG_QUESTGIVER
Definition: UnitDefines.h:298
HookList< EffectApplyHandler > AfterEffectRemove
Definition: SpellScript.h:2039
HookList< EffectApplyHandler > AfterEffectApply
Definition: SpellScript.h:2028
Unit * GetTarget() const
Milliseconds GetLineEndTime(LocaleConstant locale, int32 lineId) const
void AddActor(int32 actorId, uint32 actorIdx, ObjectGuid const &actorGuid)
LocaleConstant GetPrivateObjectOwnerLocale() const
static Conversation * CreateConversation(uint32 conversationEntry, Unit *creator, Position const &pos, ObjectGuid privateObjectOwner, SpellInfo const *spellInfo=nullptr, bool autoStart=true)
Milliseconds const * GetLineStartTime(LocaleConstant locale, int32 lineId) const
Milliseconds GetLastLineEndTime(LocaleConstant locale) const
Creature * GetActorCreature(uint32 actorIdx) const
Creature *const me
Definition: CreatureAI.h:61
bool IsFormed() const
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition: Creature.h:373
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
CreatureGroup * GetFormation()
Definition: Creature.h:391
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void Reset()
Definition: EventMap.cpp:21
void MovePath(uint32 pathId, bool repeatable, Optional< Milliseconds > duration={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< std::pair< Milliseconds, Milliseconds > > waitTimeRangeAtPathEnd={}, Optional< float > wanderDistanceAtPathEnds={}, Optional< bool > followPathBackwardsFromEndToStart={}, bool generatePath=true)
void MoveRandom(float wanderDistance=0.0f, Optional< Milliseconds > duration={}, MovementSlot slot=MOTION_SLOT_DEFAULT)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
static Player * ToPlayer(Object *o)
Definition: Object.h:213
static bool OnConditionChange(WorldObject *object, bool updateVisibility=true)
void KilledMonsterCredit(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition: Player.cpp:16680
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition: Player.cpp:16050
uint32 GetQuestId() const
Definition: QuestDef.h:587
Definition: Unit.h:627
void SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId=0, uint16 itemVisual=0)
Definition: Unit.cpp:13604
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
void SetFacingToObject(WorldObject const *object, bool force=true)
Definition: Unit.cpp:12671
void RemoveNpcFlag(NPCFlags flags)
Definition: Unit.h:983
void SetEmoteState(Emote emote)
Definition: Unit.h:852
uint32 GetVirtualItemId(uint32 slot) const
Definition: Unit.cpp:13588
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:982
bool SetWalk(bool enable)
Definition: Unit.cpp:12707
void SetFacingTo(float const ori, bool force=true)
Definition: Unit.cpp:12653
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
Definition: Unit.cpp:1598
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
virtual void SetDisplayId(uint32 displayId, bool setNative=false)
Definition: Unit.cpp:10148
TempSummon * SummonPersonalClone(Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, Player *privateObjectOwner=nullptr)
Definition: Object.cpp:2048
ObjectGuid GetPrivateObjectOwner() const
Definition: Object.h:785
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
void PlayDistanceSound(uint32 soundId, Player const *target=nullptr) const
Definition: Object.cpp:3576
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
void OnConversationUpdate(Conversation *conversation, uint32 diff) override
void OnConversationStart(Conversation *conversation) override
void OnConversationCreate(Conversation *conversation, Unit *creator) override
void OnConversationUpdate(Conversation *conversation, uint32 diff) override
void OnConversationCreate(Conversation *conversation, Unit *creator) override
void OnConversationStart(Conversation *conversation) override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void RandomShuffle(Iterator begin, Iterator end)
Reorder the elements of the iterator range randomly.
Definition: Containers.h:170
constexpr void GetPosition(float &x, float &y) const
Definition: Position.h:81
at_human_heritage_lions_pride_inn_basement_enter(AreaTrigger *areatrigger)
static uint32 SoundPicker()
void UpdateAI(uint32 diff) override
void WaypointReached(uint32 waypointId, uint32 pathId) override
npc_cameron(Creature *creature)
void OnGameEvent(bool start, uint16 eventId) override
GuidVector _childrenGUIDs
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
void OnQuestAccept(Player *player, Quest const *quest) override
void MovementInform(uint32 type, uint32 pointId) override
void OnQuestAccept(Player *player, Quest const *quest) override
Position const VanessaClonePosition
@ LISA_PATH
@ WOODS_PATH
@ HOUSE_PATH
@ STORMWIND_PATH
@ GOLDSHIRE_PATH
TheNewClassingtonEstateData
@ CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE
@ QUEST_THE_NEW_CLASSINGTON_ESTATE
@ CONVO_LINE_VANESSA_START_WALK
@ CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE
@ SPELL_VANESSA_STEALTH_DESPAWN
@ SPELL_VANESSA_COSMETIC_VANISH
@ PATH_VANESSA_GOLDSHIRE_BASEMENT
@ CONVO_LINE_HANDLE_CLONE_FACING
@ CONVO_THE_NEW_CLASSINGTON_ESTATE
@ HUMAN_FEMALE_EMOTE_CRY
@ GHOSTDEATH
@ CTHUN_DEATH_IS_CLOSE
@ BANSHEE_DEATH
@ CTHUN_YOU_WILL_DIE
@ BANSHEEPREAGGRO
AnUnlikelyInformantEvents
@ EVENT_VANESSA_MOVE
@ EVENT_MATHIAS_QUEST_CREDIT
@ EVENT_MATHIAS_CLONE_DESPAWN
@ EVENT_VANESSA_TELEPORT
@ EVENT_VANESSA_CLONE_LEAN
@ NPC_AARON
@ NPC_CAMERON
@ NPC_LISA
@ NPC_JOHN
@ NPC_DANA
@ NPC_JOSE
ClassingtonEstateEvents
@ EVENT_VANESSA_STEALTH_DESPAWN
@ EVENT_VANESSA_START_WALK
@ EVENT_MATHIAS_SET_FACING
@ EVENT_VANESSA_SET_FACING
RottenOldMemoriesData
@ CONVO_ROTTEN_OLD_MEMORIES
@ QUEST_ROTTEN_OLD_MEMORIES
@ STORMWIND_WAYPOINT
@ LISA_WAYPOINT
@ HOUSE_WAYPOINT
@ WOODS_WAYPOINT
@ GOLDSHIRE_WAYPOINT
@ GAME_EVENT_CHILDREN_OF_GOLDSHIRE
WindowToThePastData
@ GOSSIP_OPTION_WINDOW_TO_THE_PAST
@ SPELL_PLAY_ONYXIA_SCENE
@ GOSSIP_MENU_WINDOW_TO_THE_PAST
Position const VanessaStaticPosition
@ EVENT_WP_START_WOODS
@ EVENT_WP_START_GOLDSHIRE
@ EVENT_BEGIN_EVENT
@ EVENT_PLAY_SOUNDS
@ EVENT_WP_START_LISA
@ EVENT_WP_START_HOUSE
void AddSC_elwynn_forest()
AnUnlikelyInformantData
@ CONVO_ACTOR_IDX_VANESSA
@ SPELL_VANESSA_CHEAP_SHOT
@ NPC_VANESSA_VANCLEEF
@ GOSSIP_OPTION_SIGNAL_INFORMANT
@ CONVO_AN_UNLIKELY_INFORMANT_HELLO
@ CONVO_LINE_VANESSA_MOVEMENT
@ CONVO_LINE_VANESSA_TELEPORT
@ SPELL_VANESSA_TELEPORT_BEHIND
@ CONVO_AN_UNLIKELY_INFORMANT
@ QUEST_AN_UNLIKELY_INFORMANT
@ GOSSIP_MENU_SIGNAL_INFORMANT
@ POINT_VANESSA_FINISH
@ NPC_MATHIAS_SHAW
@ CONVO_ACTOR_IDX_MATHIAS
@ CONVO_LINE_MATHIAS_QUEST_CREDIT
@ SPELL_VANESSA_STEALTH
@ DISPLAY_VANESSA_INVISIBLE
@ DISPLAY_VANESSA_VISIBLE