diff options
-rw-r--r-- | src/gui/windows/chatwindow.cpp | 47 | ||||
-rw-r--r-- | src/gui/windows/chatwindow.h | 4 | ||||
-rw-r--r-- | src/net/tmwa/pethandler.cpp | 2 |
3 files changed, 38 insertions, 15 deletions
diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp index 7f6c2e731..553deea70 100644 --- a/src/gui/windows/chatwindow.cpp +++ b/src/gui/windows/chatwindow.cpp @@ -1522,6 +1522,13 @@ bool ChatWindow::resortChatLog(std::string line, if (parse2Int(line, x, y)) localPetMove(nick, x, y); } + else if (line.find(": \302\202\302d") != std::string::npos) + { + const std::string nick = line.substr(0, idx2 - 1); + line = line.substr(idx2 + 6); + localPetDirection(nick, static_cast<BeingDirection::Type>( + atoi(line.c_str()))); + } // ignore other special message formats. return false; } @@ -1667,31 +1674,41 @@ void ChatWindow::localPetSay(const std::string &nick, const std::string &text) } } -void ChatWindow::localPetEmote(const std::string &nick, const uint8_t emoteId) +static Being *getPetForNick(const std::string &nick) { Being *const being = actorManager->findBeingByName( nick, ActorType::Player); if (being) - { - Being *const pet = being->getFirstPet(); - if (pet) - pet->setEmote(emoteId, 0); - } + return being->getFirstPet(); + return nullptr; +} + +void ChatWindow::localPetEmote(const std::string &nick, const uint8_t emoteId) +{ + Being *const pet = getPetForNick(nick); + if (pet) + pet->setEmote(emoteId, 0); } void ChatWindow::localPetMove(const std::string &nick, const int x, const int y) { - Being *const being = actorManager->findBeingByName( - nick, ActorType::Player); - if (being) + Being *const pet = getPetForNick(nick); + if (pet) { - Being *const pet = being->getFirstPet(); - if (pet) - { - pet->setDestination(x, y); - pet->disablePetAi(); - } + pet->setDestination(x, y); + pet->disablePetAi(); + } +} + +void ChatWindow::localPetDirection(const std::string &nick, + BeingDirection::Type dir) +{ + Being *const pet = getPetForNick(nick); + if (pet) + { + pet->setDirection(dir); + pet->disablePetAi(); } } diff --git a/src/gui/windows/chatwindow.h b/src/gui/windows/chatwindow.h index 1b22ee05f..bbc188c3a 100644 --- a/src/gui/windows/chatwindow.h +++ b/src/gui/windows/chatwindow.h @@ -23,6 +23,8 @@ #ifndef GUI_WINDOWS_CHATWINDOW_H #define GUI_WINDOWS_CHATWINDOW_H +#include "being/beingdirection.h" + #include "gui/chatmsgtype.h" #include "gui/widgets/window.h" @@ -300,6 +302,8 @@ class ChatWindow final : public Window, static void localPetMove(const std::string &nick, const int x, const int y); + static void localPetDirection(const std::string &nick, + BeingDirection::Type dir); void postConnection(); #ifdef USE_PROFILER diff --git a/src/net/tmwa/pethandler.cpp b/src/net/tmwa/pethandler.cpp index 079caae37..982f3a861 100644 --- a/src/net/tmwa/pethandler.cpp +++ b/src/net/tmwa/pethandler.cpp @@ -107,6 +107,8 @@ void PetHandler::unequip() const void PetHandler::setDirection(const BeingDirection::Type type) const { + chatHandler->talk(strprintf("\302\202\302d%d", + static_cast<int>(type)), GENERAL_CHANNEL); } } // namespace TmwAthena |