Scripts/ElwynnForest: Implement conversation for "The New Clessington Estate" (#29135)

* human heritage questline
This commit is contained in:
Naddley
2023-07-21 17:51:56 +02:00
committed by GitHub
parent 40cdf0750d
commit ac48da6275
2 changed files with 219 additions and 6 deletions
@@ -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);
@@ -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,18 +405,27 @@ 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
{
if (pointId == POINT_VANESSA_FINISH)
_events.ScheduleEvent(EVENT_VANESSA_CLONE_LEAN, 1s);
}
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 WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
{
if (pathId == PATH_VANESSA_GOLDSHIRE_BASEMENT)
_events.ScheduleEvent(EVENT_VANESSA_STEALTH_DESPAWN, 0s);
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
@@ -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);