From 0ad55dae62f1c8295517bf87844368575a813d57 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 16 Jan 2016 22:21:30 +0300 Subject: Add function for replace item links in chat. --- src/utils/stringutils.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++-- src/utils/stringutils.h | 2 ++ 2 files changed, 54 insertions(+), 2 deletions(-) (limited to 'src/utils') diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp index 8b616d2f7..e000b83c7 100644 --- a/src/utils/stringutils.cpp +++ b/src/utils/stringutils.cpp @@ -22,6 +22,12 @@ #include "utils/stringutils.h" +#ifndef DYECMD +#include "resources/iteminfo.h" + +#include "resources/db/itemdb.h" +#endif + #include #include @@ -204,8 +210,11 @@ size_t findI(std::string text, const StringVect &list) return std::string::npos; } -unsigned int base = 94; -unsigned int start = 33; +namespace +{ + unsigned int base = 94; + unsigned int start = 33; +} // namespace const std::string encodeStr(unsigned int value, const unsigned int size) { @@ -960,3 +969,44 @@ std::string timeDiffToString(int timeDiff) } return str; } + +void replaceItemLinks(std::string &msg) +{ +#ifndef DYECMD + // Check for item link + size_t start2 = msg.find('['); + size_t sz = msg.size(); + while (start2 + 1 < sz && start2 != std::string::npos + && msg[start2 + 1] != '@') + { + const size_t end = msg.find(']', start2); + if (start2 + 1 != end && end != std::string::npos) + { + // Catch multiple embeds and ignore them + // so it doesn't crash the client. + while ((msg.find('[', start2 + 1) != std::string::npos) && + (msg.find('[', start2 + 1) < end)) + { + start2 = msg.find('[', start2 + 1); + } + + std::string temp; + if (start2 + 1 < sz && end < sz && end > start2 + 1) + { + temp = msg.substr(start2 + 1, end - start2 - 1); + + const ItemInfo &itemInfo = ItemDB::get(temp); + if (itemInfo.getId() != 0) + { + msg.insert(end, "@@"); + msg.insert(start2 + 1, "|"); + msg.insert(start2 + 1, toString(itemInfo.getId())); + msg.insert(start2 + 1, "@@"); + sz = msg.size(); + } + } + } + start2 = msg.find('[', start2 + 1); + } +#endif +} diff --git a/src/utils/stringutils.h b/src/utils/stringutils.h index 310bbc957..230445b75 100644 --- a/src/utils/stringutils.h +++ b/src/utils/stringutils.h @@ -258,4 +258,6 @@ std::string timeToStr(const int time); std::string timeDiffToString(int timeDiff); +void replaceItemLinks(std::string &msg); + #endif // UTILS_STRINGUTILS_H -- cgit v1.2.3-60-g2f50