Scripts/ElwynnForest: Implement conversation for "The New Clessington Estate" (#29135)
* human heritage questline
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user