From f427e219424664bdf893fc8320c53704078b1fcc Mon Sep 17 00:00:00 2001 From: collett Date: Wed, 17 Jun 2020 02:17:30 +0900 Subject: [PATCH] auto skip quests without script --- src/world/Actor/PlayerQuest.cpp | 8 ++++++-- src/world/Network/Handlers/EventHandlers.cpp | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/world/Actor/PlayerQuest.cpp b/src/world/Actor/PlayerQuest.cpp index fc1ff9ac..6eaafc91 100644 --- a/src/world/Actor/PlayerQuest.cpp +++ b/src/world/Actor/PlayerQuest.cpp @@ -1065,7 +1065,11 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti { for( uint32_t i = 0; i < rewardItemCount; i++ ) { - addItem( questInfo->itemReward0.at( i ), questInfo->itemCountReward0.at( i ), false, false, true, true ); + auto itemId = questInfo->itemReward0.at( i ); + if( itemId > 0 ) + { + addItem( itemId, questInfo->itemCountReward0.at( i ), false, false, true, true ); + } } } @@ -1074,7 +1078,7 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti for( uint32_t i = 0; i < optionalItemCount; i++ ) { auto itemId = questInfo->itemReward1.at( i ); - if( itemId == optionalChoice ) + if( itemId > 0 && itemId == optionalChoice ) { addItem( itemId, questInfo->itemCountReward1.at( i ), false, false, true, true ); break; diff --git a/src/world/Network/Handlers/EventHandlers.cpp b/src/world/Network/Handlers/EventHandlers.cpp index 929bc90b..ad05101b 100644 --- a/src/world/Network/Handlers/EventHandlers.cpp +++ b/src/world/Network/Handlers/EventHandlers.cpp @@ -64,7 +64,25 @@ void Sapphire::Network::GameConnection::eventHandlerTalk( const Packets::FFXIVAR { auto questInfo = exdData.get< Sapphire::Data::Quest >( eventId ); if( questInfo ) + { player.sendUrgent( "Quest not implemented: {0} ({1})", questInfo->name, questInfo->id ); + if( player.hasQuest( eventId ) ) + { + player.giveQuestRewards( eventId, 0 ); + player.finishQuest( eventId ); + } + else + { + player.playScene( eventId, 0, 0, + [ eventId ]( Entity::Player& player, const Event::SceneResult& result ) + { + if( result.param2 == 1 ) + { + player.updateQuest( eventId, 255 ); + } + }); + } + } } player.checkEvent( eventId );