diff --git a/dChatServer/ChatPacketHandler.cpp b/dChatServer/ChatPacketHandler.cpp index 90a66845..5c85bb8a 100644 --- a/dChatServer/ChatPacketHandler.cpp +++ b/dChatServer/ChatPacketHandler.cpp @@ -366,7 +366,7 @@ void ChatPacketHandler::HandleGMLevelUpdate(Packet* packet) { void ChatPacketHandler::HandleWho(Packet* packet) { CINSTREAM_SKIP_HEADER; - FindPlayerRequest request; + ChatPackets::FindPlayerRequest request; request.Deserialize(inStream); const auto& sender = Game::playerContainer.GetPlayerData(request.requestor); @@ -392,7 +392,7 @@ void ChatPacketHandler::HandleWho(Packet* packet) { void ChatPacketHandler::HandleShowAll(Packet* packet) { CINSTREAM_SKIP_HEADER; - ShowAllRequest request; + ChatPackets::ShowAllRequest request; request.Deserialize(inStream); const auto& sender = Game::playerContainer.GetPlayerData(request.requestor); diff --git a/dChatServer/ChatPacketHandler.h b/dChatServer/ChatPacketHandler.h index 03b50001..5d986815 100644 --- a/dChatServer/ChatPacketHandler.h +++ b/dChatServer/ChatPacketHandler.h @@ -3,6 +3,7 @@ #include "dNetCommon.h" #include "BitStream.h" #include "PlayerContainer.h" +#include "eChatMessageResponseCode.h" enum class eAddFriendResponseType : uint8_t; @@ -33,15 +34,6 @@ enum class eChatChannel : uint8_t { }; -enum class eChatMessageResponseCode : uint8_t { - SENT = 0, - NOTONLINE, - GENERALERROR, - RECEIVEDNEWWHISPER, - NOTFRIENDS, - SENDERFREETRIAL, - RECEIVERFREETRIAL, -}; struct ChatMessage { LUWString message; diff --git a/dChatServer/ChatWeb.cpp b/dChatServer/ChatWeb.cpp index 7e1566b6..590ea4b0 100644 --- a/dChatServer/ChatWeb.cpp +++ b/dChatServer/ChatWeb.cpp @@ -51,7 +51,7 @@ void HandleHTTPAnnounceRequest(HTTPReply& reply, std::string body) { ChatPackets::Announcement announcement; announcement.title = good_data["title"]; announcement.message = good_data["message"]; - announcement.Send(); + announcement.Send(UNASSIGNED_SYSTEM_ADDRESS); reply.status = eHTTPStatusCode::OK; reply.message = "{\"status\":\"Announcement Sent\"}"; diff --git a/dCommon/dEnums/eChatMessageResponseCode.h b/dCommon/dEnums/eChatMessageResponseCode.h new file mode 100644 index 00000000..771b2c89 --- /dev/null +++ b/dCommon/dEnums/eChatMessageResponseCode.h @@ -0,0 +1,15 @@ +#ifndef __ECHATMESSAGERESPONSECODES__H__ +#define __ECHATMESSAGERESPONSECODES__H__ + +#include +enum class eChatMessageResponseCode : uint8_t { + SENT = 0, + NOTONLINE, + GENERALERROR, + RECEIVEDNEWWHISPER, + NOTFRIENDS, + SENDERFREETRIAL, + RECEIVERFREETRIAL, +}; + +#endif //!__ECHATMESSAGERESPONSECODES__H__ \ No newline at end of file diff --git a/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp b/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp index 5c710c09..c95c824e 100644 --- a/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp +++ b/dGame/dUtilities/SlashCommands/GMGreaterThanZeroCommands.cpp @@ -296,15 +296,12 @@ namespace GMGreaterThanZeroCommands { if (!splitArgs.empty() && !splitArgs.at(0).empty()) displayZoneData = splitArgs.at(0) == "1"; if (splitArgs.size() > 1) displayIndividualPlayers = splitArgs.at(1) == "1"; - ShowAllRequest request { - .requestor = entity->GetObjectID(), - .displayZoneData = displayZoneData, - .displayIndividualPlayers = displayIndividualPlayers - }; + ChatPackets::ShowAllRequest request; + request.requestor = entity->GetObjectID(); + request.displayZoneData = displayZoneData; + request.displayIndividualPlayers = displayIndividualPlayers; - CBITSTREAM; - request.Serialize(bitStream); - Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false); + request.Send(Game::chatSysAddr); } void FindPlayer(Entity* entity, const SystemAddress& sysAddr, const std::string args) { @@ -313,14 +310,11 @@ namespace GMGreaterThanZeroCommands { return; } - FindPlayerRequest request { - .requestor = entity->GetObjectID(), - .playerName = LUWString(args) - }; + ChatPackets::FindPlayerRequest request; + request.requestor = entity->GetObjectID(); + request.playerName = LUWString(args); - CBITSTREAM; - request.Serialize(bitStream); - Game::chatServer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, Game::chatSysAddr, false); + request.Send(Game::chatSysAddr); } void Spectate(Entity* entity, const SystemAddress& sysAddr, const std::string args) { diff --git a/dNet/ChatPackets.cpp b/dNet/ChatPackets.cpp index 5d2026f8..2500917d 100644 --- a/dNet/ChatPackets.cpp +++ b/dNet/ChatPackets.cpp @@ -46,10 +46,15 @@ namespace ChatPackets { bitStream.Write(playerObjectID); // senderID bitStream.Write(0); // sourceID bitStream.Write(responseCode); - bitStream.Write(message) + bitStream.Write(message); } + bool ChatMessage::Deserialize(RakNet::BitStream& inStream) { + //TODO: Implement this + return false; + } + void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) { CBITSTREAM; BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE); diff --git a/dNet/ChatPackets.h b/dNet/ChatPackets.h index 83cdd6ba..a425f2f4 100644 --- a/dNet/ChatPackets.h +++ b/dNet/ChatPackets.h @@ -11,6 +11,8 @@ struct SystemAddress; #include #include "dCommonVars.h" #include "BitStreamUtils.h" +#include "MessageType/Chat.h" +#include "eChatMessageResponseCode.h" enum class eCannedText : uint8_t { CHAT_DISABLED = 0, @@ -18,6 +20,8 @@ enum class eCannedText : uint8_t { }; namespace ChatPackets { + void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast = false); + struct ShowAllRequest : public LUBitStream { LWOOBJID requestor = LWOOBJID_EMPTY; bool displayZoneData = true; @@ -53,6 +57,8 @@ namespace ChatPackets { bool senderMythran; eChatMessageResponseCode responseCode = eChatMessageResponseCode::SENT; LUWString message; + + ChatMessage() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE) {}; virtual void Serialize(RakNet::BitStream& bitStream) const override; virtual bool Deserialize(RakNet::BitStream& inStream) override; }; diff --git a/dWorldServer/WorldServer.cpp b/dWorldServer/WorldServer.cpp index 83d921ff..bd822940 100644 --- a/dWorldServer/WorldServer.cpp +++ b/dWorldServer/WorldServer.cpp @@ -1319,7 +1319,7 @@ void HandlePacket(Packet* packet) { case MessageType::World::GENERAL_CHAT_MESSAGE: { if (chatDisabled) { - ChatPackets::SendMessageFail(packet->systemAddress); + ChatPackets::MessageFailure().Send(packet->systemAddress); } else { auto chatMessage = ClientPackets::HandleChatMessage(packet); // TODO: Find a good home for the logic in this case. @@ -1342,7 +1342,16 @@ void HandlePacket(Packet* packet) { std::string sMessage = GeneralUtils::UTF16ToWTF8(chatMessage.message); LOG("%s: %s", playerName.c_str(), sMessage.c_str()); - ChatPackets::SendChatMessage(packet->systemAddress, chatMessage.chatChannel, playerName, user->GetLoggedInChar(), isMythran, chatMessage.message); + //(packet->systemAddress, chatMessage.chatChannel, playerName, user->GetLoggedInChar(), isMythran, chatMessage.message); + + ChatPackets::ChatMessage outChatMessage; + outChatMessage.chatChannel = chatMessage.chatChannel; + outChatMessage.message = chatMessage.message; + outChatMessage.senderMythran = isMythran; + outChatMessage.senderName = playerName; + outChatMessage.playerObjectID = user->GetLoggedInChar(); + outChatMessage.Send(packet->systemAddress); + { // TODO: make it so we don't write this manually, but instead use a proper read and writes // aka: this is awful and should be fixed, but I can't be bothered to do it right now