mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-07 03:07:45 +00:00
Join and leave linkshell implemented
This commit is contained in:
parent
55f9b0219f
commit
e84c034509
6 changed files with 45 additions and 0 deletions
|
@ -74,6 +74,8 @@ void Sapphire::Linkshell::addMember( uint64_t memberId )
|
|||
void Sapphire::Linkshell::removeMember( uint64_t memberId )
|
||||
{
|
||||
m_memberIds.erase( memberId );
|
||||
m_leaderIds.erase( memberId );
|
||||
m_inviteIds.erase( memberId );
|
||||
}
|
||||
|
||||
void Sapphire::Linkshell::addLeader( uint64_t memberId )
|
||||
|
|
|
@ -294,4 +294,31 @@ void LinkshellMgr::sendLinkshellList( Entity::Player& player )
|
|||
server.queueForPlayer( player.getCharacterId(), linkshellListPacket );
|
||||
}
|
||||
|
||||
void LinkshellMgr::leaveLinkshell( uint64_t lsId, uint64_t characterId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto leavingPlayer = server.getPlayer( characterId );
|
||||
auto lsPtr = getLinkshellById( lsId );
|
||||
if( !leavingPlayer || !lsPtr )
|
||||
return;
|
||||
|
||||
lsPtr->removeMember( characterId );
|
||||
writeLinkshell( lsId );
|
||||
|
||||
sendLinkshellList( *leavingPlayer );
|
||||
}
|
||||
|
||||
void LinkshellMgr::joinLinkshell( uint64_t lsId, uint64_t characterId )
|
||||
{
|
||||
auto &server = Common::Service< World::WorldServer >::ref();
|
||||
auto joiningPlayer = server.getPlayer( characterId );
|
||||
auto lsPtr = getLinkshellById( lsId );
|
||||
if( !joiningPlayer || !lsPtr )
|
||||
return;
|
||||
|
||||
lsPtr->addMember( characterId );
|
||||
lsPtr->removeInvite( characterId );
|
||||
writeLinkshell( lsId );
|
||||
|
||||
sendLinkshellList( *joiningPlayer );
|
||||
}
|
|
@ -47,6 +47,9 @@ namespace Sapphire::World::Manager
|
|||
|
||||
LinkshellPtr getLinkshellById( uint64_t lsId );
|
||||
|
||||
void leaveLinkshell( uint64_t lsId, uint64_t characterId );
|
||||
void joinLinkshell( uint64_t lsId, uint64_t characterId );
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
|||
setZoneHandler( SetFriendlistGroup, "SetFriendlistGroup", &GameConnection::setFriendlistGroupHandler );
|
||||
|
||||
setZoneHandler( LinkshellLeave, "LinkshellLeave", &GameConnection::linkshellLeaveHandler );
|
||||
setZoneHandler( LinkshellJoinOfficial, "LinkshellJoinOfficial", &GameConnection::linkshellJoinOfficialHandler );
|
||||
}
|
||||
|
||||
Sapphire::Network::GameConnection::~GameConnection() = default;
|
||||
|
|
|
@ -221,6 +221,7 @@ namespace Sapphire::Network
|
|||
DECLARE_HANDLER( setFriendlistGroupHandler );
|
||||
|
||||
DECLARE_HANDLER( linkshellLeaveHandler );
|
||||
DECLARE_HANDLER( linkshellJoinOfficialHandler );
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -36,4 +36,15 @@ void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFX
|
|||
void Sapphire::Network::GameConnection::linkshellLeaveHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsLeavePacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellLeave >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
|
||||
lsMgr.leaveLinkshell( lsLeavePacket.data().LinkshellID, player.getCharacterId() );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellJoinOfficialHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsLeavePacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoinOfficial >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
|
||||
lsMgr.joinLinkshell( lsLeavePacket.data().LinkshellID, player.getCharacterId() );
|
||||
}
|
Loading…
Add table
Reference in a new issue