summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/chat.cpp25
-rw-r--r--src/net/manaserv/chathandler.cpp13
-rw-r--r--src/net/tmwa/chathandler.cpp54
3 files changed, 72 insertions, 20 deletions
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index 00787182..ba912276 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -77,6 +77,7 @@ ChatWindow::ChatWindow():
Window(_("Chat")),
mTmpVisible(false)
{
+ listen("Chat");
listen("Notices");
setWindowName("Chat");
@@ -417,6 +418,30 @@ void ChatWindow::event(const std::string &channel, const Mana::Event &event)
if (event.getName() == "ServerNotice")
localChatTab->chatLog(event.getString("message"), BY_SERVER);
}
+ else if (channel == "Chat")
+ {
+ if (event.getName() == "Whisper")
+ {
+ whisper(event.getString("nick"), event.getString("message"));
+ }
+ else if (event.getName() == "WhisperError")
+ {
+ whisper(event.getString("nick"),
+ event.getString("error"), BY_SERVER);
+ }
+ else if (event.getName() == "Player")
+ {
+ localChatTab->chatLog(event.getString("message"), BY_PLAYER);
+ }
+ else if (event.getName() == "Announcement")
+ {
+ localChatTab->chatLog(event.getString("message"), BY_GM);
+ }
+ else if (event.getName() == "Being")
+ {
+ localChatTab->chatLog(event.getString("message"), BY_OTHER);
+ }
+ }
}
void ChatWindow::addInputText(const std::string &text)
diff --git a/src/net/manaserv/chathandler.cpp b/src/net/manaserv/chathandler.cpp
index 40d56bbd..aabe8bb4 100644
--- a/src/net/manaserv/chathandler.cpp
+++ b/src/net/manaserv/chathandler.cpp
@@ -165,7 +165,9 @@ void ChatHandler::handleGameChatMessage(Net::MessageIn &msg)
else
mes = "Unknown : " + chatMsg;
- localChatTab->chatLog(mes, being == player_node ? BY_PLAYER : BY_OTHER);
+ Mana::Event event(being == player_node ? "Player" : "Being");
+ event.setString("message", mes);
+ Mana::EventManager::trigger("Chat", event);
}
void ChatHandler::handleEnterChannelResponse(Net::MessageIn &msg)
@@ -225,13 +227,18 @@ void ChatHandler::handlePrivateMessage(Net::MessageIn &msg)
std::string userNick = msg.readString();
std::string chatMsg = msg.readString();
- chatWindow->whisper(userNick, chatMsg);
+ Mana::Event event("Whisper");
+ event.setString("nick", userNick);
+ event.setString("message", chatMsg);
+ Mana::EventManager::trigger("Chat", event);
}
void ChatHandler::handleAnnouncement(Net::MessageIn &msg)
{
std::string chatMsg = msg.readString();
- localChatTab->chatLog(chatMsg, BY_GM);
+ Mana::Event event("Announcement");
+ event.setString("message", chatMsg);
+ Mana::EventManager::trigger("Chat", event);
}
void ChatHandler::handleChatMessage(Net::MessageIn &msg)
diff --git a/src/net/tmwa/chathandler.cpp b/src/net/tmwa/chathandler.cpp
index 2b65b515..68c6dece 100644
--- a/src/net/tmwa/chathandler.cpp
+++ b/src/net/tmwa/chathandler.cpp
@@ -28,8 +28,6 @@
#include "localplayer.h"
#include "playerrelations.h"
-#include "gui/widgets/chattab.h"
-
#include "net/messagein.h"
#include "net/messageout.h"
@@ -61,8 +59,6 @@ ChatHandler::ChatHandler()
void ChatHandler::handleMessage(Net::MessageIn &msg)
{
- if (!localChatTab) return;
-
Being *being;
std::string chatMsg;
std::string nick;
@@ -85,14 +81,22 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
// Success (don't need to report)
break;
case 0x01:
- chatWindow->whisper(nick, strprintf(_("Whisper could not "
- "be sent, %s is offline."), nick.c_str()),
- BY_SERVER);
+ {
+ Mana::Event event("WhisperError");
+ event.setString("nick", nick);
+ event.setString("error", strprintf(_("Whisper could "
+ "not be sent, %s is offline."), nick.c_str()));
+ Mana::EventManager::trigger("Chat", event);
+ }
break;
case 0x02:
- chatWindow->whisper(nick, strprintf(_("Whisper could not "
- "be sent, ignored by %s."), nick.c_str()),
- BY_SERVER);
+ {
+ Mana::Event event("WhisperError");
+ event.setString("nick", nick);
+ event.setString("error", strprintf(_("Whisper could "
+ "not be sent, ignored by %s."), nick.c_str()));
+ Mana::EventManager::trigger("Chat", event);
+ }
break;
}
break;
@@ -110,11 +114,16 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
if (nick != "Server")
{
if (player_relations.hasPermission(nick, PlayerRelation::WHISPER))
- chatWindow->whisper(nick, chatMsg);
+ {
+ Mana::Event event("Whisper");
+ event.setString("nick", nick);
+ event.setString("message", chatMsg);
+ Mana::EventManager::trigger("Chat", event);
+ }
}
else
{
- localChatTab->chatLog(chatMsg, BY_SERVER);
+ SERVER_NOTICE(chatMsg)
}
break;
@@ -122,7 +131,8 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
// Received speech from being
case SMSG_BEING_CHAT: {
chatMsgLength = msg.readInt16() - 8;
- being = actorSpriteManager->findBeing(msg.readInt32());
+ int beingId = msg.readInt32();
+ being = actorSpriteManager->findBeing(beingId);
if (!being || chatMsgLength <= 0)
break;
@@ -137,7 +147,13 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
// 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))
- localChatTab->chatLog(chatMsg, BY_OTHER);
+ {
+ Mana::Event event("Being");
+ event.setString("message", chatMsg);
+ event.setString("nick", sender_name);
+ event.setInt("beingId", beingId);
+ Mana::EventManager::trigger("Chat", event);
+ }
chatMsg.erase(0, pos + 3);
trim(chatMsg);
@@ -159,7 +175,9 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
if (msg.getId() == SMSG_PLAYER_CHAT)
{
- localChatTab->chatLog(chatMsg, BY_PLAYER);
+ Mana::Event event("Player");
+ event.setString("message", chatMsg);
+ Mana::EventManager::trigger("Chat", event);
if (pos != std::string::npos)
chatMsg.erase(0, pos + 3);
@@ -170,7 +188,9 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
}
else
{
- localChatTab->chatLog(chatMsg, BY_GM);
+ Mana::Event event("Announcement");
+ event.setString("message", chatMsg);
+ Mana::EventManager::trigger("Chat", event);
}
break;
}
@@ -178,7 +198,7 @@ void ChatHandler::handleMessage(Net::MessageIn &msg)
case SMSG_MVP:
// Display MVP player
msg.readInt32(); // id
- localChatTab->chatLog(_("MVP player."), BY_SERVER);
+ SERVER_NOTICE(_("MVP player."))
break;
}
}