diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/windows/chatwindow.cpp | 34 | ||||
-rw-r--r-- | src/gui/windows/chatwindow.h | 2 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index d658ae183..44024b7f1 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -1482,6 +1482,20 @@ bool ChatWindow::resortChatLog(std::string line, Own own, // ignore special message formats. if (line.find(": \302\202\302") != std::string::npos) return false; + + // pet talk message detected + if (line.find(": \302\202\303 ") != std::string::npos) + { + if (actorManager && idx2 > 1) + { + const std::string nick = line.substr(0, idx2 - 1); + line = line.substr(idx2 + 6); + localPetSay(nick, line); + } + + return false; + } + line = line.erase(idx + 2, 2); tradeChatTab->chatLog(prefix + line, own, ignoreRecord, tryRemoveColors); @@ -1548,6 +1562,26 @@ void ChatWindow::battleChatLog(const std::string &line, Own own, debugChatTab->chatLog(line, own, ignoreRecord, tryRemoveColors); } +void ChatWindow::localPetSay(const std::string &nick, const std::string &text) +{ + Being *const being = actorManager->findBeingByName( + nick, ActorSprite::PLAYER); + Being *pet = nullptr; + if (being) + { + pet = being->getPet(); + if (pet) + pet->setSpeech(text, GENERAL_CHANNEL); + } + + if (!localChatTab) + return; + if (pet) + localChatTab->chatLog(strprintf(_("%s's pet"), nick.c_str()), text); + else + localChatTab->chatLog(nick, text); +} + void ChatWindow::initTradeFilter() { const std::string tradeListName = client->getServerConfigDirectory() diff --git a/src/gui/windows/chatwindow.h b/src/gui/windows/chatwindow.h index a1a7d77ee..8cda0fa84 100644 --- a/src/gui/windows/chatwindow.h +++ b/src/gui/windows/chatwindow.h @@ -292,6 +292,8 @@ class ChatWindow final : public Window, void postInit() override final; + void localPetSay(const std::string &nick, const std::string &text); + #ifdef USE_PROFILER void logicChildren(); #endif |