From 8f1c227125f4334fce3acf5ea75109c96ff7f07e Mon Sep 17 00:00:00 2001 From: Uleat Date: Sun, 11 Jan 2015 12:25:58 -0500 Subject: [PATCH] Tweaked client text link translators --- common/eq_packet_structs.h | 2 +- common/patches/rof.cpp | 50 ++++++++++++------------------ common/patches/rof2.cpp | 38 ++++++++--------------- common/patches/sod.cpp | 56 +++++++++++++-------------------- common/patches/sof.cpp | 56 +++++++++++++-------------------- common/patches/titanium.cpp | 60 +++++++++++++++--------------------- common/patches/underfoot.cpp | 56 +++++++++++++-------------------- zone/client_packet.cpp | 4 +-- 8 files changed, 125 insertions(+), 197 deletions(-) diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 0c91d96f8..4ca5fa59c 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -2388,7 +2388,7 @@ struct AugmentItem_Struct { // OP_Emote struct Emote_Struct { -/*0000*/ uint32 unknown01; +/*0000*/ uint32 type; // 0 - custom, 0xffffffff - command (/dance, /flip, etc...) /*0004*/ char message[1024]; /*1028*/ }; diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index 3fce18414..9b097bf49 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -851,7 +851,7 @@ namespace RoF char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -5750,73 +5750,61 @@ namespace RoF static inline void ServerToRoFTextLink(std::string& rofTextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { rofTextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // RoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (55) // Diff: ^ - new_segment.append(segments[segment_iter].substr(0, 41).c_str()); + rofTextLink.push_back('\x12'); + rofTextLink.append(segments[segment_iter].substr(0, 41)); - if (segments[segment_iter].substr(41, 1) == "0") - new_segment.append(segments[segment_iter].substr(42, 1).c_str()); + if (segments[segment_iter][41] == '0') + rofTextLink.push_back(segments[segment_iter][42]); else - new_segment.append("F"); + rofTextLink.push_back('F'); - new_segment.append(segments[segment_iter].substr(43).c_str()); - - rofTextLink.push_back(delimiter); - rofTextLink.append(new_segment.c_str()); - rofTextLink.push_back(delimiter); + rofTextLink.append(segments[segment_iter].substr(43)); + rofTextLink.push_back('\x12'); } else { - rofTextLink.append(segments[segment_iter].c_str()); + rofTextLink.append(segments[segment_iter]); } } } static inline void RoFToServerTextLink(std::string& serverTextLink, const std::string& rofTextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (rofTextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (rofTextLink.find('\x12') == std::string::npos)) { serverTextLink = rofTextLink; return; } - auto segments = SplitString(rofTextLink, delimiter); + auto segments = SplitString(rofTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 42 47 (Source) // RoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (55) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: ^ - new_segment.append(segments[segment_iter].substr(0, 41).c_str()); - new_segment.append("0"); - new_segment.append(segments[segment_iter].substr(41).c_str()); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter].substr(0, 41)); + serverTextLink.push_back('0'); + serverTextLink.append(segments[segment_iter].substr(41)); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 782df8be7..e5b8c1805 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -917,7 +917,7 @@ namespace RoF2 char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -5845,64 +5845,52 @@ namespace RoF2 static inline void ServerToRoF2TextLink(std::string& rof2TextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { rof2TextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: - new_segment.append(segments[segment_iter]); - - rof2TextLink.push_back(delimiter); - rof2TextLink.append(new_segment.c_str()); - rof2TextLink.push_back(delimiter); + rof2TextLink.push_back('\x12'); + rof2TextLink.append(segments[segment_iter]); + rof2TextLink.push_back('\x12'); } else { - rof2TextLink.append(segments[segment_iter].c_str()); + rof2TextLink.append(segments[segment_iter]); } } } static inline void RoF2ToServerTextLink(std::string& serverTextLink, const std::string& rof2TextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (rof2TextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (rof2TextLink.find('\x12') == std::string::npos)) { serverTextLink = rof2TextLink; return; } - auto segments = SplitString(rof2TextLink, delimiter); + auto segments = SplitString(rof2TextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: - new_segment.append(segments[segment_iter]); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter]); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 34469d987..74f150e59 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -620,7 +620,7 @@ namespace SoD char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -3964,76 +3964,64 @@ namespace SoD static inline void ServerToSoDTextLink(std::string& sodTextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { sodTextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append(segments[segment_iter].substr(36, 5).c_str()); + sodTextLink.push_back('\x12'); + sodTextLink.append(segments[segment_iter].substr(0, 31)); + sodTextLink.append(segments[segment_iter].substr(36, 5)); - if (segments[segment_iter].substr(41, 1) == "0") - new_segment.append(segments[segment_iter].substr(42, 1).c_str()); + if (segments[segment_iter][41] == '0') + sodTextLink.push_back(segments[segment_iter][42]); else - new_segment.append("F"); + sodTextLink.push_back('F'); - new_segment.append(segments[segment_iter].substr(43).c_str()); - - sodTextLink.push_back(delimiter); - sodTextLink.append(new_segment.c_str()); - sodTextLink.push_back(delimiter); + sodTextLink.append(segments[segment_iter].substr(43)); + sodTextLink.push_back('\x12'); } else { - sodTextLink.append(segments[segment_iter].c_str()); + sodTextLink.append(segments[segment_iter]); } } } static inline void SoDToServerTextLink(std::string& serverTextLink, const std::string& sodTextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (sodTextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (sodTextLink.find('\x12') == std::string::npos)) { serverTextLink = sodTextLink; return; } - auto segments = SplitString(sodTextLink, delimiter); + auto segments = SplitString(sodTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 32 36 37 42 (Source) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append("00000"); - new_segment.append(segments[segment_iter].substr(31, 5).c_str()); - new_segment.append("0"); - new_segment.append(segments[segment_iter].substr(36).c_str()); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter].substr(0, 31)); + serverTextLink.append("00000"); + serverTextLink.append(segments[segment_iter].substr(31, 5)); + serverTextLink.push_back('0'); + serverTextLink.append(segments[segment_iter].substr(36)); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 22e8771b6..854953b32 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -607,7 +607,7 @@ namespace SoF char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -3286,76 +3286,64 @@ namespace SoF static inline void ServerToSoFTextLink(std::string& sofTextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { sofTextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append(segments[segment_iter].substr(36, 5).c_str()); + sofTextLink.push_back('\x12'); + sofTextLink.append(segments[segment_iter].substr(0, 31)); + sofTextLink.append(segments[segment_iter].substr(36, 5)); - if (segments[segment_iter].substr(41, 1) == "0") - new_segment.append(segments[segment_iter].substr(42, 1).c_str()); + if (segments[segment_iter][41] == '0') + sofTextLink.push_back(segments[segment_iter][42]); else - new_segment.append("F"); + sofTextLink.push_back('F'); - new_segment.append(segments[segment_iter].substr(43).c_str()); - - sofTextLink.push_back(delimiter); - sofTextLink.append(new_segment.c_str()); - sofTextLink.push_back(delimiter); + sofTextLink.append(segments[segment_iter].substr(43)); + sofTextLink.push_back('\x12'); } else { - sofTextLink.append(segments[segment_iter].c_str()); + sofTextLink.append(segments[segment_iter]); } } } static inline void SoFToServerTextLink(std::string& serverTextLink, const std::string& sofTextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (sofTextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (sofTextLink.find('\x12') == std::string::npos)) { serverTextLink = sofTextLink; return; } - auto segments = SplitString(sofTextLink, delimiter); + auto segments = SplitString(sofTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 32 36 37 42 (Source) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append("00000"); - new_segment.append(segments[segment_iter].substr(31, 5).c_str()); - new_segment.append("0"); - new_segment.append(segments[segment_iter].substr(36).c_str()); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter].substr(0, 31)); + serverTextLink.append("00000"); + serverTextLink.append(segments[segment_iter].substr(31, 5)); + serverTextLink.push_back('0'); + serverTextLink.append(segments[segment_iter].substr(36)); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/common/patches/titanium.cpp b/common/patches/titanium.cpp index 77077c3bc..ac154a79d 100644 --- a/common/patches/titanium.cpp +++ b/common/patches/titanium.cpp @@ -476,7 +476,7 @@ namespace Titanium char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -2045,78 +2045,66 @@ namespace Titanium static inline void ServerToTitaniumTextLink(std::string& titaniumTextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { titaniumTextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // 6.2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXXXXX (45) // Diff: ^^^^^ ^ ^^^^^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append(segments[segment_iter].substr(36, 5).c_str()); + titaniumTextLink.push_back('\x12'); + titaniumTextLink.append(segments[segment_iter].substr(0, 31)); + titaniumTextLink.append(segments[segment_iter].substr(36, 5)); - if (segments[segment_iter].substr(41, 1) == "0") - new_segment.append(segments[segment_iter].substr(42, 1).c_str()); + if (segments[segment_iter][41] == '0') + titaniumTextLink.push_back(segments[segment_iter][42]); else - new_segment.append("F"); + titaniumTextLink.push_back('F'); - new_segment.append(segments[segment_iter].substr(48).c_str()); - - titaniumTextLink.push_back(delimiter); - titaniumTextLink.append(new_segment.c_str()); - titaniumTextLink.push_back(delimiter); + titaniumTextLink.append(segments[segment_iter].substr(48)); + titaniumTextLink.push_back('\x12'); } else { - titaniumTextLink.append(segments[segment_iter].c_str()); + titaniumTextLink.append(segments[segment_iter]); } } } static inline void TitaniumToServerTextLink(std::string& serverTextLink, const std::string& titaniumTextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (titaniumTextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (titaniumTextLink.find('\x12') == std::string::npos)) { serverTextLink = titaniumTextLink; return; } - auto segments = SplitString(titaniumTextLink, delimiter); + auto segments = SplitString(titaniumTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 32 36 37 (Source) // 6.2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXXXXX (45) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: ^^^^^ ^ ^^^^^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append("00000"); - new_segment.append(segments[segment_iter].substr(31, 5).c_str()); - new_segment.append("0"); - new_segment.append(segments[segment_iter].substr(36, 1).c_str()); - new_segment.append("00000"); - new_segment.append(segments[segment_iter].substr(37).c_str()); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter].substr(0, 31)); + serverTextLink.append("00000"); + serverTextLink.append(segments[segment_iter].substr(31, 5)); + serverTextLink.push_back('0'); + serverTextLink.push_back(segments[segment_iter][36]); + serverTextLink.append("00000"); + serverTextLink.append(segments[segment_iter].substr(37)); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/common/patches/underfoot.cpp b/common/patches/underfoot.cpp index fb5daa179..fc20e6e4b 100644 --- a/common/patches/underfoot.cpp +++ b/common/patches/underfoot.cpp @@ -764,7 +764,7 @@ namespace Underfoot char *OutBuffer = (char *)in->pBuffer; - VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->unknown01); + VARSTRUCT_ENCODE_TYPE(uint32, OutBuffer, emu->type); VARSTRUCT_ENCODE_STRING(OutBuffer, new_message.c_str()); delete[] __emu_buffer; @@ -4267,76 +4267,64 @@ namespace Underfoot static inline void ServerToUnderfootTextLink(std::string& underfootTextLink, const std::string& serverTextLink) { - const char delimiter = 0x12; - - if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find(delimiter) == std::string::npos)) { + if ((consts::TEXT_LINK_BODY_LENGTH == EmuConstants::TEXT_LINK_BODY_LENGTH) || (serverTextLink.find('\x12') == std::string::npos)) { underfootTextLink = serverTextLink; return; } - auto segments = SplitString(serverTextLink, delimiter); + auto segments = SplitString(serverTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 36 37 41 43 48 (Source) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append(segments[segment_iter].substr(36, 5).c_str()); + underfootTextLink.push_back('\x12'); + underfootTextLink.append(segments[segment_iter].substr(0, 31)); + underfootTextLink.append(segments[segment_iter].substr(36, 5)); - if (segments[segment_iter].substr(41, 1) == "0") - new_segment.append(segments[segment_iter].substr(42, 1).c_str()); + if (segments[segment_iter][41] == '0') + underfootTextLink.push_back(segments[segment_iter][42]); else - new_segment.append("F"); + underfootTextLink.push_back('F'); - new_segment.append(segments[segment_iter].substr(43).c_str()); - - underfootTextLink.push_back(delimiter); - underfootTextLink.append(new_segment.c_str()); - underfootTextLink.push_back(delimiter); + underfootTextLink.append(segments[segment_iter].substr(43)); + underfootTextLink.push_back('\x12'); } else { - underfootTextLink.append(segments[segment_iter].c_str()); + underfootTextLink.append(segments[segment_iter]); } } } static inline void UnderfootToServerTextLink(std::string& serverTextLink, const std::string& underfootTextLink) { - const char delimiter = 0x12; - - if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (underfootTextLink.find(delimiter) == std::string::npos)) { + if ((EmuConstants::TEXT_LINK_BODY_LENGTH == consts::TEXT_LINK_BODY_LENGTH) || (underfootTextLink.find('\x12') == std::string::npos)) { serverTextLink = underfootTextLink; return; } - auto segments = SplitString(underfootTextLink, delimiter); + auto segments = SplitString(underfootTextLink, '\x12'); for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) { if (segment_iter & 1) { - std::string new_segment; - // Idx: 0 1 6 11 16 21 26 31 32 36 37 42 (Source) // SoF: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX X XXXXX XXXXXXXX (50) // RoF2: X XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX X XXXX XX XXXXX XXXXXXXX (56) // Diff: ^^^^^ ^ - new_segment.append(segments[segment_iter].substr(0, 31).c_str()); - new_segment.append("00000"); - new_segment.append(segments[segment_iter].substr(31, 5).c_str()); - new_segment.append("0"); - new_segment.append(segments[segment_iter].substr(36).c_str()); - - serverTextLink.push_back(delimiter); - serverTextLink.append(new_segment.c_str()); - serverTextLink.push_back(delimiter); + serverTextLink.push_back('\x12'); + serverTextLink.append(segments[segment_iter].substr(0, 31)); + serverTextLink.append("00000"); + serverTextLink.append(segments[segment_iter].substr(31, 5)); + serverTextLink.push_back('0'); + serverTextLink.append(segments[segment_iter].substr(36)); + serverTextLink.push_back('\x12'); } else { - serverTextLink.append(segments[segment_iter].c_str()); + serverTextLink.append(segments[segment_iter]); } } } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 61f7813e1..8b82d84db 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -5465,13 +5465,13 @@ void Client::Handle_OP_Emote(const EQApplicationPacket *app) in->message[512] = '\0'; len_msg = 512; } - uint32 len_packet = sizeof(in->unknown01) + len_name + uint32 len_packet = sizeof(in->type) + len_name + len_msg + 1; // Construct outgoing packet EQApplicationPacket* outapp = new EQApplicationPacket(OP_Emote, len_packet); Emote_Struct* out = (Emote_Struct*)outapp->pBuffer; - out->unknown01 = in->unknown01; + out->type = in->type; memcpy(out->message, name, len_name); memcpy(&out->message[len_name], in->message, len_msg);