From df9fb7ebf461471028cc4983e9241fde87cde256 Mon Sep 17 00:00:00 2001 From: collett Date: Sun, 5 Jan 2020 05:14:38 +0900 Subject: [PATCH] Better fix for abandon quest. --- src/world/Actor/Player.h | 2 +- src/world/Actor/PlayerQuest.cpp | 25 +++++++------------ .../Network/Handlers/ClientTriggerHandler.cpp | 2 +- .../Network/Handlers/GMCommandHandlers.cpp | 2 +- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index cba65767..2f33ac73 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -183,7 +183,7 @@ namespace Sapphire::Entity void unfinishQuest( uint16_t questId ); /*! remove a given quest */ - void removeQuest( uint16_t questId, bool abandoned ); + void removeQuest( uint16_t questId ); /*! add a quest to the completed quests mask */ void updateQuestsCompleted( uint32_t questId ); diff --git a/src/world/Actor/PlayerQuest.cpp b/src/world/Actor/PlayerQuest.cpp index f6254cdd..e5834671 100644 --- a/src/world/Actor/PlayerQuest.cpp +++ b/src/world/Actor/PlayerQuest.cpp @@ -15,14 +15,19 @@ using namespace Sapphire::Network::Packets::Server; void Sapphire::Entity::Player::finishQuest( uint16_t questId ) { - int8_t idx = getQuestIndex( questId ); - removeQuest( questId, false ); + removeQuest( questId ); + + auto questFinishPacket = makeZonePacket< FFXIVIpcQuestFinish >( getId() ); + questFinishPacket->data().questId = questId; + questFinishPacket->data().flag1 = 1; + questFinishPacket->data().flag2 = 1; + queuePacket( questFinishPacket ); + updateQuestsCompleted( questId ); sendQuestTracker(); - } void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) @@ -31,29 +36,18 @@ void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) sendQuestInfo(); } -void Sapphire::Entity::Player::removeQuest( uint16_t questId, bool abandoned ) +void Sapphire::Entity::Player::removeQuest( uint16_t questId ) { - int8_t idx = getQuestIndex( questId ); if( ( idx != -1 ) && ( m_activeQuests[ idx ] != nullptr ) ) { - auto questUpdatePacket = makeZonePacket< FFXIVIpcQuestUpdate >( getId() ); questUpdatePacket->data().slot = static_cast< uint8_t >( idx ); questUpdatePacket->data().questInfo.c.questId = 0; questUpdatePacket->data().questInfo.c.sequence = 0xFF; queuePacket( questUpdatePacket ); - if( !abandoned ) - { - auto questFinishPacket = makeZonePacket< FFXIVIpcQuestFinish >( getId() ); - questFinishPacket->data().questId = questId; - questFinishPacket->data().flag1 = 1; - questFinishPacket->data().flag2 = 1; - queuePacket( questFinishPacket ); - } - for( int32_t ii = 0; ii < 5; ii++ ) { if( m_questTracking[ ii ] == idx ) @@ -70,7 +64,6 @@ void Sapphire::Entity::Player::removeQuest( uint16_t questId, bool abandoned ) } sendQuestTracker(); - } bool Sapphire::Entity::Player::hasQuest( uint32_t questId ) diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index 10cd85e7..b6decf1b 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -308,7 +308,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, } case ClientTriggerType::AbandonQuest: { - player.removeQuest( static_cast< uint16_t >( param1 ), true ); + player.removeQuest( static_cast< uint16_t >( param1 ) ); break; } case ClientTriggerType::RequestHousingBuildPreset: diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index 10d85df3..77bd4380 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -379,7 +379,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } case GmCommand::QuestCancel: { - targetPlayer->removeQuest( static_cast< uint16_t >( param1 ), true ); + targetPlayer->removeQuest( static_cast< uint16_t >( param1 ) ); break; } case GmCommand::QuestComplete: