From a70c6117bf68b178f51306ea60071bcda4fad428 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 09:19:49 +0100 Subject: [PATCH 1/6] saving player names in map to reduce SQL query --- src/servers/sapphire_zone/ServerMgr.cpp | 11 ++++++++++- src/servers/sapphire_zone/ServerMgr.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index 9e6232bc..26aaa18e 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -367,13 +367,22 @@ bool Core::ServerMgr::isRunning() const std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) { + auto it = m_payerNameMap.find( playerId ); + + if( it != m_payerNameMap.end() ) + return ( it->second ); + auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto res = pDb->query( "SELECT name FROM charainfo WHERE characterid = " + std::to_string( playerId ) ); if( !res->next() ) return "Unknown"; - return res->getString( 1 ); + std::string playerName = res->getString( 1 ); + + m_payerNameMap[ playerId ] = playerName; + + return playerName; } void Core::ServerMgr::loadBNpcTemplates() diff --git a/src/servers/sapphire_zone/ServerMgr.h b/src/servers/sapphire_zone/ServerMgr.h index 13fbac75..6a2721e9 100644 --- a/src/servers/sapphire_zone/ServerMgr.h +++ b/src/servers/sapphire_zone/ServerMgr.h @@ -59,6 +59,7 @@ private: std::map< uint32_t, SessionPtr > m_sessionMapById; std::map< std::string, SessionPtr > m_sessionMapByName; + std::map< uint32_t, std::string > m_payerNameMap; std::map< uint32_t, uint32_t > m_zones; std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap; From 1a7a296e30dad2290f1b6ceff924658cdfaef9a7 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 09:42:51 +0100 Subject: [PATCH 2/6] style + update name --- src/servers/sapphire_zone/ServerMgr.cpp | 14 +++++++++++--- src/servers/sapphire_zone/ServerMgr.h | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index 26aaa18e..d521f999 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -367,9 +367,9 @@ bool Core::ServerMgr::isRunning() const std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) { - auto it = m_payerNameMap.find( playerId ); + auto it = m_payerNameMapById.find( playerId ); - if( it != m_payerNameMap.end() ) + if( it != m_payerNameMapById.end() ) return ( it->second ); auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); @@ -380,11 +380,19 @@ std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) std::string playerName = res->getString( 1 ); - m_payerNameMap[ playerId ] = playerName; + m_payerNameMapById[ playerId ] = playerName; return playerName; } +void Core::ServerMgr::updatePlayerName( uint32_t playerId, const std::string & playerNewName ) +{ + auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + pDb->execute( "UPDATE charainfo SET name = '" + playerNewName + "' WHERE name = " + std::to_string( playerId ) ); + + m_payerNameMapById[ playerId ] = playerNewName; +} + void Core::ServerMgr::loadBNpcTemplates() { auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); diff --git a/src/servers/sapphire_zone/ServerMgr.h b/src/servers/sapphire_zone/ServerMgr.h index 6a2721e9..7c2a91db 100644 --- a/src/servers/sapphire_zone/ServerMgr.h +++ b/src/servers/sapphire_zone/ServerMgr.h @@ -45,6 +45,7 @@ public: Entity::BNpcTemplatePtr getBNpcTemplate( uint32_t id ); std::string getPlayerNameFromDb( uint32_t playerId ); + void updatePlayerName( uint32_t playerId, const std::string& playerNewName ); private: uint16_t m_port; @@ -59,7 +60,7 @@ private: std::map< uint32_t, SessionPtr > m_sessionMapById; std::map< std::string, SessionPtr > m_sessionMapByName; - std::map< uint32_t, std::string > m_payerNameMap; + std::map< uint32_t, std::string > m_payerNameMapById; std::map< uint32_t, uint32_t > m_zones; std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap; From 5b29c328a8ae83b2eae716e3b41b841faa3d374e Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 11:04:19 +0100 Subject: [PATCH 3/6] no payers anymore --- src/servers/sapphire_zone/ServerMgr.cpp | 8 ++++---- src/servers/sapphire_zone/ServerMgr.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index d521f999..245e3a46 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -367,9 +367,9 @@ bool Core::ServerMgr::isRunning() const std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) { - auto it = m_payerNameMapById.find( playerId ); + auto it = m_playerNameMapById.find( playerId ); - if( it != m_payerNameMapById.end() ) + if( it != m_playerNameMapById.end() ) return ( it->second ); auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); @@ -380,7 +380,7 @@ std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) std::string playerName = res->getString( 1 ); - m_payerNameMapById[ playerId ] = playerName; + m_playerNameMapById[ playerId ] = playerName; return playerName; } @@ -390,7 +390,7 @@ void Core::ServerMgr::updatePlayerName( uint32_t playerId, const std::string & p auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); pDb->execute( "UPDATE charainfo SET name = '" + playerNewName + "' WHERE name = " + std::to_string( playerId ) ); - m_payerNameMapById[ playerId ] = playerNewName; + m_playerNameMapById[ playerId ] = playerNewName; } void Core::ServerMgr::loadBNpcTemplates() diff --git a/src/servers/sapphire_zone/ServerMgr.h b/src/servers/sapphire_zone/ServerMgr.h index 7c2a91db..861b5b7a 100644 --- a/src/servers/sapphire_zone/ServerMgr.h +++ b/src/servers/sapphire_zone/ServerMgr.h @@ -60,7 +60,7 @@ private: std::map< uint32_t, SessionPtr > m_sessionMapById; std::map< std::string, SessionPtr > m_sessionMapByName; - std::map< uint32_t, std::string > m_payerNameMapById; + std::map< uint32_t, std::string > m_playerNameMapById; std::map< uint32_t, uint32_t > m_zones; std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap; From 79d3deee644a709c1882800c35c2a4b1f371dea0 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 11:17:02 +0100 Subject: [PATCH 4/6] fixed SQL string --- src/servers/sapphire_zone/ServerMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index 245e3a46..9003537d 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -388,7 +388,7 @@ std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) void Core::ServerMgr::updatePlayerName( uint32_t playerId, const std::string & playerNewName ) { auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - pDb->execute( "UPDATE charainfo SET name = '" + playerNewName + "' WHERE name = " + std::to_string( playerId ) ); + pDb->execute( "UPDATE charainfo SET name = '" + playerNewName + "' WHERE characterid = " + std::to_string( playerId ) ); m_playerNameMapById[ playerId ] = playerNewName; } From b19cfb741e7f4b7bc2f9b7915c7cb049afcde59e Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 11:46:39 +0100 Subject: [PATCH 5/6] updates --- src/servers/sapphire_zone/Actor/Player.cpp | 7 +++++++ src/servers/sapphire_zone/ServerMgr.cpp | 14 +++++++------- src/servers/sapphire_zone/ServerMgr.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 7aba3e56..0601a7df 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -1533,6 +1533,13 @@ uint32_t Core::Entity::Player::getTerritoryTypeId() const void Core::Entity::Player::sendZonePackets() { + if( isLogin() ) + { + //Update player map in servermgr - in case player name has been changed + auto pServerMgr = g_fw.get< Core::ServerMgr >(); + pServerMgr->updatePlayerName( getId(), getName() ); + } + getCurrentZone()->onBeforePlayerZoneIn( *this ); auto initPacket = makeZonePacket< FFXIVIpcInit >( getId() ); diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index 9003537d..de23e693 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -365,12 +365,15 @@ bool Core::ServerMgr::isRunning() const return m_bRunning; } -std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) +std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId, bool forceDbLoad ) { - auto it = m_playerNameMapById.find( playerId ); + if( !forceDbLoad ) + { + auto it = m_playerNameMapById.find( playerId ); - if( it != m_playerNameMapById.end() ) - return ( it->second ); + if( it != m_playerNameMapById.end() ) + return ( it->second ); + } auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto res = pDb->query( "SELECT name FROM charainfo WHERE characterid = " + std::to_string( playerId ) ); @@ -387,9 +390,6 @@ std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId ) void Core::ServerMgr::updatePlayerName( uint32_t playerId, const std::string & playerNewName ) { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - pDb->execute( "UPDATE charainfo SET name = '" + playerNewName + "' WHERE characterid = " + std::to_string( playerId ) ); - m_playerNameMapById[ playerId ] = playerNewName; } diff --git a/src/servers/sapphire_zone/ServerMgr.h b/src/servers/sapphire_zone/ServerMgr.h index 861b5b7a..efdb4870 100644 --- a/src/servers/sapphire_zone/ServerMgr.h +++ b/src/servers/sapphire_zone/ServerMgr.h @@ -44,7 +44,7 @@ public: Entity::BNpcTemplatePtr getBNpcTemplate( const std::string& key ); Entity::BNpcTemplatePtr getBNpcTemplate( uint32_t id ); - std::string getPlayerNameFromDb( uint32_t playerId ); + std::string getPlayerNameFromDb( uint32_t playerId, bool forceDbLoad = false ); void updatePlayerName( uint32_t playerId, const std::string& playerNewName ); private: From 172a7487ca7c17220a2ce7275a8e9d7a1c19e911 Mon Sep 17 00:00:00 2001 From: AriAvery <41122212+AriAvery@users.noreply.github.com> Date: Fri, 23 Nov 2018 11:59:36 +0100 Subject: [PATCH 6/6] style --- src/servers/sapphire_zone/ServerMgr.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/servers/sapphire_zone/ServerMgr.cpp b/src/servers/sapphire_zone/ServerMgr.cpp index de23e693..6f8f39b0 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -382,8 +382,7 @@ std::string Core::ServerMgr::getPlayerNameFromDb( uint32_t playerId, bool forceD return "Unknown"; std::string playerName = res->getString( 1 ); - - m_playerNameMapById[ playerId ] = playerName; + updatePlayerName( playerId, playerName ); return playerName; }