[COLOR="#808080"]
#include "Channel.h"
// #include "ChannelMgr.h"
#include "Chat.h"
#include "Language.h"
// #include "ObjectMgr.h"
#include "Player.h"
// #include "RBAC.h"
#include "ScriptMgr.h"
#include <unordered_map>
#include "World.h"
#include "WorldSession.h"
bool USE_GM_BADGE = true;
std::string CBAC[8][3] = { { "0", "0a", "0b" }, { "1", "says", "|cffFFFFFF"}, { "2", "2a", "2b" }, { "3", "3a", "3b" }, { "4", "[Guild]", "|cff008000" }, { "5", "5a", "5b" }, { "6", "yells", "|cffFF0000" }, { "7", "whispers", "|cffDA70D6" } };
void SendMessage(uint8 type, std::string message, Player* player, Player* chat_target)
{
float SAY_DISTANCE = sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY);
float YELL_DISTANCE = sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL);
Position pos = player->GetPosition();
auto SENDER_TEAM_ID = player->GetTeamId();
uint32 GUILD_ID = player->GetGuildId();
SessionMap sessions = sWorld->GetAllSessions();
for (SessionMap::iterator itr = sessions.begin(); itr != sessions.end(); ++itr)
{
if (!itr->second)
continue;
Player *target = itr->second->GetPlayer();
if ((type == 1)&&(target->GetDistance(pos) <= SAY_DISTANCE))// say
{
ChatHandler(target->GetSession()).PSendSysMessage(message.c_str());
}
if ((type == 4)&&(target->GetGuildId() > 0)&&(target->GetGuildId() == GUILD_ID))// guild
{
ChatHandler(target->GetSession()).PSendSysMessage(message.c_str());
}
if ((type == 6)&&(target->GetDistance(pos) <= YELL_DISTANCE)) // yell
{
ChatHandler(target->GetSession()).PSendSysMessage(message.c_str());
}
if ((type == 7)&&(target->GetName() == chat_target->GetName())) // whisper
{
ChatHandler(target->GetSession()).PSendSysMessage(message.c_str());
}
}
}
std::string EditMessage(uint8 type, std::string name, std::string message, bool gm)
{
// TC_LOG_INFO("server.loading", "TYPE:%u", type);
if ((CBAC[type]) && (CBAC[type][2].size() > 0))
{
// TC_LOG_INFO("server.loading", "PASSED.");
// TC_LOG_INFO("server.loading", "NAME:%s", CBAC[type][1]);
// TC_LOG_INFO("server.loading", "COLOR:%s", CBAC[type][2]);
// tags
std::string TAG = "<Tag>|r";
std::string GM_ICON = "|TINTERFACE/CHATFRAME/UI-CHATICON-BLIZZ:13:13:0:-1|t";
std::string NAME = "[|Hplayer:" + name + "|h" + name + "]";
// 1 say :: 4 guild :: 6 yell :: 7 whisper ::
message = CBAC[type][2] + ":" + message + "|r";
if (type != 4) { message = CBAC[type][2] + CBAC[type][1] + "|r" + message; };
message = CBAC[type][2] + NAME + "|r" + message;
message = CBAC[type][2] + TAG + "|r" + message;
if (type == 4)
{
message = CBAC[type][2] + CBAC[type][1] + "|r" + message;
}
if ((gm)&&(USE_GM_BADGE))
{
message = GM_ICON + message;
}
}
return message;
}
class Player_Chat_For_Tagger : public PlayerScript
{
public: Player_Chat_For_Tagger() : PlayerScript("Player_Chat_For_Tagger") { }
virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg) // say
{
if ((lang != LANG_ADDON) && (msg != "" || "Away") && (player->CanSpeak() == true))
{
std::string message = EditMessage(type, player->GetName(), msg, player->IsGameMaster());
SendMessage(type, message, player, NULL);
msg = -1;
}
}
virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Player* receiver) // whisper
{
if ((lang != LANG_ADDON) && (msg != "" || "Away") && (player->CanSpeak() == true))
{
std::string message = EditMessage(type, player->GetName(), msg, player->IsGameMaster());
SendMessage(type, message, player, receiver);
msg = -1;
}
}
virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Group* group) // group
{
if ((lang != LANG_ADDON) && (msg != "" || "Away") && (player->CanSpeak() == true))
{
std::string message = EditMessage(type, player->GetName(), msg, player->IsGameMaster());
SendMessage(type, message, player, NULL);
// msg = -1;
}
}
virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Guild* guild)
{
if ((lang != LANG_ADDON) && (msg != "" || "Away") && (player->CanSpeak() == true))
{
std::string message = EditMessage(type, player->GetName(), msg, player->IsGameMaster());
SendMessage(type, message, player, NULL);
msg = -1;
}
}
virtual void OnChat(Player* player, uint32 type, uint32 lang, std::string& msg, Channel* channel) // channel
{
if ((lang != LANG_ADDON) && (msg != "" || "Away") && (player->CanSpeak() == true))
{
// std::string message = EditMessage(type, player->GetName(), msg, player->IsGameMaster());
// SendMessage(type, message, player, NULL);
// msg = -1;
}
}
};
void AddSC_ChatBadgeAdder()
{
new Player_Chat_For_Tagger;
}
[/COLOR]