Skip to content

Instantly share code, notes, and snippets.

@DDuarte
Created December 21, 2011 15:42
Show Gist options
  • Save DDuarte/1506469 to your computer and use it in GitHub Desktop.
Save DDuarte/1506469 to your computer and use it in GitHub Desktop.
CMSG_MESSAGECHAT_ADDON_X
void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
{
Player* sender = GetPlayer();
ChatMsg type;
switch (recvData.GetOpcode())
{
case CMSG_MESSAGECHAT_ADDON_BATTLEGROUND:
type = CHAT_MSG_BATTLEGROUND;
break;
case CMSG_MESSAGECHAT_ADDON_GUILD:
type = CHAT_MSG_GUILD;
break;
case CMSG_MESSAGECHAT_ADDON_PARTY:
type = CHAT_MSG_PARTY;
break;
case CMSG_MESSAGECHAT_ADDON_RAID:
type = CHAT_MSG_RAID;
break;
case CMSG_MESSAGECHAT_ADDON_WHISPER:
type = CHAT_MSG_WHISPER;
break;
default:
sLog->outDetail("HandleAddonMessagechatOpcode: Unknown addon chat opcode (%u)", recvData.GetOpcode());
recvData.hexlike();
return;
}
std::string message = "";
std::string prefix = "";
std::string targetName = "";
if (type == CHAT_MSG_WHISPER)
recvData >> prefix >> targetName >> message;
else
recvData >> message >> prefix;
// Logging enabled?
if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON))
{
if (message.empty())
return;
sScriptMgr->OnPlayerChat(sender, uint32(CHAT_MSG_ADDON), LANG_ADDON, message);
}
// Disabled addon channel?
if (!sWorld->getBoolConfig(CONFIG_ADDON_CHANNEL))
return;
switch (type)
{
case CHAT_MSG_BATTLEGROUND:
{
Group* group = sender->GetGroup();
if (!group || !group->isBGGroup())
return;
WorldPacket data;
ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL);
group->BroadcastPacket(&data, false);
break;
}
case CHAT_MSG_GUILD:
{
if (sender->GetGuildId())
if (Guild* guild = sGuildMgr->GetGuildById(sender->GetGuildId()))
guild->BroadcastToGuild(this, false, message, LANG_ADDON);
break;
}
case CHAT_MSG_WHISPER:
{
if (!normalizePlayerName(targetName))
break;
Player* receiver = sObjectAccessor->FindPlayerByName(targetName.c_str());
if (!receiver)
break;
sender->Whisper(message, LANG_ADDON, receiver->GetGUID());
break;
}
// Messages sent to "RAID" while in a party will get delivered to "PARTY"
case CHAT_MSG_PARTY:
case CHAT_MSG_RAID:
{
Group* group = sender->GetGroup();
if (!group || group->isBGGroup())
break;
WorldPacket data;
ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL);
group->BroadcastPacket(&data, true, -1, group->GetMemberGroup(sender->GetGUID()));
break;
}
default:
{
sLog->outError("HandleAddonMessagechatOpcode: unknown addon message type %u", type);
break;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment