From dd1463241c00f38de5855b9e9869b773f683373f Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Wed, 4 Aug 2010 22:22:40 -0600 Subject: Have Being manage speech creation and add permissions to events The Being and Player Chat events now have the precomuted permissions for SPEECH_LOG and SPEECH_FLOAT. The Being class now acts on those events to show speech (if SPEECH_FLOAT is present). ChatWindow now checks for the SPEECH_LOG permission. Reviewed-by: Freeyorp --- src/net/manaserv/chathandler.cpp | 5 ++++- src/net/tmwa/chathandler.cpp | 42 +++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 19 deletions(-) (limited to 'src/net') diff --git a/src/net/manaserv/chathandler.cpp b/src/net/manaserv/chathandler.cpp index 9a8f6e34..71e4efde 100644 --- a/src/net/manaserv/chathandler.cpp +++ b/src/net/manaserv/chathandler.cpp @@ -27,6 +27,7 @@ #include "channel.h" #include "channelmanager.h" #include "eventmanager.h" +#include "playerrelations.h" #include "gui/widgets/channeltab.h" @@ -158,7 +159,6 @@ void ChatHandler::handleGameChatMessage(Net::MessageIn &msg) if (being) { mes = being->getName() + " : " + chatMsg; - being->setSpeech(chatMsg, SPEECH_TIME); } else mes = "Unknown : " + chatMsg; @@ -168,6 +168,9 @@ void ChatHandler::handleGameChatMessage(Net::MessageIn &msg) event.setString("text", chatMsg); event.setString("nick", being->getName()); event.setInt("beingId", id); + event.setInt("permissions", player_relations + .checkPermissionSilently(being->getName(), + PlayerRelation::SPEECH_LOG | PlayerRelation::SPEECH_FLOAT)); Mana::EventManager::trigger("Chat", event); } diff --git a/src/net/tmwa/chathandler.cpp b/src/net/tmwa/chathandler.cpp index b3400528..a5d7f337 100644 --- a/src/net/tmwa/chathandler.cpp +++ b/src/net/tmwa/chathandler.cpp @@ -155,28 +155,33 @@ void ChatHandler::handleMessage(Net::MessageIn &msg) chatMsg.erase(0, pos + 3); } + int perms; + + if (being->getType() == Being::PLAYER) + { + perms = player_relations.checkPermissionSilently(sender_name, + PlayerRelation::SPEECH_LOG | PlayerRelation::SPEECH_FLOAT); + } + else + { + perms = player_relations.getDefault() + & (PlayerRelation::SPEECH_LOG + | PlayerRelation::SPEECH_FLOAT); + } + trim(chatMsg); std::string reducedMessage = chatMsg; chatMsg = removeColors(sender_name) + " : " + reducedMessage; - // 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)) - { - Mana::Event event("Being"); - event.setString("message", chatMsg); - event.setString("text", reducedMessage); - event.setString("nick", sender_name); - event.setInt("beingId", beingId); - Mana::EventManager::trigger("Chat", event); - } + Mana::Event event("Being"); + event.setString("message", chatMsg); + event.setString("text", reducedMessage); + event.setString("nick", sender_name); + event.setInt("beingId", beingId); + event.setInt("permissions", perms); + Mana::EventManager::trigger("Chat", event); - if (player_relations.hasPermission(sender_name, - PlayerRelation::SPEECH_FLOAT)) - { - being->setSpeech(chatMsg, SPEECH_TIME); - } break; } @@ -205,9 +210,10 @@ void ChatHandler::handleMessage(Net::MessageIn &msg) event.setString("text", chatMsg); event.setString("nick", player_node->getName()); event.setInt("beingId", player_node->getId()); + event.setInt("permissions", player_relations.getDefault() + & (PlayerRelation::SPEECH_LOG + | PlayerRelation::SPEECH_FLOAT)); Mana::EventManager::trigger("Chat", event); - - player_node->setSpeech(chatMsg, SPEECH_TIME); } else { -- cgit v1.2.3-70-g09d2