diff --git a/src/servers/Server_Common/Database/CharaDbConnection.cpp b/src/servers/Server_Common/Database/CharaDbConnection.cpp index 8a5bdad3..6807d3c4 100644 --- a/src/servers/Server_Common/Database/CharaDbConnection.cpp +++ b/src/servers/Server_Common/Database/CharaDbConnection.cpp @@ -120,15 +120,10 @@ void Core::Db::CharaDbConnection::doPrepareStatements() prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC ); - /// CLASS INFO 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_UP, "UPDATE characlass SET Exp = ?, SET Lvl = ? ) WHERE CharacterId = ? AND ClassIdx = ?;", CONNECTION_ASYNC ); + prepareStatement( CHARA_CLASS_INS, "INSERT INTO characlass ( CharacterId, ClassIdx, Exp, Lvl ) VALUES( ?,?,?,?);", CONNECTION_BOTH ); + 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 ); - - - - } \ No newline at end of file diff --git a/src/servers/Server_REST/PlayerMinimal.cpp b/src/servers/Server_REST/PlayerMinimal.cpp index c87dcbc7..bb14d319 100644 --- a/src/servers/Server_REST/PlayerMinimal.cpp +++ b/src/servers/Server_REST/PlayerMinimal.cpp @@ -69,15 +69,15 @@ namespace Core { m_contentId = res->getUInt64( "ContentId" ); 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[i] = field2[index].get< uint8_t >(); - //m_expArray[i] = + m_classMap[resClass->getUInt( 1 )] = resClass->getUInt( 3 ); } } @@ -165,6 +165,8 @@ namespace Core { std::vector< uint8_t > questTracking8(10); std::vector< int16_t > questTracking = { -1, -1, -1, -1, -1 }; + memset( questComplete.data(), 0, questComplete.size() ); + memcpy( questTracking8.data(), questTracking.data(), questTracking8.size() ); uint16_t size = static_cast< uint16_t >( m_lookMap.size() ); @@ -223,6 +225,14 @@ namespace Core { // "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " // "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 ); stmt->setInt( 1, m_accountId ); @@ -256,11 +266,9 @@ namespace Core { stmt->setBinary( 29, questTracking8 ); stmt->setBinary( 30, aetherytes ); stmt->setInt( 31, m_gmRank ); - 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());" ); diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 497fef25..6bd7395b 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -88,6 +88,8 @@ Core::Entity::Player::Player() : memset( m_name, 0, sizeof( m_name ) ); memset( m_stateFlags, 0, sizeof( m_stateFlags ) ); 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() diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index bd56ca5f..f67c076a 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -414,9 +414,10 @@ void Core::Entity::Player::updateDbClass() const { 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 ); - stmtS->setInt( 1, getLevel() ); - stmtS->setInt( 2, getExp() ); + stmtS->setInt( 1, getExp() ); + stmtS->setInt( 2, getLevel() ); stmtS->setInt( 3, m_id ); stmtS->setInt( 4, classJobIndex ); g_charaDb.execute( stmtS );