From 538919d4ca42a34a41f84d6e46544f064bd03e46 Mon Sep 17 00:00:00 2001 From: Demae <56660883+Demae@users.noreply.github.com> Date: Sat, 12 Nov 2022 03:17:22 +1030 Subject: [PATCH] feat(netMsg): log chat and text messages (#567) --- src/core/globals.hpp | 11 +++++++ src/gta/net_game_event.hpp | 2 +- src/hooks/protections/receive_net_message.cpp | 29 +++++++++++++++++-- src/hooks/protections/received_event.cpp | 1 - src/pointers.cpp | 6 ---- src/views/network/view_session.cpp | 2 ++ 6 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/core/globals.hpp b/src/core/globals.hpp index a04b09a4..ad0fde0f 100644 --- a/src/core/globals.hpp +++ b/src/core/globals.hpp @@ -183,6 +183,8 @@ namespace big bool join_queued = false; rage::rlSessionInfo info; bool disable_chat_filter = false; + bool log_chat_messages = false; + bool log_text_messages = false; }; struct settings { @@ -575,6 +577,9 @@ namespace big this->self.unlimited_oxygen = j["self"]["unlimited_oxygen"]; this->self.no_water_collision = j["self"]["no_water_collision"]; + this->session.log_chat_messages = j["session"]["log_chat_messages"]; + this->session.log_text_messages = j["session"]["log_text_messages"]; + this->settings.dev_dlc = j["settings"]["dev_dlc"]; this->settings.hotkeys.menu_toggle = j["settings"]["hotkeys"]["menu_toggle"]; @@ -873,6 +878,12 @@ namespace big { "no_water_collision", this->self.no_water_collision }, } }, + { + "session", { + { "log_chat_messages", this->session.log_chat_messages }, + { "log_text_messages", this->session.log_text_messages }, + } + }, { "settings", { { "dev_dlc", this->settings.dev_dlc }, diff --git a/src/gta/net_game_event.hpp b/src/gta/net_game_event.hpp index f5f967f9..c2882baa 100644 --- a/src/gta/net_game_event.hpp +++ b/src/gta/net_game_event.hpp @@ -38,7 +38,7 @@ namespace rage return big::g_pointers->m_read_bitbuf_bool(this, integer, 1); } bool ReadPeerId(uint64_t* integer) { - return this->ReadQWord(integer, 0x32); + return this->ReadQWord(integer, 0x40); } uint64_t ReadBits(size_t numBits) { auto const totalBits = (m_flagBits & 1) ? m_maxBit : m_curBit; diff --git a/src/hooks/protections/receive_net_message.cpp b/src/hooks/protections/receive_net_message.cpp index 24ece2b3..99d7eee5 100644 --- a/src/hooks/protections/receive_net_message.cpp +++ b/src/hooks/protections/receive_net_message.cpp @@ -43,6 +43,32 @@ namespace big { switch (msgType) { + case rage::eNetMessage::CMsgTextMessage: + { + if (g->session.log_chat_messages) + { + char message[256]; + uint64_t unk; + bool is_team; + buffer.ReadString(message, 256); + buffer.ReadQWord(&unk, 64); + buffer.ReadBool(&is_team); + LOG(INFO) << "[CHAT] from " << player->get_name() << ": " << message << (is_team) ? " [TEAM]" : " [ALL]"; + } + break; + } + case rage::eNetMessage::CMsgTextMessage2: + { + if (g->session.log_text_messages) + { + char message[256]; + uint64_t unk; + buffer.ReadString(message, 256); + buffer.ReadQWord(&unk, 64); + LOG(INFO) << "[TEXT] from " << player->get_name() << ": " << message; + } + break; + } case rage::eNetMessage::CMsgScriptMigrateHost: { if (std::chrono::system_clock::now() - player->m_last_transition_msg_sent < 200ms) @@ -67,11 +93,10 @@ namespace big buffer.ReadQWord(&session_id, 64); uint32_t count; buffer.ReadDword(&count, 6); - pl = nullptr; for (std::uint32_t i = 0; i < count; i++) { uint64_t peer_id; - buffer.ReadQWord((uint64_t*)&peer_id, 64); + buffer.ReadQWord(&peer_id, 64); for (std::uint32_t i = 0; i < gta_util::get_network()->m_game_session_ptr->m_peer_count; i++) { if (gta_util::get_network()->m_game_session_ptr->m_peers[i]->m_peer_data.m_peer_id_2 == peer_id) diff --git a/src/hooks/protections/received_event.cpp b/src/hooks/protections/received_event.cpp index 1d991ff4..1425f770 100644 --- a/src/hooks/protections/received_event.cpp +++ b/src/hooks/protections/received_event.cpp @@ -54,7 +54,6 @@ namespace big if (hooks::increment_stat_event(increment_stat_event.get(), source_player)) { g_pointers->m_send_event_ack(event_manager, source_player, target_player, event_index, event_handled_bitset); - return; } buffer->Seek(0); diff --git a/src/pointers.cpp b/src/pointers.cpp index 0cba9a86..e260ba87 100644 --- a/src/pointers.cpp +++ b/src/pointers.cpp @@ -165,12 +165,6 @@ namespace big m_read_bitbuf_bool = ptr.add(1).rip().as(); }); - // Read Bitbuffer Array - main_batch.add("RBA", "48 89 5C 24 ? 57 48 83 EC 30 41 8B F8 4C", [this](memory::handle ptr) - { - m_read_bitbuf_array = ptr.as(); - }); - // Write Bitbuffer WORD/DWORD main_batch.add("WBD", "48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 20 8B EA BF 01", [this](memory::handle ptr) { diff --git a/src/views/network/view_session.cpp b/src/views/network/view_session.cpp index 9c425e27..070b06f4 100644 --- a/src/views/network/view_session.cpp +++ b/src/views/network/view_session.cpp @@ -28,5 +28,7 @@ namespace big components::sub_title("Chat"); ImGui::Checkbox("Disable Filter", &g->session.disable_chat_filter); + ImGui::Checkbox("Log Chat Messages", &g->session.log_chat_messages); + ImGui::Checkbox("Log Text Messages", &g->session.log_text_messages); } }