diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index b5e9b9b6..bba094a6 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -98,6 +98,9 @@ namespace Packets { EventPlay = 0x0154, // updated for sb EventStart = 0x015D, // updated for sb EventFinish = 0x015E, // updated for sb + + EventLinkshell = 0x0169, + QuestActiveList = 0x0171, // updated for sb QuestUpdate = 0x0172, // updated for sb QuestCompleteList = 0x0173, // updated for sb @@ -173,7 +176,8 @@ namespace Packets { ReturnEventHandler = 0x0128, TradeReturnEventHandler = 0x0129, - LinkshellEventHandler = 0x013C, + LinkshellEventHandler = 0x013B, + LinkshellEventHandler1 = 0x013C, }; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 197ec664..ee6067c7 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1050,6 +1050,24 @@ struct FFXIVIpcEventFinish : FFXIVIpcBasePacket /* 000C */ uint32_t padding1; }; + +/** +* Structural representation of the packet sent by the server +* to respond to a linkshell creation event +*/ +struct FFXIVIpcEventLinkshell : FFXIVIpcBasePacket +{ + uint32_t eventId; + uint8_t scene; + uint8_t param1; + uint8_t param2; + uint8_t param3; + uint32_t unknown1; + uint32_t unknown2; + uint32_t unknown3; + uint32_t unknown4; +}; + /** * Structural representation of the packet sent by the server * to send the active quests diff --git a/src/servers/Server_Zone/Network/GameConnection.cpp b/src/servers/Server_Zone/Network/GameConnection.cpp index 2a364cb3..d6bfcda9 100644 --- a/src/servers/Server_Zone/Network/GameConnection.cpp +++ b/src/servers/Server_Zone/Network/GameConnection.cpp @@ -86,6 +86,7 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler ); setZoneHandler( ClientZoneIpcType::LinkshellEventHandler, "LinkshellEventHandler", &GameConnection::eventHandler ); + setZoneHandler( ClientZoneIpcType::LinkshellEventHandler1, "LinkshellEventHandler1", &GameConnection::eventHandler ); setZoneHandler( ClientZoneIpcType::CFDutyInfoHandler, "CFDutyInfoRequest", &GameConnection::cfDutyInfoRequest ); setZoneHandler( ClientZoneIpcType::CFRegisterDuty, "CFRegisterDuty", &GameConnection::cfRegisterDuty ); diff --git a/src/servers/Server_Zone/Network/Handlers/EventHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/EventHandlers.cpp index a3591b37..d310ffc4 100644 --- a/src/servers/Server_Zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/EventHandlers.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -130,12 +131,22 @@ void Core::Network::GameConnection::eventHandler( const Packets::GamePacket& inP } case ClientZoneIpcType::LinkshellEventHandler: + case ClientZoneIpcType::LinkshellEventHandler1: { uint32_t eventId = inPacket.getValAt< uint32_t >( 0x20 ); uint16_t subEvent = inPacket.getValAt< uint16_t >( 0x24 ); std::string lsName = inPacket.getStringAt( 0x27 ); - abortEventFunc( pPlayer, 0, eventId ); + + + GamePacketNew< FFXIVIpcEventLinkshell, ServerZoneIpcType > linkshellEvent( pPlayer->getId() ); + linkshellEvent.data().eventId = eventId; + linkshellEvent.data().scene = subEvent; + linkshellEvent.data().param3 = 1; + linkshellEvent.data().unknown1 = 0x15a; + pPlayer->queuePacket( linkshellEvent ); + +// abortEventFunc( pPlayer, 0, eventId ); break; }