diff options
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.h | 11 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 2 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 2 |
6 files changed, 31 insertions, 11 deletions
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 966f10e6078..4a4a90902bd 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -29,3 +29,11 @@ void WorldPackets::Chat::EmoteClient::Read() { _worldPacket >> EmoteID; } + +WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write() +{ + _worldPacket << int32(MessageID); + _worldPacket << StringParam; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index b299b3b3e4e..f14c6bab8c2 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -45,6 +45,17 @@ namespace WorldPackets uint32 EmoteID = 0; }; + + class ChatServerMessage final : public ServerPacket + { + public: + ChatServerMessage() : ServerPacket(SMSG_CHAT_SERVER_MESSAGE, 4 + 20) { } + + WorldPacket const* Write() override; + + int32 MessageID = 0; + std::string StringParam; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 33d7e334de1..a8d84a8d0ea 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -785,7 +785,7 @@ void OpcodeTable::Initialize() /*0x28E*/ DEFINE_HANDLER(CMSG_GROUP_RAID_CONVERT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupRaidConvertOpcode ); /*0x28F*/ DEFINE_HANDLER(CMSG_GROUP_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGroupAssistantLeaderOpcode); /*0x290*/ DEFINE_HANDLER(CMSG_BUYBACK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuybackItem ); - /*0x291*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_MESSAGE, STATUS_NEVER); + /*0x291*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_SERVER_MESSAGE, STATUS_NEVER); /*0x292*/ DEFINE_HANDLER(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend ); /*0x293*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_OFFER_CONTINUE, STATUS_NEVER); /*0x294*/ DEFINE_HANDLER(CMSG_TEST_DROP_RATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 61f6c89ea9d..38cc24128c1 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -683,7 +683,7 @@ enum Opcodes : uint16 CMSG_GROUP_RAID_CONVERT = 0x28E, CMSG_GROUP_ASSISTANT_LEADER = 0x28F, CMSG_BUYBACK_ITEM = 0x290, - SMSG_SERVER_MESSAGE = 0x291, + SMSG_CHAT_SERVER_MESSAGE = 0x291, CMSG_SET_SAVED_INSTANCE_EXTEND = 0x292, SMSG_LFG_OFFER_CONTINUE = 0x293, CMSG_TEST_DROP_RATE = 0x294, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index f71bc88ca13..979cfe70e82 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -33,6 +33,7 @@ #include "CharacterCache.h" #include "CharacterDatabaseCleaner.h" #include "Chat.h" +#include "ChatPackets.h" #include "Config.h" #include "CreatureAIRegistry.h" #include "CreatureGroups.h" @@ -3021,7 +3022,7 @@ void World::ShutdownMsg(bool show, Player* player, const std::string& reason) ServerMessageType msgid = (m_ShutdownMask & SHUTDOWN_MASK_RESTART) ? SERVER_MSG_RESTART_TIME : SERVER_MSG_SHUTDOWN_TIME; - SendServerMessage(msgid, str.c_str(), player); + SendServerMessage(msgid, str, player); TC_LOG_DEBUG("misc", "Server is %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"), str.c_str()); } } @@ -3048,17 +3049,17 @@ uint32 World::ShutdownCancel() } /// Send a server message to the user(s) -void World::SendServerMessage(ServerMessageType type, const char *text, Player* player) +void World::SendServerMessage(ServerMessageType messageID, std::string stringParam /*= ""*/, Player* player /*= nullptr*/) { - WorldPacket data(SMSG_SERVER_MESSAGE, 50); // guess size - data << uint32(type); - if (type <= SERVER_MSG_STRING) - data << text; + WorldPackets::Chat::ChatServerMessage chatServerMessage; + chatServerMessage.MessageID = int32(messageID); + if (messageID <= SERVER_MSG_STRING) + chatServerMessage.StringParam = stringParam; if (player) - player->SendDirectMessage(&data); + player->SendDirectMessage(chatServerMessage.Write()); else - SendGlobalMessage(&data); + SendGlobalMessage(chatServerMessage.Write()); } void World::UpdateSessions(uint32 diff) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 249ebd2303b..7727c24da87 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -649,7 +649,7 @@ class TC_GAME_API World void SendWorldText(uint32 string_id, ...); void SendGlobalText(char const* text, WorldSession* self); void SendGMText(uint32 string_id, ...); - void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = nullptr); + void SendServerMessage(ServerMessageType messageID, std::string stringParam = "", Player* player = nullptr); void SendGlobalMessage(WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0); void SendGlobalGMMessage(WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0); bool SendZoneMessage(uint32 zone, WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0); |
