diff --git a/common/say_link.cpp b/common/say_link.cpp index c6347d87c..aa4c4e3ac 100644 --- a/common/say_link.cpp +++ b/common/say_link.cpp @@ -24,7 +24,7 @@ #include "item_instance.h" #include "item_data.h" #include "../zone/zonedb.h" - +#include bool EQ::saylink::DegenerateLinkBody(SayLinkBody_Struct &say_link_body_struct, const std::string &say_link_body) { @@ -350,7 +350,7 @@ std::string EQ::SayLinkEngine::InjectSaylinksIfNotExist(const char *message) std::vector saylinks = {}; int saylink_length = 50; std::string saylink_separator = "\u0012"; - std::string saylink_partial = "000"; + std::string saylink_partial = "00000"; LogSaylinkDetail("new_message pre pass 1 [{}]", new_message); @@ -375,6 +375,8 @@ std::string EQ::SayLinkEngine::InjectSaylinksIfNotExist(const char *message) LogSaylinkDetail("new_message post pass 1 [{}]", new_message); + LogSaylinkDetail("saylink separator count [{}]", std::count(new_message.begin(), new_message.end(), '\u0012')); + // loop through brackets until none exist if (new_message.find('[') != std::string::npos) { for (auto &b: split_string(new_message, "[")) { @@ -388,6 +390,12 @@ std::string EQ::SayLinkEngine::InjectSaylinksIfNotExist(const char *message) continue; } + // skip where multiple saylinks are within brackets + if (bracket_message.find(saylink_separator) != std::string::npos && + std::count(bracket_message.begin(), bracket_message.end(), '\u0012') > 1) { + continue; + } + // if non empty bracket contents if (!bracket_message.empty()) { LogSaylinkDetail("Found bracket_message [{}]", bracket_message);