Implement new chat features

This commit is contained in:
Jett
2022-07-17 07:54:36 +01:00
parent 0d4f86b20b
commit fab8a1e982
7 changed files with 84 additions and 45 deletions

View File

@@ -276,6 +276,7 @@ void ClientPackets::HandleChatModerationRequest(const SystemAddress& sysAddr, Pa
std::string message = "";
stream.Read(chatLevel);
printf("%d", chatLevel);
stream.Read(requestID);
for (uint32_t i = 0; i < 42; ++i) {
@@ -292,9 +293,19 @@ void ClientPackets::HandleChatModerationRequest(const SystemAddress& sysAddr, Pa
}
std::unordered_map<char, char> unacceptedItems;
bool bAllClean = Game::chatFilter->IsSentenceOkay(message, user->GetLastUsedChar()->GetGMLevel());
std::vector<std::string> segments = Game::chatFilter->IsSentenceOkay(message, entity->GetGMLevel());
bool bAllClean = segments.empty();
if (!bAllClean) {
unacceptedItems.insert(std::make_pair((char)0, (char)message.length()));
for (const auto& item : segments) {
if (item == "") {
unacceptedItems.insert({ (char)0, (char)message.length()});
break;
}
unacceptedItems.insert({ message.find(item), item.length() });
}
}
if (user->GetIsMuted()) {

View File

@@ -192,19 +192,22 @@ void WorldPackets::SendChatModerationResponse(const SystemAddress& sysAddr, bool
CBITSTREAM
PacketUtils::WriteHeader(bitStream, CLIENT, MSG_CLIENT_CHAT_MODERATION_STRING);
bitStream.Write(static_cast<char>(requestAccepted));
bitStream.Write(static_cast<uint16_t>(0));
bitStream.Write(static_cast<uint8_t>(requestID));
bitStream.Write(static_cast<char>(0));
bitStream.Write<uint8_t>(unacceptedItems.empty()); // Is sentence ok?
bitStream.Write<uint16_t>(0x16); // Source ID, unknown
for (uint32_t i = 0; i < 33; ++i) {
bitStream.Write(static_cast<uint16_t>(receiver[i]));
bitStream.Write(static_cast<uint8_t>(requestID)); // request ID
bitStream.Write(static_cast<char>(0)); // chat mode
PacketUtils::WritePacketWString(receiver, 42, &bitStream); // receiver name
for (auto it : unacceptedItems) {
bitStream.Write<uint8_t>(it.first); // start index
bitStream.Write<uint8_t>(it.second); // length
}
for (std::unordered_map<char, char>::iterator it = unacceptedItems.begin(); it != unacceptedItems.end(); ++it) {
bitStream.Write(it->first);
bitStream.Write(it->second);
}
for (int i = unacceptedItems.size(); 64 > i; i++) {
bitStream.Write<uint16_t>(0);
}
SEND_PACKET
}