diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 4c9caf2f..4d699aba 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -415,6 +415,49 @@ struct FFXIVIpcLinkshellJoin : FFXIVIpcBasePacket< LinkshellJoin > char MemberCharacterName[32]; }; +struct FFXIVIpcLinkshellLeave : FFXIVIpcBasePacket< LinkshellLeave > +{ + uint64_t LinkshellID; +}; + +struct FFXIVIpcLinkshellJoinOfficial : FFXIVIpcBasePacket< LinkshellJoinOfficial > +{ + uint64_t LinkshellID; +}; + +struct FFXIVIpcLinkshellChangeMaster : FFXIVIpcBasePacket< LinkshellChangeMaster > +{ + uint64_t LinkshellID; + uint64_t NextMasterCharacterID; + char NextMasterCharacterName[32]; +}; + +struct FFXIVIpcLinkshellKick : FFXIVIpcBasePacket< LinkshellKick > +{ + uint64_t LinkshellID; + uint64_t LeaveCharacterID; + char LeaveCharacterName[32]; +}; + +struct FFXIVIpcLinkshellAddLeader : FFXIVIpcBasePacket< LinkshellAddLeader > +{ + uint64_t LinkshellID; + uint64_t MemberCharacterID; + char MemberCharacterName[32]; +}; + +struct FFXIVIpcLinkshellRemoveLeader : FFXIVIpcBasePacket< LinkshellRemoveLeader > +{ + uint64_t LinkshellID; + uint64_t MemberCharacterID; + char MemberCharacterName[32]; +}; + +struct FFXIVIpcLinkshellDeclineLeader : FFXIVIpcBasePacket< LinkshellDeclineLeader > +{ + uint64_t LinkshellID; +}; + struct FFXIVIpcShopEventHandler : FFXIVIpcBasePacket< StartUIEvent > { /* 0000 */ uint32_t eventId; diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index 67f8a425..85531609 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -143,6 +143,8 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH setZoneHandler( FriendlistRemove, "FriendlistRemove", &GameConnection::friendlistRemoveHandler ); setZoneHandler( SetFriendlistGroup, "SetFriendlistGroup", &GameConnection::setFriendlistGroupHandler ); + + setZoneHandler( LinkshellLeave, "LinkshellLeave", &GameConnection::linkshellLeaveHandler ); } Sapphire::Network::GameConnection::~GameConnection() = default; diff --git a/src/world/Network/GameConnection.h b/src/world/Network/GameConnection.h index 23fdbc49..835511a1 100644 --- a/src/world/Network/GameConnection.h +++ b/src/world/Network/GameConnection.h @@ -219,6 +219,8 @@ namespace Sapphire::Network DECLARE_HANDLER( friendlistRemoveHandler ); DECLARE_HANDLER( setFriendlistGroupHandler ); + + DECLARE_HANDLER( linkshellLeaveHandler ); }; } diff --git a/src/world/Network/Handlers/FriendListHandlers.cpp b/src/world/Network/Handlers/FriendListHandlers.cpp index 72175287..7ef4a7ab 100644 --- a/src/world/Network/Handlers/FriendListHandlers.cpp +++ b/src/world/Network/Handlers/FriendListHandlers.cpp @@ -60,4 +60,4 @@ void Sapphire::Network::GameConnection::setFriendlistGroupHandler( const Packets return; flMgr.onAssignGroup( player, *target, data.group ); -} \ No newline at end of file +} diff --git a/src/world/Network/Handlers/LinkshellHandlers.cpp b/src/world/Network/Handlers/LinkshellHandlers.cpp index 68464d60..7b257065 100644 --- a/src/world/Network/Handlers/LinkshellHandlers.cpp +++ b/src/world/Network/Handlers/LinkshellHandlers.cpp @@ -30,4 +30,10 @@ void Sapphire::Network::GameConnection::linkshellJoinHandler( const Packets::FFX auto& lsMgr = Common::Service< LinkshellMgr >::ref(); auto charName = std::string( lsJoinPacket.data().MemberCharacterName ); lsMgr.invitePlayer( charName, lsJoinPacket.data().LinkshellID ); +} + + +void Sapphire::Network::GameConnection::linkshellLeaveHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + const auto lsLeavePacket = ZoneChannelPacket< Client::FFXIVIpcLinkshellLeave >( inPacket ); } \ No newline at end of file