From 6da1af4fb587ea07488f85bc1b84eab25c462bd6 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sat, 7 Jul 2018 22:27:35 +1000 Subject: [PATCH] add tell and chat ipc structures --- .../Network/PacketDef/Zone/ClientZoneDef.h | 31 ++++++++++--------- .../Network/Handlers/ClientTriggerHandler.cpp | 2 +- .../Network/Handlers/PacketHandlers.cpp | 27 ++++++---------- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 4445adc7..088a539f 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -9,8 +9,6 @@ namespace Network { namespace Packets { namespace Client { -#pragma pack(push, 1) - struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 > { /* 0000 */ uint32_t commandId; @@ -31,17 +29,8 @@ struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > { /* 0000 */ uint16_t commandId; /* 0002 */ uint8_t unk_2[2]; - - union - { - /* 0004 */ uint64_t param1; - struct - { - /* 0004 */ uint32_t param11; - /* 0008 */ uint32_t param12; - }; - }; - + /* 0004 */ uint32_t param11; + /* 0008 */ uint32_t param12; /* 000C */ uint32_t param2; /* 0010 */ char unk_10[8]; /* 0018 */ uint64_t param3; @@ -134,7 +123,21 @@ struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket< SetSearchInfoHandler > /* 0012 */ char searchComment[193]; }; -#pragma pack(pop) +struct FFXIVIpcTellHandler : FFXIVIpcBasePacket< TellReq > +{ + /* 0000 */ char pad_0000[4]; + /* 0004 */ char targetPCName[32]; + /* 0024 */ char message[1012]; +}; + +struct FFXIVIpcChatHandler : FFXIVIpcBasePacket< ChatHandler > +{ + /* 0000 */ char pad_0000[4]; + /* 0004 */ uint32_t sourceId; + /* 0008 */ char pad_0008[16]; + /* 0018 */ Common::ChatType chatType; + /* 001A */ char message[1012]; +}; } } diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 8335f1e1..d902cc6f 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -48,7 +48,7 @@ void Core::Network::GameConnection::clientTriggerHandler( const Packets::FFXIVAR const auto packet = ZoneChannelPacket< Client::FFXIVIpcClientTrigger >( inPacket ); const auto& commandId = packet.data().commandId; - const auto& param1 = packet.data().param1; + const auto& param1 = *reinterpret_cast< const uint64_t* >( &packet.data().param11 ); const auto& param11 = packet.data().param11; const auto& param12 = packet.data().param12; const auto& param2 = packet.data().param2; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 6d67e08b..40c1d76d 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -63,7 +63,7 @@ void Core::Network::GameConnection::fcInfoReqHandler( const Core::Network::Packe void Core::Network::GameConnection::setSearchInfoHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - const auto packet = ZoneChannelPacket< Client::FFXIVIpcSetSearchInfo >( inPacket, true ); + const auto packet = ZoneChannelPacket< Client::FFXIVIpcSetSearchInfo >( inPacket ); const auto& inval = packet.data().status1; const auto& inval1 = packet.data().status2; @@ -459,23 +459,19 @@ void Core::Network::GameConnection::chatHandler( const Core::Network::Packets::F { auto pDebugCom = g_fw.get< DebugCommandHandler >(); - Packets::FFXIVARR_PACKET_RAW copy = inPacket; + const auto packet = ZoneChannelPacket< Client::FFXIVIpcChatHandler >( inPacket ); - std::string chatString( reinterpret_cast< char* >( ©.data[0x2a] ) ); - - auto sourceId = *reinterpret_cast< uint32_t* >( ©.data[0x14] ); - - if( chatString.at( 0 ) == '!' ) + if( packet.data().message[0] == '!' ) { // execute game console command - pDebugCom->execCommand( const_cast< char * >( chatString.c_str() ) + 1, player ); + pDebugCom->execCommand( const_cast< char* >( packet.data().message ) + 1, player ); return; } - ChatType chatType = static_cast< ChatType >( inPacket.data[0x28] ); + auto chatType = packet.data().chatType; //ToDo, need to implement sending GM chat types. - auto chatPacket = boost::make_shared< ChatPacket >( player, chatType, chatString ); + auto chatPacket = boost::make_shared< Server::ChatPacket >( player, chatType, packet.data().message ); switch( chatType ) { @@ -531,19 +527,16 @@ void Core::Network::GameConnection::logoutHandler( const Core::Network::Packets: void Core::Network::GameConnection::tellHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - Packets::FFXIVARR_PACKET_RAW copy = inPacket; - - std::string targetPcName( reinterpret_cast< char* >( ©.data[0x14] ) ); - std::string msg( reinterpret_cast< char* >( ©.data[0x34] ) ); + const auto packet = ZoneChannelPacket< Client::FFXIVIpcTellHandler >( inPacket ); auto pZoneServer = g_fw.get< ServerZone >(); - auto pSession = pZoneServer->getSession( targetPcName ); + auto pSession = pZoneServer->getSession( packet.data().targetPCName ); if( !pSession ) { auto tellErrPacket = makeZonePacket< FFXIVIpcTellErrNotFound >( player.getId() ); - strcpy( tellErrPacket->data().receipientName, targetPcName.c_str() ); + strcpy( tellErrPacket->data().receipientName, packet.data().targetPCName ); sendSinglePacket( tellErrPacket ); return; } @@ -572,7 +565,7 @@ void Core::Network::GameConnection::tellHandler( const Core::Network::Packets::F } auto tellPacket = makeChatPacket< FFXIVIpcTell >( player.getId() ); - strcpy( tellPacket->data().msg, msg.c_str() ); + strcpy( tellPacket->data().msg, packet.data().message ); strcpy( tellPacket->data().receipientName, player.getName().c_str() ); // TODO: do these have a meaning? //tellPacket.data().u1 = 0x92CD7337;