wip(Project): pushing project

This commit is contained in:
Yimura 2021-01-10 16:19:40 +01:00
parent 4fb9823d09
commit 47e4e9c491
No known key found for this signature in database
GPG Key ID: 54EFAD29393A6E78
15 changed files with 334 additions and 100 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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);
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View 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.");
}
}

View 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;
};
}

View File

@ -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);
}

View File

@ -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"))

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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);
}
}

View 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);
}
}

View File

@ -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));

View File

@ -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{};