2021-12-04 21:53:04 +01:00
|
|
|
#include <Common.h>
|
|
|
|
#include <Network/CommonNetwork.h>
|
|
|
|
#include <Network/GamePacket.h>
|
|
|
|
|
|
|
|
#include <Network/PacketContainer.h>
|
|
|
|
#include <Exd/ExdData.h>
|
|
|
|
#include <Service.h>
|
|
|
|
#include <Network/PacketDef/Zone/ClientZoneDef.h>
|
|
|
|
|
|
|
|
#include "Network/GameConnection.h"
|
|
|
|
|
|
|
|
#include "Session.h"
|
|
|
|
#include "Actor/Player.h"
|
|
|
|
#include "Manager/LinkshellMgr.h"
|
2021-12-07 00:02:41 +01:00
|
|
|
#include <WorldServer.h>
|
2021-12-04 21:53:04 +01:00
|
|
|
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
|
2021-12-09 23:38:23 +01:00
|
|
|
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 );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-12-04 21:53:04 +01:00
|
|
|
void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
|
|
|
{
|
|
|
|
const auto lsJoinPacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellJoin >( inPacket );
|
2021-12-07 00:02:41 +01:00
|
|
|
auto& server = Common::Service< World::WorldServer >::ref();
|
2021-12-04 21:53:04 +01:00
|
|
|
auto& lsMgr = Common::Service< LinkshellMgr >::ref();
|
2021-12-07 00:02:41 +01:00
|
|
|
|
2021-12-04 21:53:04 +01:00
|
|
|
auto charName = std::string( lsJoinPacket.data().MemberCharacterName );
|
2021-12-09 23:38:23 +01:00
|
|
|
auto invitedPlayer = server.getPlayer( charName );
|
2021-12-07 00:02:41 +01:00
|
|
|
|
|
|
|
if( !invitedPlayer )
|
|
|
|
{
|
|
|
|
Logger::error( std::string( __FUNCTION__ ) + " requested player \"{}\" not found!", charName );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-12-09 23:38:23 +01:00
|
|
|
lsMgr.invitePlayer( player, *invitedPlayer, lsJoinPacket.data().LinkshellID );
|
2021-12-05 00:04:11 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Sapphire::Network::GameConnection::linkshellLeaveHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
|
|
|
{
|
|
|
|
const auto lsLeavePacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellLeave >( inPacket );
|
2021-12-05 00:37:52 +01:00
|
|
|
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() );
|
2021-12-04 21:53:04 +01:00
|
|
|
}
|