more misc work

This commit is contained in:
Aaron Kimbre 2025-04-11 09:12:45 -05:00
parent 8364e60799
commit 48d32f2c77
11 changed files with 90 additions and 38 deletions

View File

@ -450,24 +450,21 @@ void ChatPacketHandler::HandleChatMessage(Packet* packet) {
switch (data.channel) {
case eChatChannel::LOCAL: {
break;
}
case eChatChannel::TEAM: {
auto* team = Game::playerContainer.GetTeam(data.sender.playerID);
if (team == nullptr) return;
data.teamID = team->teamID;
case eChatChannel::TEAM: {
auto* team = Game::playerContainer.GetTeam(data.sender.playerID);
if (team == nullptr) return;
data.teamID = team->teamID;
for (const auto memberId : team->memberIDs) {
const auto& otherMember = Game::playerContainer.GetPlayerData(memberId);
if (!otherMember) return;
SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT);
for (const auto memberId : team->memberIDs) {
const auto& otherMember = Game::playerContainer.GetPlayerData(memberId);
if (!otherMember) return;
SendPrivateChatMessage(data.sender, otherMember, otherMember, data.message, eChatChannel::TEAM, eChatMessageResponseCode::SENT);
}
break;
}
break;
}
default:
LOG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data());
break;
default:
LOG_DEBUG("Unhandled Chat channel [%s]", StringifiedEnum::ToString(data.channel).data());
break;
}
ChatWeb::SendWSChatMessage(data);
}

View File

@ -150,12 +150,9 @@ namespace ChatWeb {
json data;
data["message"] = chatMessage.message.GetAsString();
data["sender"] = chatMessage.sender;
data["channel"] = magic_enum::enum_name(chatMessage.channel);
switch (chatMessage.channel) {
case eChatChannel::LOCAL:
break;
case eChatChannel::TEAM:
data["teamID"] = chatMessage.teamID;
break;

View File

@ -12,4 +12,4 @@ enum class eChatMessageResponseCode : uint8_t {
RECEIVERFREETRIAL,
};
#endif //!__ECHATMESSAGERESPONSECODES__H__
#endif //!__ECHATMESSAGERESPONSECODES__H__

View File

@ -61,6 +61,9 @@ struct LUBitStream {
void WriteHeader(RakNet::BitStream& bitStream) const;
bool ReadHeader(RakNet::BitStream& bitStream);
void Send(const SystemAddress& sysAddr) const;
void Broadcast() const {
Send(UNASSIGNED_SYSTEM_ADDRESS);
};
virtual void Serialize(RakNet::BitStream& bitStream) const {}
virtual bool Deserialize(RakNet::BitStream& bitStream) { return true; }

View File

@ -54,6 +54,55 @@ namespace ChatPackets {
//TODO: Implement this
return false;
}
void ChatMessage::Handle(){
}
void WorldChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool WorldChatMessage::Deserialize(RakNet::BitStream& inStream) {
VALIDATE_READ(inStream.Read(chatChannel));
uint16_t padding;
VALIDATE_READ(inStream.Read(padding));
uint32_t messageLength;
VALIDATE_READ(inStream.Read(messageLength));
string message_tmp;
for (uint32_t i = 0; i < messageLength; ++i) {
uint16_t character;
VALIDATE_READ(inStream.Read(character));
message_tmp.push_back(character);
}
return true;
}
void WorldChatMessage::Handle() {
}
void PrivateChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool PrivateChatMessage::Deserialize(RakNet::BitStream& inStream) {
}
void PrivateChatMessage::Handle() {
}
void UserChatMessage::Serialize(RakNet::BitStream& bitStream) const {
}
bool UserChatMessage::Deserialize(RakNet::BitStream& inStream) {
}
void UserChatMessage::Handle() {
}
void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, const bool broadcast) {
CBITSTREAM;

View File

@ -61,6 +61,25 @@ namespace ChatPackets {
ChatMessage() : LUBitStream(eConnectionType::CHAT, MessageType::Chat::GENERAL_CHAT_MESSAGE) {};
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Handle() override {};
};
struct WorldChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& bitStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
};
struct PrivateChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
};
struct UserChatMessage : public ChatMessage {
virtual bool Deserialize(RakNet::BitStream& inStream) override;
virtual void Serialize(RakNet::BitStream& bitStream) const override;
virtual void Handle() override;
};
// Should be in client packets since it is a client connection type, but whatever

View File

@ -13,12 +13,6 @@ class PositionUpdate;
struct Packet;
struct ChatMessage {
uint8_t chatChannel = 0;
uint16_t unknown = 0;
std::u16string message;
};
struct ChatModerationRequest {
uint8_t chatLevel = 0;
uint8_t requestID = 0;
@ -27,7 +21,6 @@ struct ChatModerationRequest {
};
namespace ClientPackets {
ChatMessage HandleChatMessage(Packet* packet);
PositionUpdate HandleClientPositionUpdate(Packet* packet);
ChatModerationRequest HandleChatModerationRequest(Packet* packet);
int32_t SendTop5HelpIssues(Packet* packet);

View File

@ -183,4 +183,4 @@ void WorldPackets::SendDebugOuput(const SystemAddress& sysAddr, const std::strin
bitStream.Write<uint32_t>(data.size());
bitStream.Write(data);
SEND_PACKET;
}
}

View File

@ -10,9 +10,6 @@ struct SystemAddress;
enum class eGameMasterLevel : uint8_t;
enum class eCharacterCreationResponse : uint8_t;
enum class eRenameResponse : uint8_t;
namespace RakNet {
class BitStream;
};
struct HTTPMonitorInfo {
uint16_t port = 80;

View File

@ -286,4 +286,4 @@ void Web::SendWSMessage(const std::string subscription, json& data) {
mg_ws_send(wc, data.dump().c_str(), data.dump().size(), WEBSOCKET_OP_TEXT);
}
}
}
}

View File

@ -1321,7 +1321,7 @@ void HandlePacket(Packet* packet) {
if (chatDisabled) {
ChatPackets::MessageFailure().Send(packet->systemAddress);
} else {
auto chatMessage = ClientPackets::HandleChatMessage(packet);
ChatPackets::WorldChatMessage inChatMessage;
// TODO: Find a good home for the logic in this case.
User* user = UserManager::Instance()->GetUser(packet->systemAddress);
if (!user) {
@ -1342,15 +1342,12 @@ void HandlePacket(Packet* packet) {
std::string sMessage = GeneralUtils::UTF16ToWTF8(chatMessage.message);
LOG("%s: %s", playerName.c_str(), sMessage.c_str());
//(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);
outChatMessage.Broadcast();
{
// TODO: make it so we don't write this manually, but instead use a proper read and writes