From 09d00b8a7f11c7f4fdbe24ef96da893e40a015a0 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 6 Jul 2018 22:43:49 +1000 Subject: [PATCH] start moving old packets to new incoming packet system --- src/common/Network/GamePacketNew.h | 2 +- .../Network/PacketDef/Zone/ClientZoneDef.h | 28 +++++++++++++++++++ .../Network/Handlers/ClientTriggerHandler.cpp | 18 ++++++------ .../Network/Handlers/GMCommandHandlers.cpp | 6 ++-- .../Network/Handlers/SkillHandler.cpp | 13 ++++----- 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index c9ee97fe..37319b66 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -195,7 +195,7 @@ public: auto log = g_fw.get< Core::Logger >(); if( log ) { - 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( "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 61bed5b7..93a2c085 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -18,6 +18,34 @@ struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 > /* 0018 */ uint32_t param3; }; +struct FFXIVIpcGmCommand2 : FFXIVIpcBasePacket< GMCommand2 > +{ + /* 0000 */ uint32_t commandId; + /* 0004 */ char unk_4[0x10]; + /* 0014 */ char param1[0x20]; +}; + +struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > +{ + /* 0000 */ uint16_t commandId; + /* 0002 */ char unk_2[2]; + /* 0004 */ uint64_t param1; + /* 000C */ uint32_t param2; + /* 0010 */ char unk_10[8]; + /* 0018 */ uint64_t param3; +}; + +struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler > +{ + /* 0000 */ char pad_0000[1]; + /* 0001 */ uint8_t type; + /* 0002 */ char pad_0002[2]; + /* 0004 */ uint32_t actionId; + /* 0008 */ uint32_t useCount; + /* 000C */ char pad_000C[4]; + /* 0010 */ uint64_t targetId; +}; + } } } diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 8b7010a2..a03b4bad 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "Zone/Zone.h" #include "Zone/ZonePosition.h" @@ -42,15 +43,16 @@ using namespace Core::Network::ActorControl; void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - Packets::FFXIVARR_PACKET_RAW copy = inPacket; - auto pLog = g_fw.get< Logger >(); - uint16_t commandId = *reinterpret_cast< uint16_t* >( ©.data[0x10] ); - uint64_t param1 = *reinterpret_cast< uint64_t* >( ©.data[0x14] ); - uint32_t param11 = *reinterpret_cast< uint32_t* >( ©.data[0x14] ); - uint32_t param12 = *reinterpret_cast< uint32_t* >( ©.data[0x18] ); - uint32_t param2 = *reinterpret_cast< uint32_t* >( ©.data[0x1C] ); - uint64_t param3 = *reinterpret_cast< uint64_t* >( ©.data[0x28] ); + + auto packet = ZoneChannelPacket< Client::FFXIVIpcClientTrigger >( inPacket ); + + auto commandId = packet.data().commandId; + auto param1 = packet.data().param1; + auto param11 = *reinterpret_cast< uint32_t* >( &packet.data().param1 ); + auto param12 = *reinterpret_cast< uint32_t* >( &packet.data().param1 + sizeof( uint32_t ) ); + auto param2 = packet.data().param2; + auto param3 = packet.data().param3; pLog->debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " + boost::str( boost::format( "%|04X|" ) % ( uint32_t ) ( commandId & 0xFFFF ) ) + diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index f0ed74ab..8737cbe9 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -489,10 +489,10 @@ void Core::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACKET_R auto pLog = g_fw.get< Logger >(); auto pServerZone = g_fw.get< ServerZone >(); - Packets::FFXIVARR_PACKET_RAW copy = inPacket; - auto commandId = *reinterpret_cast< uint32_t* >( ©.data[0x10] ); + auto packet = ZoneChannelPacket< Client::FFXIVIpcGmCommand2 >( inPacket ); - auto param1 = std::string( reinterpret_cast< char* >( ©.data[0x24] ) ); + auto commandId = packet.data().commandId; + auto param1 = std::string( packet.data().param1 ); pLog->debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 ); diff --git a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp index a520a9c7..fa3eb7fd 100644 --- a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "Network/GameConnection.h" @@ -38,14 +39,12 @@ using namespace Core::Network::ActorControl; void Core::Network::GameConnection::skillHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - Packets::FFXIVARR_PACKET_RAW copy = inPacket; + auto packet = ZoneChannelPacket< Client::FFXIVIpcSkillHandler >( inPacket ); - uint8_t type = inPacket.data[0x11]; - - auto action = *reinterpret_cast< uint32_t* >( ©.data[0x14] ); - auto useCount = *reinterpret_cast< uint32_t* >( ©.data[0x18] ); - - auto targetId = *reinterpret_cast< uint64_t* >( ©.data[0x20] ); + auto type = packet.data().type; + auto action = packet.data().actionId; + auto useCount = packet.data().useCount; + auto targetId = packet.data().targetId; player.sendDebug( "Skill type:" + std::to_string( type ) );