aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Chat/Chat.cpp30
-rw-r--r--src/server/game/Chat/Chat.h4
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Guilds/Guild.cpp2
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp9
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h122
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
8 files changed, 98 insertions, 77 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index de586b13856..c7fbb4c9df1 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -631,7 +631,7 @@ bool ChatHandler::ShowHelpForCommand(ChatCommand* table, const char* cmd)
size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, uint64 senderGUID, uint64 receiverGUID, std::string const& message, uint8 chatTag,
std::string const& senderName /*= ""*/, std::string const& receiverName /*= ""*/,
uint32 achievementId /*= 0*/, bool gmMessage /*= false*/, std::string const& channelName /*= ""*/,
- const char* addonPrefix /*= NULL*/)
+ std::string const& addonPrefix /*= ""*/)
{
size_t receiverGUIDPos = 0;
data.Initialize(!gmMessage ? SMSG_MESSAGECHAT : SMSG_GM_MESSAGECHAT);
@@ -658,12 +658,17 @@ size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Languag
data << uint32(receiverName.length() + 1);
data << receiverName;
}
+
+ if (language == LANG_ADDON)
+ data << addonPrefix;
break;
case CHAT_MSG_WHISPER_FOREIGN:
data << uint32(senderName.length() + 1);
data << senderName;
receiverGUIDPos = data.wpos();
data << uint64(receiverGUID);
+ if (language == LANG_ADDON)
+ data << addonPrefix;
break;
case CHAT_MSG_BG_SYSTEM_NEUTRAL:
case CHAT_MSG_BG_SYSTEM_ALLIANCE:
@@ -675,11 +680,16 @@ size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Languag
data << uint32(receiverName.length() + 1);
data << receiverName;
}
+
+ if (language == LANG_ADDON)
+ data << addonPrefix;
break;
case CHAT_MSG_ACHIEVEMENT:
case CHAT_MSG_GUILD_ACHIEVEMENT:
receiverGUIDPos = data.wpos();
data << uint64(receiverGUID);
+ if (language == LANG_ADDON)
+ data << addonPrefix;
break;
default:
if (gmMessage)
@@ -694,17 +704,11 @@ size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Languag
data << channelName;
}
+ receiverGUIDPos = data.wpos();
+ data << uint64(receiverGUID);
+
if (language == LANG_ADDON)
- {
- ASSERT(addonPrefix);
data << addonPrefix;
- }
-
- if (receiverGUIDPos != 0)
- {
- receiverGUIDPos = data.wpos();
- data << uint64(receiverGUID);
- }
break;
}
@@ -716,15 +720,15 @@ size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Languag
data << uint32(achievementId);
else if (chatType == CHAT_MSG_RAID_BOSS_WHISPER || chatType == CHAT_MSG_RAID_BOSS_EMOTE)
{
- data << float(0.0f); // Added in 4.2.0, unk
- data << uint8(0); // Added in 4.2.0, unk
+ data << float(0.0f); // Display time in middle of the screen (in seconds), defaults to 10 if not set (cannot be below 1)
+ data << uint8(0); // Hide in chat frame (only shows in middle of the screen)
}
return receiverGUIDPos;
}
size_t ChatHandler::BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message,
- uint32 achievementId /*= 0*/, std::string const& channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, const char* addonPrefix /*= NULL*/)
+ uint32 achievementId /*= 0*/, std::string const& channelName /*= ""*/, LocaleConstant locale /*= DEFAULT_LOCALE*/, std::string const& addonPrefix /*= ""*/)
{
uint64 senderGUID = 0;
std::string senderName = "";
diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h
index 42d6c26a057..eb4c89bb8ea 100644
--- a/src/server/game/Chat/Chat.h
+++ b/src/server/game/Chat/Chat.h
@@ -57,10 +57,10 @@ class ChatHandler
static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, uint64 senderGUID, uint64 receiverGUID, std::string const& message, uint8 chatTag,
std::string const& senderName = "", std::string const& receiverName = "",
uint32 achievementId = 0, bool gmMessage = false, std::string const& channelName = "",
- const char* addonPrefix = NULL);
+ std::string const& addonPrefix = "");
// Builds chat packet and returns receiver guid position in the packet to substitute in whisper builders
- static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId = 0, std::string const& channelName = "", LocaleConstant locale = DEFAULT_LOCALE, const char* addonPrefix = NULL);
+ static size_t BuildChatPacket(WorldPacket& data, ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string const& message, uint32 achievementId = 0, std::string const& channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string const& addonPrefix = "");
static char* LineFromMessage(char*& pos) { char* start = strtok(pos, "\n"); pos = NULL; return start; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 850493ab512..4b49964ad02 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -20730,7 +20730,7 @@ void Player::WhisperAddon(const std::string& text, const std::string& prefix, Pl
return;
WorldPacket data;
- ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix.c_str());
+ ChatHandler::BuildChatPacket(data, CHAT_MSG_WHISPER, LANG_ADDON, this, this, text, 0, "", DEFAULT_LOCALE, prefix);
receiver->GetSession()->SendPacket(&data);
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 9575bb748d3..b3df4ef4fef 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -834,7 +834,9 @@ enum PlayerChatTag
CHAT_TAG_DND = 0x02,
CHAT_TAG_GM = 0x04,
CHAT_TAG_COM = 0x08, // Commentator
- CHAT_TAG_DEV = 0x10
+ CHAT_TAG_DEV = 0x10,
+ CHAT_TAG_BOSS_SOUND = 0x20, // Plays "RaidBossEmoteWarning" sound on raid boss emote/whisper
+ CHAT_TAG_MOBILE = 0x40
};
enum PlayedTimeIndex
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 6a01298648d..12c1a1f09d3 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2582,7 +2582,7 @@ void Guild::BroadcastAddonToGuild(WorldSession* session, bool officerOnly, std::
if (session && session->GetPlayer() && _HasRankRight(session->GetPlayer(), officerOnly ? GR_RIGHT_OFFCHATSPEAK : GR_RIGHT_GCHATSPEAK))
{
WorldPacket data;
- ChatHandler::BuildChatPacket(data, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), NULL, msg, 0, "", DEFAULT_LOCALE, prefix.c_str());
+ ChatHandler::BuildChatPacket(data, officerOnly ? CHAT_MSG_OFFICER : CHAT_MSG_GUILD, LANG_ADDON, session->GetPlayer(), NULL, msg, 0, "", DEFAULT_LOCALE, prefix);
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
if (Player* player = itr->second->FindPlayer())
if (player->GetSession() && _HasRankRight(player, officerOnly ? GR_RIGHT_OFFCHATLISTEN : GR_RIGHT_GCHATLISTEN) &&
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 58af17fe724..3250a5f4dbd 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -591,6 +591,9 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
break;
}
+ if (prefix.empty() || prefix.length() > 16)
+ return;
+
// Logging enabled?
if (sWorld->getBoolConfig(CONFIG_CHATLOG_ADDON))
{
@@ -614,7 +617,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
return;
WorldPacket data;
- ChatHandler::BuildChatPacket(data, type, LANG_ADDON, sender, NULL, message, 0U, "", DEFAULT_LOCALE, prefix.c_str());
+ ChatHandler::BuildChatPacket(data, type, LANG_ADDON, sender, NULL, message, 0U, "", DEFAULT_LOCALE, prefix);
group->BroadcastAddonMessagePacket(&data, prefix, false);
break;
}
@@ -630,7 +633,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
{
if (!normalizePlayerName(targetName))
break;
- Player* receiver = sObjectAccessor->FindPlayerByName(targetName.c_str());
+ Player* receiver = sObjectAccessor->FindPlayerByName(targetName);
if (!receiver)
break;
@@ -647,7 +650,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData)
break;
WorldPacket data;
- ChatHandler::BuildChatPacket(data, type, LANG_ADDON, sender, NULL, message, 0U, "", DEFAULT_LOCALE, prefix.c_str());
+ ChatHandler::BuildChatPacket(data, type, LANG_ADDON, sender, NULL, message, 0U, "", DEFAULT_LOCALE, prefix);
group->BroadcastAddonMessagePacket(&data, prefix, true, -1, group->GetMemberGroup(sender->GetGUID()));
break;
}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 49d25e321af..69d4cf847ac 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -3447,63 +3447,75 @@ enum WeatherType
enum ChatMsg
{
- CHAT_MSG_ADDON = 0xFFFFFFFF, // -1
- CHAT_MSG_SYSTEM = 0x00,
- CHAT_MSG_SAY = 0x01,
- CHAT_MSG_PARTY = 0x02,
- CHAT_MSG_RAID = 0x03,
- CHAT_MSG_GUILD = 0x04,
- CHAT_MSG_OFFICER = 0x05,
- CHAT_MSG_YELL = 0x06,
- CHAT_MSG_WHISPER = 0x07,
- CHAT_MSG_WHISPER_FOREIGN = 0x08,
- CHAT_MSG_WHISPER_INFORM = 0x09,
- CHAT_MSG_EMOTE = 0x0A,
- CHAT_MSG_TEXT_EMOTE = 0x0B,
- CHAT_MSG_MONSTER_SAY = 0x0C,
- CHAT_MSG_MONSTER_PARTY = 0x0D,
- CHAT_MSG_MONSTER_YELL = 0x0E,
- CHAT_MSG_MONSTER_WHISPER = 0x0F,
- CHAT_MSG_MONSTER_EMOTE = 0x10,
- CHAT_MSG_CHANNEL = 0x11,
- CHAT_MSG_CHANNEL_JOIN = 0x12,
- CHAT_MSG_CHANNEL_LEAVE = 0x13,
- CHAT_MSG_CHANNEL_LIST = 0x14,
- CHAT_MSG_CHANNEL_NOTICE = 0x15,
- CHAT_MSG_CHANNEL_NOTICE_USER = 0x16,
- // CHAT_MSG_TARGETICONS
- CHAT_MSG_AFK = 0x17,
- CHAT_MSG_DND = 0x18,
- CHAT_MSG_IGNORED = 0x19,
- CHAT_MSG_SKILL = 0x1A,
- CHAT_MSG_LOOT = 0x1B,
- CHAT_MSG_MONEY = 0x1C,
- CHAT_MSG_OPENING = 0x1D,
- CHAT_MSG_TRADESKILLS = 0x1E,
- CHAT_MSG_PET_INFO = 0x1F,
- CHAT_MSG_COMBAT_MISC_INFO = 0x20,
- CHAT_MSG_COMBAT_XP_GAIN = 0x21,
- CHAT_MSG_COMBAT_HONOR_GAIN = 0x22,
- CHAT_MSG_COMBAT_FACTION_CHANGE = 0x23,
- CHAT_MSG_BG_SYSTEM_NEUTRAL = 0x24,
- CHAT_MSG_BG_SYSTEM_ALLIANCE = 0x25,
- CHAT_MSG_BG_SYSTEM_HORDE = 0x26,
- CHAT_MSG_RAID_LEADER = 0x27,
- CHAT_MSG_RAID_WARNING = 0x28,
- CHAT_MSG_RAID_BOSS_EMOTE = 0x29,
- CHAT_MSG_RAID_BOSS_WHISPER = 0x2A,
- CHAT_MSG_FILTERED = 0x2B,
- CHAT_MSG_BATTLEGROUND = 0x2C,
- CHAT_MSG_BATTLEGROUND_LEADER = 0x2D,
- CHAT_MSG_RESTRICTED = 0x2E,
- CHAT_MSG_BATTLENET = 0x2F,
- CHAT_MSG_ACHIEVEMENT = 0x30,
- CHAT_MSG_GUILD_ACHIEVEMENT = 0x31,
- CHAT_MSG_ARENA_POINTS = 0x32,
- CHAT_MSG_PARTY_LEADER = 0x33
+ CHAT_MSG_ADDON = 0xFFFFFFFF, // -1
+ CHAT_MSG_SYSTEM = 0x00,
+ CHAT_MSG_SAY = 0x01,
+ CHAT_MSG_PARTY = 0x02,
+ CHAT_MSG_RAID = 0x03,
+ CHAT_MSG_GUILD = 0x04,
+ CHAT_MSG_OFFICER = 0x05,
+ CHAT_MSG_YELL = 0x06,
+ CHAT_MSG_WHISPER = 0x07,
+ CHAT_MSG_WHISPER_FOREIGN = 0x08,
+ CHAT_MSG_WHISPER_INFORM = 0x09,
+ CHAT_MSG_EMOTE = 0x0A,
+ CHAT_MSG_TEXT_EMOTE = 0x0B,
+ CHAT_MSG_MONSTER_SAY = 0x0C,
+ CHAT_MSG_MONSTER_PARTY = 0x0D,
+ CHAT_MSG_MONSTER_YELL = 0x0E,
+ CHAT_MSG_MONSTER_WHISPER = 0x0F,
+ CHAT_MSG_MONSTER_EMOTE = 0x10,
+ CHAT_MSG_CHANNEL = 0x11,
+ CHAT_MSG_CHANNEL_JOIN = 0x12,
+ CHAT_MSG_CHANNEL_LEAVE = 0x13,
+ CHAT_MSG_CHANNEL_LIST = 0x14,
+ CHAT_MSG_CHANNEL_NOTICE = 0x15,
+ CHAT_MSG_CHANNEL_NOTICE_USER = 0x16,
+ CHAT_MSG_AFK = 0x17,
+ CHAT_MSG_DND = 0x18,
+ CHAT_MSG_IGNORED = 0x19,
+ CHAT_MSG_SKILL = 0x1A,
+ CHAT_MSG_LOOT = 0x1B,
+ CHAT_MSG_MONEY = 0x1C,
+ CHAT_MSG_OPENING = 0x1D,
+ CHAT_MSG_TRADESKILLS = 0x1E,
+ CHAT_MSG_PET_INFO = 0x1F,
+ CHAT_MSG_COMBAT_MISC_INFO = 0x20,
+ CHAT_MSG_COMBAT_XP_GAIN = 0x21,
+ CHAT_MSG_COMBAT_HONOR_GAIN = 0x22,
+ CHAT_MSG_COMBAT_FACTION_CHANGE = 0x23,
+ CHAT_MSG_BG_SYSTEM_NEUTRAL = 0x24,
+ CHAT_MSG_BG_SYSTEM_ALLIANCE = 0x25,
+ CHAT_MSG_BG_SYSTEM_HORDE = 0x26,
+ CHAT_MSG_RAID_LEADER = 0x27,
+ CHAT_MSG_RAID_WARNING = 0x28,
+ CHAT_MSG_RAID_BOSS_EMOTE = 0x29,
+ CHAT_MSG_RAID_BOSS_WHISPER = 0x2A,
+ CHAT_MSG_FILTERED = 0x2B,
+ CHAT_MSG_BATTLEGROUND = 0x2C,
+ CHAT_MSG_BATTLEGROUND_LEADER = 0x2D,
+ CHAT_MSG_RESTRICTED = 0x2E,
+ CHAT_MSG_BATTLENET = 0x2F,
+ CHAT_MSG_ACHIEVEMENT = 0x30,
+ CHAT_MSG_GUILD_ACHIEVEMENT = 0x31,
+ CHAT_MSG_ARENA_POINTS = 0x32,
+ CHAT_MSG_PARTY_LEADER = 0x33,
+ CHAT_MSG_TARGETICONS = 0x34,
+ CHAT_MSG_BN_WHISPER = 0x35,
+ CHAT_MSG_BN_WHISPER_INFORM = 0x36,
+ CHAT_MSG_BN_CONVERSATION = 0x37,
+ CHAT_MSG_BN_CONVERSATION_NOTICE = 0x38,
+ CHAT_MSG_BN_CONVERSATION_LIST = 0x39,
+ CHAT_MSG_BN_INLINE_TOAST_ALERT = 0x3A,
+ CHAT_MSG_BN_INLINE_TOAST_BROADCAST = 0x3B,
+ CHAT_MSG_BN_INLINE_TOAST_BROADCAST_INFORM = 0x3C,
+ CHAT_MSG_BN_INLINE_TOAST_CONVERSATION = 0x3D,
+ CHAT_MSG_BN_WHISPER_PLAYER_OFFLINE = 0x3E,
+ CHAT_MSG_COMBAT_GUILD_XP_GAIN = 0x3F,
+ CHAT_MSG_CURRENCY = 0x40
};
-#define MAX_CHAT_MSG_TYPE 0x34
+#define MAX_CHAT_MSG_TYPE 0x41
enum ChatLinkColors
{
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 63327a449cd..2686fdf90e1 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -825,7 +825,7 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER(SMSG_GMTICKET_GETTICKET, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GMTICKET_SYSTEMSTATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GMTICKET_UPDATETEXT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- DEFINE_OPCODE_HANDLER(SMSG_GM_MESSAGECHAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_GM_MESSAGECHAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GM_PLAYER_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_GODMODE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );