diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 17f3d21f..63aa3b5e 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -78,6 +78,7 @@ enum ServerZoneIpcType : CFPlayerInNeed = 0xF07F, CFPreferredRole = 0x282, // updated 6.58 hotfix 2 CFCancel = 0x384, // updated 6.58 hotfix 2 + CFUnk = 0x196, // updated 6.58 hotfix 2 SocialRequestError = 0xF0AD, CFRegistered = 0x029F, // updated 5.58h diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index c2a204a3..e117a80b 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -2123,6 +2123,15 @@ namespace Sapphire::Network::Packets::Server uint32_t unknown2; }; + // used to clear CF state, otherwise the UI stays locked and cannot queue again. + struct FFXIVIpcCFUnk : FFXIVIpcBasePacket< CFUnk > + { + uint16_t cfConditionId; + uint16_t unknown1; + uint32_t five; + uint32_t unknown2[2]; + }; + struct FFXIVIpcShopMessage : FFXIVIpcBasePacket< ShopMessage > { uint32_t shopId; diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index dc9a6cc4..050cf525 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -571,6 +571,11 @@ bool Sapphire::Entity::Player::exitInstance() p->data().param[3] = d->getContentId(); queuePacket( p ); + auto p2 = makeZonePacket< FFXIVIpcCFUnk >( getId() ); + p2->data().cfConditionId = d->getContentFinderConditionId(); + p2->data().five = 5; + queuePacket( p2 ); + prepareZoning( 0, 1, 1, 0, 0, 1, 9 ); }