mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 22:37:45 +00:00
Implemented linkshell kick
This commit is contained in:
parent
fed653ed62
commit
755aeedf60
5 changed files with 55 additions and 2 deletions
|
@ -274,6 +274,38 @@ void LinkshellMgr::invitePlayer( Entity::Player& sourcePlayer, Entity::Player& i
|
|||
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellInviteResult1 );
|
||||
}
|
||||
|
||||
void LinkshellMgr::kickPlayer( Entity::Player& sourcePlayer, Entity::Player& kickedPlayer, uint64_t linkshellId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& chatChannelMgr = Common::Service< Manager::ChatChannelMgr >::ref();
|
||||
|
||||
auto lsPtr = getLinkshellById( linkshellId );
|
||||
|
||||
if( !lsPtr )
|
||||
return Logger::warn( "Failed to kick player from linkshell - linkshell not found!" );
|
||||
|
||||
lsPtr->removeInvite( kickedPlayer.getCharacterId() );
|
||||
lsPtr->removeLeader( kickedPlayer.getCharacterId() );
|
||||
lsPtr->removeMember( kickedPlayer.getCharacterId() );
|
||||
writeLinkshell( lsPtr->getId() );
|
||||
sendLinkshellList( kickedPlayer );
|
||||
|
||||
auto linkshellKickResult = makeLinkshellResult( kickedPlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellKick, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Target,
|
||||
lsPtr->getName(), sourcePlayer.getName() );
|
||||
|
||||
server.queueForPlayer( kickedPlayer.getCharacterId(), linkshellKickResult );
|
||||
|
||||
auto linkshellKickResult1 = makeLinkshellResult( sourcePlayer, 0, 0,
|
||||
WorldPackets::Client::LinkshellKick, 0,
|
||||
LinkshellResultPacket::UpdateStatus::Execute,
|
||||
lsPtr->getName(), kickedPlayer.getName() );
|
||||
|
||||
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellKickResult1 );
|
||||
chatChannelMgr.removePlayerFromChannel( lsPtr->getChatChannel(), kickedPlayer );
|
||||
}
|
||||
|
||||
void LinkshellMgr::sendLinkshellList( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
|
|
@ -39,6 +39,7 @@ namespace Sapphire::World::Manager
|
|||
void finishLinkshellCreation( const std::string& name, uint32_t result, Entity::Player& player );
|
||||
|
||||
void invitePlayer( Entity::Player& sourcePlayer, Entity::Player& invitedPlayer, uint64_t linkshellId );
|
||||
void kickPlayer( Entity::Player& sourcePlayer, Entity::Player& kickedPlayer, uint64_t linkshellId );
|
||||
|
||||
void sendLinkshellList( Entity::Player& player );
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
|||
|
||||
setZoneHandler( GetLinkshellList, "GetLinkshellList", &GameConnection::linkshellListHandler );
|
||||
setZoneHandler( LinkshellJoin, "LinkshellJoin", &GameConnection::linkshellJoinHandler );
|
||||
setZoneHandler( LinkshellKick, "LinkshellKick", &GameConnection::linkshellKickHandler );
|
||||
|
||||
setZoneHandler( ReqExamineFcInfo, "ReqExamineFcInfo", &GameConnection::reqExamineFcInfo );
|
||||
setZoneHandler( ZoneJump, "ZoneJump", &GameConnection::zoneJumpHandler );
|
||||
|
|
|
@ -111,6 +111,7 @@ namespace Sapphire::Network
|
|||
DECLARE_HANDLER( joinChatChannelHandler );
|
||||
|
||||
DECLARE_HANDLER( linkshellListHandler );
|
||||
DECLARE_HANDLER( linkshellKickHandler );
|
||||
|
||||
DECLARE_HANDLER( linkshellJoinHandler );
|
||||
|
||||
|
|
|
@ -25,6 +25,24 @@ void Sapphire::Network::GameConnection::linkshellListHandler( const Packets::FFX
|
|||
lsMgr.sendLinkshellList( player );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellKickHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsKickPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellKick >( inPacket );
|
||||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto playerPtr = server.getPlayer( lsKickPacket.data().LeaveCharacterID );
|
||||
|
||||
if( !playerPtr )
|
||||
{
|
||||
Logger::error( std::string( __FUNCTION__ ) + " requested player \"{}\" not found!", lsKickPacket.data().LeaveCharacterName );
|
||||
return;
|
||||
}
|
||||
|
||||
lsMgr.kickPlayer( player, *playerPtr, lsKickPacket.data().LinkshellID );
|
||||
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
const auto lsJoinPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoin >( inPacket );
|
||||
|
@ -32,7 +50,7 @@ void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFX
|
|||
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||
|
||||
auto charName = std::string( lsJoinPacket.data().MemberCharacterName );
|
||||
auto invitedPlayer = server.getSession( charName );
|
||||
auto invitedPlayer = server.getPlayer( charName );
|
||||
|
||||
if( !invitedPlayer )
|
||||
{
|
||||
|
@ -40,7 +58,7 @@ void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFX
|
|||
return;
|
||||
}
|
||||
|
||||
lsMgr.invitePlayer( player, *invitedPlayer->getPlayer(), lsJoinPacket.data().LinkshellID );
|
||||
lsMgr.invitePlayer( player, *invitedPlayer, lsJoinPacket.data().LinkshellID );
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue