summaryrefslogtreecommitdiff
path: root/src/net/tmwa/chathandler.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-07-28 23:30:51 +0300
committerAndrei Karas <akaras@inbox.ru>2011-07-29 04:26:04 +0300
commitc8b18b47abbb325b6cc4b34abbad52b03825e4f9 (patch)
tree3fbca23dda0c1c1ec31c54373e4faa74c998bb76 /src/net/tmwa/chathandler.cpp
parent0cc6167c407c1cf18158ca0e154a3b1cab48853d (diff)
downloadmv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.gz
mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.bz2
mv-c8b18b47abbb325b6cc4b34abbad52b03825e4f9.tar.xz
mv-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.cpp309
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);