From 22edf9b15581a41bcb26a34831719ff348c09aa2 Mon Sep 17 00:00:00 2001 From: collett Date: Fri, 3 Jan 2020 05:53:36 +0900 Subject: [PATCH] Abandon quest. --- src/world/Actor/Player.h | 2 +- src/world/Actor/PlayerQuest.cpp | 17 ++++++++++------- .../Network/Handlers/ClientTriggerHandler.cpp | 2 +- .../Network/Handlers/GMCommandHandlers.cpp | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index c11e1b05..54cb4a34 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 ); + void removeQuest( uint16_t questId, bool abandoned ); /*! 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 0710244f..f6254cdd 100644 --- a/src/world/Actor/PlayerQuest.cpp +++ b/src/world/Actor/PlayerQuest.cpp @@ -18,7 +18,7 @@ void Sapphire::Entity::Player::finishQuest( uint16_t questId ) int8_t idx = getQuestIndex( questId ); - removeQuest( questId ); + removeQuest( questId, false ); updateQuestsCompleted( questId ); sendQuestTracker(); @@ -31,7 +31,7 @@ void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) sendQuestInfo(); } -void Sapphire::Entity::Player::removeQuest( uint16_t questId ) +void Sapphire::Entity::Player::removeQuest( uint16_t questId, bool abandoned ) { int8_t idx = getQuestIndex( questId ); @@ -45,11 +45,14 @@ void Sapphire::Entity::Player::removeQuest( uint16_t questId ) questUpdatePacket->data().questInfo.c.sequence = 0xFF; queuePacket( questUpdatePacket ); - auto questFinishPacket = makeZonePacket< FFXIVIpcQuestFinish >( getId() ); - questFinishPacket->data().questId = questId; - questFinishPacket->data().flag1 = 1; - questFinishPacket->data().flag2 = 1; - queuePacket( questFinishPacket ); + 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++ ) { diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index 49503632..4a10be2c 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 ) ); + player.removeQuest( static_cast< uint16_t >( param1 ), true ); break; } case ClientTriggerType::RequestHousingBuildPreset: diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index 77bd4380..10d85df3 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 ) ); + targetPlayer->removeQuest( static_cast< uint16_t >( param1 ), true ); break; } case GmCommand::QuestComplete: