#include #include #include #include #include #include #include #include "Network/GameConnection.h" #include "Session.h" #include "Actor/Player.h" #include "Manager/LinkshellMgr.h" #include using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::WorldPackets; using namespace Sapphire::World::Manager; void Sapphire::Network::GameConnection::linkshellListHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { auto& lsMgr = Common::Service< LinkshellMgr >::ref(); 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 ); auto& server = Common::Service< World::WorldServer >::ref(); auto& lsMgr = Common::Service< LinkshellMgr >::ref(); auto charName = std::string( lsJoinPacket.data().MemberCharacterName ); auto invitedPlayer = server.getPlayer( charName ); if( !invitedPlayer ) { Logger::error( std::string( __FUNCTION__ ) + " requested player \"{}\" not found!", charName ); return; } lsMgr.invitePlayer( player, *invitedPlayer, lsJoinPacket.data().LinkshellID ); } 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() ); }