1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 15:47:46 +00:00

fixed an issue with binary fields bit read incorrectly

This commit is contained in:
Mordred 2017-10-23 23:55:25 +02:00
parent 25b75043c5
commit 3564964a8a
4 changed files with 24 additions and 18 deletions

View file

@ -120,15 +120,10 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC ); prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC );
/// CLASS INFO /// CLASS INFO
prepareStatement( CHARA_CLASS_SEL, "SELECT ClassIdx, Exp, Lvl FROM characlass WHERE CharacterId = ?;", CONNECTION_SYNC ); prepareStatement( CHARA_CLASS_SEL, "SELECT ClassIdx, Exp, Lvl FROM characlass WHERE CharacterId = ?;", CONNECTION_SYNC );
prepareStatement( CHARA_CLASS_INS, "INSERT INTO characlass ( CharacterId, ClassIdx, Exp, Lvl ) VALUES( ?,?,?,?);", CONNECTION_ASYNC ); prepareStatement( CHARA_CLASS_INS, "INSERT INTO characlass ( CharacterId, ClassIdx, Exp, Lvl ) VALUES( ?,?,?,?);", CONNECTION_BOTH );
prepareStatement( CHARA_CLASS_UP, "UPDATE characlass SET Exp = ?, SET Lvl = ? ) WHERE CharacterId = ? AND ClassIdx = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_CLASS_UP, "UPDATE characlass SET Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_CLASS_DEL, "DELETE FROM characlass WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_CLASS_DEL, "DELETE FROM characlass WHERE CharacterId = ?;", CONNECTION_ASYNC );
} }

View file

@ -69,15 +69,15 @@ namespace Core {
m_contentId = res->getUInt64( "ContentId" ); m_contentId = res->getUInt64( "ContentId" );
m_zoneId = res->getUInt8( "TerritoryId" ); m_zoneId = res->getUInt8( "TerritoryId" );
auto pQR2 = g_database.query( "SELECT * FROM characlass WHERE CharacterId = " + std::to_string( charId ) + ";" ); // SELECT ClassIdx, Exp, Lvl
auto stmtClass = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_SEL_MINIMAL );
stmtClass->setInt( 1, m_id );
Db::Field* field2 = pQR2->fetch(); auto resClass = g_charaDb.query( stmt );
for( uint8_t i = 0; i < 25; i++ ) while( resClass->next() )
{ {
uint8_t index = i * 2; m_classMap[resClass->getUInt( 1 )] = resClass->getUInt( 3 );
m_classMap[i] = field2[index].get< uint8_t >();
//m_expArray[i] =
} }
} }
@ -165,6 +165,8 @@ namespace Core {
std::vector< uint8_t > questTracking8(10); std::vector< uint8_t > questTracking8(10);
std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 }; std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 };
memset( questComplete.data(), 0, questComplete.size() );
memcpy( questTracking8.data(), questTracking.data(), questTracking8.size() ); memcpy( questTracking8.data(), questTracking.data(), questTracking8.size() );
uint16_t size = static_cast< uint16_t >( m_lookMap.size() ); uint16_t size = static_cast< uint16_t >( m_lookMap.size() );
@ -223,6 +225,14 @@ namespace Core {
// "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " // "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, "
// "Aetheryte, GMRank, UPDATE_DATE ) // "Aetheryte, GMRank, UPDATE_DATE )
// CharacterId, ClassIdx, Exp, Lvl
auto stmtClass = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_CLASS_INS );
stmtClass->setInt( 1, m_id );
stmtClass->setInt( 2, g_exdData.m_classJobInfoMap[m_class].exp_idx );
stmtClass->setInt( 3, 0 );
stmtClass->setInt( 4, 1 );
g_charaDb.directExecute( stmtClass );
auto stmt = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_INS ); auto stmt = g_charaDb.getPreparedStatement( Db::CharaDbStatements::CHARA_INS );
stmt->setInt( 1, m_accountId ); stmt->setInt( 1, m_accountId );
@ -256,11 +266,9 @@ namespace Core {
stmt->setBinary( 29, questTracking8 ); stmt->setBinary( 29, questTracking8 );
stmt->setBinary( 30, aetherytes ); stmt->setBinary( 30, aetherytes );
stmt->setInt( 31, m_gmRank ); stmt->setInt( 31, m_gmRank );
g_charaDb.directExecute( stmt ); g_charaDb.directExecute( stmt );
g_charaDb.execute( "INSERT INTO characlass (CharacterId, Lv_" + std::to_string( g_exdData.m_classJobInfoMap[m_class].exp_idx ) + ", UPDATE_DATE ) "
" VALUES (" + std::to_string( m_id ) + ", 1, NOW());" );
g_charaDb.execute( "INSERT INTO charainfosearch (CharacterId, UPDATE_DATE ) VALUES (" + std::to_string( m_id ) + ", NOW());" ); g_charaDb.execute( "INSERT INTO charainfosearch (CharacterId, UPDATE_DATE ) VALUES (" + std::to_string( m_id ) + ", NOW());" );

View file

@ -88,6 +88,8 @@ Core::Entity::Player::Player() :
memset( m_name, 0, sizeof( m_name ) ); memset( m_name, 0, sizeof( m_name ) );
memset( m_stateFlags, 0, sizeof( m_stateFlags ) ); memset( m_stateFlags, 0, sizeof( m_stateFlags ) );
memset( m_searchMessage, 0, sizeof( m_searchMessage ) ); memset( m_searchMessage, 0, sizeof( m_searchMessage ) );
memset( m_classArray, 0, sizeof( m_classArray ) );
memset( m_expArray, 0, sizeof( m_expArray ) );
} }
Core::Entity::Player::~Player() Core::Entity::Player::~Player()

View file

@ -414,9 +414,10 @@ void Core::Entity::Player::updateDbClass() const
{ {
uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( getClass() )].exp_idx; uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( getClass() )].exp_idx;
//Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?
auto stmtS = g_charaDb.getPreparedStatement( Core::Db::CHARA_CLASS_UP ); auto stmtS = g_charaDb.getPreparedStatement( Core::Db::CHARA_CLASS_UP );
stmtS->setInt( 1, getLevel() ); stmtS->setInt( 1, getExp() );
stmtS->setInt( 2, getExp() ); stmtS->setInt( 2, getLevel() );
stmtS->setInt( 3, m_id ); stmtS->setInt( 3, m_id );
stmtS->setInt( 4, classJobIndex ); stmtS->setInt( 4, classJobIndex );
g_charaDb.execute( stmtS ); g_charaDb.execute( stmtS );