From 429d6fd87d603ad8845e6ee5a10c60f84be8b950 Mon Sep 17 00:00:00 2001 From: KimLS Date: Thu, 21 Nov 2024 23:06:44 -0800 Subject: [PATCH] WIP chat message work --- common/patches/larion.cpp | 43 ++++++++++++++++++++++++++++++++++++- common/patches/larion_ops.h | 1 + 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/common/patches/larion.cpp b/common/patches/larion.cpp index 3ab49ff8f..b5101c334 100644 --- a/common/patches/larion.cpp +++ b/common/patches/larion.cpp @@ -2424,6 +2424,46 @@ namespace Larion FINISH_ENCODE(); } + ENCODE(OP_ChannelMessage) + { + EQApplicationPacket* in = *p; + *p = nullptr; + + ChannelMessage_Struct* emu = (ChannelMessage_Struct*)in->pBuffer; + + unsigned char* __emu_buffer = in->pBuffer; + + std::string old_message = emu->message; + std::string new_message = old_message; + //ServerToRoF2SayLink(new_message, old_message); + + in->size = strlen(emu->sender) + strlen(emu->targetname) + new_message.length() + 43; + + in->pBuffer = new unsigned char[in->size]; + + char* OutBuffer = (char*)in->pBuffer; + + VARSTRUCT_ENCODE_STRING(OutBuffer, emu->sender); + VARSTRUCT_ENCODE_STRING(OutBuffer, emu->targetname); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->language); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->chan_num); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->skill_in_language); + VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); + + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint16, OutBuffer, 0); // Unknown + VARSTRUCT_ENCODE_TYPE(uint8, OutBuffer, 0); // Unknown + + delete[] __emu_buffer; + dest->FastQueuePacket(&in, ack_req); + } + ENCODE(OP_SpecialMesg) { EQApplicationPacket* in = *p; @@ -2451,6 +2491,7 @@ namespace Larion in->ReadString(old_message); //ServerToRoF2SayLink(new_message, old_message); + new_message = old_message; buf.WriteString(new_message); @@ -2574,7 +2615,7 @@ namespace Larion uint32 Skill = VARSTRUCT_DECODE_TYPE(uint32, InBuffer); std::string old_message = InBuffer; - std::string new_message; + std::string new_message = old_message; //RoF2ToServerSayLink(new_message, old_message); __packet->size = sizeof(ChannelMessage_Struct) + new_message.length() + 1; diff --git a/common/patches/larion_ops.h b/common/patches/larion_ops.h index 1567272d8..000ca0bed 100644 --- a/common/patches/larion_ops.h +++ b/common/patches/larion_ops.h @@ -20,6 +20,7 @@ E(OP_RequestClientZoneChange) E(OP_ZoneChange) E(OP_ClientUpdate) E(OP_WearChange) +E(OP_ChannelMessage) E(OP_SpecialMesg) E(OP_DeleteSpawn) //list of packets we need to decode on the way in: