diff options
| -rw-r--r-- | src/server/game/Server/Packets/ChatPackets.cpp | 12 | ||||
| -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/World/World.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_message.cpp | 6 |
6 files changed, 36 insertions, 13 deletions
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 44df88257ab..260770e65fe 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -221,3 +221,15 @@ WorldPacket const* WorldPackets::Chat::ChatPlayerNotfound::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write() +{ + _worldPacket << MessageID; + + _worldPacket.WriteBits(StringParam.length(), 11); + _worldPacket.FlushBits(); + + _worldPacket.WriteString(StringParam); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index b794d118d88..5bc55952168 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -239,6 +239,17 @@ namespace WorldPackets std::string Name; }; + + class ChatServerMessage final : public ServerPacket + { + public: + ChatServerMessage() : ServerPacket(SMSG_CHAT_SERVER_MESSAGE, 4 + 2) { } + + 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 82af7f986f6..8ef40d9a30b 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1012,7 +1012,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_NOTFOUND, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_RECONNECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_RESTRICTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_SERVER_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_SERVER_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHEAT_IGNORE_DIMISHING_RETURNS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_WARGAME_ENTRY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHUNKED_PACKET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 94f13abfb6c..ad4ce69979d 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2747,7 +2747,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()); } } @@ -2772,17 +2772,17 @@ void 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 /*= NULL*/) { - WorldPacket data(SMSG_CHAT_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->GetSession()->SendPacket(&data); + player->GetSession()->SendPacket(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 b3bebca08e3..1a3cfd6f985 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -671,7 +671,7 @@ class World void SendWorldText(uint32 string_id, ...); void SendGlobalText(const char* text, WorldSession* self); void SendGMText(uint32 string_id, ...); - void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL); + void SendServerMessage(ServerMessageType messageID, std::string stringParam = "", Player* player = NULL); 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); diff --git a/src/server/scripts/Commands/cs_message.cpp b/src/server/scripts/Commands/cs_message.cpp index 519ae1e1f97..be3a027277c 100644 --- a/src/server/scripts/Commands/cs_message.cpp +++ b/src/server/scripts/Commands/cs_message.cpp @@ -134,9 +134,9 @@ public: if (!*args) return false; - char buff[2048]; - sprintf(buff, handler->GetTrinityString(LANG_SYSTEMMESSAGE), args); - sWorld->SendServerMessage(SERVER_MSG_STRING, buff); + std::string str = handler->PGetParseString(LANG_SYSTEMMESSAGE, args); + + sWorld->SendServerMessage(SERVER_MSG_STRING, str); return true; } // announce to logged in GMs |
