diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 62e6143a..796106c3 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 9e6232bc..6f8f39b0 100644 --- a/src/servers/sapphire_zone/ServerMgr.cpp +++ b/src/servers/sapphire_zone/ServerMgr.cpp @@ -365,15 +365,31 @@ 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 ) { + if( !forceDbLoad ) + { + auto it = m_playerNameMapById.find( playerId ); + + 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 ) ); if( !res->next() ) return "Unknown"; - return res->getString( 1 ); + std::string playerName = res->getString( 1 ); + updatePlayerName( playerId, playerName ); + + return playerName; +} + +void Core::ServerMgr::updatePlayerName( uint32_t playerId, const std::string & 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 13fbac75..efdb4870 100644 --- a/src/servers/sapphire_zone/ServerMgr.h +++ b/src/servers/sapphire_zone/ServerMgr.h @@ -44,7 +44,8 @@ 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: uint16_t m_port; @@ -59,6 +60,7 @@ private: std::map< uint32_t, SessionPtr > m_sessionMapById; std::map< std::string, SessionPtr > m_sessionMapByName; + std::map< uint32_t, std::string > m_playerNameMapById; std::map< uint32_t, uint32_t > m_zones; std::map< std::string, Entity::BNpcTemplatePtr > m_bNpcTemplateMap;