wip(Project): pushing project
This commit is contained in:
parent
4fb9823d09
commit
47e4e9c491
@ -12,8 +12,11 @@ namespace big
|
||||
update_player_structs();
|
||||
update_screen_sizes();
|
||||
|
||||
g_rid_joiner.look_for_session();
|
||||
|
||||
disable_phone();
|
||||
god_mode();
|
||||
join_message();
|
||||
never_wanted();
|
||||
no_bike_fall();
|
||||
no_idle_kick();
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "structs/temp.hpp"
|
||||
#include "features/functions.hpp"
|
||||
#include "features/notify.hpp"
|
||||
#include "features/rid_joiner.hpp"
|
||||
#include "features/stats.hpp"
|
||||
#include "features/teleport.hpp"
|
||||
|
||||
@ -31,7 +32,7 @@ namespace big
|
||||
|
||||
void disable_phone();
|
||||
void god_mode();
|
||||
void join_message(Player player);
|
||||
void join_message();
|
||||
void never_wanted();
|
||||
void no_bike_fall();
|
||||
void no_idle_kick();
|
||||
|
@ -1,22 +1,28 @@
|
||||
#include "features.hpp"
|
||||
#include "pointers.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void features::join_message(Player player)
|
||||
{
|
||||
if (player == g_playerId) return;
|
||||
|
||||
bool bJoinMessage = g_settings.options["join_message"].get<bool>();
|
||||
|
||||
if (bJoinMessage)
|
||||
{
|
||||
char joinMsg[64];
|
||||
strcpy(joinMsg, "<C>");
|
||||
strcat(joinMsg, g_pointers->m_get_player_name(player));
|
||||
strcat(joinMsg, "</C> is joining.");
|
||||
|
||||
features::notify::above_map(joinMsg);
|
||||
}
|
||||
}
|
||||
#include "features.hpp"
|
||||
#include "pointers.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void features::join_message()
|
||||
{
|
||||
bool bJoinMessage = g_settings.options["join_message"].get<bool>();
|
||||
|
||||
if (bJoinMessage)
|
||||
{
|
||||
for (uint8_t i = 0; i < 32; i++)
|
||||
{
|
||||
if (i == g_playerId) continue;
|
||||
|
||||
if (ENTITY::DOES_ENTITY_EXIST(PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(i)) && !NETWORK::NETWORK_IS_PLAYER_CONNECTED(i))
|
||||
{
|
||||
char joinMsg[64];
|
||||
strcpy(joinMsg, "<C>");
|
||||
strcat(joinMsg, g_pointers->m_get_player_name(i));
|
||||
strcat(joinMsg, "</C> is joining.");
|
||||
|
||||
features::notify::above_map(joinMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -3,17 +3,25 @@
|
||||
|
||||
namespace big
|
||||
{
|
||||
static bool bReset = true;
|
||||
void features::spectate_player()
|
||||
{
|
||||
if (g_selectedPlayerId == -1 || !g_selectedPlayer.is_online || !g_temp.spectate_player)
|
||||
{
|
||||
if (g_temp.spectate_player) g_temp.spectate_player = false;
|
||||
|
||||
g_pointers->m_spectate_player(false, -1);
|
||||
if (!bReset)
|
||||
{
|
||||
bReset = true;
|
||||
|
||||
g_pointers->m_spectate_player(false, -1);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
g_pointers->m_spectate_player(true, PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_selectedPlayerId));
|
||||
|
||||
bReset = false;
|
||||
}
|
||||
}
|
@ -1,55 +1,64 @@
|
||||
#include "features.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
static bool bLastSuperSprint = false;
|
||||
static bool bSkyDiving = false;
|
||||
|
||||
void features::super_sprint()
|
||||
{
|
||||
bool bSuperSprint = g_settings.options["super_sprint"].get<bool>();
|
||||
|
||||
if (bSuperSprint)
|
||||
{
|
||||
QUEUE_JOB_BEGIN_CLAUSE(= )
|
||||
{
|
||||
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId);
|
||||
Vector3 location = ENTITY::GET_ENTITY_COORDS(player, true);
|
||||
float ground;
|
||||
MISC::GET_GROUND_Z_FOR_3D_COORD(location.x, location.y, location.z, &ground, 0, 0);
|
||||
|
||||
bool flying = location.z - ground > 3;
|
||||
if (flying && !bSkyDiving)
|
||||
{
|
||||
TASK::TASK_SKY_DIVE(player, true);
|
||||
|
||||
bSkyDiving = true;
|
||||
}
|
||||
else if (!flying && bSkyDiving)
|
||||
bSkyDiving = false;
|
||||
|
||||
if (TASK::IS_PED_SPRINTING(player) || flying)
|
||||
{
|
||||
Vector3 offset = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, 0, 0.6, 0);
|
||||
ENTITY::APPLY_FORCE_TO_ENTITY(player, 1, 0.0f, 1.3, bSkyDiving ? 1.f : 0.f, 0.0f, 0.0f, 0.0f, 0, 1, 1, 1, 0, 1);
|
||||
|
||||
PLAYER::SET_PLAYER_SPRINT(g_playerId, 1);
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.49);
|
||||
}
|
||||
else
|
||||
{
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0);
|
||||
}
|
||||
}QUEUE_JOB_END_CLAUSE
|
||||
}
|
||||
else if (!bSuperSprint && bSuperSprint != bLastSuperSprint)
|
||||
{
|
||||
QUEUE_JOB_BEGIN_CLAUSE(= )
|
||||
{
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0);
|
||||
}QUEUE_JOB_END_CLAUSE
|
||||
}
|
||||
|
||||
bLastSuperSprint = bSuperSprint;
|
||||
}
|
||||
#include "features.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
static bool bLastSuperSprint = false;
|
||||
static bool bSkyDiving = false;
|
||||
|
||||
void features::super_sprint()
|
||||
{
|
||||
Ped player = PLAYER::GET_PLAYER_PED_SCRIPT_INDEX(g_playerId);
|
||||
|
||||
if (PED::IS_PED_IN_ANY_VEHICLE(player, true)) return;
|
||||
|
||||
bool bSuperSprint = g_settings.options["super_sprint"].get<bool>();
|
||||
|
||||
if (bSuperSprint)
|
||||
{
|
||||
Vector3 vel = ENTITY::GET_ENTITY_VELOCITY(player);
|
||||
|
||||
LOG(INFO) << vel.x << " " << vel.y << ", " << vel.z;
|
||||
|
||||
ENTITY::SET_ENTITY_VELOCITY(player, vel.x * 2, vel.y * 2, vel.z);
|
||||
}
|
||||
/*
|
||||
if (bSuperSprint)
|
||||
{
|
||||
float height = ENTITY::GET_ENTITY_HEIGHT_ABOVE_GROUND(player);
|
||||
|
||||
bool flying = height > 5;
|
||||
if (flying && !bSkyDiving)
|
||||
{
|
||||
TASK::TASK_SKY_DIVE(player, true);
|
||||
|
||||
bSkyDiving = true;
|
||||
}
|
||||
else if (!flying && bSkyDiving)
|
||||
{
|
||||
bSkyDiving = false;
|
||||
flying = false;
|
||||
|
||||
TASK::TASK_SKY_DIVE(player, false);
|
||||
}
|
||||
|
||||
if (TASK::IS_PED_SPRINTING(player) || flying)
|
||||
{
|
||||
Vector3 offset = ENTITY::GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(player, 0, 0.6, 0);
|
||||
ENTITY::APPLY_FORCE_TO_ENTITY(player, 1, 0.0f, 1.3, bSkyDiving ? 1.f : 0.f, 0.0f, 0.0f, 0.0f, 0, 1, 1, 1, 0, 1);
|
||||
|
||||
PLAYER::SET_PLAYER_SPRINT(g_playerId, 1);
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.49);
|
||||
}
|
||||
else
|
||||
{
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0);
|
||||
}
|
||||
}
|
||||
else if (!bSuperSprint && bSuperSprint != bLastSuperSprint)
|
||||
{
|
||||
PLAYER::SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(g_playerId, 1.0);
|
||||
}*/
|
||||
|
||||
bLastSuperSprint = bSuperSprint;
|
||||
}
|
||||
}
|
54
BigBaseV2/src/features/rid_joiner.cpp
Normal file
54
BigBaseV2/src/features/rid_joiner.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
#include "features/notify.hpp"
|
||||
#include "natives.hpp"
|
||||
#include "pointers.hpp"
|
||||
#include "rid_joiner.hpp"
|
||||
#include "script.hpp"
|
||||
#include "fiber_pool.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
void rid_joiner::look_for_session()
|
||||
{
|
||||
if (this->awaiting_request)
|
||||
{
|
||||
features::notify::above_map("WAITING FOR GAME COORDINATOR");
|
||||
|
||||
if (this->type == 2 && !this->gs_info.empty())
|
||||
{
|
||||
handle_info();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void rid_joiner::handle_info()
|
||||
{
|
||||
this->awaiting_request = false;
|
||||
|
||||
join_rstar_id_request request;
|
||||
memset(&request, 0, sizeof(request));
|
||||
request.identifier.rockstar_id = g_pointers->m_rs_info->rockstar_id;
|
||||
request.identifier.type = 3;
|
||||
|
||||
features::notify::above_map("ATTEMPTING TO JOIN");
|
||||
|
||||
g_pointers->m_get_session_info_from_gs(&request.session_info, this->gs_info.c_str(), 0, 0);
|
||||
g_pointers->m_join_player_via_session_info(&request.identifier, &request.session_info, 0xA000);
|
||||
}
|
||||
|
||||
void rid_joiner::join_player(uint64_t rid)
|
||||
{
|
||||
this->awaiting_request = true;
|
||||
this->gs_info.clear();
|
||||
this->type = 2;
|
||||
this->rid = rid;
|
||||
|
||||
rockstar_identifier* identifier = new rockstar_identifier();
|
||||
identifier->rockstar_id = rid;
|
||||
identifier->type = 3;
|
||||
NETWORK::NETWORK_CLEAR_GET_GAMER_STATUS();
|
||||
|
||||
g_pointers->m_send_session_info_request(identifier, 1);
|
||||
|
||||
features::notify::above_map("Sent join request to join R* Id.");
|
||||
}
|
||||
}
|
63
BigBaseV2/src/features/rid_joiner.hpp
Normal file
63
BigBaseV2/src/features/rid_joiner.hpp
Normal file
@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
#include "common.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
class rid_joiner
|
||||
{
|
||||
public:
|
||||
std::string gs_info;
|
||||
uint64_t rid;
|
||||
|
||||
void look_for_session();
|
||||
void handle_info();
|
||||
void join_player(uint64_t rid);
|
||||
private:
|
||||
bool awaiting_request = false;
|
||||
int type = 0;
|
||||
};
|
||||
|
||||
inline rid_joiner g_rid_joiner{};
|
||||
|
||||
struct rockstar_identifier {
|
||||
uint64_t rockstar_id;
|
||||
uint32_t type;
|
||||
uint32_t sub_type;
|
||||
};
|
||||
|
||||
struct gs_session {
|
||||
char _0x0000[0x8];
|
||||
uint64_t PeerToken;
|
||||
char _0x0010[0x38];
|
||||
uint64_t RockstarID;
|
||||
};
|
||||
|
||||
struct net_msg_identifier {
|
||||
uint64_t rockstar_id;
|
||||
uint8_t type;
|
||||
char _0x0009[0xB];
|
||||
};
|
||||
|
||||
struct rs_info {
|
||||
char scs_ticket[0x100];
|
||||
char _0x0100[0x190];
|
||||
uint64_t peer;
|
||||
char _0x0298[0xA7];
|
||||
char email[0x50];
|
||||
char _0x038f[0x20];
|
||||
char name[0x20];
|
||||
char _0x03cf[0x29];
|
||||
uint32_t rockstar_id;
|
||||
};
|
||||
|
||||
struct network_handle {
|
||||
int Handle;
|
||||
char _0x0[48];
|
||||
};
|
||||
|
||||
struct join_rstar_id_request {
|
||||
char _0x0000[0x8];
|
||||
gs_session session_info;
|
||||
net_msg_identifier identifier;
|
||||
};
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
#include "common.hpp"
|
||||
#include "gta/fwddec.hpp"
|
||||
#include "gta/natives.hpp"
|
||||
#include "features/rid_joiner.hpp"
|
||||
|
||||
namespace big::functions
|
||||
{
|
||||
@ -9,7 +10,6 @@ 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_event_data = bool(int32_t eventGroup, int32_t eventIndex, int64_t* args, uint32_t argCount);
|
||||
@ -20,4 +20,10 @@ namespace big::functions
|
||||
using spectate_player = bool(bool toggle, Ped player);
|
||||
using sync_local_time = void(int h, int m);
|
||||
using trigger_script_event = int(bool unk0, int64_t* args, int argCount, int bitFlags);
|
||||
|
||||
// R* Joiner
|
||||
using get_session_info_from_gs = bool(gs_session* session, const char* gs, int a3, int a4);
|
||||
using join_player_via_session_info = void(net_msg_identifier* identifier, gs_session* session_info, int flag);
|
||||
using read_session_response = bool(uint64_t rcx);
|
||||
using send_session_info_request = void(rockstar_identifier* target, int count);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "tab_bar.hpp"
|
||||
#include "features/rid_joiner.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -6,6 +7,14 @@ namespace big
|
||||
{
|
||||
if (ImGui::BeginTabItem("Misc"))
|
||||
{
|
||||
if (ImGui::Button("Join R* Id"))
|
||||
{
|
||||
QUEUE_JOB_BEGIN_CLAUSE()
|
||||
{
|
||||
g_rid_joiner.join_player(143069134);
|
||||
}QUEUE_JOB_END_CLAUSE
|
||||
}
|
||||
|
||||
ImGui::Text("Set Current Character Level:");
|
||||
ImGui::SliderInt("##input_levels_self", &g_temp.set_level, 0, 8000);
|
||||
if (ImGui::Button("Set Level"))
|
||||
|
@ -39,10 +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<void*>(), &hooks::convert_thread_to_fiber),
|
||||
|
||||
m_censor_chat("Censor Chat", g_pointers->m_censor_chat, &hooks::censor_chat),
|
||||
m_get_event_data("Get Event Data", g_pointers->m_get_event_data, &hooks::get_event_data),
|
||||
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_read_session_response("Read Session Response", g_pointers->m_read_session_response, &hooks::read_session_response),
|
||||
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);
|
||||
@ -69,10 +69,10 @@ namespace big
|
||||
m_convert_thread_to_fiber_hook.enable();
|
||||
|
||||
// New hooks enable
|
||||
m_censor_chat.enable();
|
||||
m_get_event_data.enable();
|
||||
m_error_screen_hook.enable();
|
||||
m_increment_stat_hook.enable();
|
||||
m_read_session_response.enable();
|
||||
m_script_event_hook.enable();
|
||||
|
||||
m_enabled = true;
|
||||
@ -90,10 +90,10 @@ namespace big
|
||||
m_swapchain_hook.disable();
|
||||
|
||||
// New hooks disable
|
||||
m_censor_chat.disable();
|
||||
m_get_event_data.disable();
|
||||
m_error_screen_hook.disable();
|
||||
m_increment_stat_hook.disable();
|
||||
m_read_session_response.disable();
|
||||
m_script_event_hook.disable();
|
||||
}
|
||||
|
||||
|
@ -22,10 +22,10 @@ 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 bool get_event_data(int32_t eventGroup, int32_t eventIndex, int64_t* args, uint32_t argCount);
|
||||
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 read_session_response(uint64_t rcx);
|
||||
static bool script_event_handler(std::int64_t NetEventStruct, std::int64_t CNetGamePlayer);
|
||||
};
|
||||
|
||||
@ -57,10 +57,10 @@ namespace big
|
||||
detour_hook m_convert_thread_to_fiber_hook;
|
||||
|
||||
// New Detour Hook Definitions
|
||||
detour_hook m_censor_chat;
|
||||
detour_hook m_get_event_data;
|
||||
detour_hook m_error_screen_hook;
|
||||
detour_hook m_increment_stat_hook;
|
||||
detour_hook m_read_session_response;
|
||||
detour_hook m_script_event_hook;
|
||||
};
|
||||
|
||||
|
@ -1,11 +0,0 @@
|
||||
#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<bool>()) return -1;
|
||||
|
||||
return g_hooking->m_censor_chat.get_original<decltype(&hooks::censor_chat)>()(chat_menu, user_text, output_text);
|
||||
}
|
||||
}
|
59
BigBaseV2/src/hooks/read_session_response.cpp
Normal file
59
BigBaseV2/src/hooks/read_session_response.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include "hooking.hpp"
|
||||
#include "features.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
bool hooks::read_session_response(uint64_t rcx)
|
||||
{
|
||||
bool bReturn = true;
|
||||
|
||||
if (rcx && *(uint32_t*)(rcx + 0x23C4)) {
|
||||
uint32_t i = 0;
|
||||
do {
|
||||
uint64_t address = rcx + 0x22C0 + (i * 8);
|
||||
if (*(uint64_t*)(address)) {
|
||||
const char* responseData = *(const char**)(address);
|
||||
if (responseData) {
|
||||
try {
|
||||
nlohmann::json Json = nlohmann::json::parse(responseData);
|
||||
if (Json.find("gsinfo") == Json.end()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t rockstar_id = std::stoul(Json["_id"].get<std::string>().substr(3));
|
||||
std::string gs_info_json = Json["gsinfo"].get<std::string>();
|
||||
|
||||
features::notify::above_map("HOOK GOT DRIP.");
|
||||
|
||||
LOG(INFO) << "Rockstar ID: " << rockstar_id;
|
||||
LOG(INFO) << "Data: ";
|
||||
LOG(INFO) << gs_info_json;
|
||||
LOG(INFO) << rockstar_id << " == " << g_rid_joiner.rid;
|
||||
|
||||
if (rockstar_id == g_rid_joiner.rid) {
|
||||
if (gs_info_json.empty())
|
||||
{
|
||||
// PendingTimeout = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_rid_joiner.gs_info = gs_info_json;
|
||||
}
|
||||
|
||||
bReturn = false;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
} while (i < *(uint32_t*)(rcx + 0x23C4));
|
||||
}
|
||||
|
||||
if (!bReturn) return false;
|
||||
return g_hooking->m_read_session_response.get_original<decltype(&hooks::read_session_response)>()(rcx);
|
||||
}
|
||||
}
|
@ -113,11 +113,6 @@ namespace big
|
||||
m_spectate_player = ptr.as<decltype(m_spectate_player)>();
|
||||
});
|
||||
|
||||
main_batch.add("Censor Chat", "E8 ? ? ? ? 83 F8 FF 75 B9", [this](memory::handle ptr)
|
||||
{
|
||||
m_censor_chat = ptr.as<decltype(m_censor_chat)>();
|
||||
});
|
||||
|
||||
main_batch.add("Get Net player", "48 83 EC 28 33 C0 38 05 ? ? ? ? 74 0A", [this](memory::handle ptr)
|
||||
{
|
||||
m_get_net_game_player = ptr.as<decltype(m_get_net_game_player)>();
|
||||
@ -127,6 +122,32 @@ namespace big
|
||||
{
|
||||
m_get_event_data = ptr.sub(28).as<decltype(m_get_event_data)>();
|
||||
});
|
||||
|
||||
// R* Id
|
||||
main_batch.add("Send Session Info Request", "48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 56 48 83 EC 30 48 83 3D ? ? ? ? ? 8B", [this](memory::handle ptr)
|
||||
{
|
||||
m_send_session_info_request = ptr.as<decltype(m_send_session_info_request)>();
|
||||
});
|
||||
|
||||
main_batch.add("Join Player Via Session Info", "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 81 EC ? ? ? ? 4C 8B F9 B1 01 49 8B F1 49 8B E8 44 8B F2 E8", [this](memory::handle ptr)
|
||||
{
|
||||
m_join_player_via_session_info = ptr.as<decltype(m_join_player_via_session_info)>();
|
||||
});
|
||||
|
||||
main_batch.add("Rockstar Info", "48 8D 05 ? ? ? ? 4D 69 C0 ? ? ? ? 4C 03 C0 41 83 B8 ? ? ? ? ? 0F 86 ? ? ? ? 83 CD FF 48 8D 15", [this](memory::handle ptr)
|
||||
{
|
||||
m_rs_info = ptr.as<decltype(m_rs_info)>();
|
||||
});
|
||||
|
||||
main_batch.add("Get Session Info From GS", "48 8B C4 48 89 58 08 48 89 68 10 56 57 41 56 48 81 EC ? ? ? ? 48 8B F2 33 D2 49 8B F8 4C 8B F1 44 8D 42", [this](memory::handle ptr)
|
||||
{
|
||||
m_get_session_info_from_gs = ptr.as<decltype(m_get_session_info_from_gs)>();
|
||||
});
|
||||
|
||||
main_batch.add("Read Session Response Hook", "48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 55 41 54 41 56 48 8D 68 D8 48 81 EC ? ? ? ? 45 33 F6 48 8B F9 45", [this](memory::handle ptr)
|
||||
{
|
||||
m_read_session_response = ptr.as<decltype(m_read_session_response)>();
|
||||
});
|
||||
|
||||
main_batch.run(memory::module(nullptr));
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "gta/fwddec.hpp"
|
||||
#include "gta/enums.hpp"
|
||||
#include "function_types.hpp"
|
||||
#include "features/rid_joiner.hpp"
|
||||
|
||||
namespace big
|
||||
{
|
||||
@ -35,7 +36,6 @@ namespace big
|
||||
|
||||
PVOID m_model_spawn_bypass;
|
||||
|
||||
functions::censor_chat* m_censor_chat{};
|
||||
functions::error_screen* m_error_screen{};
|
||||
functions::get_event_data* m_get_event_data{};
|
||||
functions::get_player_name* m_get_player_name{};
|
||||
@ -46,6 +46,12 @@ namespace big
|
||||
functions::spectate_player* m_spectate_player{};
|
||||
functions::sync_local_time* m_sync_local_time{};
|
||||
functions::trigger_script_event* m_trigger_script_event{};
|
||||
|
||||
rs_info *m_rs_info{};
|
||||
functions::get_session_info_from_gs* m_get_session_info_from_gs{};
|
||||
functions::join_player_via_session_info* m_join_player_via_session_info{};
|
||||
functions::read_session_response* m_read_session_response{};
|
||||
functions::send_session_info_request* m_send_session_info_request{};
|
||||
};
|
||||
|
||||
inline pointers *g_pointers{};
|
||||
|
Reference in New Issue
Block a user