mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 14:57:44 +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 );
|
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 )
|
void LinkshellMgr::sendLinkshellList( Entity::Player& player )
|
||||||
{
|
{
|
||||||
auto& server = Common::Service< World::WorldServer >::ref();
|
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 finishLinkshellCreation( const std::string& name, uint32_t result, Entity::Player& player );
|
||||||
|
|
||||||
void invitePlayer( Entity::Player& sourcePlayer, Entity::Player& invitedPlayer, uint64_t linkshellId );
|
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 );
|
void sendLinkshellList( Entity::Player& player );
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
||||||
|
|
||||||
setZoneHandler( GetLinkshellList, "GetLinkshellList", &GameConnection::linkshellListHandler );
|
setZoneHandler( GetLinkshellList, "GetLinkshellList", &GameConnection::linkshellListHandler );
|
||||||
setZoneHandler( LinkshellJoin, "LinkshellJoin", &GameConnection::linkshellJoinHandler );
|
setZoneHandler( LinkshellJoin, "LinkshellJoin", &GameConnection::linkshellJoinHandler );
|
||||||
|
setZoneHandler( LinkshellKick, "LinkshellKick", &GameConnection::linkshellKickHandler );
|
||||||
|
|
||||||
setZoneHandler( ReqExamineFcInfo, "ReqExamineFcInfo", &GameConnection::reqExamineFcInfo );
|
setZoneHandler( ReqExamineFcInfo, "ReqExamineFcInfo", &GameConnection::reqExamineFcInfo );
|
||||||
setZoneHandler( ZoneJump, "ZoneJump", &GameConnection::zoneJumpHandler );
|
setZoneHandler( ZoneJump, "ZoneJump", &GameConnection::zoneJumpHandler );
|
||||||
|
|
|
@ -111,6 +111,7 @@ namespace Sapphire::Network
|
||||||
DECLARE_HANDLER( joinChatChannelHandler );
|
DECLARE_HANDLER( joinChatChannelHandler );
|
||||||
|
|
||||||
DECLARE_HANDLER( linkshellListHandler );
|
DECLARE_HANDLER( linkshellListHandler );
|
||||||
|
DECLARE_HANDLER( linkshellKickHandler );
|
||||||
|
|
||||||
DECLARE_HANDLER( linkshellJoinHandler );
|
DECLARE_HANDLER( linkshellJoinHandler );
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,24 @@ void Sapphire::Network::GameConnection::linkshellListHandler( const Packets::FFX
|
||||||
lsMgr.sendLinkshellList( player );
|
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 )
|
void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||||
{
|
{
|
||||||
const auto lsJoinPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoin >( inPacket );
|
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& lsMgr = Common::Service< LinkshellMgr >::ref();
|
||||||
|
|
||||||
auto charName = std::string( lsJoinPacket.data().MemberCharacterName );
|
auto charName = std::string( lsJoinPacket.data().MemberCharacterName );
|
||||||
auto invitedPlayer = server.getSession( charName );
|
auto invitedPlayer = server.getPlayer( charName );
|
||||||
|
|
||||||
if( !invitedPlayer )
|
if( !invitedPlayer )
|
||||||
{
|
{
|
||||||
|
@ -40,7 +58,7 @@ void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFX
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lsMgr.invitePlayer( player, *invitedPlayer->getPlayer(), lsJoinPacket.data().LinkshellID );
|
lsMgr.invitePlayer( player, *invitedPlayer, lsJoinPacket.data().LinkshellID );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue