aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h11
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/World/World.cpp16
-rw-r--r--src/server/game/World/World.h2
-rw-r--r--src/server/scripts/Commands/cs_message.cpp6
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