/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#include "ScriptMgr.h"
#include "Channel.h"
#include "Group.h"
#include "Guild.h"
#include "Log.h"
#include "Player.h"
#define TC_LOG_CHAT(TYPE, MESSAGE, ...) \
if (lang != LANG_ADDON && lang != LANG_ADDON_LOGGED) \
TC_LOG_DEBUG("chat.log." TYPE, MESSAGE, __VA_ARGS__); \
else \
TC_LOG_DEBUG("chat.log.addon." TYPE, MESSAGE, __VA_ARGS__);
class ChatLogScript : public PlayerScript
{
public:
ChatLogScript() : PlayerScript("ChatLogScript") { }
void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) override
{
switch (type)
{
case CHAT_MSG_SAY:
TC_LOG_CHAT("say", "Player {} says (language {}): {}",
player->GetName(), lang, msg);
break;
case CHAT_MSG_EMOTE:
TC_LOG_CHAT("emote", "Player {} emotes: {}",
player->GetName(), msg);
break;
case CHAT_MSG_YELL:
TC_LOG_CHAT("yell", "Player {} yells (language {}): {}",
player->GetName(), lang, msg);
break;
}
}
void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Player* receiver) override
{
TC_LOG_CHAT("whisper", "Player {} tells {}: {}",
player->GetName(), receiver ? receiver->GetName().c_str() : "", msg);
}
void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) override
{
//! NOTE:
//! LANG_ADDON can only be sent by client in "PARTY", "RAID", "GUILD", "BATTLEGROUND", "WHISPER"
switch (type)
{
case CHAT_MSG_PARTY:
TC_LOG_CHAT("party", "Player {} tells group with leader {}: {}",
player->GetName(), group ? group->GetLeaderName() : "", msg);
break;
case CHAT_MSG_PARTY_LEADER:
TC_LOG_CHAT("party", "Leader {} tells group: {}",
player->GetName(), msg);
break;
case CHAT_MSG_RAID:
TC_LOG_CHAT("raid", "Player {} tells raid with leader {}: {}",
player->GetName(), group ? group->GetLeaderName() : "", msg);
break;
case CHAT_MSG_RAID_LEADER:
TC_LOG_CHAT("raid", "Leader player {} tells raid: {}",
player->GetName(), msg);
break;
case CHAT_MSG_RAID_WARNING:
TC_LOG_CHAT("raid", "Leader player {} warns raid with: {}",
player->GetName(), msg);
break;
case CHAT_MSG_INSTANCE_CHAT:
TC_LOG_CHAT("bg", "Player {} tells instance with leader {}: {}",
player->GetName(), group ? group->GetLeaderName() : "", msg);
break;
case CHAT_MSG_INSTANCE_CHAT_LEADER:
TC_LOG_CHAT("bg", "Leader player {} tells instance: {}",
player->GetName(), msg);
break;
}
}
void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild) override
{
switch (type)
{
case CHAT_MSG_GUILD:
TC_LOG_CHAT("guild", "Player {} tells guild {}: {}",
player->GetName(), guild ? guild->GetName().c_str() : "", msg);
break;
case CHAT_MSG_OFFICER:
TC_LOG_CHAT("guild.officer", "Player {} tells guild {} officers: {}",
player->GetName(), guild ? guild->GetName().c_str() : "", msg);
break;
}
}
void OnChat(Player* player, uint32 /*type*/, uint32 lang, std::string& msg, Channel* channel) override
{
bool isSystem = channel &&
(channel->HasFlag(CHANNEL_FLAG_TRADE) ||
channel->HasFlag(CHANNEL_FLAG_GENERAL) ||
channel->HasFlag(CHANNEL_FLAG_CITY) ||
channel->HasFlag(CHANNEL_FLAG_LFG));
if (isSystem)
{
TC_LOG_CHAT("system", "Player {} tells channel {}: {}",
player->GetName(), channel->GetName(), msg);
}
else
{
std::string channelName = channel ? channel->GetName() : "";
TC_LOG_CHAT("channel." + channelName, "Player {} tells channel {}: {}",
player->GetName(), channelName, msg);
}
}
};
void AddSC_chat_log()
{
new ChatLogScript();
}
#undef TC_LOG_CHAT