aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Server/Packets/ChatPackets.cpp8
-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/Server/Protocol/Opcodes.h2
-rw-r--r--src/server/game/World/World.cpp17
-rw-r--r--src/server/game/World/World.h2
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);