From 964716d2ee04517495993cf87fef241b429e5519 Mon Sep 17 00:00:00 2001 From: Rushi <44952533+Skyliegirl33@users.noreply.github.com> Date: Thu, 17 Feb 2022 03:55:21 +0100 Subject: [PATCH] Implement FcTalk --- src/scripts/common/FcTalk.cpp | 56 ++++++++++++++++++++++++++++++++++ src/world/Manager/EventMgr.cpp | 5 +++ 2 files changed, 61 insertions(+) create mode 100644 src/scripts/common/FcTalk.cpp diff --git a/src/scripts/common/FcTalk.cpp b/src/scripts/common/FcTalk.cpp new file mode 100644 index 00000000..cdcbaf23 --- /dev/null +++ b/src/scripts/common/FcTalk.cpp @@ -0,0 +1,56 @@ +#include +#include + +#include + +using namespace Sapphire; + +class FcTalk : + public Sapphire::ScriptAPI::EventScript +{ +public: + FcTalk() : + Sapphire::ScriptAPI::EventScript( 0x001F0000 ) + { + } + + void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override + { + auto& exdData = Common::Service< Data::ExdData >::ref(); + auto switchTalk = exdData.getRow< Excel::SwitchTalk >( eventId ); + uint32_t talkEvent = 0; + + if( !switchTalk ) + return; + + for( auto entry = 15; entry >= 0; entry-- ) + { + auto caseCondition = switchTalk->data().TalkCase[ entry ].CaseCondition; + + if( ( caseCondition >> 16 ) == Event::EventHandler::EventHandlerType::Quest && player.isQuestCompleted( caseCondition ) ) + { + talkEvent = switchTalk->data().TalkCase[ entry ].Talk; + break; + } + else + { + talkEvent = switchTalk->data().TalkCase[ 0 ].Talk; + } + } + + if( talkEvent == 0 ) + return; + + eventMgr().eventStart( player, actorId, eventId, Event::EventHandler::EventType::Talk, 0, 0 ); + eventMgr().eventStart( player, actorId, talkEvent, Event::EventHandler::EventType::Nest, 0, 5 ); + + eventMgr().playScene( player, talkEvent, 0, HIDE_HOTBAR | NO_DEFAULT_CAMERA, { 0 }, + [ & ]( Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().eventFinish( player, talkEvent, 1 ); + eventMgr().eventFinish( player, eventId, 1 ); + } ); + } +}; + +EXPOSE_SCRIPT( FcTalk ); \ No newline at end of file diff --git a/src/world/Manager/EventMgr.cpp b/src/world/Manager/EventMgr.cpp index 412d32da..62d325cf 100644 --- a/src/world/Manager/EventMgr.cpp +++ b/src/world/Manager/EventMgr.cpp @@ -136,6 +136,11 @@ std::string EventMgr::getEventName( uint32_t eventId ) }*/ //return unknown + "GilShop"; } + + case Event::EventHandler::EventHandlerType::FcTalk: + { + return "FcTalk"; + } default: { return unknown;