diff --git a/src/common/Common.h b/src/common/Common.h index 8088c90b..3eba346d 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -27,6 +27,14 @@ namespace Common { float z; }; + enum ClientLanguage : uint8_t + { + Japanese = 1, + English = 2, + German = 4, + French = 8 + }; + enum EquipSlot : uint8_t { MainHand = 0, diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 659f8ad4..4445adc7 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -9,6 +9,8 @@ namespace Network { namespace Packets { namespace Client { +#pragma pack(push, 1) + struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 > { /* 0000 */ uint32_t commandId; @@ -25,8 +27,6 @@ struct FFXIVIpcGmCommand2 : FFXIVIpcBasePacket< GMCommand2 > /* 0014 */ char param1[0x20]; }; -#pragma pack(push, 4) - struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > { /* 0000 */ uint16_t commandId; @@ -47,8 +47,6 @@ struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > /* 0018 */ uint64_t param3; }; -#pragma pack(pop) - struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler > { /* 0000 */ char pad_0000[1]; @@ -119,6 +117,25 @@ struct FFXIVIpcPingHandler : FFXIVIpcBasePacket< PingHandler > /* 0000 */ uint32_t timestamp; // maybe lol.. }; +struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket< SetSearchInfoHandler > +{ + union + { + /* 0000 */ uint64_t status; + struct + { + /* 0000 */ uint32_t status1; + /* 0004 */ uint32_t status2; + }; + }; + + /* 0008 */ char pad_0008[9]; + /* 0011 */ Common::ClientLanguage language; + /* 0012 */ char searchComment[193]; +}; + +#pragma pack(pop) + } } } diff --git a/src/servers/sapphire_zone/Actor/PlayerSql.cpp b/src/servers/sapphire_zone/Actor/PlayerSql.cpp index 564f44a9..1a325350 100644 --- a/src/servers/sapphire_zone/Actor/PlayerSql.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerSql.cpp @@ -488,7 +488,7 @@ void Core::Entity::Player::updateDbSearchInfo() const stmtS1->setInt( 2, m_id ); pDb->execute( stmtS1 ); - auto stmtS2 = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTREGION ); + auto stmtS2 = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SEARCHCOMMENT ); stmtS2->setString( 1, string( m_searchMessage != nullptr ? m_searchMessage : "" ) ); stmtS2->setInt( 2, m_id ); pDb->execute( stmtS2 ); diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 2633d0fd..a5f7a32c 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -63,15 +63,14 @@ void Core::Network::GameConnection::fcInfoReqHandler( const Core::Network::Packe void Core::Network::GameConnection::setSearchInfoHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { - Packets::FFXIVARR_PACKET_RAW copy = inPacket; + const auto packet = ZoneChannelPacket< Client::FFXIVIpcSetSearchInfo >( inPacket, true ); - auto inval = *reinterpret_cast< uint32_t* >( ©.data[0x10] ); - auto inval1 = *reinterpret_cast< uint32_t* >( ©.data[0x14] ); - auto status = *reinterpret_cast< uint64_t* >( ©.data[0x10] ); + const auto& inval = packet.data().status1; + const auto& inval1 = packet.data().status2; + const auto& status = packet.data().status; + const auto& selectRegion = packet.data().language; - auto selectRegion = copy.data[0x21]; - - player.setSearchInfo( selectRegion, 0, reinterpret_cast< char* >( ©.data[0x22] ) ); + player.setSearchInfo( selectRegion, 0, packet.data().searchComment ); player.setOnlineStatusMask( status );