diff --git a/README.md b/README.md index 68be46ed..36ca633f 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,3 @@ -# YimMenu +# Message to Rockstar Security Team: -![](https://img.shields.io/badge/dynamic/json?color=ffab00&label=Online%20Version&query=%24.game.online&url=https%3A%2F%2Fraw.githubusercontent.com%2FYimMenu%2FYimMenu%2Fmaster%2Fmetadata.json&style=flat-square&labelColor=000000) ![](https://img.shields.io/badge/dynamic/json?color=ffab00&label=Game%20Build&query=%24.game.build&url=https%3A%2F%2Fraw.githubusercontent.com%2FYimMenu%2FYimMenu%2Fmaster%2Fmetadata.json&style=flat-square&labelColor=000000) - -A mod menu base for Grand Theft Auto V. -Strictly for educational purposes. - -YimMenu is originally based of off [BigBaseV2](https://github.com/Pocakking/BigBaseV2) which was an amazing base at the time but nowadays is a bit dated. -So here I am with an up-to-date menu focusing on protecting the user from toxic modders. - -## Table of contents - - * [How to build](#how-to-build) - * [Make your own flavour of YimMenu](#make-your-own-flavour-of-yimmenu) - * [Staying Up To Date](#staying-up-to-date) - * [Project Structure](#project-structure) - * [Contributing](#contributing) - -## How to compile YimMenu - -Read the [SETUP](https://github.com/YimMenu/YimMenu/wiki/Setup-your-PC-for-YimMenu-Development) guide. - -## Make your own flavour of YimMenu - -Fork YimMenu and git clone that repository instead of https://github.com/YimMenu/YimMenu.git - -Click the below link to make your own fork of YimMenu: -https://github.com/YimMenu/YimMenu/fork - -## Staying Up To Date - -Pull the latest changes from this repository. - -With a command line it is as easy as: - -```bash -git pull -``` - -CMake should be handling removed / added files automatically without any user input. - -If this is not the case for some reason you'll have to redo the steps in the [Making changes to the source code section of the SETUP](https://github.com/YimMenu/YimMenu/wiki/Setup-your-PC-for-YimMenu-Development#making-changes-to-the-source-code). - -If you are doing custom modifications to the codebase and have a fork you are on your own for staying up to date with upstream (this repository), google stuff like "merge from upstream" and learn how to use Git. - -## Project Structure - -- `backend/` all features that should be ran in a loop are in here sorted by category -- `gui/` includes everything related to UI elements -- `hooks/` function hooks -- `native_hooks/` hooks to natives -- `services/` service files to interact and maintain stuff -- `util/` general utility functions to keep code as compact and as much in one place as possible - -## Contributing - -You're free to contribute to YimMenu as long as the features are useful, not overly toxic and do not contain anything money related that might get the menu targeted by Take2. - -Make sure to read the [CONTRIBUTING.md](CONTRIBUTING.md) file. +## You haven't seen the last of us \ No newline at end of file diff --git a/src/backend/commands/player/kick/battleye.cpp b/src/backend/commands/player/kick/battleye.cpp index 40ea4b4b..da64294f 100644 --- a/src/backend/commands/player/kick/battleye.cpp +++ b/src/backend/commands/player/kick/battleye.cpp @@ -72,7 +72,7 @@ namespace big for (int i = 0; i < 20; i++) { data[0] = i; - g_battleye_service.send_message(player->get_net_game_player()->get_host_token(), &data, sizeof(data)); + g_battleye_service.send_message_to_client(player->get_net_game_player()->get_host_token(), &data, sizeof(data)); } } }; diff --git a/src/backend/commands/player/kick/smart_kick.cpp b/src/backend/commands/player/kick/smart_kick.cpp index 12ed2f7d..7c2ecba4 100644 --- a/src/backend/commands/player/kick/smart_kick.cpp +++ b/src/backend/commands/player/kick/smart_kick.cpp @@ -20,7 +20,7 @@ namespace big else { if (player->is_host()) - player_command::get("oomkick"_J)->call(player, {}); + player_command::get("battleupdate"_J)->call(player, {}); else player_command::get("desync"_J)->call(player, {}); } diff --git a/src/hooks/protections/receive_net_message.cpp b/src/hooks/protections/receive_net_message.cpp index cb42cf61..931933bd 100644 --- a/src/hooks/protections/receive_net_message.cpp +++ b/src/hooks/protections/receive_net_message.cpp @@ -753,6 +753,10 @@ namespace big { g_battleye_service.receive_message(player->get_net_game_player()->get_host_token(), &data, size); } + else if (player) + { + g_battleye_service.send_message_to_server(player->get_net_game_player()->get_host_token(), &data, size); + } break; } diff --git a/src/pointers.cpp b/src/pointers.cpp index f6eec04c..4d8af035 100644 --- a/src/pointers.cpp +++ b/src/pointers.cpp @@ -1817,7 +1817,7 @@ namespace big // Session Request Patch { "SRP", - "48 8B BD 80 01 00 00 E9 FF 00 00 00", + "48 8B 9D 70 01 00 00 E9 FF 00 00 00", [](memory::handle ptr) { g_pointers->m_gta.m_session_request_patch = ptr.add(0x13).as(); diff --git a/src/services/battleye/battleye_service.cpp b/src/services/battleye/battleye_service.cpp index d6331b84..e8fa89b1 100644 --- a/src/services/battleye/battleye_service.cpp +++ b/src/services/battleye/battleye_service.cpp @@ -76,7 +76,7 @@ namespace big return m_battleye_api.m_shutdown != nullptr; } - void battleye_service::send_message(std::uint64_t token, void* message, int size) + void battleye_service::send_message_to_client(std::uint64_t token, void* message, int size) { packet pkt; @@ -97,6 +97,27 @@ namespace big } } + void battleye_service::send_message_to_server(std::uint64_t token, void* message, int size) + { + packet pkt; + + char header_buf[32]; + rage::datBitBuffer header(header_buf, sizeof(header_buf)); + + header.Write(size, 11); + header.Write(true, 1); // we are the client + + pkt.write_message(rage::eNetMessage::MsgBattlEyeCmd); + pkt.m_buffer.WriteArray(&header_buf, header.GetDataLength() * 8); + pkt.m_buffer.WriteArray(message, size * 8); + + // send to player + if (auto plyr = g_player_service->get_by_host_token(token); plyr && plyr->get_session_player()) + { + pkt.send(plyr->get_session_player()->m_msg_id, true); + } + } + void battleye_service::kick_player(std::uint64_t token, const char* reason) { if (auto plyr = g_player_service->get_by_host_token(token)) @@ -186,7 +207,7 @@ namespace big g_battleye_service.kick_player(player, reason); }; m_battleye_user_data.m_send_message = [](std::uint64_t player, const void* pkt_data, int size) { - g_battleye_service.send_message(player, const_cast(pkt_data), size); + g_battleye_service.send_message_to_client(player, const_cast(pkt_data), size); }; if (reinterpret_cast(GetProcAddress(handle, "Init"))(1, &m_battleye_user_data, &m_battleye_api)) { diff --git a/src/services/battleye/battleye_service.hpp b/src/services/battleye/battleye_service.hpp index 0fa17349..1a54758e 100644 --- a/src/services/battleye/battleye_service.hpp +++ b/src/services/battleye/battleye_service.hpp @@ -51,7 +51,8 @@ namespace big void add_player(std::uint64_t token, std::uint64_t rockstar_id, const char* name); void remove_player(std::uint64_t token); void receive_message(std::uint64_t token, void* message, int size); - void send_message(std::uint64_t token, void* message, int size); + void send_message_to_client(std::uint64_t token, void* message, int size); + void send_message_to_server(std::uint64_t token, void* message, int size); void kick_player(std::uint64_t token, const char* reason); void script_func(); void thread_func();