/* * Darkflame Universe * Copyright 2018 */ #include "ChatPackets.h" #include "RakNetTypes.h" #include "BitStream.h" #include "Game.h" #include "BitStreamUtils.h" #include "dServer.h" #include "eConnectionType.h" #include "eChatMessageType.h" void ShowAllRequest::Serialize(RakNet::BitStream& bitStream) { BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::SHOW_ALL); bitStream.Write(this->requestor); bitStream.Write(this->displayZoneData); bitStream.Write(this->displayIndividualPlayers); } void ShowAllRequest::Deserialize(RakNet::BitStream& inStream) { inStream.Read(this->requestor); inStream.Read(this->displayZoneData); inStream.Read(this->displayIndividualPlayers); } void FindPlayerRequest::Serialize(RakNet::BitStream& bitStream) { BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::WHO); bitStream.Write(this->requestor); bitStream.Write(this->playerName); } void FindPlayerRequest::Deserialize(RakNet::BitStream& inStream) { inStream.Read(this->requestor); inStream.Read(this->playerName); } void ChatPackets::SendChatMessage(const SystemAddress& sysAddr, char chatChannel, const std::string& senderName, LWOOBJID playerObjectID, bool senderMythran, const std::u16string& message) { CBITSTREAM; BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::GENERAL_CHAT_MESSAGE); bitStream.Write(0); bitStream.Write(chatChannel); bitStream.Write(message.size()); bitStream.Write(LUWString(senderName)); bitStream.Write(playerObjectID); bitStream.Write(0); bitStream.Write(0); for (uint32_t i = 0; i < message.size(); ++i) { bitStream.Write(message[i]); } bitStream.Write(0); SEND_PACKET_BROADCAST; } void ChatPackets::SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) { CBITSTREAM; BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::GENERAL_CHAT_MESSAGE); bitStream.Write(0); bitStream.Write(4); bitStream.Write(message.size()); bitStream.Write(LUWString("", 33)); bitStream.Write(0); bitStream.Write(0); bitStream.Write(0); for (uint32_t i = 0; i < message.size(); ++i) { bitStream.Write(message[i]); } bitStream.Write(0); //This is so Wincent's announcement works: if (sysAddr != UNASSIGNED_SYSTEM_ADDRESS) { SEND_PACKET; return; } SEND_PACKET_BROADCAST; } void ChatPackets::SendMessageFail(const SystemAddress& sysAddr) { //0x00 - "Chat is currently disabled." //0x01 - "Upgrade to a full LEGO Universe Membership to chat with other players." CBITSTREAM; BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::SEND_CANNED_TEXT); bitStream.Write(0); //response type, options above ^ //docs say there's a wstring here-- no idea what it's for, or if it's even needed so leaving it as is for now. SEND_PACKET; }