mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 16:37:45 +00:00
Moved player management actually into playerMgr...
This commit is contained in:
parent
e0ec74a6bc
commit
d8dd7dea4c
19 changed files with 252 additions and 248 deletions
|
@ -84,7 +84,7 @@ void Sapphire::World::ContentFinder::update()
|
|||
server.queueForPlayer( queuedPlayer->getCharacterId(), updatePacket );
|
||||
|
||||
pInstanceContent->bindPlayer( queuedPlayer->getEntityId() );
|
||||
warpMgr.requestMoveTerritory( *server.getPlayer( queuedPlayer->getEntityId() ), WarpType::WARP_TYPE_INSTANCE_CONTENT, pInstanceContent->getGuId(), { 0.f, 0.f, 0.f }, 0.f );
|
||||
warpMgr.requestMoveTerritory( *playerMgr().getPlayer( queuedPlayer->getEntityId() ), WarpType::WARP_TYPE_INSTANCE_CONTENT, pInstanceContent->getGuId(), { 0.f, 0.f, 0.f }, 0.f );
|
||||
|
||||
auto zonePacket = makeUpdateContent( queuedPlayer->getEntityId(), instance->getTerritoryTypeId(), 0, pInstanceContent->getGuId() );
|
||||
auto zonePacket2 = makeUpdateContent( queuedPlayer->getEntityId(), instance->getTerritoryTypeId(), content->m_partyMemberCount );
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "Actor/Player.h"
|
||||
#include "BlacklistMgr.h"
|
||||
#include "FriendListMgr.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
#include "WorldServer.h"
|
||||
|
||||
|
@ -22,10 +23,9 @@ using namespace Sapphire::Network::Packets::WorldPackets;
|
|||
bool BlacklistMgr::onAddCharacter( Entity::Player& source, const std::string& targetName )
|
||||
{
|
||||
// add target to blacklist
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pTarget = server.getPlayer( targetName );
|
||||
auto pTarget = playerMgr.getPlayer( targetName );
|
||||
if( !pTarget )
|
||||
{
|
||||
// target doesn't exist in server player table
|
||||
|
@ -77,10 +77,9 @@ bool BlacklistMgr::onAddCharacter( Entity::Player& source, const std::string& ta
|
|||
bool BlacklistMgr::onRemoveCharacter( Entity::Player& source, const std::string& targetName )
|
||||
{
|
||||
// remove target from blacklist
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pTarget = server.getPlayer( targetName );
|
||||
auto pTarget = playerMgr.getPlayer( targetName );
|
||||
if( !pTarget )
|
||||
{
|
||||
// target doesn't exist in server player table
|
||||
|
@ -115,6 +114,7 @@ bool BlacklistMgr::onGetBlacklistPage( Entity::Player& source, uint8_t key, uint
|
|||
// it'll also be called multiple times sequentially until there are no more entries left (id == 0)
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
std::vector< Server::BlacklistCharacter > entries;
|
||||
|
||||
|
@ -134,7 +134,7 @@ bool BlacklistMgr::onGetBlacklistPage( Entity::Player& source, uint8_t key, uint
|
|||
}
|
||||
|
||||
auto id = idVec[ i ];
|
||||
auto pPlayer = server.getPlayer( id );
|
||||
auto pPlayer = playerMgr.getPlayer( id );
|
||||
|
||||
if( !pPlayer )
|
||||
continue;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <Service.h>
|
||||
|
||||
#include "ChatChannelMgr.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
#include "Actor/Player.h"
|
||||
#include "WorldServer.h"
|
||||
|
@ -110,6 +111,7 @@ void ChatChannelMgr::sendMessageToChannel( uint64_t channelId, Entity::Player& s
|
|||
auto& channelMembers = m_channels[ channelId ];
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
// send message to all players in chat channel
|
||||
for( const auto id : channelMembers )
|
||||
|
@ -126,7 +128,7 @@ void ChatChannelMgr::sendMessageToChannel( uint64_t channelId, Entity::Player& s
|
|||
continue;
|
||||
}
|
||||
|
||||
auto pPlayer = server.getPlayer( id );
|
||||
auto pPlayer = playerMgr.getPlayer( id );
|
||||
|
||||
// prepare message packet, associating message and sender info with channel data
|
||||
auto chatToChannelPacket = std::make_shared< Packets::Server::ChatToChannelPacket >( *pPlayer, sender, channelId, message );
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "FreeCompany/FreeCompany.h"
|
||||
#include "FreeCompanyMgr.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
#include "Actor/Player.h"
|
||||
|
||||
|
@ -164,6 +165,7 @@ FreeCompanyPtr FreeCompanyMgr::getPlayerFreeCompany( uint64_t characterId )
|
|||
|
||||
void FreeCompanyMgr::sendFcInviteList( Entity::Player& player )
|
||||
{
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto fc = getPlayerFreeCompany( player.getCharacterId() );
|
||||
if( !fc )
|
||||
return;
|
||||
|
@ -177,7 +179,7 @@ void FreeCompanyMgr::sendFcInviteList( Entity::Player& player )
|
|||
std::strcpy( inviteListPacket->data().FreeCompanyName, fc->getName().c_str() );
|
||||
|
||||
// fill master character data
|
||||
auto masterCharacter = server.getPlayer( fc->getMasterId() );
|
||||
auto masterCharacter = playerMgr.getPlayer( fc->getMasterId() );
|
||||
if( !masterCharacter )
|
||||
{
|
||||
Logger::error( "FreeCompanyMgr: Unable to look up master character#{}!", fc->getMasterId() );
|
||||
|
@ -199,7 +201,7 @@ void FreeCompanyMgr::sendFcInviteList( Entity::Player& player )
|
|||
if( entry == 0 || entry == fc->getMasterId() )
|
||||
continue;
|
||||
|
||||
auto signee = server.getPlayer( entry );
|
||||
auto signee = playerMgr.getPlayer( entry );
|
||||
if( !signee )
|
||||
continue;
|
||||
|
||||
|
@ -241,7 +243,8 @@ void FreeCompanyMgr::sendFcStatus( Entity::Player& player )
|
|||
void FreeCompanyMgr::onFcLogin( uint64_t characterId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto player = server.getPlayer( characterId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto player = playerMgr.getPlayer( characterId );
|
||||
if( !player )
|
||||
return;
|
||||
|
||||
|
@ -268,7 +271,8 @@ void FreeCompanyMgr::onFcLogin( uint64_t characterId )
|
|||
void FreeCompanyMgr::onFcLogout( uint64_t characterId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto player = server.getPlayer( characterId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto player = playerMgr.getPlayer( characterId );
|
||||
if( !player )
|
||||
return;
|
||||
|
||||
|
|
|
@ -310,7 +310,7 @@ LandPtr HousingMgr::getLandByOwnerId( uint64_t id )
|
|||
void HousingMgr::sendLandSignOwned( Entity::Player& player, const Common::LandIdent ident )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
player.setActiveLand( static_cast< uint8_t >( ident.landId ), static_cast< uint8_t >( ident.wardNum ) );
|
||||
|
||||
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
|
||||
|
@ -341,7 +341,7 @@ void HousingMgr::sendLandSignOwned( Entity::Player& player, const Common::LandId
|
|||
|
||||
uint64_t characterId = land->getOwnerId();
|
||||
|
||||
std::string playerName = server.getPlayerNameFromDb( characterId );
|
||||
std::string playerName = playerMgr.getPlayerNameFromDb( characterId );
|
||||
|
||||
memcpy( &landInfoSignPacket->data().OwnerName, playerName.c_str(), playerName.size() );
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "Linkshell/Linkshell.h"
|
||||
#include "LinkshellMgr.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
#include "Actor/Player.h"
|
||||
|
||||
|
@ -343,7 +344,8 @@ void LinkshellMgr::leaveLinkshell( uint64_t lsId, uint64_t characterId )
|
|||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& chatChannelMgr = Common::Service< Manager::ChatChannelMgr >::ref();
|
||||
auto leavingPlayer = server.getPlayer( characterId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto leavingPlayer = playerMgr.getPlayer( characterId );
|
||||
auto lsPtr = getLinkshellById( lsId );
|
||||
if( !leavingPlayer || !lsPtr )
|
||||
return;
|
||||
|
@ -359,7 +361,8 @@ void LinkshellMgr::joinLinkshell( uint64_t lsId, uint64_t characterId )
|
|||
{
|
||||
auto &server = Common::Service< World::WorldServer >::ref();
|
||||
auto& chatChannelMgr = Common::Service< Manager::ChatChannelMgr >::ref();
|
||||
auto joiningPlayer = server.getPlayer( characterId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto joiningPlayer = playerMgr.getPlayer( characterId );
|
||||
auto lsPtr = getLinkshellById( lsId );
|
||||
if( !joiningPlayer || !lsPtr )
|
||||
return;
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "PartyMgr.h"
|
||||
#include "WorldServer.h"
|
||||
#include "ChatChannelMgr.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
#include "Session.h"
|
||||
|
||||
|
@ -266,9 +267,10 @@ void PartyMgr::onKick( const std::string& kickPlayerName, Entity::Player& leader
|
|||
void PartyMgr::onChangeLeader( const std::string& newLeaderName, Entity::Player& oldLeader )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto party = getParty( oldLeader.getPartyId() );
|
||||
|
||||
auto pNewLeader = server.getPlayer( newLeaderName );
|
||||
auto pNewLeader = playerMgr.getPlayer( newLeaderName );
|
||||
|
||||
if( !pNewLeader )
|
||||
{
|
||||
|
@ -331,13 +333,13 @@ std::vector< Entity::PlayerPtr > PartyMgr::getPartyMembers( Party& party )
|
|||
{
|
||||
std::vector< Entity::PlayerPtr > members;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
for( auto& memberId : party.MemberId )
|
||||
{
|
||||
if( memberId == 0 )
|
||||
continue;
|
||||
|
||||
auto pPlayer = server.getPlayer( memberId );
|
||||
auto pPlayer = playerMgr.getPlayer( memberId );
|
||||
|
||||
members.push_back( pPlayer );
|
||||
}
|
||||
|
@ -346,12 +348,12 @@ std::vector< Entity::PlayerPtr > PartyMgr::getPartyMembers( Party& party )
|
|||
|
||||
Entity::PlayerPtr PartyMgr::getPartyLeader( Party& party )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
if( party.LeaderId == 0 )
|
||||
return nullptr;
|
||||
|
||||
auto pLeader = server.getPlayer( party.LeaderId );
|
||||
auto pLeader = playerMgr.getPlayer( party.LeaderId );
|
||||
|
||||
return pLeader;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
#include <Script/ScriptMgr.h>
|
||||
#include <Common.h>
|
||||
|
||||
#include <Database/ZoneDbConnection.h>
|
||||
#include <Database/DbWorkerPool.h>
|
||||
|
||||
#include <Network/GameConnection.h>
|
||||
#include <Network/CommonActorControl.h>
|
||||
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
||||
|
@ -44,6 +47,163 @@ using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
|||
using namespace Sapphire::Network::ActorControl;
|
||||
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::getPlayer( uint32_t entityId )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapById.find( entityId );
|
||||
|
||||
if( it != m_playerMapById.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( entityId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::getPlayer( uint64_t characterId )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapByCharacterId.find( characterId );
|
||||
|
||||
if( it != m_playerMapByCharacterId.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::getPlayer( const std::string& playerName )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapByName.find( playerName );
|
||||
|
||||
if( it != m_playerMapByName.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( playerName );
|
||||
}
|
||||
|
||||
|
||||
std::string PlayerMgr::getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad )
|
||||
{
|
||||
if( !forceDbLoad )
|
||||
{
|
||||
auto it = m_playerMapByCharacterId.find( characterId );
|
||||
|
||||
if( it != m_playerMapByCharacterId.end() )
|
||||
return ( it->second->getName() );
|
||||
}
|
||||
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT name FROM charainfo WHERE characterid = " + std::to_string( characterId ) );
|
||||
|
||||
if( !res->next() )
|
||||
return "Unknown";
|
||||
|
||||
std::string playerName = res->getString( 1 );
|
||||
|
||||
return playerName;
|
||||
}
|
||||
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::addPlayer( uint64_t characterId )
|
||||
{
|
||||
auto pPlayer = Entity::make_Player();
|
||||
|
||||
if( !pPlayer->loadFromDb( characterId ) )
|
||||
return nullptr;
|
||||
|
||||
m_playerMapById[ pPlayer->getId() ] = pPlayer;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = pPlayer;
|
||||
m_playerMapByName[ pPlayer->getName() ] = pPlayer;
|
||||
|
||||
return pPlayer;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::loadPlayer( uint32_t entityId )
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo WHERE EntityId = " + std::to_string( entityId ) );
|
||||
if( !res || !res->next() )
|
||||
return nullptr;
|
||||
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::loadPlayer( uint64_t characterId )
|
||||
{
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::loadPlayer( const std::string& playerName )
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo WHERE Name = " + playerName );
|
||||
if( !res || !res->next() )
|
||||
return nullptr;
|
||||
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
bool PlayerMgr::loadPlayers()
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo" );
|
||||
|
||||
// no players or failed
|
||||
while( res->next() )
|
||||
{
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
if( !addPlayer( characterId ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr PlayerMgr::syncPlayer( uint64_t characterId )
|
||||
{
|
||||
auto pPlayer = getPlayer( characterId );
|
||||
if( !pPlayer )
|
||||
return nullptr;
|
||||
|
||||
// get our cached last db write
|
||||
auto lastCacheSync = pPlayer->getLastDBWrite();
|
||||
|
||||
// update this player's last db write
|
||||
if( !pPlayer->syncLastDBWrite() )
|
||||
return nullptr;
|
||||
|
||||
// get db last write
|
||||
auto dbSync = pPlayer->getLastDBWrite();
|
||||
|
||||
|
||||
// db was updated and we lost track of it - update
|
||||
// @todo for now, always reload the player on login.
|
||||
//if( dbSync != lastCacheSync )
|
||||
{
|
||||
// clear current maps
|
||||
m_playerMapById[ pPlayer->getId() ] = nullptr;
|
||||
m_playerMapByName[ pPlayer->getName() ] = nullptr;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = nullptr;
|
||||
|
||||
if( !pPlayer->loadFromDb( characterId ) )
|
||||
return nullptr;
|
||||
|
||||
m_playerMapById[ pPlayer->getId() ] = pPlayer;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = pPlayer;
|
||||
m_playerMapByName[ pPlayer->getName() ] = pPlayer;
|
||||
}
|
||||
|
||||
return pPlayer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PlayerMgr::onOnlineStatusChanged( Entity::Player& player, bool updateProfile )
|
||||
{
|
||||
auto statusPacket = makeZonePacket< FFXIVIpcSetOnlineStatus >( player.getId() );
|
||||
|
|
|
@ -11,6 +11,17 @@ namespace Sapphire::World::Manager
|
|||
public:
|
||||
PlayerMgr() = default;
|
||||
|
||||
std::string getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad = false );
|
||||
Entity::PlayerPtr getPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr getPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr getPlayer( const std::string& playerName );
|
||||
Entity::PlayerPtr addPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr loadPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr loadPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr loadPlayer( const std::string& playerName );
|
||||
bool loadPlayers();
|
||||
Entity::PlayerPtr syncPlayer( uint64_t characterId );
|
||||
|
||||
void onOnlineStatusChanged( Sapphire::Entity::Player& player, bool updateProfile = true );
|
||||
|
||||
void onEquipDisplayFlagsChanged( Sapphire::Entity::Player& player );
|
||||
|
@ -90,5 +101,11 @@ namespace Sapphire::World::Manager
|
|||
static void sendLogMessage( Sapphire::Entity::Player& player, uint32_t messageId, uint32_t param2 = 0, uint32_t param3 = 0,
|
||||
uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 );
|
||||
|
||||
private:
|
||||
std::map< uint32_t, Entity::PlayerPtr > m_playerMapById;
|
||||
std::map< uint64_t, Entity::PlayerPtr > m_playerMapByCharacterId;
|
||||
std::map< std::string, Entity::PlayerPtr > m_playerMapByName;
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "Manager/LinkshellMgr.h"
|
||||
#include "Manager/PartyMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
|
||||
#include "Network/GameConnection.h"
|
||||
|
||||
|
@ -26,15 +27,14 @@ using namespace Sapphire::Network::Packets::WorldPackets;
|
|||
using namespace Sapphire::Network::ActorControl;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
||||
void Sapphire::Network::GameConnection::getCommonlistDetailHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
void Sapphire::Network::GameConnection::getCommonlistDetailHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcGetCommonlistDetail >( inPacket );
|
||||
auto& data = packet.data();
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto pPlayer = server.getPlayer( data.DetailCharacterID );
|
||||
auto pPlayer = playerMgr.getPlayer( data.DetailCharacterID );
|
||||
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
@ -69,7 +69,7 @@ void Sapphire::Network::GameConnection::getCommonlistHandler( const Packets::FFX
|
|||
{
|
||||
// TODO: possibly move lambda func to util
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
const size_t itemsPerPage = 10;
|
||||
|
||||
// this func paginates any commonlist entry, associating them with online player data and hierarchy ID (optional)
|
||||
|
@ -85,7 +85,7 @@ void Sapphire::Network::GameConnection::getCommonlistHandler( const Packets::FFX
|
|||
}
|
||||
|
||||
auto id = idVec[ i ];
|
||||
auto pPlayer = server.getPlayer( id );
|
||||
auto pPlayer = playerMgr.getPlayer( id );
|
||||
|
||||
if( !pPlayer )
|
||||
continue;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
||||
|
||||
#include "Manager/FriendListMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
|
||||
#include "Network/GameConnection.h"
|
||||
|
||||
|
@ -26,8 +27,9 @@ void Sapphire::Network::GameConnection::friendlistRemoveHandler( const Packets::
|
|||
|
||||
auto& server = Common::Service< Sapphire::World::WorldServer >::ref();
|
||||
auto& flMgr = Common::Service< Sapphire::World::Manager::FriendListMgr >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto target = server.getPlayer( data.TargetCharacterID );
|
||||
auto target = playerMgr.getPlayer( data.TargetCharacterID );
|
||||
if( !target )
|
||||
return;
|
||||
|
||||
|
@ -50,10 +52,10 @@ void Sapphire::Network::GameConnection::setFriendlistGroupHandler( const Packets
|
|||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcSetFriendlistGroup >( inPacket );
|
||||
const auto& data = packet.data();
|
||||
|
||||
auto& server = Common::Service< Sapphire::World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto& flMgr = Common::Service< Sapphire::World::Manager::FriendListMgr >::ref();
|
||||
|
||||
auto target = server.getPlayer( data.TargetCharacterID );
|
||||
auto target = playerMgr.getPlayer( data.TargetCharacterID );
|
||||
if( !target )
|
||||
return;
|
||||
|
||||
|
|
|
@ -44,8 +44,9 @@ void Sapphire::Network::GameConnection::inviteHandler( const FFXIVARR_PACKET_RAW
|
|||
|
||||
std::string name( packet.data().TargetName );
|
||||
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto& server = Common::Service< Sapphire::World::WorldServer >::ref();
|
||||
auto pTargetPlayer = server.getPlayer( name );
|
||||
auto pTargetPlayer = playerMgr.getPlayer( name );
|
||||
|
||||
if( !pTargetPlayer )
|
||||
return;
|
||||
|
@ -79,7 +80,7 @@ void Sapphire::Network::GameConnection::inviteHandler( const FFXIVARR_PACKET_RAW
|
|||
auto& flMgr = Common::Service< FriendListMgr >::ref();
|
||||
|
||||
// add support to adding offline players
|
||||
auto target = server.getPlayer( data.TargetName );
|
||||
auto target = playerMgr.getPlayer( data.TargetName );
|
||||
if( !target )
|
||||
return;
|
||||
|
||||
|
@ -125,8 +126,9 @@ void Sapphire::Network::GameConnection::inviteReplyHandler( const FFXIVARR_PACKE
|
|||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcInviteReply >( inPacket );
|
||||
const auto& data = packet.data();
|
||||
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto& server = Common::Service< Sapphire::World::WorldServer >::ref();
|
||||
auto pPlayer = server.getPlayer( data.InviteCharacterID );
|
||||
auto pPlayer = playerMgr.getPlayer( data.InviteCharacterID );
|
||||
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "Session.h"
|
||||
#include "Actor/Player.h"
|
||||
#include "Manager/LinkshellMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include <WorldServer.h>
|
||||
|
||||
using namespace Sapphire::Common;
|
||||
|
@ -29,9 +30,9 @@ void Sapphire::Network::GameConnection::linkshellKickHandler( const Packets::FFX
|
|||
{
|
||||
const auto lsKickPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellKick >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsKickPacket.data().LeaveCharacterID );
|
||||
auto playerPtr = playerMgr.getPlayer( lsKickPacket.data().LeaveCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
|
@ -47,9 +48,9 @@ void Sapphire::Network::GameConnection::linkshellAddLeaderHandler( const Packets
|
|||
{
|
||||
const auto lsAddLeaderPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellAddLeader >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsAddLeaderPacket.data().MemberCharacterID );
|
||||
auto playerPtr = playerMgr.getPlayer( lsAddLeaderPacket.data().MemberCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
|
@ -65,9 +66,9 @@ void Sapphire::Network::GameConnection::linkshellRemoveLeaderHandler( const Pack
|
|||
{
|
||||
const auto lsRemoveLeaderPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellRemoveLeader >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsRemoveLeaderPacket.data().MemberCharacterID );
|
||||
auto playerPtr = playerMgr.getPlayer( lsRemoveLeaderPacket.data().MemberCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
|
@ -91,11 +92,11 @@ void Sapphire::Network::GameConnection::linkshellDeclineLeaderHandler( const Pac
|
|||
void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsJoinPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoin >( inPacket );
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
|
||||
auto charName = std::string( lsJoinPacket.data().MemberCharacterName );
|
||||
auto invitedPlayer = server.getPlayer( charName );
|
||||
auto invitedPlayer = playerMgr.getPlayer( charName );
|
||||
|
||||
if( !invitedPlayer )
|
||||
{
|
||||
|
@ -127,10 +128,10 @@ void Sapphire::Network::GameConnection::linkshellChangeMasterHandler( const Pack
|
|||
{
|
||||
const auto lsChMasterPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellChangeMaster >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto charName = std::string( lsChMasterPacket.data().NextMasterCharacterName );
|
||||
auto nextMaster = server.getPlayer( charName );
|
||||
auto nextMaster = playerMgr.getPlayer( charName );
|
||||
|
||||
if( !nextMaster )
|
||||
{
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include <Logging/Logger.h>
|
||||
#include <Network/PacketContainer.h>
|
||||
#include <Network/PacketDef/Chat/ServerChatDef.h>
|
||||
#include <Database/DatabaseDef.h>
|
||||
#include <Util/Util.h>
|
||||
|
||||
#include <datReader/DatCategories/bg/LgbTypes.h>
|
||||
|
@ -14,44 +13,27 @@
|
|||
|
||||
#include <unordered_map>
|
||||
#include <Network/PacketDef/Zone/ClientZoneDef.h>
|
||||
#include <Logging/Logger.h>
|
||||
#include <Service.h>
|
||||
|
||||
#include "Network/GameConnection.h"
|
||||
|
||||
#include "Territory/Territory.h"
|
||||
#include "Territory/HousingZone.h"
|
||||
#include "Territory/Land.h"
|
||||
#include "Territory/House.h"
|
||||
#include "Territory/InstanceObjectCache.h"
|
||||
|
||||
#include "Linkshell/Linkshell.h"
|
||||
|
||||
#include "Inventory/Item.h"
|
||||
|
||||
#include "Network/PacketWrappers/PlayerSetupPacket.h"
|
||||
#include "Network/PacketWrappers/PingPacket.h"
|
||||
#include "Network/PacketWrappers/MoveActorPacket.h"
|
||||
#include "Network/PacketWrappers/ChatPacket.h"
|
||||
#include "Network/PacketWrappers/ServerNoticePacket.h"
|
||||
#include "Network/PacketWrappers/ActorControlPacket.h"
|
||||
#include "Network/PacketWrappers/ActorControlSelfPacket.h"
|
||||
#include "Network/PacketWrappers/ActorControlTargetPacket.h"
|
||||
#include "Network/PacketWrappers/EventStartPacket.h"
|
||||
#include "Network/PacketWrappers/EventFinishPacket.h"
|
||||
#include "Network/PacketWrappers/ConditionPacket.h"
|
||||
#include "Network/PacketWrappers/UpdateInventorySlotPacket.h"
|
||||
|
||||
#include "Manager/DebugCommandMgr.h"
|
||||
#include "Manager/EventMgr.h"
|
||||
#include "Manager/MarketMgr.h"
|
||||
#include "Manager/TerritoryMgr.h"
|
||||
#include "Manager/HousingMgr.h"
|
||||
#include "Manager/RNGMgr.h"
|
||||
#include "Manager/ChatChannelMgr.h"
|
||||
#include "Manager/QuestMgr.h"
|
||||
#include "Manager/LinkshellMgr.h"
|
||||
#include "Manager/PartyMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/WarpMgr.h"
|
||||
#include "Manager/ItemMgr.h"
|
||||
|
@ -117,7 +99,7 @@ void Sapphire::Network::GameConnection::getProfileHandler( const Packets::FFXIVA
|
|||
void Sapphire::Network::GameConnection::getSearchCommentHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
auto targetId = *reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x10 ] );
|
||||
auto pPlayer = server().getPlayer( targetId );
|
||||
auto pPlayer = playerMgr().getPlayer( targetId );
|
||||
|
||||
Logger::debug( "getSearchCommentHandler: {0}", targetId );
|
||||
|
||||
|
@ -137,7 +119,7 @@ void Sapphire::Network::GameConnection::getSearchCommentHandler( const Packets::
|
|||
void Sapphire::Network::GameConnection::reqExamineFcInfo( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
auto targetId = *reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x18 ] );
|
||||
auto pPlayer = server().getPlayer( targetId );
|
||||
auto pPlayer = playerMgr().getPlayer( targetId );
|
||||
|
||||
Logger::debug( "reqExamineFcInfo: {0}", targetId );
|
||||
|
||||
|
@ -273,7 +255,7 @@ void Sapphire::Network::GameConnection::configHandler( const Packets::FFXIVARR_P
|
|||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcConfig >( inPacket );
|
||||
|
||||
player.setEquipDisplayFlags( packet.data().flag );
|
||||
Service< World::Manager::PlayerMgr >::ref().onEquipDisplayFlagsChanged( player );
|
||||
PlayerMgr().onEquipDisplayFlagsChanged( player );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::zoneJumpHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
@ -347,11 +329,10 @@ void Sapphire::Network::GameConnection::loginHandler( const Packets::FFXIVARR_PA
|
|||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcLoginHandler >( inPacket );
|
||||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
auto& fcMgr = Common::Service< World::Manager::FreeCompanyMgr >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
player.setIsLogin( true );
|
||||
player.setConnected( true );
|
||||
teriMgr.joinWorld( player );
|
||||
playerMgr.onLogin( player );
|
||||
playerMgr().onLogin( player );
|
||||
fcMgr.onFcLogin( player.getCharacterId() );
|
||||
}
|
||||
|
||||
|
@ -371,7 +352,6 @@ void Sapphire::Network::GameConnection::syncHandler( const Packets::FFXIVARR_PAC
|
|||
|
||||
void Sapphire::Network::GameConnection::setLanguageHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto pCurrentZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
@ -384,7 +364,7 @@ void Sapphire::Network::GameConnection::setLanguageHandler( const Packets::FFXIV
|
|||
// if this is a login event
|
||||
if( player.isLogin() )
|
||||
{
|
||||
playerMgr.sendLoginMessage( player );
|
||||
playerMgr().sendLoginMessage( player );
|
||||
}
|
||||
|
||||
// spawn the player for himself
|
||||
|
|
|
@ -52,16 +52,17 @@ Sapphire::Network::GameConnectionPtr Sapphire::World::Session::getChatConnection
|
|||
bool Sapphire::World::Session::loadPlayer()
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
|
||||
m_isValid = false;
|
||||
|
||||
m_pPlayer = server.getPlayer( m_entityId );
|
||||
m_pPlayer = playerMgr.getPlayer( m_entityId );
|
||||
|
||||
if( !m_pPlayer )
|
||||
return false;
|
||||
|
||||
// check and sync player data on login
|
||||
if( !server.syncPlayer( m_pPlayer->getCharacterId() ) )
|
||||
if( !playerMgr.syncPlayer( m_pPlayer->getCharacterId() ) )
|
||||
return false;
|
||||
|
||||
m_isValid = true;
|
||||
|
|
|
@ -36,7 +36,8 @@ void MoveTerritoryTask::onQueue()
|
|||
void MoveTerritoryTask::execute()
|
||||
{
|
||||
auto& server = Common::Service< WorldServer >::ref();
|
||||
auto pPlayer = server.getPlayer( m_playerId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto pPlayer = playerMgr.getPlayer( m_playerId );
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <Network/PacketWrappers/WarpPacket.h>
|
||||
|
||||
#include <Manager/TerritoryMgr.h>
|
||||
#include <Manager/PlayerMgr.h>
|
||||
|
||||
using namespace Sapphire::World;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
@ -28,7 +29,8 @@ void WarpTask::onQueue()
|
|||
void WarpTask::execute()
|
||||
{
|
||||
auto& server = Common::Service< WorldServer >::ref();
|
||||
auto pPlayer = server.getPlayer( m_playerId );
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto pPlayer = playerMgr.getPlayer( m_playerId );
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
||||
|
|
|
@ -171,8 +171,9 @@ void WorldServer::run( int32_t argc, char* argv[] )
|
|||
auto pRNGMgr = std::make_shared< Manager::RNGMgr >();
|
||||
Common::Service< Manager::RNGMgr >::set( pRNGMgr );
|
||||
|
||||
auto pPlayerMgr = std::make_shared< Manager::PlayerMgr >();
|
||||
Logger::info( "Loading all players" );
|
||||
if( !loadPlayers() )
|
||||
if( !pPlayerMgr->loadPlayers() )
|
||||
{
|
||||
Logger::fatal( "Failed to load players!" );
|
||||
return;
|
||||
|
@ -281,7 +282,6 @@ void WorldServer::run( int32_t argc, char* argv[] )
|
|||
thread_list.emplace_back( std::thread( std::bind( &Network::Hive::run, hive.get() ) ) );
|
||||
|
||||
auto pDebugCom = std::make_shared< DebugCommandMgr >();
|
||||
auto pPlayerMgr = std::make_shared< Manager::PlayerMgr >();
|
||||
auto pShopMgr = std::make_shared< Manager::ShopMgr >();
|
||||
auto pInventoryMgr = std::make_shared< Manager::InventoryMgr >();
|
||||
auto pEventMgr = std::make_shared< Manager::EventMgr >();
|
||||
|
@ -522,160 +522,6 @@ std::vector< SessionPtr > WorldServer::searchSessionByName( const std::string& p
|
|||
return results;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::getPlayer( uint32_t entityId )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapById.find( entityId );
|
||||
|
||||
if( it != m_playerMapById.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( entityId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::getPlayer( uint64_t characterId )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapByCharacterId.find( characterId );
|
||||
|
||||
if( it != m_playerMapByCharacterId.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::getPlayer( const std::string& playerName )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
auto it = m_playerMapByName.find( playerName );
|
||||
|
||||
if( it != m_playerMapByName.end() )
|
||||
return ( it->second );
|
||||
|
||||
// not found (new character?) - we'll load from DB and hope it's there
|
||||
return loadPlayer( playerName );
|
||||
}
|
||||
|
||||
|
||||
std::string WorldServer::getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad )
|
||||
{
|
||||
if( !forceDbLoad )
|
||||
{
|
||||
auto it = m_playerMapByCharacterId.find( characterId );
|
||||
|
||||
if( it != m_playerMapByCharacterId.end() )
|
||||
return ( it->second->getName() );
|
||||
}
|
||||
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT name FROM charainfo WHERE characterid = " + std::to_string( characterId ) );
|
||||
|
||||
if( !res->next() )
|
||||
return "Unknown";
|
||||
|
||||
std::string playerName = res->getString( 1 );
|
||||
|
||||
return playerName;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::addPlayer( uint64_t characterId )
|
||||
{
|
||||
auto pPlayer = Entity::make_Player();
|
||||
|
||||
if( !pPlayer->loadFromDb( characterId ) )
|
||||
return nullptr;
|
||||
|
||||
m_playerMapById[ pPlayer->getId() ] = pPlayer;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = pPlayer;
|
||||
m_playerMapByName[ pPlayer->getName() ] = pPlayer;
|
||||
|
||||
return pPlayer;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::loadPlayer( uint32_t entityId )
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo WHERE EntityId = " + std::to_string( entityId ) );
|
||||
if( !res || !res->next() )
|
||||
return nullptr;
|
||||
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::loadPlayer( uint64_t characterId )
|
||||
{
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::loadPlayer( const std::string& playerName )
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo WHERE Name = " + playerName );
|
||||
if( !res || !res->next() )
|
||||
return nullptr;
|
||||
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
|
||||
return addPlayer( characterId );
|
||||
}
|
||||
|
||||
bool WorldServer::loadPlayers()
|
||||
{
|
||||
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
|
||||
auto res = db.query( "SELECT CharacterId FROM charainfo" );
|
||||
|
||||
// no players or failed
|
||||
while( res->next() )
|
||||
{
|
||||
uint64_t characterId = res->getUInt64( 1 );
|
||||
if( !addPlayer( characterId ) )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Sapphire::Entity::PlayerPtr WorldServer::syncPlayer( uint64_t characterId )
|
||||
{
|
||||
auto pPlayer = getPlayer( characterId );
|
||||
if( !pPlayer )
|
||||
return nullptr;
|
||||
|
||||
// get our cached last db write
|
||||
auto lastCacheSync = pPlayer->getLastDBWrite();
|
||||
|
||||
// update this player's last db write
|
||||
if( !pPlayer->syncLastDBWrite() )
|
||||
return nullptr;
|
||||
|
||||
// get db last write
|
||||
auto dbSync = pPlayer->getLastDBWrite();
|
||||
|
||||
|
||||
// db was updated and we lost track of it - update
|
||||
// @todo for now, always reload the player on login.
|
||||
//if( dbSync != lastCacheSync )
|
||||
{
|
||||
// clear current maps
|
||||
m_playerMapById[ pPlayer->getId() ] = nullptr;
|
||||
m_playerMapByName[ pPlayer->getName() ] = nullptr;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = nullptr;
|
||||
|
||||
if( !pPlayer->loadFromDb( characterId ) )
|
||||
return nullptr;
|
||||
|
||||
m_playerMapById[ pPlayer->getId() ] = pPlayer;
|
||||
m_playerMapByCharacterId[ pPlayer->getCharacterId() ] = pPlayer;
|
||||
m_playerMapByName[ pPlayer->getName() ] = pPlayer;
|
||||
}
|
||||
|
||||
return pPlayer;
|
||||
}
|
||||
|
||||
std::map< int32_t, WorldServer::BNPCMap >& Sapphire::World::WorldServer::getBNpcTeriMap()
|
||||
{
|
||||
return m_bNpcTerritoryMap;
|
||||
|
|
|
@ -32,10 +32,6 @@ namespace Sapphire::World
|
|||
World::SessionPtr getSession( const std::string& playerName );
|
||||
std::vector< World::SessionPtr > searchSessionByName( const std::string& playerName );
|
||||
|
||||
Entity::PlayerPtr getPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr getPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr getPlayer( const std::string& playerName );
|
||||
|
||||
size_t getSessionCount() const;
|
||||
|
||||
uint16_t getWorldId() const;
|
||||
|
@ -49,8 +45,6 @@ namespace Sapphire::World
|
|||
|
||||
bool loadSettings( int32_t argc, char* argv[] );
|
||||
|
||||
std::string getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad = false );
|
||||
|
||||
void queueForPlayer( uint64_t characterId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket );
|
||||
void queueForPlayers( const std::set< uint64_t >& characterIds, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket );
|
||||
void queueForPlayer( uint64_t characterId, std::vector< Sapphire::Network::Packets::FFXIVPacketBasePtr > packets );
|
||||
|
@ -59,15 +53,6 @@ namespace Sapphire::World
|
|||
void queueForLinkshell( uint64_t lsId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket, std::set< uint64_t > exceptionCharIdList = {} );
|
||||
void queueForFreeCompany( uint64_t fcId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket, std::set< uint64_t > exceptionCharIdList = {} );
|
||||
|
||||
Entity::PlayerPtr addPlayer( uint64_t characterId );
|
||||
|
||||
Entity::PlayerPtr loadPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr loadPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr loadPlayer( const std::string& playerName );
|
||||
bool loadPlayers();
|
||||
|
||||
Entity::PlayerPtr syncPlayer( uint64_t characterId );
|
||||
|
||||
Sapphire::Common::Config::WorldConfig& getConfig();
|
||||
|
||||
private:
|
||||
|
@ -88,10 +73,6 @@ namespace Sapphire::World
|
|||
std::map< uint64_t, SessionPtr > m_sessionMapByCharacterId;
|
||||
std::map< std::string, SessionPtr > m_sessionMapByName;
|
||||
|
||||
std::map< uint32_t, Entity::PlayerPtr > m_playerMapById;
|
||||
std::map< uint64_t, Entity::PlayerPtr > m_playerMapByCharacterId;
|
||||
std::map< std::string, Entity::PlayerPtr > m_playerMapByName;
|
||||
|
||||
std::map< uint32_t, uint32_t > m_zones;
|
||||
|
||||
using BNPCMap = std::map< uint32_t, std::shared_ptr< Common::BNPCInstanceObject > >;
|
||||
|
|
Loading…
Add table
Reference in a new issue