From 8a44b35ab7bd4a7671c47c39d01e36b8e518cbed Mon Sep 17 00:00:00 2001 From: Adam <893184+NotAdam@users.noreply.github.com> Date: Sat, 12 Aug 2017 19:05:26 +0900 Subject: [PATCH 1/3] Update cfnotify packet It turned out CFNotify packet is a union. Change definition to reflect that. --- src/servers/Server_Common/ServerPacketDef.h | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/servers/Server_Common/ServerPacketDef.h b/src/servers/Server_Common/ServerPacketDef.h index 6ef6a21e..37609fa3 100644 --- a/src/servers/Server_Common/ServerPacketDef.h +++ b/src/servers/Server_Common/ServerPacketDef.h @@ -1309,17 +1309,13 @@ struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket struct FFXIVIpcCFNotify : FFXIVIpcBasePacket { uint32_t state1; // 3 = cancelled, 4 = duty ready - uint32_t param; // if state1 == 3, state2 is cancelled reason + uint32_t state2; // if state1 == 3, state2 is cancelled reason - uint8_t classJob; // classJobId you registered - uint8_t unknown0[3]; - - uint32_t unknown1; // unknown, just used 0x20442 from the dumped packet - - uint8_t languages; - uint8_t unknown2[3]; - - uint16_t unknown3; + uint32_t param1; // usually classJobId + uint32_t param2; // usually flag + uint32_t param3; // usually languages, sometimes join in progress timestamp + + uint16_t param4; // usually roulette id uint16_t contents[5]; }; From efe1ada779b3d1cc2f0eef958b009d61705e0c74 Mon Sep 17 00:00:00 2001 From: Adam <893184+NotAdam@users.noreply.github.com> Date: Sat, 12 Aug 2017 23:20:26 +0900 Subject: [PATCH 2/3] Add basic cf packet handler --- src/servers/Server_Zone/GameConnection.cpp | 6 +++++ src/servers/Server_Zone/GameConnection.h | 7 +++++ src/servers/Server_Zone/PacketHandlers.cpp | 30 ++++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/src/servers/Server_Zone/GameConnection.cpp b/src/servers/Server_Zone/GameConnection.cpp index cca0745a..f12e4bed 100644 --- a/src/servers/Server_Zone/GameConnection.cpp +++ b/src/servers/Server_Zone/GameConnection.cpp @@ -83,6 +83,12 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, setHandler( ClientIpcType::ReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler ); setHandler( ClientIpcType::TradeReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler ); + + setHandler(ClientIpcType::CFDutyInfoHandler, "CFDutyInfoRequest", &GameConnection::cfDutyInfoRequest ); + setHandler(ClientIpcType::CFRegisterDuty, "CFRegisterDuty", &GameConnection::cfRegisterDuty ); + setHandler(ClientIpcType::CFRegisterRoulette, "CFRegisterRoulette", &GameConnection::cfRegisterRoulette ); + setHandler(ClientIpcType::CFCommenceHandler, "CFDutyAccepted", &GameConnection::cfDutyAccepted); + } Core::Network::GameConnection::~GameConnection() diff --git a/src/servers/Server_Zone/GameConnection.h b/src/servers/Server_Zone/GameConnection.h index 35191ac5..49c43de2 100644 --- a/src/servers/Server_Zone/GameConnection.h +++ b/src/servers/Server_Zone/GameConnection.h @@ -95,6 +95,13 @@ public: DECLARE_HANDLER( discoveryHandler ); DECLARE_HANDLER( eventHandler ); DECLARE_HANDLER( logoutHandler ); + + DECLARE_HANDLER( cfDutyInfoRequest ); + DECLARE_HANDLER( cfRegisterDuty ); + DECLARE_HANDLER( cfRegisterRoulette ); + DECLARE_HANDLER( cfDutyAccepted ); + + DECLARE_HANDLER( skillHandler ); DECLARE_HANDLER( gm1Handler ); diff --git a/src/servers/Server_Zone/PacketHandlers.cpp b/src/servers/Server_Zone/PacketHandlers.cpp index db3d27b9..1b62cfe2 100644 --- a/src/servers/Server_Zone/PacketHandlers.cpp +++ b/src/servers/Server_Zone/PacketHandlers.cpp @@ -1134,3 +1134,33 @@ void Core::Network::GameConnection::logoutHandler( Core::Network::Packets::GameP logoutPacket.data().flags2 = 0x2000; queueOutPacket( logoutPacket ); } + +void Core::Network::GameConnection::cfDutyInfoRequest(Core::Network::Packets::GamePacketPtr pInPacket, + Core::Entity::PlayerPtr pPlayer) +{ + GamePacketNew< FFXIVIpcCFDutyInfo > dutyInfoPacket( pPlayer->getId() ); + queueOutPacket( dutyInfoPacket ); + + GamePacketNew< FFXIVIpcCFPlayerInNeed > inNeedsPacket( pPlayer->getId() ); + queueOutPacket( inNeedsPacket ); + +} + +void Core::Network::GameConnection::cfRegisterDuty(Core::Network::Packets::GamePacketPtr pInPacket, + Core::Entity::PlayerPtr pPlayer) +{ + // TODO implment + +} + +void Core::Network::GameConnection::cfRegisterRoulette(Core::Network::Packets::GamePacketPtr pInPacket, + Core::Entity::PlayerPtr pPlayer) +{ + +} + +void Core::Network::GameConnection::cfDutyAccepted(Core::Network::Packets::GamePacketPtr pInPacket, + Core::Entity::PlayerPtr pPlayer) +{ + +} From 3247e240581ad6f9cf9f78b742b7424befbaa160 Mon Sep 17 00:00:00 2001 From: Adam <893184+NotAdam@users.noreply.github.com> Date: Sat, 12 Aug 2017 23:53:43 +0900 Subject: [PATCH 3/3] Add debug log for CFRegisterDuty --- src/servers/Server_Zone/PacketHandlers.cpp | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Zone/PacketHandlers.cpp b/src/servers/Server_Zone/PacketHandlers.cpp index 1b62cfe2..bb45587d 100644 --- a/src/servers/Server_Zone/PacketHandlers.cpp +++ b/src/servers/Server_Zone/PacketHandlers.cpp @@ -1149,18 +1149,35 @@ void Core::Network::GameConnection::cfDutyInfoRequest(Core::Network::Packets::Ga void Core::Network::GameConnection::cfRegisterDuty(Core::Network::Packets::GamePacketPtr pInPacket, Core::Entity::PlayerPtr pPlayer) { - // TODO implment + // TODO use for loop for this + auto contentId1 = pInPacket->getValAt< uint16_t >( 46 ); + auto contentId2 = pInPacket->getValAt< uint16_t >( 48 ); + auto contentId3 = pInPacket->getValAt< uint16_t >( 50 ); + auto contentId4 = pInPacket->getValAt< uint16_t >( 52 ); + auto contentId5 = pInPacket->getValAt< uint16_t >( 54 ); + pPlayer->sendDebug("Duty register request"); + pPlayer->sendDebug("ContentId1" + std::to_string(contentId1)); + pPlayer->sendDebug("ContentId2" + std::to_string(contentId2)); + pPlayer->sendDebug("ContentId3" + std::to_string(contentId3)); + pPlayer->sendDebug("ContentId4" + std::to_string(contentId4)); + pPlayer->sendDebug("ContentId5" + std::to_string(contentId5)); + + // let's cancel it because otherwise you can't register it again + GamePacketNew< FFXIVIpcCFNotify > cfCancelPacket( pPlayer->getId() ); + cfCancelPacket.data().state1 = 3; + cfCancelPacket.data().state2 = 1; // Your registration is withdrawn. + queueOutPacket( cfCancelPacket ); } void Core::Network::GameConnection::cfRegisterRoulette(Core::Network::Packets::GamePacketPtr pInPacket, Core::Entity::PlayerPtr pPlayer) { - + pPlayer->sendDebug("Roulette register"); } void Core::Network::GameConnection::cfDutyAccepted(Core::Network::Packets::GamePacketPtr pInPacket, Core::Entity::PlayerPtr pPlayer) { - + pPlayer->sendDebug("TODO: Duty accept"); }