Core/PacketIO: Enabled and updated client chat packets

This commit is contained in:
Shauren
2012-07-23 13:30:53 +02:00
parent fc453ab623
commit 04671d2d99
3 changed files with 68 additions and 100 deletions

View File

@@ -85,39 +85,30 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
case CMSG_MESSAGECHAT_GUILD:
type = CHAT_MSG_GUILD;
break;
//case CMSG_MESSAGECHAT_OFFICER:
// type = CHAT_MSG_OFFICER;
// break;
case CMSG_MESSAGECHAT_OFFICER:
type = CHAT_MSG_OFFICER;
break;
case CMSG_MESSAGECHAT_AFK:
type = CHAT_MSG_AFK;
break;
//case CMSG_MESSAGECHAT_DND:
// type = CHAT_MSG_DND;
// break;
//case CMSG_MESSAGECHAT_EMOTE:
// type = CHAT_MSG_EMOTE;
// break;
//case CMSG_MESSAGECHAT_PARTY:
// type = CHAT_MSG_PARTY;
// break;
//case CMSG_MESSAGECHAT_PARTY_LEADER:
// type = CHAT_MSG_PARTY_LEADER;
// break;
//case CMSG_MESSAGECHAT_RAID:
// type = CHAT_MSG_RAID;
// break;
//case CMSG_MESSAGECHAT_RAID_LEADER:
// type = CHAT_MSG_RAID_LEADER;
// break;
//case CMSG_MESSAGECHAT_BATTLEGROUND:
// type = CHAT_MSG_BATTLEGROUND;
// break;
//case CMSG_MESSAGECHAT_BATTLEGROUND_LEADER:
// type = CHAT_MSG_BATTLEGROUND_LEADER;
// break;
//case CMSG_MESSAGECHAT_RAID_WARNING:
// type = CHAT_MSG_RAID_WARNING;
// break;
case CMSG_MESSAGECHAT_DND:
type = CHAT_MSG_DND;
break;
case CMSG_MESSAGECHAT_EMOTE:
type = CHAT_MSG_EMOTE;
break;
case CMSG_MESSAGECHAT_PARTY:
type = CHAT_MSG_PARTY;
break;
case CMSG_MESSAGECHAT_RAID:
type = CHAT_MSG_RAID;
break;
case CMSG_MESSAGECHAT_BATTLEGROUND:
type = CHAT_MSG_BATTLEGROUND;
break;
case CMSG_MESSAGECHAT_RAID_WARNING:
type = CHAT_MSG_RAID_WARNING;
break;
default:
sLog->outDetail("HandleMessagechatOpcode : Unknown chat opcode (%u)", recvData.GetOpcode());
recvData.hexlike();
@@ -136,7 +127,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
//sLog->outDebug("CHAT: packet received. type %u, lang %u", type, lang);
// no language sent with emote packet.
if (type != CHAT_MSG_EMOTE)
if (type != CHAT_MSG_EMOTE && type != CHAT_MSG_AFK && type != CHAT_MSG_DND)
{
recvData >> lang;
@@ -232,21 +223,18 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
recvData.rfinish(); // Prevent warnings
return;
}
if (type != CHAT_MSG_AFK && type != CHAT_MSG_DND)
sender->UpdateSpeakTime();
}
}
if (sender->HasAura(1852) && type != CHAT_MSG_WHISPER)
{
std::string msg="";
recvData >> msg;
recvData.rfinish();
SendNotification(GetTrinityString(LANG_GM_SILENCE), sender->GetName());
return;
}
uint32 textLength = 0;
uint32 receiverLength = 0;
std::string to, channel, msg;
bool ignoreChecks = false;
switch (type)
@@ -255,27 +243,30 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
case CHAT_MSG_EMOTE:
case CHAT_MSG_YELL:
case CHAT_MSG_PARTY:
case CHAT_MSG_PARTY_LEADER:
case CHAT_MSG_GUILD:
case CHAT_MSG_OFFICER:
case CHAT_MSG_RAID:
case CHAT_MSG_RAID_LEADER:
case CHAT_MSG_RAID_WARNING:
case CHAT_MSG_BATTLEGROUND:
case CHAT_MSG_BATTLEGROUND_LEADER:
recvData >> msg;
textLength = recvData.ReadBits(9);
msg = recvData.ReadString(textLength);
break;
case CHAT_MSG_WHISPER:
recvData >> msg;
recvData >> to;
receiverLength = recvData.ReadBits(10);
textLength = recvData.ReadBits(9);
to = recvData.ReadString(receiverLength);
msg = recvData.ReadString(textLength);
break;
case CHAT_MSG_CHANNEL:
recvData >> msg;
recvData >> channel;
receiverLength = recvData.ReadBits(10);
textLength = recvData.ReadBits(9);
msg = recvData.ReadString(textLength);
channel = recvData.ReadString(receiverLength);
break;
case CHAT_MSG_AFK:
case CHAT_MSG_DND:
recvData >> msg;
textLength = recvData.ReadBits(9);
msg = recvData.ReadString(textLength);
ignoreChecks = true;
break;
}
@@ -368,8 +359,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
return;
}
if (type == CHAT_MSG_PARTY_LEADER && !group->IsLeader(_player->GetGUID()))
return;
if (group->IsLeader(GetPlayer()->GetGUID()))
type = CHAT_MSG_PARTY_LEADER;
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
@@ -402,6 +393,7 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
}
} break;
case CHAT_MSG_RAID:
case CHAT_MSG_RAID_LEADER:
{
// if player is in battleground, he cannot say to battleground members by /ra
Group* group = GetPlayer()->GetOriginalGroup();
@@ -412,27 +404,13 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
return;
}
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPacket data;
ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
case CHAT_MSG_RAID_LEADER:
{
// if player is in battleground, he cannot say to battleground members by /ra
Group* group = GetPlayer()->GetOriginalGroup();
if (!group)
{
group = GetPlayer()->GetGroup();
if (!group || group->isBGGroup() || !group->isRaidGroup() || !group->IsLeader(_player->GetGUID()))
return;
}
if (group->IsLeader(GetPlayer()->GetGUID()))
type = CHAT_MSG_RAID_LEADER;
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPacket data;
ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str(), NULL);
ChatHandler::FillMessageData(&data, this, uint8(type), lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
case CHAT_MSG_RAID_WARNING:
@@ -449,29 +427,20 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData)
group->BroadcastPacket(&data, false);
} break;
case CHAT_MSG_BATTLEGROUND:
{
//battleground raid is always in Player->GetGroup(), never in GetOriginalGroup()
Group* group = GetPlayer()->GetGroup();
if (!group || !group->isBGGroup())
return;
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPacket data;
ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND, lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
case CHAT_MSG_BATTLEGROUND_LEADER:
{
// battleground raid is always in Player->GetGroup(), never in GetOriginalGroup()
Group* group = GetPlayer()->GetGroup();
if (!group || !group->isBGGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
if (!group || !group->isBGGroup())
return;
if (group->IsLeader(GetPlayer()->GetGUID()))
type = CHAT_MSG_BATTLEGROUND_LEADER;
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPacket data;
ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND_LEADER, lang, "", 0, msg.c_str(), NULL);
ChatHandler::FillMessageData(&data, this, uint8(type), lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
case CHAT_MSG_CHANNEL:
@@ -551,6 +520,9 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
case CMSG_MESSAGECHAT_ADDON_GUILD:
type = CHAT_MSG_GUILD;
break;
case CMSG_MESSAGECHAT_ADDON_OFFICER:
type = CHAT_MSG_OFFICER;
break;
case CMSG_MESSAGECHAT_ADDON_PARTY:
type = CHAT_MSG_PARTY;
break;

View File

@@ -407,25 +407,23 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(CMSG_MEETINGSTONE_INFO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_BATTLEGROUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_ADDON_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_BATTLEGROUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_BATTLEGROUND_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_DND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_PARTY_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_RAID_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_RAID_WARNING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_SAY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_YELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_BATTLEGROUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_DND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_RAID_WARNING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_SAY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
DEFINE_OPCODE_HANDLER(CMSG_MESSAGECHAT_YELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMessagechatOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MINIGAME_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_OPCODE_HANDLER(CMSG_MOUNTSPECIAL_ANIM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSpecialAnimOpcode );
//DEFINE_OPCODE_HANDLER(CMSG_MOVE_CHARACTER_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
@@ -933,7 +931,7 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_DEBUG_LIST_TARGETS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEBUG_SERVER_GEO, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DEFENSE_MESSAGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DESTROY_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_DESTROY_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DISMOUNT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_DISMOUNTRESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );

View File

@@ -275,21 +275,19 @@ enum Opcodes
CMSG_MEETINGSTONE_INFO = 0x0000,
CMSG_MESSAGECHAT_ADDON_BATTLEGROUND = 0x0D46,
CMSG_MESSAGECHAT_ADDON_GUILD = 0x0544,
CMSG_MESSAGECHAT_ADDON_OFFICER = 0x3954,
CMSG_MESSAGECHAT_ADDON_PARTY = 0x0546,
CMSG_MESSAGECHAT_ADDON_RAID = 0x1D56,
CMSG_MESSAGECHAT_ADDON_WHISPER = 0x2146,
CMSG_MESSAGECHAT_AFK = 0x0D44,
CMSG_MESSAGECHAT_BATTLEGROUND = 0x2156,
CMSG_MESSAGECHAT_BATTLEGROUND_LEADER = 0x0000,
CMSG_MESSAGECHAT_CHANNEL = 0x1D44,
CMSG_MESSAGECHAT_DND = 0x2946,
CMSG_MESSAGECHAT_EMOTE = 0x0000,
CMSG_MESSAGECHAT_EMOTE = 0x1156,
CMSG_MESSAGECHAT_GUILD = 0x3956,
CMSG_MESSAGECHAT_OFFICER = 0x1946,
CMSG_MESSAGECHAT_PARTY = 0x1D46,
CMSG_MESSAGECHAT_PARTY_LEADER = 0x0000,
CMSG_MESSAGECHAT_RAID = 0x2D44,
CMSG_MESSAGECHAT_RAID_LEADER = 0x0000,
CMSG_MESSAGECHAT_RAID_WARNING = 0x0944,
CMSG_MESSAGECHAT_SAY = 0x1154,
CMSG_MESSAGECHAT_WHISPER = 0x0D56,