aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Handlers/ChatHandler.cpp130
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp32
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h6
3 files changed, 68 insertions, 100 deletions
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index cfc7376a683..41e9664b69f 100755
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -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;
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 66961504dcb..ab2b327ffcd 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -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 );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index de8830ac6e7..12316532a10 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -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,