From d7b54b5b6dcbcae979273d73a86a878d7ce558ce Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 26 Oct 2017 00:13:41 +0200 Subject: [PATCH] PlayerMinimal almost completely ported --- .../Database/CharaDbConnection.cpp | 9 ++- .../Database/CharaDbConnection.h | 2 + src/servers/Server_REST/PlayerMinimal.cpp | 62 ++++++++++--------- src/servers/Server_REST/PlayerMinimal.h | 5 +- 4 files changed, 47 insertions(+), 31 deletions(-) diff --git a/src/servers/Server_Common/Database/CharaDbConnection.cpp b/src/servers/Server_Common/Database/CharaDbConnection.cpp index 6f9161f9..7ed7aada 100644 --- a/src/servers/Server_Common/Database/CharaDbConnection.cpp +++ b/src/servers/Server_Common/Database/CharaDbConnection.cpp @@ -123,12 +123,17 @@ void Core::Db::CharaDbConnection::doPrepareStatements() /// 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_BOTH ); + 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 ); /// INVENTORY INFO - prepareStatement( CHARA_ITEMINV_INS, "INSERT INTO charaiteminventory ( CharacterId, storageId, UPDATE_DATE ) VALUES ( ?, ?, NOW());", CONNECTION_BOTH ); + prepareStatement( CHARA_ITEMINV_INS, "INSERT INTO charaiteminventory ( CharacterId, storageId, UPDATE_DATE ) VALUES ( ?, ?, NOW() );", CONNECTION_BOTH ); + + /// ITEM GLOBAL + prepareStatement( CHARA_ITEMGLOBAL_INS, "INSERT INTO charaglobalitem ( CharacterId, ItemId, catalogId, UPDATE_DATE ) VALUES ( ?, ?, ?, NOW() );", CONNECTION_BOTH ); + + } \ No newline at end of file diff --git a/src/servers/Server_Common/Database/CharaDbConnection.h b/src/servers/Server_Common/Database/CharaDbConnection.h index 520a9779..b7a9bdf5 100644 --- a/src/servers/Server_Common/Database/CharaDbConnection.h +++ b/src/servers/Server_Common/Database/CharaDbConnection.h @@ -73,6 +73,8 @@ enum CharaDbStatements : uint32_t CHARA_ITEMINV_INS, + CHARA_ITEMGLOBAL_INS, + MAX_STATEMENTS }; diff --git a/src/servers/Server_REST/PlayerMinimal.cpp b/src/servers/Server_REST/PlayerMinimal.cpp index 8acfa9c1..a600477c 100644 --- a/src/servers/Server_REST/PlayerMinimal.cpp +++ b/src/servers/Server_REST/PlayerMinimal.cpp @@ -169,8 +169,6 @@ namespace Core { memcpy( questTracking8.data(), questTracking.data(), questTracking8.size() ); - uint16_t size = static_cast< uint16_t >( m_lookMap.size() ); - for( uint32_t i = 0; i < m_lookMap.size(); i++ ) { customize[i] = m_lookMap[i]; @@ -273,7 +271,6 @@ namespace Core { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// SET UP INVENTORIES - createInvDbContainer( InventoryType::Bag0 ); createInvDbContainer( InventoryType::Bag1 ); createInvDbContainer( InventoryType::Bag2 ); @@ -297,26 +294,25 @@ namespace Core { createInvDbContainer( InventoryType::Currency ); createInvDbContainer( InventoryType::Crystal ); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// SETUP EQUIPMENT / STARTING GEAR auto classJobInfo = g_exdData.m_classJobInfoMap[m_class]; uint32_t weaponId = classJobInfo.start_weapon_id; - uint64_t uniqueId = g_database.getNextUId(); + uint64_t uniqueId = getNextUId64(); uint8_t race = customize[CharaLook::Race]; uint8_t gender = customize[CharaLook::Gender]; auto raceInfo = g_exdData.getRaceInfo( race ); - int32_t body; - int32_t hands; - int32_t legs; - int32_t feet; - uint64_t bodyUid = g_database.getNextUId(); - uint64_t handsUid = g_database.getNextUId(); - uint64_t legsUid = g_database.getNextUId(); - uint64_t feetUid = g_database.getNextUId(); + uint32_t body; + uint32_t hands; + uint32_t legs; + uint32_t feet; + uint64_t bodyUid = getNextUId64(); + uint64_t handsUid = getNextUId64(); + uint64_t legsUid = getNextUId64(); + uint64_t feetUid = getNextUId64(); if( gender == 0 ) { @@ -333,21 +329,11 @@ namespace Core { feet = raceInfo->female_feet; } - g_charaDb.execute( "INSERT INTO charaglobalitem (CharacterId, ItemId, catalogId, UPDATE_DATE ) " - "VALUES ( " + std::to_string( m_id ) + ", " + std::to_string( uniqueId ) + ", " + - std::to_string( weaponId ) + ", NOW());" ); - g_charaDb.execute( "INSERT INTO charaglobalitem (CharacterId, ItemId, catalogId, UPDATE_DATE ) " - "VALUES ( " + std::to_string( m_id ) + ", " + std::to_string( bodyUid ) + ", " + - std::to_string( body ) + ", NOW());" ); - g_charaDb.execute( "INSERT INTO charaglobalitem (CharacterId, ItemId, catalogId, UPDATE_DATE ) " - "VALUES ( " + std::to_string( m_id ) + ", " + std::to_string( handsUid ) + ", " + - std::to_string( hands ) + ", NOW());" ); - g_charaDb.execute( "INSERT INTO charaglobalitem (CharacterId, ItemId, catalogId, UPDATE_DATE ) " - "VALUES ( " + std::to_string( m_id ) + ", " + std::to_string( legsUid ) + ", " + - std::to_string( legs ) + ", NOW());" ); - g_charaDb.execute( "INSERT INTO charaglobalitem (CharacterId, ItemId, catalogId, UPDATE_DATE ) " - "VALUES ( " + std::to_string( m_id ) + ", " + std::to_string( feetUid ) + ", " + - std::to_string( feet ) + ", NOW());" ); + insertDbGlobalItem( weaponId, uniqueId ); + insertDbGlobalItem( body, bodyUid ); + insertDbGlobalItem( hands, handsUid ); + insertDbGlobalItem( legs, legsUid ); + insertDbGlobalItem( feet, feetUid ); g_charaDb.execute( "INSERT INTO charaitemgearset (storageId, CharacterId, " "container_" + std::to_string( EquipSlot::MainHand ) + ", " @@ -365,6 +351,15 @@ namespace Core { } + void PlayerMinimal::insertDbGlobalItem( uint32_t weaponId, uint64_t uniqueId ) const + { + auto stmtItemGlobal = g_charaDb.getPreparedStatement(Db::CHARA_ITEMGLOBAL_INS ); + stmtItemGlobal->setInt(1, m_id); + stmtItemGlobal->setInt64( 2, uniqueId ); + stmtItemGlobal->setInt( 3, weaponId ); + g_charaDb.directExecute( stmtItemGlobal ); + } + void PlayerMinimal::createInvDbContainer( uint8_t slot ) const { auto stmtCreateInv = g_charaDb.getPreparedStatement( Db::CHARA_ITEMINV_INS ); @@ -372,4 +367,15 @@ namespace Core { stmtCreateInv->setInt( 2, slot ); g_charaDb.directExecute( stmtCreateInv ); } + + uint64_t PlayerMinimal::getNextUId64() const + { + g_charaDb.execute( std::string( "INSERT INTO uniqueiddata( IdName ) VALUES( 'NOT_SET' );" ) ); + auto res = g_charaDb.query( "SELECT LAST_INSERT_ID();" ); + + if( !res ) + return 0; + + return res->getUInt64( 1 ); + } } diff --git a/src/servers/Server_REST/PlayerMinimal.h b/src/servers/Server_REST/PlayerMinimal.h index 39fa77cb..2146e25a 100644 --- a/src/servers/Server_REST/PlayerMinimal.h +++ b/src/servers/Server_REST/PlayerMinimal.h @@ -154,6 +154,8 @@ namespace Core { uint32_t m_modelEquip[10]; + uint64_t getNextUId64() const; + private: uint32_t m_accountId; uint32_t m_id; @@ -170,7 +172,7 @@ namespace Core { uint16_t m_zoneId; - std::map< uint8_t, uint32_t > m_lookMap; + std::map< uint8_t, uint8_t > m_lookMap; std::map< uint8_t, uint16_t > m_classMap; uint8_t m_look[26]; @@ -178,6 +180,7 @@ namespace Core { char m_name[34]; + void insertDbGlobalItem( uint32_t weaponId, uint64_t uniqueId ) const; }; }