aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorNaddley <64811442+Naddley@users.noreply.github.com>2023-07-21 17:51:56 +0200
committerGitHub <noreply@github.com>2023-07-21 17:51:56 +0200
commitac48da6275821f8f94acb6fb259728e6bf6fd79c (patch)
treedb6cc6a5e49d718a6ea257490f3de8b4b8f0a6c6 /src/server
parent40cdf0750d40668692660db817c5fc19d53aea2e (diff)
Scripts/ElwynnForest: Implement conversation for "The New Clessington Estate" (#29135)
* human heritage questline
Diffstat (limited to 'src/server')
-rw-r--r--src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp167
1 files changed, 163 insertions, 4 deletions
diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
index d20f3bdb54d..66435eb86dc 100644
--- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp
@@ -23,6 +23,7 @@
#include "CreatureGroups.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
+#include "PhasingHandler.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
@@ -335,6 +336,32 @@ enum RottenOldMemoriesData
CONVO_ROTTEN_OLD_MEMORIES = 20345
};
+enum TheNewClassingtonEstateData
+{
+ QUEST_THE_NEW_CLASSINGTON_ESTATE = 72426,
+
+ CONVO_THE_NEW_CLASSINGTON_ESTATE = 20387,
+
+ CONVO_LINE_VANESSA_START_WALK = 52595,
+ CONVO_LINE_HANDLE_CLONE_FACING = 52593,
+
+ CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE = 1,
+ CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE = 2,
+
+ PATH_VANESSA_GOLDSHIRE_BASEMENT = 15910640,
+
+ SPELL_VANESSA_COSMETIC_VANISH = 210194,
+ SPELL_VANESSA_STEALTH_DESPAWN = 186810
+};
+
+enum ClassingtonEstateEvents
+{
+ EVENT_VANESSA_START_WALK = 1,
+ EVENT_VANESSA_STEALTH_DESPAWN,
+ EVENT_MATHIAS_SET_FACING,
+ EVENT_VANESSA_SET_FACING
+};
+
Position const VanessaClonePosition = { -9462.44f, -11.7101f, 50.161f, 2.99500f };
Position const VanessaStaticPosition = { -9468.16f, -3.6128f, 49.876f, 4.47226f };
@@ -343,6 +370,15 @@ struct npc_master_mathias_shaw_human_heritage_lions_pride_inn_basement : public
{
npc_master_mathias_shaw_human_heritage_lions_pride_inn_basement(Creature* creature) : ScriptedAI(creature) { }
+ void OnQuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_THE_NEW_CLASSINGTON_ESTATE)
+ {
+ PhasingHandler::OnConditionChange(player);
+ Conversation::CreateConversation(CONVO_THE_NEW_CLASSINGTON_ESTATE, player, *player, player->GetGUID(), nullptr, false);
+ }
+ }
+
bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
// Quest 72408 - A Window to the Past
@@ -369,16 +405,25 @@ struct npc_vanessa_vancleef_human_heritage_lions_pride_inn_basement : public Scr
{
npc_vanessa_vancleef_human_heritage_lions_pride_inn_basement(Creature* creature) : ScriptedAI(creature) { }
- void MovementInform(uint32 /*type*/, uint32 pointId) override
+ void OnQuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_ROTTEN_OLD_MEMORIES)
+ Conversation::CreateConversation(CONVO_ROTTEN_OLD_MEMORIES, player, *player, player->GetGUID(), nullptr);
+ }
+
+ void MovementInform(uint32 type, uint32 pointId) override
{
+ if (type != POINT_MOTION_TYPE)
+ return;
+
if (pointId == POINT_VANESSA_FINISH)
_events.ScheduleEvent(EVENT_VANESSA_CLONE_LEAN, 1s);
}
- void OnQuestAccept(Player* player, Quest const* quest) override
+ void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
{
- if (quest->GetQuestId() == QUEST_ROTTEN_OLD_MEMORIES)
- Conversation::CreateConversation(CONVO_ROTTEN_OLD_MEMORIES, player, *player, player->GetGUID(), nullptr);
+ if (pathId == PATH_VANESSA_GOLDSHIRE_BASEMENT)
+ _events.ScheduleEvent(EVENT_VANESSA_STEALTH_DESPAWN, 0s);
}
void UpdateAI(uint32 diff) override
@@ -395,6 +440,11 @@ struct npc_vanessa_vancleef_human_heritage_lions_pride_inn_basement : public Scr
me->SetFacingTo(4.47226f);
me->HandleEmoteCommand(EMOTE_STATE_WALEAN02);
break;
+ case EVENT_VANESSA_STEALTH_DESPAWN:
+ me->CastSpell(nullptr, SPELL_VANESSA_COSMETIC_VANISH, true);
+ me->CastSpell(nullptr, SPELL_VANESSA_STEALTH_DESPAWN, true);
+ me->DespawnOrUnsummon(1s);
+ break;
default:
break;
}
@@ -531,6 +581,114 @@ private:
EventMap _events;
};
+// 20387 - Conversation
+class conversation_the_new_classington_estate : public ConversationScript
+{
+public:
+ conversation_the_new_classington_estate() : ConversationScript("conversation_the_new_classington_estate") { }
+
+ void OnConversationCreate(Conversation* conversation, Unit* creator) override
+ {
+ Creature* mathiasObject = GetClosestCreatureWithOptions(creator, 15.0f, FindCreatureOptions().SetIgnorePhases(true).SetCreatureId(NPC_MATHIAS_SHAW));
+ Creature* vanessaObject = GetClosestCreatureWithOptions(creator, 15.0f, FindCreatureOptions().SetIgnorePhases(true).SetCreatureId(NPC_VANESSA_VANCLEEF));
+ if (!mathiasObject || !vanessaObject)
+ return;
+
+ TempSummon* mathiasClone = mathiasObject->SummonPersonalClone(mathiasObject->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
+ TempSummon* vanessaClone = vanessaObject->SummonPersonalClone(VanessaStaticPosition, TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
+ if (!mathiasClone || !vanessaClone)
+ return;
+
+ mathiasClone->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
+ vanessaClone->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER));
+ vanessaClone->SetVirtualItem(1, vanessaClone->GetVirtualItemId(0)); // add 2nd dagger to hands
+
+ conversation->AddActor(CONVO_THE_NEW_CLASSINGTON_ESTATE, CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE, mathiasClone->GetGUID());
+ conversation->AddActor(CONVO_THE_NEW_CLASSINGTON_ESTATE, CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE, vanessaClone->GetGUID());
+ conversation->Start();
+ }
+
+ void OnConversationStart(Conversation* conversation) override
+ {
+ LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();
+
+ _events.ScheduleEvent(EVENT_VANESSA_START_WALK, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_VANESSA_START_WALK));
+
+ if (Milliseconds const* facingLineStartTime = conversation->GetLineStartTime(privateOwnerLocale, CONVO_LINE_HANDLE_CLONE_FACING))
+ _events.ScheduleEvent(EVENT_MATHIAS_SET_FACING, *facingLineStartTime);
+
+ _events.ScheduleEvent(EVENT_VANESSA_SET_FACING, conversation->GetLineEndTime(privateOwnerLocale, CONVO_LINE_HANDLE_CLONE_FACING));
+
+ _events.ScheduleEvent(EVENT_MATHIAS_CLONE_DESPAWN, conversation->GetLastLineEndTime(privateOwnerLocale));
+ }
+
+ void OnConversationUpdate(Conversation* conversation, uint32 diff) override
+ {
+ _events.Update(diff);
+
+ switch (_events.ExecuteEvent())
+ {
+ case EVENT_VANESSA_START_WALK:
+ {
+ Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE);
+ if (!vanessaClone)
+ break;
+
+ Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE);
+ if (!mathiasClone)
+ break;
+
+ mathiasClone->SetFacingTo(mathiasClone->GetHomePosition().GetOrientation());
+ // @ToDo: use emote data of broadcast text
+ vanessaClone->SetEmoteState(EMOTE_STATE_NONE);
+ vanessaClone->GetMotionMaster()->MovePath(PATH_VANESSA_GOLDSHIRE_BASEMENT, false);
+ break;
+ }
+ case EVENT_MATHIAS_SET_FACING:
+ {
+ Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE);
+ if (!vanessaClone)
+ break;
+
+ Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE);
+ if (!mathiasClone)
+ break;
+
+ vanessaClone->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
+ mathiasClone->SetFacingToObject(vanessaClone);
+ break;
+ }
+ case EVENT_VANESSA_SET_FACING:
+ {
+ Creature* vanessaClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_VANESSA_CLASSINGTON_ESTATE);
+ if (!vanessaClone)
+ break;
+
+ Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE);
+ if (!mathiasClone)
+ break;
+
+ vanessaClone->SetFacingToObject(mathiasClone);
+ break;
+ }
+ case EVENT_MATHIAS_CLONE_DESPAWN:
+ {
+ Creature* mathiasClone = conversation->GetActorCreature(CONVO_ACTOR_IDX_MATHIAS_CLASSINGTON_ESTATE);
+ if (!mathiasClone)
+ break;
+
+ mathiasClone->DespawnOrUnsummon();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+private:
+ EventMap _events;
+};
+
// 228928 - Stealth
class spell_stealth_vanessa_human_heritage : public AuraScript
{
@@ -565,6 +723,7 @@ void AddSC_elwynn_forest()
// Conversation
new conversation_an_unlikely_informant();
+ new conversation_the_new_classington_estate();
// AreaTrigger
RegisterAreaTriggerAI(at_human_heritage_lions_pride_inn_basement_enter);