From eab07e1edf2d61a83a9da4f4a90058107c33a390 Mon Sep 17 00:00:00 2001 From: collett Date: Fri, 1 May 2020 01:03:27 +0900 Subject: [PATCH] Fix CFCancel so we can enter more than one instance. --- src/common/Network/PacketDef/Ipcs.h | 12 ++++++------ .../Network/PacketDef/Zone/ServerZoneDef.h | 6 ++++++ src/world/Network/GameConnection.cpp | 1 + src/world/Network/GameConnection.h | 2 ++ src/world/Network/Handlers/CFHandlers.cpp | 18 ++++++++++++++++++ 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 3fef352d..5fa73b1e 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -69,7 +69,7 @@ namespace Sapphire::Network::Packets CFDutyInfo = 0x007A, CFPlayerInNeed = 0xF07F, CFPreferredRole = 0x0186, // added 5.25 - + CFCancel = 0x00B7, // updated 5.25 SocialRequestError = 0xF0AD, CFRegistered = 0x00B8, // updated 4.1 @@ -119,9 +119,9 @@ namespace Sapphire::Network::Packets CharaFreeCompanyTag = 0x013B, // updated 4.5 FreeCompanyBoardMsg = 0x013C, // updated 4.5 FreeCompanyInfo = 0x0000,//0x013D, // updated 4.5 - ExamineFreeCompanyInfo = 0x013E, // updated 4.5 + ExamineFreeCompanyInfo = 0xF13E, // updated 4.5 - FreeCompanyUpdateShortMessage = 0x0157, // added 5.0 + FreeCompanyUpdateShortMessage = 0xF157, // added 5.0 StatusEffectList = 0x01D7, // updated 5.25 EurekaStatusEffectList = 0x0167, // updated 5.18 @@ -177,13 +177,13 @@ namespace Sapphire::Network::Packets InventoryActionAck = 0x01AE, // updated 5.25 UpdateInventorySlot = 0x0151, // updated 5.25 - HuntingLogEntry = 0x01B3, // updated 5.0 + HuntingLogEntry = 0xF1B3, // updated 5.0 EventPlay = 0x02C3, // updated 5.25 EventPlay4 = 0x029A, // updated 5.25 EventPlay8 = 0x0119, // updated 5.18 EventPlay16 = 0x01FB, // updated 5.18 - EventPlay32 = 0x017D, // updated 5.21 + EventPlay32 = 0x02D9, // updated 5.25 EventPlay64 = 0x00E5, // updated 5.18 EventPlay128 = 0x02BE, // updated 5.18 EventPlay255 = 0x01AC, // updated 5.25 @@ -290,7 +290,7 @@ namespace Sapphire::Network::Packets CFCommenceHandler = 0x0228, // updated 5.25 - + CFCancelHandler = 0x013E, // updated 5.25 CFRegisterDuty = 0x0180, // updated 5.25 CFRegisterRoulette = 0x0395, // updated 5.25 PlayTimeHandler = 0x02FE, // updated 5.25 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 00957763..ee87644c 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1999,6 +1999,12 @@ namespace Sapphire::Network::Packets::Server uint32_t padding; }; + struct FFXIVIpcCFCancel : FFXIVIpcBasePacket< CFCancel > + { + uint32_t cancelReason; + uint32_t unknown2; + }; + } #endif /*_CORE_NETWORK_PACKETS_SERVER_IPC_H*/ diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index b3ccb223..7fda9109 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -117,6 +117,7 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH setZoneHandler( ClientZoneIpcType::CFRegisterDuty, "CFRegisterDuty", &GameConnection::cfRegisterDuty ); setZoneHandler( ClientZoneIpcType::CFRegisterRoulette, "CFRegisterRoulette", &GameConnection::cfRegisterRoulette ); setZoneHandler( ClientZoneIpcType::CFCommenceHandler, "CFDutyAccepted", &GameConnection::cfDutyAccepted ); + setZoneHandler( ClientZoneIpcType::CFCancelHandler, "CFCancel", &GameConnection::cfCancel ); setZoneHandler( ClientZoneIpcType::ReqEquipDisplayFlagsChange, "ReqEquipDisplayFlagsChange", &GameConnection::reqEquipDisplayFlagsHandler ); diff --git a/src/world/Network/GameConnection.h b/src/world/Network/GameConnection.h index 37a680e0..94fa4f02 100644 --- a/src/world/Network/GameConnection.h +++ b/src/world/Network/GameConnection.h @@ -155,6 +155,8 @@ namespace Sapphire::Network DECLARE_HANDLER( cfDutyAccepted ); + DECLARE_HANDLER( cfCancel ); + DECLARE_HANDLER( actionHandler ); DECLARE_HANDLER( placedActionHandler ); diff --git a/src/world/Network/Handlers/CFHandlers.cpp b/src/world/Network/Handlers/CFHandlers.cpp index 6361d901..0cc3a39f 100644 --- a/src/world/Network/Handlers/CFHandlers.cpp +++ b/src/world/Network/Handlers/CFHandlers.cpp @@ -66,10 +66,15 @@ void Sapphire::Network::GameConnection::cfRegisterDuty( const Packets::FFXIVARR_ player.sendDebug( "Duty register request for contentid#{0}", contentId ); // let's cancel it because otherwise you can't register it again + /* auto cfCancelPacket = makeZonePacket< FFXIVIpcCFNotify >( player.getId() ); cfCancelPacket->data().state1 = 3; cfCancelPacket->data().state2 = 1; // Your registration is withdrawn. queueOutPacket( cfCancelPacket ); + */ + auto packet = makeZonePacket< FFXIVIpcCFCancel >( player.getId() ); + packet->data().cancelReason = 890; + queueOutPacket( packet ); auto cfCondition = exdData.get< Sapphire::Data::ContentFinderCondition >( contentId ); if( !cfCondition ) @@ -90,10 +95,15 @@ void Sapphire::Network::GameConnection::cfRegisterDuty( const Packets::FFXIVARR_ void Sapphire::Network::GameConnection::cfRegisterRoulette( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { + /* auto cfCancelPacket = makeZonePacket< FFXIVIpcCFNotify >( player.getId() ); cfCancelPacket->data().state1 = 3; cfCancelPacket->data().state2 = 1; // Your registration is withdrawn. queueOutPacket( cfCancelPacket ); + */ + auto packet = makeZonePacket< FFXIVIpcCFCancel >( player.getId() ); + packet->data().cancelReason = 890; + queueOutPacket( packet ); player.sendDebug( "Roulette register" ); } @@ -103,3 +113,11 @@ void Sapphire::Network::GameConnection::cfDutyAccepted( const Packets::FFXIVARR_ { player.sendDebug( "TODO: Duty accept" ); } + +void Sapphire::Network::GameConnection::cfCancel( const Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player ) +{ + auto packet = makeZonePacket< FFXIVIpcCFCancel >( player.getId() ); + packet->data().cancelReason = 890; + queueOutPacket( packet ); +} \ No newline at end of file