mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 14:57:44 +00:00
Reducing direct calls to getSession
This commit is contained in:
parent
5a73cfe4a8
commit
0116272e69
18 changed files with 72 additions and 150 deletions
|
@ -54,17 +54,13 @@ void EventItemAction::execute()
|
|||
{
|
||||
Sapphire::Entity::PlayerPtr pPlayer = m_pSource->getAsPlayer();
|
||||
if( !pPlayer )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Manager::PlayerMgr::sendDebug( *pPlayer, "EventItemAction type {0} execute called.", m_eventItemAction->data().Action );
|
||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
||||
|
||||
auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref();
|
||||
|
||||
eventMgr.eventStart( *pPlayer, m_targetId, m_eventItemAction->data().EventHandler,
|
||||
Event::EventHandler::ActionResult, 0, 0 );
|
||||
|
||||
eventMgr.eventStart( *pPlayer, m_targetId, m_eventItemAction->data().EventHandler, Event::EventHandler::ActionResult, 0, 0 );
|
||||
scriptMgr.onEventItem( *pPlayer, m_eventItem, m_eventItemAction->data().EventHandler, m_targetId );
|
||||
eventMgr.checkEvent( *pPlayer, m_eventItemAction->data().EventHandler );
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ void ItemAction::handleCompanionItem()
|
|||
auto player = getSourceChara()->getAsPlayer();
|
||||
|
||||
player->unlockCompanion( m_itemAction->data().Calcu0Arg[ 0 ] );
|
||||
player->dropInventoryItem( static_cast< Common::InventoryType >( m_itemSourceContainer ), m_itemSourceSlot );
|
||||
player->dropInventoryItem( static_cast< Common::InventoryType >( m_itemSourceContainer ), static_cast< uint8_t >( m_itemSourceSlot ) );
|
||||
}
|
||||
|
||||
void ItemAction::handleMountItem()
|
||||
|
@ -102,5 +102,5 @@ void ItemAction::handleMountItem()
|
|||
auto player = getSourceChara()->getAsPlayer();
|
||||
|
||||
player->unlockMount( m_itemAction->data().Calcu0Arg[ 0 ] );
|
||||
player->dropInventoryItem( static_cast< Common::InventoryType >( m_itemSourceContainer ), m_itemSourceSlot );
|
||||
player->dropInventoryItem( static_cast< Common::InventoryType >( m_itemSourceContainer ), static_cast< uint8_t >( m_itemSourceSlot ) );
|
||||
}
|
|
@ -158,7 +158,6 @@ void DebugCommandMgr::help( char* data, Entity::Player& player, std::shared_ptr<
|
|||
void DebugCommandMgr::set( char* data, Entity::Player& player, std::shared_ptr< DebugCommand > command )
|
||||
{
|
||||
auto& server = Sapphire::Common::Service< Sapphire::World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
auto& terriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto pCurrentZone = terriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
||||
|
@ -210,8 +209,7 @@ void DebugCommandMgr::set( char* data, Entity::Player& player, std::shared_ptr<
|
|||
setActorPosPacket->data().x = player.getPos().x;
|
||||
setActorPosPacket->data().y = player.getPos().y;
|
||||
setActorPosPacket->data().z = player.getPos().z;
|
||||
pSession->getZoneConnection()->queueOutPacket( setActorPosPacket );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), setActorPosPacket );
|
||||
}
|
||||
else if( ( subCommand == "tele" ) && ( !params.empty() ) )
|
||||
{
|
||||
|
@ -229,12 +227,12 @@ void DebugCommandMgr::set( char* data, Entity::Player& player, std::shared_ptr<
|
|||
auto discoveryPacket = makeZonePacket< FFXIVIpcDiscoveryReply >( player.getId() );
|
||||
discoveryPacket->data().mapId = static_cast< uint32_t >( map_id );
|
||||
discoveryPacket->data().mapPartId = static_cast< uint32_t >( discover_id );
|
||||
pSession->getZoneConnection()->queueOutPacket( discoveryPacket );
|
||||
server.queueForPlayer( player.getCharacterId(), discoveryPacket );
|
||||
}
|
||||
else if( subCommand == "discovery_reset" )
|
||||
{
|
||||
player.resetDiscovery();
|
||||
pSession->getZoneConnection()->queueOutPacket( std::make_shared< PlayerSetupPacket >( player ) );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< PlayerSetupPacket >( player ) );
|
||||
}
|
||||
else if( subCommand == "classjob" )
|
||||
{
|
||||
|
@ -365,7 +363,7 @@ void DebugCommandMgr::set( char* data, Entity::Player& player, std::shared_ptr<
|
|||
auto fcPacket = makeZonePacket< FFXIVIpcFreeCompany >( player.getId() );
|
||||
fcPacket->data().Crest = 0x0001000100010001;
|
||||
strcpy( fcPacket->data().Tag, "Wang" );
|
||||
pSession->getZoneConnection()->queueOutPacket( fcPacket );
|
||||
server.queueForPlayer( player.getCharacterId(), fcPacket );
|
||||
|
||||
auto fcResultPacket = makeZonePacket< FFXIVIpcGetFcStatusResult >( player.getId() );
|
||||
fcResultPacket->data().FreeCompanyID = 1;
|
||||
|
@ -374,7 +372,7 @@ void DebugCommandMgr::set( char* data, Entity::Player& player, std::shared_ptr<
|
|||
fcResultPacket->data().GrandCompanyID = 1;
|
||||
fcResultPacket->data().FcRank = 8;
|
||||
fcResultPacket->data().CrestID = 0x0001000100010001;
|
||||
pSession->getZoneConnection()->queueOutPacket( fcResultPacket );
|
||||
server.queueForPlayer( player.getCharacterId(), fcResultPacket );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -606,7 +604,7 @@ void DebugCommandMgr::injectPacket( char* data, Entity::Player& player, std::sha
|
|||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pSession = server.getSession( player.getId() );
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
if( pSession )
|
||||
pSession->getZoneConnection()->injectPacket( data + 7, player );
|
||||
}
|
||||
|
@ -615,7 +613,7 @@ void DebugCommandMgr::injectChatPacket( char* data, Entity::Player& player, std:
|
|||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pSession = server.getSession( player.getId() );
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
if( pSession )
|
||||
pSession->getChatConnection()->injectPacket( data + 8, player );
|
||||
}
|
||||
|
@ -648,19 +646,19 @@ void DebugCommandMgr::replay( char* data, Entity::Player& player, std::shared_pt
|
|||
|
||||
if( subCommand == "start" )
|
||||
{
|
||||
auto pSession = server.getSession( player.getId() );
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
if( pSession )
|
||||
pSession->startReplay( params );
|
||||
}
|
||||
else if( subCommand == "stop" )
|
||||
{
|
||||
auto pSession = server.getSession( player.getId() );
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
if( pSession )
|
||||
pSession->stopReplay();
|
||||
}
|
||||
else if( subCommand == "info" )
|
||||
{
|
||||
auto pSession = server.getSession( player.getId() );
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
if( pSession )
|
||||
pSession->sendReplayInfo();
|
||||
}
|
||||
|
|
|
@ -472,8 +472,6 @@ void HousingMgr::sendWardLandInfo( Entity::Player& player, uint8_t wardId, uint1
|
|||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto landSetId = toLandSetId( territoryTypeId, wardId );
|
||||
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
|
@ -680,7 +678,6 @@ void HousingMgr::deleteHouse( Sapphire::HousePtr house ) const
|
|||
void HousingMgr::buildPresetEstate( Entity::Player& player, HousingZone& zone, uint8_t plotNum, uint32_t presetCatalogId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto pLand = zone.getLand( plotNum );
|
||||
if( !pLand )
|
||||
|
@ -731,7 +728,6 @@ void HousingMgr::buildPresetEstate( Entity::Player& player, HousingZone& zone, u
|
|||
void HousingMgr::requestEstateRename( Entity::Player& player, const Common::LandIdent ident )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
|
@ -758,7 +754,6 @@ void HousingMgr::requestEstateRename( Entity::Player& player, const Common::Land
|
|||
void HousingMgr::requestEstateEditGreeting( Entity::Player& player, const Common::LandIdent ident )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
|
@ -814,7 +809,6 @@ void HousingMgr::updateEstateGreeting( Entity::Player& player, const Common::Lan
|
|||
void HousingMgr::requestEstateEditGuestAccess( Entity::Player& player, const Common::LandIdent ident )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
|
@ -993,7 +987,6 @@ void HousingMgr::reqPlaceHousingItem( Entity::Player& player, uint16_t landId, u
|
|||
Common::FFXIVARR_POSITION3 pos, float rotation )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
||||
|
@ -1312,7 +1305,6 @@ bool HousingMgr::moveInternalItem( Entity::Player& player, Common::LandIdent ide
|
|||
Common::FFXIVARR_POSITION3 pos, float rot )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto containerIdx = static_cast< uint16_t >( slot / 50 );
|
||||
auto slotIdx = slot % 50;
|
||||
|
@ -1359,7 +1351,6 @@ bool HousingMgr::moveInternalItem( Entity::Player& player, Common::LandIdent ide
|
|||
bool HousingMgr::moveExternalItem( Entity::Player& player, Common::LandIdent ident, uint8_t slot, HousingZone& terri, Common::FFXIVARR_POSITION3 pos, float rot )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto land = terri.getLand( static_cast< uint8_t >( ident.landId ) );
|
||||
|
||||
|
@ -1599,7 +1590,6 @@ ItemContainerPtr HousingMgr::getFreeEstateInventorySlot( Common::LandIdent ident
|
|||
void HousingMgr::reqEstateExteriorRemodel( Entity::Player& player, uint16_t plot )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
@ -1635,7 +1625,6 @@ void HousingMgr::reqEstateInteriorRemodel( Entity::Player& player )
|
|||
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto terri = std::dynamic_pointer_cast< Territory::Housing::HousingInteriorTerritory >( pZone );
|
||||
if( !terri )
|
||||
|
@ -1699,7 +1688,6 @@ void HousingMgr::removeHouse( Entity::Player& player, uint16_t plot )
|
|||
return;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto pLand = terri->getLand( plot );
|
||||
if( !pLand )
|
||||
|
|
|
@ -25,7 +25,6 @@ using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
|||
void InventoryMgr::sendInventoryContainer( Entity::Player& player, ItemContainerPtr container )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
auto sequence = player.getNextInventorySequence();
|
||||
auto pMap = container->getItemMap();
|
||||
|
|
|
@ -23,22 +23,13 @@ using namespace Sapphire::World::Manager;
|
|||
using namespace Sapphire::Network::Packets;
|
||||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
|
||||
void PartyMgr::onJoin( uint32_t joinerId, uint32_t inviterId )
|
||||
void PartyMgr::onJoin( Entity::Player& joiner, Entity::Player& inviter )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& ccMgr = Common::Service< World::Manager::ChatChannelMgr >::ref();
|
||||
|
||||
auto pInvitee = server.getSession( joinerId );
|
||||
auto pInviter = server.getSession( inviterId );
|
||||
|
||||
if( !pInvitee || !pInviter )
|
||||
{
|
||||
Logger::error( "Joining player or inviter is null!!" );
|
||||
return;
|
||||
}
|
||||
|
||||
auto& inviteePlayer = *pInvitee->getPlayer();
|
||||
auto& invitingPlayer = *pInviter->getPlayer();
|
||||
auto& inviteePlayer = joiner;
|
||||
auto& invitingPlayer = inviter;
|
||||
|
||||
if( inviteePlayer.getPartyId() != 0 )
|
||||
{
|
||||
|
@ -130,17 +121,17 @@ void PartyMgr::onLeave( Sapphire::Entity::Player &leavingPlayer )
|
|||
if( leavingPlayer.getId() == party->LeaderId )
|
||||
{
|
||||
newLeaderId = party->MemberId[ 0 ];
|
||||
auto pSession = server.getSession( newLeaderId );
|
||||
if( !pSession )
|
||||
auto pPlayer = playerMgr().getPlayer( newLeaderId );
|
||||
if( !pPlayer || !pPlayer->isConnected() )
|
||||
continue;
|
||||
pSession->getPlayer()->addOnlineStatus( Common::OnlineStatus::PartyLeader );
|
||||
server.queueForPlayer( member->getCharacterId(), makePcPartyUpdate( leavingPlayer.getAsPlayer(), pSession->getPlayer(),
|
||||
UpdateStatus::LEAVELEADER_LEAVED_MEMBER, party->PartyCount ) );
|
||||
pPlayer->addOnlineStatus( Common::OnlineStatus::PartyLeader );
|
||||
server.queueForPlayer( member->getCharacterId(), makePcPartyUpdate( leavingPlayer.getAsPlayer(), pPlayer,
|
||||
UpdateStatus::LEAVELEADER_LEAVED_MEMBER, party->PartyCount ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
server.queueForPlayer( member->getCharacterId(), makePcPartyUpdate( leavingPlayer.getAsPlayer(), nullptr,
|
||||
UpdateStatus::LEAVE_MEMBER, party->PartyCount ) );
|
||||
UpdateStatus::LEAVE_MEMBER, party->PartyCount ) );
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -194,8 +185,7 @@ void PartyMgr::onMemberDisconnect( Entity::Player& disconnectingPlayer )
|
|||
|
||||
for( const auto& member : members )
|
||||
{
|
||||
bool isConnected = server.getSession( member->getCharacterId() ) != nullptr;
|
||||
if( isConnected )
|
||||
if( member->isConnected() )
|
||||
{
|
||||
anyMembersOnline = true;
|
||||
break;
|
||||
|
@ -227,12 +217,13 @@ void PartyMgr::onMemberRejoin( Entity::Player& joiningPlayer )
|
|||
void PartyMgr::onKick( const std::string& kickPlayerName, Entity::Player& leader )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
auto party = getParty( leader.getPartyId() );
|
||||
assert( party );
|
||||
auto pLeader = getPartyLeader( *party );
|
||||
auto members = getPartyMembers( *party );
|
||||
auto pKickedSession = server.getSession( kickPlayerName );
|
||||
if( !pKickedSession )
|
||||
auto pKickedPlayer = playerMgr.getPlayer( kickPlayerName );
|
||||
if( !pKickedPlayer )
|
||||
{
|
||||
Logger::error( "Target player for kicking not found (\"{t}\")", kickPlayerName );
|
||||
return;
|
||||
|
@ -252,11 +243,11 @@ void PartyMgr::onKick( const std::string& kickPlayerName, Entity::Player& leader
|
|||
member->removeOnlineStatus( Common::OnlineStatus::PartyMember );
|
||||
|
||||
server.queueForPlayer( member->getCharacterId(), { makePcPartyUpdate( *pLeader, *member, UpdateStatus::KICK_SELF, party->PartyCount ),
|
||||
makeZonePacket< FFXIVIpcUpdateParty >( member->getId() ) } );
|
||||
makeZonePacket< FFXIVIpcUpdateParty >( member->getId() ) } );
|
||||
}
|
||||
else
|
||||
{
|
||||
server.queueForPlayer( member->getCharacterId(), makePcPartyUpdate( *pKickedSession->getPlayer(), UpdateStatus::KICK_MEMBER, party->PartyCount ) );
|
||||
server.queueForPlayer( member->getCharacterId(), makePcPartyUpdate( *pKickedPlayer, UpdateStatus::KICK_MEMBER, party->PartyCount ) );
|
||||
}
|
||||
}
|
||||
party->PartyCount--;
|
||||
|
@ -407,7 +398,7 @@ void PartyMgr::sendPartyUpdate( Party& party )
|
|||
|
||||
for( const auto& member : partyMembers )
|
||||
{
|
||||
bool isConnected = server.getSession( member->getCharacterId() ) != nullptr;
|
||||
bool isConnected = member->isConnected();
|
||||
// if player is online and in the same zone as current member in party, display more data in partylist
|
||||
bool hasInfo = isConnected && member->getTerritoryTypeId() == pMember->getTerritoryTypeId();
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ namespace Sapphire::World::Manager
|
|||
PartyMgr() = default;
|
||||
|
||||
/// Perform required actions for events
|
||||
void onJoin( uint32_t joinerId, uint32_t inviterId );
|
||||
void onJoin( Entity::Player& joiner, Entity::Player& inviter );
|
||||
void onLeave( Entity::Player& leavingPlayer );
|
||||
void onMoveZone( Entity::Player& movingPlayer );
|
||||
void onDisband( Entity::Player& disbandingPlayer );
|
||||
|
|
|
@ -83,6 +83,18 @@ Sapphire::Entity::PlayerPtr PlayerMgr::getPlayer( const std::string& playerName
|
|||
return loadPlayer( playerName );
|
||||
}
|
||||
|
||||
std::vector< Sapphire::Entity::PlayerPtr > PlayerMgr::searchPlayersByName( const std::string& playerName )
|
||||
{
|
||||
std::vector< Sapphire::Entity::PlayerPtr > results{};
|
||||
|
||||
for( auto& it : m_playerMapByName )
|
||||
{
|
||||
if( it.first.find( playerName ) != std::string::npos )
|
||||
results.push_back( it.second );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
std::string PlayerMgr::getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad )
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@ namespace Sapphire::World::Manager
|
|||
Entity::PlayerPtr getPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr getPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr getPlayer( const std::string& playerName );
|
||||
std::vector< Entity::PlayerPtr > searchPlayersByName( const std::string& playerName );
|
||||
Entity::PlayerPtr addPlayer( uint64_t characterId );
|
||||
Entity::PlayerPtr loadPlayer( uint32_t entityId );
|
||||
Entity::PlayerPtr loadPlayer( uint64_t characterId );
|
||||
|
|
|
@ -92,7 +92,7 @@ void Sapphire::Network::GameConnection::getCommonlistHandler( const Packets::FFX
|
|||
|
||||
PlayerEntry entry{};
|
||||
memset( &entry, 0, sizeof( PlayerEntry ) );
|
||||
bool isConnected = server.getSession( pPlayer->getCharacterId() ) != nullptr;
|
||||
bool isConnected = pPlayer->isConnected();
|
||||
|
||||
if( isConnected )
|
||||
{
|
||||
|
|
|
@ -612,12 +612,12 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
|
|||
Logger::debug( "{0} used GM2 commandId: {1}, params: {2}, {3}, {4}, {5}, target: {6}",
|
||||
player.getName(), commandId, param1, param2, param3, param4, target );
|
||||
|
||||
auto targetSession = server().getSession( target );
|
||||
auto targetPlayer = playerMgr().getPlayer( target );
|
||||
Sapphire::Entity::CharaPtr targetActor;
|
||||
|
||||
if( targetSession != nullptr )
|
||||
if( targetPlayer != nullptr )
|
||||
{
|
||||
targetActor = targetSession->getPlayer();
|
||||
targetActor = targetPlayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -638,8 +638,6 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
|
|||
auto pTargetActorTerri = teriMgr.getTerritoryByGuId( targetActor->getTerritoryId() );
|
||||
auto pPlayerTerri = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
||||
auto targetPlayer = targetActor->getAsPlayer();
|
||||
|
||||
switch( commandId )
|
||||
{
|
||||
case GmCommand::Raise:
|
||||
|
|
|
@ -146,7 +146,7 @@ void Sapphire::Network::GameConnection::inviteReplyHandler( const FFXIVARR_PACKE
|
|||
uint8_t result = InviteUpdateType::REJECT_INVITE;
|
||||
if( data.Answer == InviteReplyType::ACCEPT )
|
||||
{
|
||||
partyMgr.onJoin( player.getId(), pPlayer->getId() );
|
||||
partyMgr.onJoin( player, *pPlayer );
|
||||
result = InviteUpdateType::ACCEPT_INVITE;
|
||||
}
|
||||
|
||||
|
|
|
@ -380,24 +380,21 @@ const char* packetCommandToString( uint16_t commandId )
|
|||
void examineHandler( Sapphire::Entity::Player& player, uint32_t targetId )
|
||||
{
|
||||
using namespace Sapphire;
|
||||
auto pPlayer = playerMgr().getPlayer( targetId );
|
||||
|
||||
auto& server = Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( targetId );
|
||||
if( pSession )
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
||||
if( pPlayer->isActingAsGm() || pPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
||||
{
|
||||
auto pTarget = pSession->getPlayer();
|
||||
if( pTarget )
|
||||
{
|
||||
if( pTarget->isActingAsGm() || pTarget->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), ActorControlType::ExamineError ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< InspectPacket >( player, pTarget ) );
|
||||
}
|
||||
}
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), ActorControlType::ExamineError ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< InspectPacket >( player, pPlayer ) );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
@ -568,7 +565,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
|
|||
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), movePacket );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), ActorControlType::EmoteModeInterrupt ) );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) ) );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) ) );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -390,17 +390,17 @@ void Sapphire::Network::GameConnection::pcSearchHandler( const Packets::FFXIVARR
|
|||
|
||||
// on lastName, client automatically adds a space to first character - no need to manually add space
|
||||
|
||||
auto queryPlayers = server.searchSessionByName( queryName );
|
||||
auto queryPlayers = playerMgr().searchPlayersByName( queryName );
|
||||
|
||||
// store result in player - we don't map out query keys to data yet
|
||||
std::vector< uint32_t > entityIdVec;
|
||||
|
||||
for( const auto& pSession : queryPlayers )
|
||||
for( const auto& pPlayer : queryPlayers )
|
||||
{
|
||||
if( !pSession )
|
||||
if( !pPlayer || !pPlayer->isConnected() )
|
||||
continue;
|
||||
|
||||
entityIdVec.emplace_back( pSession->getPlayer()->getId() );
|
||||
entityIdVec.emplace_back( pPlayer->getId() );
|
||||
}
|
||||
|
||||
player.setLastPcSearchResult( entityIdVec );
|
||||
|
@ -492,9 +492,10 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
|
|||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pSession = server.getSession( data.toName );
|
||||
|
||||
if( !pSession )
|
||||
auto pTargetPlayer = playerMgr().getPlayer( data.toName );
|
||||
|
||||
if( !pTargetPlayer || pTargetPlayer->isConnected() )
|
||||
{
|
||||
auto tellErrPacket = makeZonePacket< Packets::Server::FFXIVIpcTellNotFound >( player.getId() );
|
||||
strcpy( tellErrPacket->data().toName, data.toName );
|
||||
|
@ -502,8 +503,6 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
|
|||
return;
|
||||
}
|
||||
|
||||
auto pTargetPlayer = pSession->getPlayer();
|
||||
|
||||
if( pTargetPlayer->hasCondition( PlayerCondition::BetweenAreas ) )
|
||||
{
|
||||
// send error for player between areas
|
||||
|
@ -513,12 +512,6 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
|
|||
|
||||
auto pSessionSource = server.getSession( player.getCharacterId() );
|
||||
|
||||
if( !pSession )
|
||||
{
|
||||
Logger::error( std::string( __FUNCTION__ ) + ": Session not found for player#{}", player.getCharacterId() );
|
||||
return;
|
||||
}
|
||||
|
||||
if( pTargetPlayer->hasCondition( PlayerCondition::BoundByDuty ) && !player.isActingAsGm() )
|
||||
{
|
||||
auto boundPacket = makeChatPacket< Packets::Server::FFXIVRecvFinderStatus >( player.getId() );
|
||||
|
@ -545,7 +538,7 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
|
|||
tellPacket->data().type |= ChatFromType::GmTellMsg; //TODO: Is there an enum for this? or is it only GM?
|
||||
}
|
||||
|
||||
pSession->getChatConnection()->queueOutPacket( tellPacket );
|
||||
server.getSession( pTargetPlayer->getCharacterId() )->getChatConnection()->queueOutPacket( tellPacket );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::chatToChannelHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
|
|
@ -51,7 +51,6 @@ 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;
|
||||
|
|
|
@ -492,8 +492,7 @@ void Territory::updateSessions( uint64_t tickCount, bool changedWeather )
|
|||
}
|
||||
|
||||
// this session is not linked to this area anymore, remove it from zone session list
|
||||
// TODO: Retrieving the session is expensive, try to find a better method of removing invalid actors
|
||||
if( pPlayer->getTerritoryId() != m_guId || !server.getSession( pPlayer->getId() ) )
|
||||
if( pPlayer->getTerritoryId() != m_guId || !pPlayer->isConnected() )
|
||||
{
|
||||
Logger::debug( "[{}] removeActor( pPlayer );", pPlayer->getId() );
|
||||
removeActor( pPlayer );
|
||||
|
|
|
@ -441,7 +441,6 @@ bool WorldServer::createSession( uint32_t sessionId )
|
|||
}
|
||||
|
||||
m_sessionMapById[ sessionId ] = newSession;
|
||||
m_sessionMapByName[ newSession->getPlayer()->getName() ] = newSession;
|
||||
m_sessionMapByCharacterId[ newSession->getPlayer()->getCharacterId() ] = newSession;
|
||||
|
||||
return true;
|
||||
|
@ -454,7 +453,6 @@ void WorldServer::removeSession( uint32_t sessionId )
|
|||
return;
|
||||
|
||||
m_sessionMapById.erase( sessionId );
|
||||
m_sessionMapByName.erase( pSession->getPlayer()->getName() );
|
||||
m_sessionMapByCharacterId.erase( pSession->getPlayer()->getCharacterId() );
|
||||
}
|
||||
|
||||
|
@ -480,25 +478,9 @@ SessionPtr WorldServer::getSession( uint64_t id )
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
SessionPtr WorldServer::getSession( const std::string& playerName )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
|
||||
auto it = m_sessionMapByName.find( playerName );
|
||||
|
||||
if( it != m_sessionMapByName.end() )
|
||||
return ( it->second );
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void WorldServer::removeSession( const Entity::Player& player )
|
||||
{
|
||||
auto session = getSession( player.getCharacterId() );
|
||||
if( session )
|
||||
m_sessionMapById.erase( session->getId() );
|
||||
|
||||
m_sessionMapByName.erase( player.getName() );
|
||||
m_sessionMapById.erase( player.getId() );
|
||||
m_sessionMapByCharacterId.erase( player.getCharacterId() );
|
||||
}
|
||||
|
||||
|
@ -507,26 +489,6 @@ bool WorldServer::isRunning() const
|
|||
return m_bRunning;
|
||||
}
|
||||
|
||||
std::vector< SessionPtr > WorldServer::searchSessionByName( const std::string& playerName )
|
||||
{
|
||||
//std::lock_guard<std::mutex> lock( m_sessionMutex );
|
||||
|
||||
std::vector< SessionPtr > results{};
|
||||
|
||||
for( auto it = m_sessionMapByName.begin(); it != m_sessionMapByName.end(); ++it ) {
|
||||
if( it->first.find( playerName ) != std::string::npos ) {
|
||||
results.push_back( it->second );
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
std::map< int32_t, WorldServer::BNPCMap >& Sapphire::World::WorldServer::getBNpcTeriMap()
|
||||
{
|
||||
return m_bNpcTerritoryMap;
|
||||
}
|
||||
|
||||
Sapphire::Common::Config::WorldConfig& WorldServer::getConfig()
|
||||
{
|
||||
return m_config;
|
||||
|
|
|
@ -29,8 +29,6 @@ namespace Sapphire::World
|
|||
|
||||
World::SessionPtr getSession( uint32_t id );
|
||||
World::SessionPtr getSession( uint64_t characterId );
|
||||
World::SessionPtr getSession( const std::string& playerName );
|
||||
std::vector< World::SessionPtr > searchSessionByName( const std::string& playerName );
|
||||
|
||||
size_t getSessionCount() const;
|
||||
|
||||
|
@ -64,23 +62,14 @@ namespace Sapphire::World
|
|||
uint16_t m_worldId;
|
||||
|
||||
std::string m_configName;
|
||||
|
||||
std::mutex m_sessionMutex;
|
||||
|
||||
Sapphire::Common::Config::WorldConfig m_config;
|
||||
|
||||
std::map< uint32_t, SessionPtr > m_sessionMapById;
|
||||
std::map< uint64_t, SessionPtr > m_sessionMapByCharacterId;
|
||||
std::map< std::string, SessionPtr > m_sessionMapByName;
|
||||
|
||||
std::map< uint32_t, uint32_t > m_zones;
|
||||
|
||||
using BNPCMap = std::map< uint32_t, std::shared_ptr< Common::BNPCInstanceObject > >;
|
||||
std::map< int32_t, BNPCMap > m_bNpcTerritoryMap;
|
||||
|
||||
public:
|
||||
std::map< int32_t, BNPCMap >& getBNpcTeriMap();
|
||||
|
||||
void updateSessions( uint32_t currTime );
|
||||
|
||||
void DbKeepAlive( uint32_t currTime );
|
||||
|
|
Loading…
Add table
Reference in a new issue