From c18ea5e7345f773ae7c17f8d7c3db6d4321e9e5b Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sat, 7 Jul 2018 13:38:15 +1000 Subject: [PATCH] cleanup clienttrigger ipc struct, verbose packet construction log switch --- src/common/Network/GamePacketNew.h | 4 ++-- .../Network/PacketDef/Zone/ClientZoneDef.h | 18 ++++++++++++++++-- .../Network/Handlers/ClientTriggerHandler.cpp | 4 ++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index f0543b4a..7eefc16a 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -184,7 +184,7 @@ public: initialize(); }; - FFXIVIpcPacket< T, T1 >( const FFXIVARR_PACKET_RAW& rawPacket ) + FFXIVIpcPacket< T, T1 >( const FFXIVARR_PACKET_RAW& rawPacket, bool verbose = false ) { auto ipcHdrSize = sizeof( FFXIVARR_IPC_HEADER ); auto copySize = std::min< uint32_t >( sizeof( T ), rawPacket.segHdr.size - ipcHdrSize ); @@ -193,7 +193,7 @@ public: memcpy( &m_data, &rawPacket.data[0] + ipcHdrSize, copySize ); auto log = g_fw.get< Core::Logger >(); - if( log ) + if( log && verbose ) { log->debug( "rawpacket size " + std::to_string( rawPacket.segHdr.size ) + "\n" + Util::binaryToHexDump( const_cast< uint8_t* >( &rawPacket.data[0] ), rawPacket.segHdr.size ) ); log->debug( "T size " + std::to_string( sizeof( T ) ) + "\n" + Util::binaryToHexDump( reinterpret_cast< uint8_t* >( &m_data ), sizeof( T ) ) ); diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 7e2021f7..659f8ad4 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -25,16 +25,30 @@ struct FFXIVIpcGmCommand2 : FFXIVIpcBasePacket< GMCommand2 > /* 0014 */ char param1[0x20]; }; +#pragma pack(push, 4) + struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > { /* 0000 */ uint16_t commandId; - /* 0002 */ char unk_2[2]; - /* 0004 */ uint64_t param1; + /* 0002 */ uint8_t unk_2[2]; + + union + { + /* 0004 */ uint64_t param1; + struct + { + /* 0004 */ uint32_t param11; + /* 0008 */ uint32_t param12; + }; + }; + /* 000C */ uint32_t param2; /* 0010 */ char unk_10[8]; /* 0018 */ uint64_t param3; }; +#pragma pack(pop) + struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler > { /* 0000 */ char pad_0000[1]; diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 8cda8ace..8335f1e1 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -49,8 +49,8 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR const auto& commandId = packet.data().commandId; const auto& param1 = packet.data().param1; - const auto& param11 = *reinterpret_cast< const uint32_t* >( &packet.data().param1 ); - const auto& param12 = *reinterpret_cast< const uint32_t* >( &packet.data().param1 + sizeof( uint32_t ) ); + const auto& param11 = packet.data().param11; + const auto& param12 = packet.data().param12; const auto& param2 = packet.data().param2; const auto& param3 = packet.data().param3;