diff options
-rw-r--r-- | src/server/game/Chat/Chat.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Chat/Chat.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 122 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
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 ); |