diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-07-28 23:30:51 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-07-29 04:26:04 +0300 |
commit | c8b18b47abbb325b6cc4b34abbad52b03825e4f9 (patch) | |
tree | 3fbca23dda0c1c1ec31c54373e4faa74c998bb76 /src/net/tmwa/chathandler.cpp | |
parent | 0cc6167c407c1cf18158ca0e154a3b1cab48853d (diff) | |
download | manaplus-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.gz manaplus-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.bz2 manaplus-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.xz manaplus-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.zip |
Extract shared logic from chathandler and gamehandler netcode to ea namespace.
Diffstat (limited to 'src/net/tmwa/chathandler.cpp')
-rw-r--r-- | src/net/tmwa/chathandler.cpp | 309 |
1 files changed, 5 insertions, 304 deletions
diff --git a/src/net/tmwa/chathandler.cpp b/src/net/tmwa/chathandler.cpp index 3ce30ce84..0f23f6412 100644 --- a/src/net/tmwa/chathandler.cpp +++ b/src/net/tmwa/chathandler.cpp @@ -41,9 +41,6 @@ #include "net/tmwa/protocol.h" -#include "utils/gettext.h" -#include "utils/stringutils.h" - #include <string> #include "debug.h" @@ -74,273 +71,30 @@ void ChatHandler::handleMessage(Net::MessageIn &msg) if (!localChatTab) return; - Being *being; - std::string chatMsg; - std::string nick; - int chatMsgLength; - switch (msg.getId()) { case SMSG_WHISPER_RESPONSE: - { - if (mSentWhispers.empty()) - { - nick = "user"; - } - else - { - nick = mSentWhispers.front(); - mSentWhispers.pop(); - } - - int type = msg.readInt8(); - switch (type) - { - case 0x00: - // Success (don't need to report) - break; - case 0x01: - if (chatWindow) - { - chatWindow->whisper(nick, - strprintf(_("Whisper could not be " - "sent, %s is offline."), nick.c_str()), BY_SERVER); - } - break; - case 0x02: - if (chatWindow) - { - chatWindow->whisper(nick, - strprintf(_("Whisper could not " - "be sent, ignored by %s."), nick.c_str()), - BY_SERVER); - } - break; - default: - if (logger) - { - logger->log("QQQ SMSG_WHISPER_RESPONSE:" - + toString(type)); - } - } + processWhisperResponse(msg); break; - } // Received whisper case SMSG_WHISPER: - { - chatMsgLength = msg.readInt16() - 28; - nick = msg.readString(24); - - if (chatMsgLength <= 0) - break; - - chatMsg = msg.readString(chatMsgLength); - if (chatMsg.find("\302\202!") == 0) - chatMsg = chatMsg.substr(2); - - if (nick != "Server") - { - if (player_relations.hasPermission( - nick, PlayerRelation::WHISPER)) - { - bool tradeBot = config.getBoolValue("tradebot"); - bool showMsg = !config.getBoolValue("hideShopMessages"); - if (player_relations.hasPermission( - nick, PlayerRelation::TRADE)) - { - if (shopWindow) - { //commands to shop from player - if (chatMsg.find("!selllist ") == 0) - { - if (tradeBot) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::SELL); - } - } - else if (chatMsg.find("!buylist ") == 0) - { - if (tradeBot) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::BUY); - } - } - else if (chatMsg.find("!buyitem ") == 0) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (tradeBot) - { - shopWindow->processRequest(nick, chatMsg, - ShopWindow::BUY); - } - } - else if (chatMsg.find("!sellitem ") == 0) - { - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (tradeBot) - { - shopWindow->processRequest(nick, chatMsg, - ShopWindow::SELL); - } - } - else if (chatMsg.length() > 3 - && chatMsg.find("\302\202") == 0) - { - chatMsg = chatMsg.erase(0, 2); - if (showMsg && chatWindow) - chatWindow->whisper(nick, chatMsg); - if (chatMsg.find("B1") == 0 - || chatMsg.find("S1") == 0) - { - shopWindow->showList(nick, chatMsg); - } - } - else if (chatWindow) - { - chatWindow->whisper(nick, chatMsg); - } - } - else if (chatWindow) - { - chatWindow->whisper(nick, chatMsg); - } - } - else - { - if (chatWindow && (showMsg - || (chatMsg.find("!selllist") - != 0 && chatMsg.find("!buylist") != 0))) - { - chatWindow->whisper(nick, chatMsg); - } - } - } - } - else if (localChatTab) - { - localChatTab->chatLog(chatMsg, BY_SERVER); - } - + processWhisper(msg); break; - } // Received speech from being case SMSG_BEING_CHAT: - { - if (!actorSpriteManager) - return; - - chatMsgLength = msg.readInt16() - 8; - being = actorSpriteManager->findBeing(msg.readInt32()); - - if (!being || chatMsgLength <= 0) - break; - - chatMsg = msg.readRawString(chatMsgLength); - - if (being->getType() == Being::PLAYER) - being->setTalkTime(); - - std::string::size_type pos = chatMsg.find(" : ", 0); - std::string sender_name = ((pos == std::string::npos) - ? "" : chatMsg.substr(0, pos)); - - if (sender_name != being->getName() - && being->getType() == Being::PLAYER) - { - if (!being->getName().empty()) - sender_name = being->getName(); - } - else - { - chatMsg.erase(0, pos + 3); - } - - trim(chatMsg); - - // We use getIgnorePlayer instead of ignoringPlayer here - // because ignorePlayer' side effects are triggered - // right below for Being::IGNORE_SPEECH_FLOAT. - if (player_relations.checkPermissionSilently(sender_name, - PlayerRelation::SPEECH_LOG) && chatWindow) - { - chatWindow->resortChatLog(removeColors(sender_name) + " : " - + chatMsg, BY_OTHER); - } - - if (player_relations.hasPermission(sender_name, - PlayerRelation::SPEECH_FLOAT)) - { - being->setSpeech(chatMsg); - } + processBeingChat(msg); break; - } case SMSG_PLAYER_CHAT: case SMSG_GM_CHAT: - { - chatMsgLength = msg.readInt16() - 4; - - if (chatMsgLength <= 0) - break; - - chatMsg = msg.readRawString(chatMsgLength); - std::string::size_type pos = chatMsg.find(" : ", 0); - - if (msg.getId() == SMSG_PLAYER_CHAT) - { - if (chatWindow) - chatWindow->resortChatLog(chatMsg, BY_PLAYER); - - const std::string senseStr = "You sense the following: "; - if (actorSpriteManager && !chatMsg.find(senseStr)) - { - actorSpriteManager->parseLevels( - chatMsg.substr(senseStr.size())); - } - - if (pos != std::string::npos) - chatMsg.erase(0, pos + 3); - - trim(chatMsg); - - if (player_node) - player_node->setSpeech(chatMsg); - } - else if (localChatTab) - { - localChatTab->chatLog(chatMsg, BY_GM); - } + processChat(msg, msg.getId() == SMSG_PLAYER_CHAT); break; - } case SMSG_MVP: - { - // Display MVP player - int id = msg.readInt32(); // id - if (localChatTab && actorSpriteManager) - { - being = actorSpriteManager->findBeing(id); - if (!being) - { - localChatTab->chatLog(_("MVP player."), BY_SERVER); - } - else - { - localChatTab->chatLog(_("MVP player: ") - + being->getName(), BY_SERVER); - } - } + processMVP(msg); break; - } default: break; @@ -369,13 +123,6 @@ void ChatHandler::talkRaw(const std::string &mes) outMsg.writeString(mes, static_cast<int>(mes.length() + 1)); } -void ChatHandler::me(const std::string &text) -{ - std::string action = strprintf("*%s*", text.c_str()); - - talk(action); -} - void ChatHandler::privateMessage(const std::string &recipient, const std::string &text) { @@ -386,52 +133,6 @@ void ChatHandler::privateMessage(const std::string &recipient, mSentWhispers.push(recipient); } -void ChatHandler::channelList() -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::enterChannel(const std::string &channel A_UNUSED, - const std::string &password A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::quitChannel(int channelId A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::sendToChannel(int channelId A_UNUSED, - const std::string &text A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::userList(const std::string &channel A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::setChannelTopic(int channelId A_UNUSED, - const std::string &text A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::setUserMode(int channelId A_UNUSED, - const std::string &name A_UNUSED, - int mode A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - -void ChatHandler::kickUser(int channelId A_UNUSED, - const std::string &name A_UNUSED) -{ - SERVER_NOTICE(_("Channels are not supported!")) -} - void ChatHandler::who() { MessageOut outMsg(CMSG_WHO_REQUEST); |