aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2023_07_21_01_world.sql54
-rw-r--r--src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp167
2 files changed, 217 insertions, 4 deletions
diff --git a/sql/updates/world/master/2023_07_21_01_world.sql b/sql/updates/world/master/2023_07_21_01_world.sql
new file mode 100644
index 00000000000..0ed8e939b11
--- /dev/null
+++ b/sql/updates/world/master/2023_07_21_01_world.sql
@@ -0,0 +1,54 @@
+-- Conversation
+DELETE FROM `conversation_template` WHERE `Id`=20387;
+INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `VerifiedBuild`) VALUES
+(20387, 52596, 0, 50000);
+
+DELETE FROM `conversation_actors` WHERE (`ConversationId`=20387 AND `Idx` IN (1,2,0));
+INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES
+(20387, 89180, 1, 0, 0, 0, 0, 50000), -- Full: 0x202FD40000C238C0000097000026109E Creature/0 R3061/S151 Map: 0 (Eastern Kingdoms) Entry: 198883 (Vanessa VanCleef) Low: 2494622
+(20387, 89175, 2, 0, 0, 0, 0, 50000), -- Full: 0x202FD40000C23C00000097000024C74A Creature/0 R3061/S151 Map: 0 (Eastern Kingdoms) Entry: 198896 (Master Mathias Shaw) Low: 2410314
+(20387, 0, 0, 0, 0, 0, 1, 50000); -- Full: 0x0800040000000000FFFFFFFFFFFFFFFF Player/0 R1/S16777215 Map: 0 (Eastern Kingdoms) Low: 1099511627775
+
+DELETE FROM `conversation_line_template` WHERE `Id` IN (52595, 52594, 52593, 52596);
+INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES
+(52595, 0, 1, 0, 0, 50000),
+(52594, 0, 2, 0, 0, 50000),
+(52593, 0, 1, 0, 0, 50000),
+(52596, 0, 0, 0, 0, 50000);
+
+UPDATE `conversation_template` SET `ScriptName` = 'conversation_the_new_classington_estate' WHERE `ID` = 20387;
+
+UPDATE `creature_template_addon` SET `auras` = '' WHERE `entry` = 198883;
+
+-- Quest stuff
+DELETE FROM `quest_details` WHERE `ID`=72426;
+INSERT INTO `quest_details` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `VerifiedBuild`) VALUES
+(72426, 1, 1, 0, 0, 0, 0, 0, 0, 50000); -- The New Clessington Estate
+
+DELETE FROM `creature_queststarter` WHERE (`id`=198896 AND `quest`=72426);
+INSERT INTO `creature_queststarter` (`id`, `quest`, `VerifiedBuild`) VALUES
+(198896, 72426, 50000); -- The New Clessington Estate offered Master Mathias Shaw
+
+DELETE FROM `creature_questender` WHERE (`id`=198896 AND `quest`=72424);
+INSERT INTO `creature_questender` (`id`, `quest`, `VerifiedBuild`) VALUES
+(198896, 72424, 50000); -- Looking for Something Specific ended Master Mathias Shaw
+
+DELETE FROM `quest_template_addon` WHERE `ID` = 72426;
+INSERT INTO `quest_template_addon` (`ID`, `prevQuestID`) VALUES
+(72426, 72424);
+
+-- Update Condition
+DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 26 AND `SourceGroup` = 19934 AND `SourceEntry` = 0);
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES
+(26, 19934, 0, 0, 0, 47, 0, 72405, 2 | 64, 0, 0, 'Apply Phase 19933 if Quest 75265 is complete | rewarded'),
+(26, 19934, 0, 0, 0, 47, 0, 72426, 2 | 8 | 64, 0, 1, 'Apply Phase 19933 if Quest 72426 is not in progress | complete | rewarded');
+
+-- Waypoints for 198883 (Vanessa VanCleef)
+SET @ENTRY := 198883;
+SET @PATH := ((@ENTRY) * 10) << 3;
+DELETE FROM `waypoint_data` WHERE `id`= @PATH;
+INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
+(@PATH, 0, -9464.7, -8.180555, 50.05011, NULL, 0),
+(@PATH, 1, -9462.712, -11.04861, 50.21397, NULL, 0),
+(@PATH, 2, -9460.957, -10.8125, 50.16755, NULL, 0),
+(@PATH, 3, -9460.654, -9.055555, 50.22908, NULL, 0);
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);