mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-07 11:17:46 +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 )
|
void Sapphire::Linkshell::removeMember( uint64_t memberId )
|
||||||
{
|
{
|
||||||
m_memberIds.erase( memberId );
|
m_memberIds.erase( memberId );
|
||||||
|
m_leaderIds.erase( memberId );
|
||||||
|
m_inviteIds.erase( memberId );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Linkshell::addLeader( uint64_t memberId )
|
void Sapphire::Linkshell::addLeader( uint64_t memberId )
|
||||||
|
|
|
@ -294,4 +294,31 @@ void LinkshellMgr::sendLinkshellList( Entity::Player& player )
|
||||||
server.queueForPlayer( player.getCharacterId(), linkshellListPacket );
|
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 );
|
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( SetFriendlistGroup, "SetFriendlistGroup", &GameConnection::setFriendlistGroupHandler );
|
||||||
|
|
||||||
setZoneHandler( LinkshellLeave, "LinkshellLeave", &GameConnection::linkshellLeaveHandler );
|
setZoneHandler( LinkshellLeave, "LinkshellLeave", &GameConnection::linkshellLeaveHandler );
|
||||||
|
setZoneHandler( LinkshellJoinOfficial, "LinkshellJoinOfficial", &GameConnection::linkshellJoinOfficialHandler );
|
||||||
}
|
}
|
||||||
|
|
||||||
Sapphire::Network::GameConnection::~GameConnection() = default;
|
Sapphire::Network::GameConnection::~GameConnection() = default;
|
||||||
|
|
|
@ -221,6 +221,7 @@ namespace Sapphire::Network
|
||||||
DECLARE_HANDLER( setFriendlistGroupHandler );
|
DECLARE_HANDLER( setFriendlistGroupHandler );
|
||||||
|
|
||||||
DECLARE_HANDLER( linkshellLeaveHandler );
|
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 )
|
void Sapphire::Network::GameConnection::linkshellLeaveHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||||
{
|
{
|
||||||
const auto lsLeavePacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellLeave >( inPacket );
|
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