From 5cbdee5ac7fdfbf63075d79a494a7327d42ff466 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 31 Aug 2017 23:29:45 +0200 Subject: [PATCH] tempalted getters for db fields --- .../Server_Common/Database/Database.cpp | 27 +----- src/servers/Server_Common/Database/Database.h | 61 +------------ src/servers/Server_Zone/Actor/Player.cpp | 91 ++++++++++--------- src/servers/Server_Zone/Actor/PlayerQuest.cpp | 22 ++--- src/servers/Server_Zone/Actor/PlayerSql.cpp | 46 +++++----- .../Server_Zone/Inventory/Inventory.cpp | 22 ++--- .../Server_Zone/Linkshell/LinkshellMgr.cpp | 4 +- .../Network/Handlers/PacketHandlers.cpp | 6 +- src/servers/Server_Zone/Zone/Zone.cpp | 30 +++--- src/servers/Server_Zone/Zone/ZoneMgr.cpp | 6 +- 10 files changed, 120 insertions(+), 195 deletions(-) diff --git a/src/servers/Server_Common/Database/Database.cpp b/src/servers/Server_Common/Database/Database.cpp index aed6dccc..d90cf759 100644 --- a/src/servers/Server_Common/Database/Database.cpp +++ b/src/servers/Server_Common/Database/Database.cpp @@ -126,7 +126,7 @@ uint64_t Database::getNextUId() Db::Field *field = res->fetch(); - return field[0].getUInt64(); + return field[0].get< uint64_t >(); } DatabaseConnection * Database::getFreeConnection() @@ -167,31 +167,6 @@ boost::shared_ptr Database::query( const std::string& QueryString ) return qResult; } -QueryResult * Database::queryNA( const char* QueryString ) -{ - // Send the query - QueryResult * qResult = NULL; - DatabaseConnection * con = getFreeConnection(); - - if( _SendQuery( con, QueryString, false ) ) - { - qResult = _StoreQueryResult( con ); - } - - con->lock.unlock(); - return qResult; -} - -QueryResult * Database::fQuery( const char * QueryString, DatabaseConnection * con ) { - // Send the query - QueryResult * qResult = NULL; - if( _SendQuery( con, QueryString, false ) ) - { - qResult = _StoreQueryResult( con ); - } - - return qResult; -} bool Database::execute( const std::string& QueryString ) { diff --git a/src/servers/Server_Common/Database/Database.h b/src/servers/Server_Common/Database/Database.h index 4404e91f..077f4df7 100644 --- a/src/servers/Server_Common/Database/Database.h +++ b/src/servers/Server_Common/Database/Database.h @@ -61,40 +61,13 @@ namespace Core { return m_pValue ? atoi( m_pValue ) > 0 : false; } - // return as unsigned 8 bit integer - __inline uint8_t getUInt8() + template< class T > + __inline T get() { - return m_pValue ? static_cast< uint8_t >( atol( m_pValue ) ) : 0; - } + if( !m_pValue ) + return 0; - // return as signed 8 bit integer - __inline int8_t getInt8() - { - return m_pValue ? static_cast< int8_t >( atol( m_pValue ) ) : 0; - } - - // return as unsigned 16 bit integer - __inline uint16_t getUInt16() - { - return m_pValue ? static_cast< uint16_t >( atol( m_pValue ) ) : 0; - } - - // return as signed 16 bit integer - __inline int16_t getInt16() - { - return m_pValue ? static_cast< int16_t >( atol( m_pValue ) ) : 0; - } - - // return as unsigned 32 bit integer - __inline uint32_t getUInt32() - { - return m_pValue ? static_cast< uint32_t >( atol( m_pValue ) ) : 0; - } - - // return as signed 8 bit integer - __inline int32_t getInt32() - { - return m_pValue ? static_cast< int32_t >( atol( m_pValue ) ) : 0; + return static_cast< T >( atol( m_pValue ) ); } __inline uint32_t getLength() @@ -102,25 +75,6 @@ namespace Core { return m_size; } - // return as unsigned 64 bit integer - uint64_t getUInt64() - { - if( m_pValue ) - { - #ifdef _WIN32 - uint64_t value; - sscanf( m_pValue, "%I64d", &value ); - return value; - #else - uint64_t value; - sscanf( m_pValue, "%Lu", &value ); - return value; - - #endif - } - else - return 0; - } private: char *m_pValue; @@ -191,14 +145,9 @@ namespace Core { void shutdown(); boost::shared_ptr query( const std::string& QueryString ); - QueryResult* queryNA( const char* QueryString ); - QueryResult* fQuery( const char * QueryString, DatabaseConnection *con ); - void fWaitExecute( const char * QueryString, DatabaseConnection *con ); - bool waitExecute( const char* QueryString, ... );//Wait For Request Completion bool waitExecuteNA( const char* QueryString );//Wait For Request Completion bool execute( const char* QueryString, ... ); bool execute( const std::string& QueryString ); - bool executeNA( const char* QueryString ); __inline const std::string& getHostName() { diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 07db8ed7..56b2e6b4 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -282,53 +282,54 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) { auto data = g_exdData.getAetheryteInfo( aetheryteId ); - if( data != nullptr ) + if( data == nullptr ) { - - setStateFlag( PlayerStateFlag::BetweenAreas ); - sendStateFlags(); - - auto z_pos = g_zoneMgr.getZonePosition( data->levelId ); - - Common::FFXIVARR_POSITION3 pos; - pos.x = 0; - pos.y = 0; - pos.z = 0; - float rot = 0; - - if( z_pos != nullptr ) - { - pos = z_pos->getTargetPosition(); - rot = z_pos->getTargetRotation(); - } - - - sendDebug( "Teleport: " + data->placename + " " + data->placename_aethernet + - "(" + std::to_string( data->levelId ) + ")" ); - - // TODO: this should be simplified and a type created in server_common/common.h. - if( type == 1 ) // teleport - { - prepareZoning( data->target_zone, true, 1, 112 ); - sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); - setZoningType( Common::ZoneingType::Teleport ); - } - else if( type == 2 ) // aethernet - { - prepareZoning( data->target_zone, true, 1, 112 ); - sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); - setZoningType( Common::ZoneingType::Teleport ); - } - else if( type == 3 ) // return - { - prepareZoning( data->target_zone, true, 1, 111 ); - sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x03 ) ); - setZoningType( Common::ZoneingType::Return ); - } - - m_queuedZoneing = boost::make_shared< QueuedZoning >( data->target_zone, pos, Util::getTimeMs(), rot ); - + return; } + + setStateFlag( PlayerStateFlag::BetweenAreas ); + sendStateFlags(); + + auto z_pos = g_zoneMgr.getZonePosition( data->levelId ); + + Common::FFXIVARR_POSITION3 pos; + pos.x = 0; + pos.y = 0; + pos.z = 0; + float rot = 0; + + if( z_pos != nullptr ) + { + pos = z_pos->getTargetPosition(); + rot = z_pos->getTargetRotation(); + } + + sendDebug( "Teleport: " + data->placename + " " + data->placename_aethernet + + "(" + std::to_string( data->levelId ) + ")" ); + + // TODO: this should be simplified and a type created in server_common/common.h. + if( type == 1 ) // teleport + { + prepareZoning( data->target_zone, true, 1, 112 ); + sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); + setZoningType( Common::ZoneingType::Teleport ); + } + else if( type == 2 ) // aethernet + { + prepareZoning( data->target_zone, true, 1, 112 ); + sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); + setZoningType( Common::ZoneingType::Teleport ); + } + else if( type == 3 ) // return + { + prepareZoning( data->target_zone, true, 1, 111 ); + sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x03 ) ); + setZoningType( Common::ZoneingType::Return ); + } + + m_queuedZoneing = boost::make_shared< QueuedZoning >( data->target_zone, pos, Util::getTimeMs(), rot ); + + } void Core::Entity::Player::forceZoneing( uint32_t zoneId ) diff --git a/src/servers/Server_Zone/Actor/PlayerQuest.cpp b/src/servers/Server_Zone/Actor/PlayerQuest.cpp index 07c529d2..e1965c8a 100644 --- a/src/servers/Server_Zone/Actor/PlayerQuest.cpp +++ b/src/servers/Server_Zone/Actor/PlayerQuest.cpp @@ -39,20 +39,20 @@ bool Core::Entity::Player::loadActiveQuests() //g_log.debug( " QUEST_ID: " + std::to_string( field[index].getInt16() ) + " INDEX: " + std::to_string( index ) ); - if( field[index].getInt16() != 0 ) + if( field[index].get< int16_t >() != 0 ) { boost::shared_ptr pActiveQuest( new QuestActive() ); - pActiveQuest->c.questId = field[index].getInt16(); - pActiveQuest->c.sequence = field[index + 1].getUInt8(); - pActiveQuest->c.flags = field[index + 2].getUInt8(); - pActiveQuest->c.UI8A = field[index + 3].getUInt8(); - pActiveQuest->c.UI8B = field[index + 4].getUInt8(); - pActiveQuest->c.UI8C = field[index + 5].getUInt8(); - pActiveQuest->c.UI8D = field[index + 6].getUInt8(); - pActiveQuest->c.UI8E = field[index + 7].getUInt8(); - pActiveQuest->c.UI8F = field[index + 8].getUInt8(); - pActiveQuest->c.padding1 = field[index + 9].getUInt8(); + pActiveQuest->c.questId = field[index].get< int16_t >(); + pActiveQuest->c.sequence = field[index + 1].get< uint8_t >(); + pActiveQuest->c.flags = field[index + 2].get< uint8_t >(); + pActiveQuest->c.UI8A = field[index + 3].get< uint8_t >(); + pActiveQuest->c.UI8B = field[index + 4].get< uint8_t >(); + pActiveQuest->c.UI8C = field[index + 5].get< uint8_t >(); + pActiveQuest->c.UI8D = field[index + 6].get< uint8_t >(); + pActiveQuest->c.UI8E = field[index + 7].get< uint8_t >(); + pActiveQuest->c.UI8F = field[index + 8].get< uint8_t >(); + pActiveQuest->c.padding1 = field[index + 9].get< uint8_t >(); m_activeQuests[i] = pActiveQuest; m_questIdToQuestIdx[pActiveQuest->c.questId] = i; diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index 65ccf401..b6cfbc04 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -99,13 +99,13 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) strcpy( m_name, field[0].getString() ); - ZonePtr pCurrZone = g_zoneMgr.getZone( field[1].getInt32() ); - m_zoneId = field[1].getInt32(); + ZonePtr pCurrZone = g_zoneMgr.getZone( field[1].get< int32_t >() ); + m_zoneId = field[1].get< int32_t >(); // see if a valid zone could be found for the character if( !pCurrZone ) { - g_log.error( "[" + char_id_str + "] Zone " + std::to_string( field[1].getInt32() ) + "not found!" ); + g_log.error( "[" + char_id_str + "] Zone " + std::to_string( field[1].get< int32_t >() ) + "not found!" ); g_log.error( "[" + char_id_str + "] Setting default zone instead" ); // default to new gridania @@ -118,9 +118,9 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) setRotation( 0.0f ); } - m_hp = field[2].getUInt32(); + m_hp = field[2].get< uint16_t >(); - m_mp = field[3].getUInt32(); + m_mp = field[3].get< uint16_t >(); m_tp = 0; m_pos.x = field[6].getFloat(); @@ -130,22 +130,22 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) field[11].getBinary( reinterpret_cast< char* >( m_customize ), sizeof( m_customize ) ); - m_modelMainWeapon = field[12].getUInt64(); + m_modelMainWeapon = field[12].get< uint64_t >(); field[14].getBinary( reinterpret_cast< char* >( m_modelEquip ), sizeof( m_modelEquip ) ); - m_guardianDeity = field[15].getUInt8(); - m_birthDay = field[16].getUInt8(); - m_birthMonth = field[17].getUInt8(); - m_status = static_cast< ActorStatus >( field[18].getUInt8() ); - m_class = static_cast< ClassJob >( field[19].getUInt8() ); - m_homePoint = field[20].getUInt8(); + m_guardianDeity = field[15].get< uint8_t >(); + m_birthDay = field[16].get< uint8_t >(); + m_birthMonth = field[17].get< uint8_t >(); + m_status = static_cast< ActorStatus >( field[18].get< uint8_t >() ); + m_class = static_cast< ClassJob >( field[19].get< uint8_t >() ); + m_homePoint = field[20].get< uint8_t >(); field[21].getBinary( reinterpret_cast< char* >( m_howTo ), sizeof( m_howTo ) ); - m_contentId = field[22].getUInt64(); + m_contentId = field[22].get< uint64_t >(); - m_voice = field[23].getUInt32(); + m_voice = field[23].get< uint32_t >(); field[24].getBinary( reinterpret_cast< char* >( m_questCompleteFlags ), sizeof( m_questCompleteFlags ) ); @@ -159,17 +159,17 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) field[29].getBinary( reinterpret_cast< char* >( m_discovery ), sizeof( m_discovery ) ); - m_startTown = field[30].getInt8(); - m_playTime = field[31].getUInt32(); + m_startTown = field[30].get< int8_t >(); + m_playTime = field[31].get< uint32_t >(); m_bNewAdventurer = field[32].getBool(); - m_gc = field[33].getUInt8(); + m_gc = field[33].get< uint8_t >(); field[34].getBinary( reinterpret_cast< char* >( m_gcRank ), sizeof( m_gcRank ) ); - m_cfPenaltyUntil = field[35].getUInt32(); + m_cfPenaltyUntil = field[35].get< uint32_t >(); - m_openingSequence = field[36].getUInt32(); + m_openingSequence = field[36].get< uint32_t >(); m_pCell = nullptr; @@ -240,8 +240,8 @@ bool Core::Entity::Player::loadClassData() for( uint8_t i = 0; i < 25; i++ ) { uint8_t index = i * 2; - m_classArray[i] = field[index].getUInt8(); - m_expArray[i] = field[index + 1].getUInt32(); + m_classArray[i] = field[index].get< uint8_t >(); + m_expArray[i] = field[index + 1].get< uint32_t >(); } return true; @@ -256,8 +256,8 @@ bool Core::Entity::Player::loadSearchInfo() Db::Field* field = pQR->fetch(); - m_searchSelectClass = field[1].getUInt8(); - m_searchSelectRegion = field[2].getUInt8(); + m_searchSelectClass = field[1].get< uint8_t >(); + m_searchSelectRegion = field[2].get< uint8_t >(); sprintf( m_searchMessage, field[3].getString() ); return true; diff --git a/src/servers/Server_Zone/Inventory/Inventory.cpp b/src/servers/Server_Zone/Inventory/Inventory.cpp index 28e46a18..eda20ba1 100644 --- a/src/servers/Server_Zone/Inventory/Inventory.cpp +++ b/src/servers/Server_Zone/Inventory/Inventory.cpp @@ -633,15 +633,15 @@ Core::ItemPtr Core::Inventory::loadItem( uint64_t uId ) try { Db::Field *itemField = itemRes->fetch(); - auto itemInfo = g_exdData.getItemInfo( itemField[0].getUInt32() ); - bool isHq = itemField[2].getUInt8() == 1 ? true : false; + auto itemInfo = g_exdData.getItemInfo( itemField[0].get< uint32_t >() ); + bool isHq = itemField[2].get< uint8_t >() == 1 ? true : false; ItemPtr pItem( new Item( uId, itemInfo->id, itemInfo->model_primary, itemInfo->model_secondary, static_cast< ItemCategory >( itemInfo->ui_category ), isHq ) ); - pItem->setStackSize( itemField[1].getUInt32() ); + pItem->setStackSize( itemField[1].get< uint32_t >() ); return pItem; } @@ -669,11 +669,11 @@ bool Core::Inventory::load() do { - uint16_t storageId = field[0].getUInt16(); + uint16_t storageId = field[0].get< uint16_t >(); for( int32_t i = 1; i <= 14; i++ ) { - uint64_t uItemId = field[i].getUInt64(); + uint64_t uItemId = field[i].get< uint64_t >(); if( uItemId == 0 ) continue; @@ -707,10 +707,10 @@ bool Core::Inventory::load() do { - uint16_t storageId = bagField[0].getUInt16(); + uint16_t storageId = bagField[0].get< uint16_t >(); for( int32_t i = 1; i <= 25; i++ ) { - uint64_t uItemId = bagField[i].getUInt64(); + uint64_t uItemId = bagField[i].get< uint64_t >(); if( uItemId == 0 ) continue; @@ -740,10 +740,10 @@ bool Core::Inventory::load() do { - uint16_t storageId = curField[0].getUInt16(); + uint16_t storageId = curField[0].get< uint16_t >(); for( int32_t i = 1; i <= 12; i++ ) { - uint64_t uItemId = curField[i].getUInt64(); + uint64_t uItemId = curField[i].get< uint64_t >(); if( uItemId == 0 ) continue; @@ -774,10 +774,10 @@ bool Core::Inventory::load() do { - uint16_t storageId = crystalField[0].getUInt16(); + uint16_t storageId = crystalField[0].get< uint16_t >(); for( int32_t i = 1; i <= 17; i++ ) { - uint64_t uItemId = crystalField[i].getUInt64(); + uint64_t uItemId = crystalField[i].get< uint64_t >(); if( uItemId == 0 ) continue; diff --git a/src/servers/Server_Zone/Linkshell/LinkshellMgr.cpp b/src/servers/Server_Zone/Linkshell/LinkshellMgr.cpp index 6938c4ad..077f42d0 100644 --- a/src/servers/Server_Zone/Linkshell/LinkshellMgr.cpp +++ b/src/servers/Server_Zone/Linkshell/LinkshellMgr.cpp @@ -29,8 +29,8 @@ bool Core::LinkshellMgr::loadLinkshells() do { - uint32_t linkshellId = field[0].getUInt32(); - uint32_t masterId = field[1].getUInt32(); + uint32_t linkshellId = field[0].get< uint32_t >(); + uint32_t masterId = field[1].get< uint32_t >(); std::string name = field[3].getString(); auto func = []( std::set< uint64_t >& outList, Db::Field * pField ) diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 85c81581..453fa8bf 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -350,13 +350,13 @@ void Core::Network::GameConnection::discoveryHandler( const Packets::GamePacket& Db::Field *field = pQR->fetch(); GamePacketNew< FFXIVIpcDiscovery, ServerZoneIpcType > discoveryPacket( pPlayer->getId() ); - discoveryPacket.data().map_id = field[1].getInt16(); - discoveryPacket.data().map_part_id = field[2].getInt16(); + discoveryPacket.data().map_id = field[1].get< int16_t >(); + discoveryPacket.data().map_part_id = field[2].get< int16_t >(); pPlayer->queuePacket( discoveryPacket ); pPlayer->sendNotice( "Discovery ref pos ID: " + std::to_string( ref_position_id ) ); - pPlayer->discover( field[1].getInt16(), field[2].getInt16() ); + pPlayer->discover( field[1].get< int16_t >(), field[2].get< int16_t >() ); } diff --git a/src/servers/Server_Zone/Zone/Zone.cpp b/src/servers/Server_Zone/Zone/Zone.cpp index c1fda497..522dc9a8 100644 --- a/src/servers/Server_Zone/Zone/Zone.cpp +++ b/src/servers/Server_Zone/Zone/Zone.cpp @@ -162,24 +162,24 @@ void Zone::loadCellCache() do { Db::Field *field = pQR->fetch(); - uint32_t id = field[0].getUInt32(); - uint32_t targetZoneId = field[1].getUInt32(); - uint32_t nameId = field[2].getUInt32(); - uint32_t sizeId = field[3].getUInt32(); - uint32_t classJob = field[4].getUInt32(); - uint32_t displayFlags1 = field[5].getUInt32(); - uint32_t displayFlags2 = field[6].getUInt32(); - uint32_t level = field[7].getUInt32(); + uint32_t id = field[0].get< uint32_t >(); + uint32_t targetZoneId = field[1].get< uint32_t >(); + uint32_t nameId = field[2].get< uint32_t >(); + uint32_t sizeId = field[3].get< uint32_t >(); + uint32_t classJob = field[4].get< uint32_t >(); + uint32_t displayFlags1 = field[5].get< uint32_t >(); + uint32_t displayFlags2 = field[6].get< uint32_t >(); + uint32_t level = field[7].get< uint32_t >(); float posX = field[8].getFloat(); float posY = field[9].getFloat(); float posZ = field[10].getFloat(); - uint32_t rotation = field[11].getUInt32(); - uint32_t mobType = field[12].getUInt32(); - uint32_t behaviour = field[13].getUInt32(); - uint64_t modelMainWeapon = field[14].getUInt32(); - uint64_t modelSubWeapon = field[15].getUInt32(); - uint32_t modelId = field[16].getUInt32(); - uint32_t type = field[17].getUInt32(); + uint32_t rotation = field[11].get< uint32_t >(); + uint32_t mobType = field[12].get< uint32_t >(); + uint32_t behaviour = field[13].get< uint32_t >(); + uint64_t modelMainWeapon = field[14].get< uint32_t >(); + uint64_t modelSubWeapon = field[15].get< uint32_t >(); + uint32_t modelId = field[16].get< uint32_t >(); + uint32_t type = field[17].get< uint32_t >(); Common::FFXIVARR_POSITION3 pos; diff --git a/src/servers/Server_Zone/Zone/ZoneMgr.cpp b/src/servers/Server_Zone/Zone/ZoneMgr.cpp index 4bca2cfa..2e2180a5 100644 --- a/src/servers/Server_Zone/Zone/ZoneMgr.cpp +++ b/src/servers/Server_Zone/Zone/ZoneMgr.cpp @@ -34,14 +34,14 @@ namespace Core { do { Db::Field *field = pQR->fetch(); - uint32_t id = field[0].getUInt32(); - uint32_t targetZoneId = field[1].getUInt32(); + uint32_t id = field[0].get< uint32_t >(); + uint32_t targetZoneId = field[1].get< uint32_t >(); Common::FFXIVARR_POSITION3 pos; pos.x = field[2].getFloat(); pos.y = field[3].getFloat(); pos.z = field[4].getFloat(); float posO = field[5].getFloat(); - uint32_t radius = field[6].getUInt32(); + uint32_t radius = field[6].get< uint32_t >(); m_zonePositionMap[id] = ZonePositionPtr( new ZonePosition( id, targetZoneId, pos, radius, posO ) );