From e934528f488e368709a63bafdd00676ca2ffb492 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 15 Oct 2017 23:16:28 +0200 Subject: [PATCH] Fix for quest sql operations --- .../Server_Common/Database/CharaDbConnection.cpp | 2 +- src/servers/Server_Zone/Actor/Player.h | 1 - src/servers/Server_Zone/Actor/PlayerQuest.cpp | 16 +++++++++++----- src/servers/Server_Zone/Actor/PlayerSql.cpp | 11 +++++++---- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/servers/Server_Common/Database/CharaDbConnection.cpp b/src/servers/Server_Common/Database/CharaDbConnection.cpp index 6e57606e..4af4c29b 100644 --- a/src/servers/Server_Common/Database/CharaDbConnection.cpp +++ b/src/servers/Server_Common/Database/CharaDbConnection.cpp @@ -110,7 +110,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() prepareStatement( CHARA_SEARCHINFO_UP_SEARCHCOMMENT, "UPDATE charainfosearch SET SearchComment = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); /// QUEST - prepareStatement( CHARA_QUEST_INS, "INSERT INTO charaquestnew ( CharacterId, SlotId, QuestId, Sequence, Flags, Variables_0 " + prepareStatement( CHARA_QUEST_INS, "INSERT INTO charaquestnew ( CharacterId, SlotId, QuestId, Sequence, Flags, Variables_0, " "Variables_1, Variables_2, Variables_3, Variables_4, " "Variables_5, Variables_6 ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,? );", CONNECTION_ASYNC ); diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index d799ae12..537dacc4 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -616,7 +616,6 @@ private: std::map< uint32_t, uint8_t > m_actorIdTohateSlotMap; std::map< uint32_t, uint8_t > m_questIdToQuestIdx; // quest mapping, quest id to quest container index std::map< uint8_t, uint32_t > m_questIdxToQuestId; // quest mapping, quest container index to questId - std::queue< uint8_t > m_freeQuestIdxQueue; // queue with quest indices free to be assigned boost::shared_ptr< Common::QuestActive > m_activeQuests[30]; int16_t m_questTracking[5]; uint8_t m_stateFlags[7]; diff --git a/src/servers/Server_Zone/Actor/PlayerQuest.cpp b/src/servers/Server_Zone/Actor/PlayerQuest.cpp index c3484c52..8155ea3d 100644 --- a/src/servers/Server_Zone/Actor/PlayerQuest.cpp +++ b/src/servers/Server_Zone/Actor/PlayerQuest.cpp @@ -66,7 +66,6 @@ void Core::Entity::Player::removeQuest( uint16_t questId ) boost::shared_ptr pQuest = m_activeQuests[idx]; m_activeQuests[idx].reset(); - m_freeQuestIdxQueue.push( idx ); m_questIdToQuestIdx.erase( questId ); m_questIdxToQuestId.erase( idx ); @@ -866,7 +865,7 @@ void Core::Entity::Player::updateQuest( uint16_t questId, uint8_t sequence ) if( hasQuest( questId ) ) { - int16_t index = getQuestIndex( questId ); + uint8_t index = getQuestIndex( questId ); auto pNewQuest = m_activeQuests[index]; GamePacketNew< FFXIVIpcQuestUpdate, ServerZoneIpcType > pe_qa( getId() ); pNewQuest->c.sequence = sequence; @@ -878,10 +877,17 @@ void Core::Entity::Player::updateQuest( uint16_t questId, uint8_t sequence ) else { - uint8_t idx = m_freeQuestIdxQueue.front(); - m_freeQuestIdxQueue.pop(); - + uint8_t idx = 0; + bool hasFreeSlot = false; + for( ; idx < 30; idx++ ) + if( !m_activeQuests[idx] ) + { + hasFreeSlot = true; + break; + } + if( !hasFreeSlot ) + return; boost::shared_ptr< QuestActive > pNewQuest( new QuestActive() ); pNewQuest->c.questId = questId; diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index 4a07c127..bc4dab6e 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "Player.h" @@ -215,9 +216,9 @@ bool Core::Entity::Player::loadActiveQuests() while( res->next() ) { - auto slotId = res->getUInt8( 1 ); + auto slotId = res->getUInt8( 2 ); - boost::shared_ptr pActiveQuest( new QuestActive() ); + boost::shared_ptr< QuestActive > pActiveQuest( new QuestActive() ); pActiveQuest->c.questId = res->getUInt16( 3 ); pActiveQuest->c.sequence = res->getUInt8( 4 ); pActiveQuest->c.flags = res->getUInt8( 5 ); @@ -440,6 +441,7 @@ void Core::Entity::Player::updateSql() void Core::Entity::Player::updateAllQuests() const { + for( int32_t i = 0; i < 30; i++ ) { if( m_activeQuests[i] != nullptr ) @@ -453,8 +455,9 @@ void Core::Entity::Player::updateAllQuests() const stmtS3->setInt( 6, m_activeQuests[i]->c.UI8D ); stmtS3->setInt( 7, m_activeQuests[i]->c.UI8E ); stmtS3->setInt( 8, m_activeQuests[i]->c.UI8F ); - stmtS3->setInt( 9, m_id); - stmtS3->setInt( 10, m_activeQuests[i]->c.questId ); + stmtS3->setInt( 9, m_activeQuests[i]->c.padding1 ); + stmtS3->setInt( 10, m_id); + stmtS3->setInt( 11, m_activeQuests[i]->c.questId ); g_charaDb.execute( stmtS3 ); } }