diff --git a/BigBaseV2/src/function_types.hpp b/BigBaseV2/src/function_types.hpp index c577ca92..f2af1469 100644 --- a/BigBaseV2/src/function_types.hpp +++ b/BigBaseV2/src/function_types.hpp @@ -9,6 +9,7 @@ namespace big::functions using get_native_handler_t = rage::scrNativeHandler(*)(rage::scrNativeRegistrationTable*, rage::scrNativeHash); using fix_vectors_t = void(*)(rage::scrNativeCallContext*); + using censor_chat = int(int64_t chat_menu, const char* user_text, const char** output_text); using error_screen = void(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background); using increment_stat_event = bool(uint64_t net_event_struct, int64_t sender, int64_t a3); using get_player_name = char*(Player player); diff --git a/BigBaseV2/src/gui/tab_bar/tab_online.cpp b/BigBaseV2/src/gui/tab_bar/tab_online.cpp index 58050786..417e838e 100644 --- a/BigBaseV2/src/gui/tab_bar/tab_online.cpp +++ b/BigBaseV2/src/gui/tab_bar/tab_online.cpp @@ -28,10 +28,11 @@ namespace big { if (ImGui::TreeNode("Self")) { - if (ImGui::Checkbox("Off-Radar", g_settings.options["off_radar"].get())) + if (ImGui::Checkbox("Disable Chat Censoring", g_settings.options["disable_chat_censoring"].get())) g_settings.save(); - ImGui::SameLine(); + if (ImGui::Checkbox("Off-Radar", g_settings.options["off_radar"].get())) + g_settings.save(); if (ImGui::Checkbox("Reveal Players", g_settings.options["reveal_players"].get())) g_settings.save(); diff --git a/BigBaseV2/src/hooking.cpp b/BigBaseV2/src/hooking.cpp index e1feb403..dc42faa0 100644 --- a/BigBaseV2/src/hooking.cpp +++ b/BigBaseV2/src/hooking.cpp @@ -39,9 +39,10 @@ namespace big m_run_script_threads_hook("Script hook", g_pointers->m_run_script_threads, &hooks::run_script_threads), m_convert_thread_to_fiber_hook("ConvertThreadToFiber", memory::module("kernel32.dll").get_export("ConvertThreadToFiber").as(), &hooks::convert_thread_to_fiber), + m_censor_chat("Censor Chat", g_pointers->m_censor_chat, &hooks::censor_chat), m_error_screen_hook("Disable Warning/Error Screen", g_pointers->m_error_screen, &hooks::error_screen), m_increment_stat_hook("Increment Stat Event", g_pointers->m_increment_stat_event, &hooks::increment_stat_event), - m_script_event_hook("Script Event Handler hook", g_pointers->m_script_event_handler, &hooks::script_event_handler) + m_script_event_hook("Script Event Handler", g_pointers->m_script_event_handler, &hooks::script_event_handler) { m_swapchain_hook.hook(hooks::swapchain_present_index, &hooks::swapchain_present); m_swapchain_hook.hook(hooks::swapchain_resizebuffers_index, &hooks::swapchain_resizebuffers); diff --git a/BigBaseV2/src/hooking.hpp b/BigBaseV2/src/hooking.hpp index b5528817..2968f5cb 100644 --- a/BigBaseV2/src/hooking.hpp +++ b/BigBaseV2/src/hooking.hpp @@ -22,6 +22,7 @@ namespace big static BOOL set_cursor_pos(int x, int y); // New Hook Definitions + static int censor_chat(int64_t chat_menu, const char* user_text, const char** output_text); static void error_screen(char* entryHeader, char* entryLine1, int instructionalKey, char* entryLine2, BOOL p4, Any p5, Any* p6, Any* p7, BOOL background); static bool increment_stat_event(uint64_t net_event_struct, int64_t sender, int64_t a3); static bool script_event_handler(std::int64_t NetEventStruct, std::int64_t CNetGamePlayer); @@ -55,6 +56,7 @@ namespace big detour_hook m_convert_thread_to_fiber_hook; // New Detour Hook Definitions + detour_hook m_censor_chat; detour_hook m_error_screen_hook; detour_hook m_increment_stat_hook; detour_hook m_script_event_hook; diff --git a/BigBaseV2/src/hooks/censor_chat.cpp b/BigBaseV2/src/hooks/censor_chat.cpp new file mode 100644 index 00000000..4b0c1cec --- /dev/null +++ b/BigBaseV2/src/hooks/censor_chat.cpp @@ -0,0 +1,11 @@ +#include "hooking.hpp" + +namespace big +{ + int hooks::censor_chat(int64_t chat_menu, const char* user_text, const char** output_text) + { + if (g_settings.options["disable_chat_censoring"].get()) return -1; + + return g_hooking->m_censor_chat.get_original()(chat_menu, user_text, output_text); + } +} \ No newline at end of file diff --git a/BigBaseV2/src/pointers.cpp b/BigBaseV2/src/pointers.cpp index a2c8835c..4a460fcf 100644 --- a/BigBaseV2/src/pointers.cpp +++ b/BigBaseV2/src/pointers.cpp @@ -112,6 +112,11 @@ namespace big { m_spectate_player = ptr.as(); }); + + main_batch.add("Censor Chat", "E8 ? ? ? ? 83 F8 FF 75 B9", [this](memory::handle ptr) + { + m_censor_chat = ptr.as(); + }); main_batch.run(memory::module(nullptr)); diff --git a/BigBaseV2/src/pointers.hpp b/BigBaseV2/src/pointers.hpp index 0db67812..7859b903 100644 --- a/BigBaseV2/src/pointers.hpp +++ b/BigBaseV2/src/pointers.hpp @@ -35,6 +35,7 @@ namespace big PVOID m_model_spawn_bypass; + functions::censor_chat* m_censor_chat{}; functions::error_screen* m_error_screen{}; functions::get_player_name* m_get_player_name{}; functions::increment_stat_event* m_increment_stat_event{}; diff --git a/BigBaseV2/src/settings.h b/BigBaseV2/src/settings.h index 35872a21..fec40e54 100644 --- a/BigBaseV2/src/settings.h +++ b/BigBaseV2/src/settings.h @@ -13,6 +13,7 @@ namespace big nlohmann::json options; nlohmann::json default_options = R"({ + "disable_chat_censoring": false, "god_mode": false, "join_message": false, "never_wanted": false,