diff --git a/src/backend/backend.cpp b/src/backend/backend.cpp index 3690f30d..019823cb 100644 --- a/src/backend/backend.cpp +++ b/src/backend/backend.cpp @@ -56,7 +56,6 @@ namespace big looped::weapons_cage_gun(); looped::weapons_delete_gun(); looped::weapons_gravity_gun(); - looped::weapons_increased_damage(); looped::weapons_repair_gun(); looped::weapons_steal_vehicle_gun(); looped::weapons_vehicle_gun(); diff --git a/src/backend/commands/self/ammo.cpp b/src/backend/commands/self/ammo.cpp new file mode 100644 index 00000000..063b58e4 --- /dev/null +++ b/src/backend/commands/self/ammo.cpp @@ -0,0 +1,22 @@ +#include "backend/command.hpp" +#include "natives.hpp" +#include "services/gta_data/gta_data_service.hpp" + +namespace big +{ + class fill_ammo : command + { + using command::command; + + virtual void execute(const std::vector&, const std::shared_ptr ctx) + { + for (const auto& [_, weapon] : g_gta_data_service->weapons()) + { + int ammo_in; + WEAPON::GET_MAX_AMMO(self::ped, weapon.m_hash, &ammo_in); + WEAPON::SET_PED_AMMO(self::ped, weapon.m_hash, ammo_in, 0); + } + } + }; + fill_ammo g_fill_ammo("fillammo", "Fill Ammo", "Fills all of your ammo.", 0); +} \ No newline at end of file diff --git a/src/backend/commands/self/beast_jump.cpp b/src/backend/commands/self/beast_jump.cpp new file mode 100644 index 00000000..51bcc9c9 --- /dev/null +++ b/src/backend/commands/self/beast_jump.cpp @@ -0,0 +1,7 @@ +#include "backend/bool_command.hpp" + +namespace big +{ + bool_command g_beastjump("beastjump", "Beast Jump", "Allows you to jump as if you were the beast like in the Hunt the Beast event", + g.self.beast_jump); +} diff --git a/src/backend/commands/self/clearwanted.cpp b/src/backend/commands/self/clearwanted.cpp new file mode 100644 index 00000000..ade3adaa --- /dev/null +++ b/src/backend/commands/self/clearwanted.cpp @@ -0,0 +1,21 @@ +#include "backend/command.hpp" +#include "natives.hpp" + +namespace big +{ + class clear_wanted : command + { + using command::command; + + virtual void execute(const std::vector&, const std::shared_ptr ctx) + { + if(g_local_player && g_local_player !=nullptr && !g.self.force_wanted_level) + { + g.self.wanted_level = 0; + g_local_player->m_player_info->m_is_wanted = false; + } + } + }; + + clear_wanted g_clear_wanted("clearwantedlvl", "Clear Wanted Level", "Clears your wanted level", 0); +} \ No newline at end of file diff --git a/src/backend/commands/self/super_jump.cpp b/src/backend/commands/self/super_jump.cpp new file mode 100644 index 00000000..0d38f387 --- /dev/null +++ b/src/backend/commands/self/super_jump.cpp @@ -0,0 +1,6 @@ +#include "backend/bool_command.hpp" + +namespace big +{ + bool_command g_super_jump("superjump", "Super Jump", "Jump really high", g.self.super_jump); +} \ No newline at end of file diff --git a/src/backend/looped/looped.hpp b/src/backend/looped/looped.hpp index c81376b1..1019be6c 100644 --- a/src/backend/looped/looped.hpp +++ b/src/backend/looped/looped.hpp @@ -55,7 +55,6 @@ namespace big static void custom_gun_disable_control_action(); static void weapons_delete_gun(); static void weapons_gravity_gun(); - static void weapons_increased_damage(); static void weapons_repair_gun(); static void weapons_steal_vehicle_gun(); static void weapons_vehicle_gun(); diff --git a/src/backend/looped/self/beast_jump.cpp b/src/backend/looped/self/beast_jump.cpp deleted file mode 100644 index 45e01df3..00000000 --- a/src/backend/looped/self/beast_jump.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "backend/looped_command.hpp" -#include "gta/enums.hpp" -#include "natives.hpp" - -namespace big -{ - - class beast_jump_looped : looped_command - { - using looped_command::looped_command; - - virtual void on_tick() override - { - if (PAD::IS_CONTROL_JUST_PRESSED(0, (int)ControllerInputs::INPUT_JUMP) && !PED::IS_PED_IN_ANY_VEHICLE(self::ped, NULL) && !ENTITY::IS_ENTITY_IN_AIR(self::ped)) - { - TASK::TASK_JUMP(self::ped, true, true, true); - } - } - }; - - beast_jump_looped g_beast_jump_looped("beastjump", "Beast Jump", "Allows you to jump as if you were the beast like in the Hunt the Beast event", - g.self.beast_jump); -} diff --git a/src/backend/looped/self/health.cpp b/src/backend/looped/self/health.cpp new file mode 100644 index 00000000..6f16e27b --- /dev/null +++ b/src/backend/looped/self/health.cpp @@ -0,0 +1,25 @@ +#include "natives.hpp" +#include "backend/looped_command.hpp" +#include "gta/enums.hpp" + +namespace big +{ + + class health_regen_looped : looped_command + { + using looped_command::looped_command; + + virtual void on_tick() override + { + PLAYER::SET_PLAYER_HEALTH_RECHARGE_MULTIPLIER(self::ped, g.self.healthregenrate); + PLAYER::SET_PLAYER_HEALTH_RECHARGE_MAX_PERCENT(self::ped, 99999.0f); + }; + virtual void on_disable() override + { + PLAYER::SET_PLAYER_HEALTH_RECHARGE_MULTIPLIER(self::ped, 1.0f); + PLAYER::SET_PLAYER_HEALTH_RECHARGE_MAX_PERCENT(self::ped, 1.0f); + } + }; + + health_regen_looped g_health_regen_looped("healthregen", "Override Health Regen", "Turn on the regen multiplier you have set.", g.self.healthregen); +} \ No newline at end of file diff --git a/src/backend/looped/self/hud.cpp b/src/backend/looped/self/hud.cpp index 32634699..92b2547a 100644 --- a/src/backend/looped/self/hud.cpp +++ b/src/backend/looped/self/hud.cpp @@ -9,11 +9,11 @@ namespace big void looped::self_hud() { - const bool bHideRadar = g.self.hide_radar; - const bool bHideAmmo = g.self.hide_ammo; - const bool bForceShowElement = g.self.force_show_hud_element; - const bool bForceShowHUD = g.self.force_show_hud; - auto& bHudComponents = g.self.hud_components_states; + const bool bHideRadar = g.self.hud.hide_radar; + const bool bHideAmmo = g.self.hud.hide_ammo; + const bool bForceShowElement = g.self.hud.force_show_hud_element; + const bool bForceShowHUD = g.self.hud.force_show_hud; + auto& bHudComponents = g.self.hud.hud_components_states; if (bHideRadar) { diff --git a/src/backend/looped/self/hudcolor.cpp b/src/backend/looped/self/hudcolor.cpp new file mode 100644 index 00000000..06c26b1d --- /dev/null +++ b/src/backend/looped/self/hudcolor.cpp @@ -0,0 +1,33 @@ +#include "natives.hpp" +#include "backend/looped_command.hpp" + +namespace big +{ + + class hudcolor_looped : looped_command + { + using looped_command::looped_command; + + virtual void on_tick() override + { + if (g.self.hud.shcolor) + { + HUD::REPLACE_HUD_COLOUR_WITH_RGBA(g.self.hud.index, g.self.hud.r, g.self.hud.g, g.self.hud.b, g.self.hud.a); + } + if (g.self.hud.mhcolor) + { + HUD::SET_CUSTOM_MP_HUD_COLOR(g.self.hud.hcolor); + } + if (g.self.hud.mtcolor) + { + HUD::OVERRIDE_MP_TEXT_CHAT_COLOR(0, g.self.hud.tcolor); + } + } + }; + + hudcolor_looped g_hudcolor_looped("hudcolor", "Hudcolor Overide", "Replaces features of your hud with custom colors you set", + g.self.hud.hudcolor); + bool_command g_shcolor("singlehudcol", "Hud Color", "enables the singlehudcol", g.self.hud.shcolor); + bool_command g_mhcolor("mphudcol", "MP Hud Color", "enables the mphudcol", g.self.hud.mhcolor); + bool_command g_mtcolor("mptextcol", "MP Text Color", "enables the mptextcol", g.self.hud.mtcolor); +} diff --git a/src/backend/looped/self/invisibility.cpp b/src/backend/looped/self/invisibility.cpp index 1273cec1..5c6d526d 100644 --- a/src/backend/looped/self/invisibility.cpp +++ b/src/backend/looped/self/invisibility.cpp @@ -39,4 +39,4 @@ namespace big invisibility g_invisibility("invis", "Invisiblity", "Makes you invisible", g.self.invisibility); bool_command g_local_visibility("localvis", "Visible Locally", "Makes you visible to yourself, but other players would still not be able to see you", g.self.local_visibility); -} +} \ No newline at end of file diff --git a/src/backend/looped/self/super_jump.cpp b/src/backend/looped/self/super_jump.cpp deleted file mode 100644 index 82cac96f..00000000 --- a/src/backend/looped/self/super_jump.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "backend/looped_command.hpp" -#include "gta/enums.hpp" -#include "natives.hpp" - -namespace big -{ - - class super_jump_looped : looped_command - { - using looped_command::looped_command; - - virtual void on_tick() override - { - if (PAD::IS_CONTROL_JUST_PRESSED(0, (int)ControllerInputs::INPUT_JUMP) && !PED::IS_PED_IN_ANY_VEHICLE(self::ped, NULL) && !ENTITY::IS_ENTITY_IN_AIR(self::ped)) - { - ENTITY::APPLY_FORCE_TO_ENTITY_CENTER_OF_MASS(self::ped, 0, 0, 10000, 5000, true, true, true, false); - } - if (PED::IS_PED_FALLING(self::ped)) - { - TASK::CLEAR_PED_TASKS(self::ped); - } - if (WEAPON::HAS_PED_GOT_WEAPON(self::ped, RAGE_JOAAT("p_parachute_s"), false)) - { - WEAPON::SET_CURRENT_PED_WEAPON(self::ped, RAGE_JOAAT("WEAPON_UNARMED"), true); - } - } - }; - - super_jump_looped g_super_jump_looped("superjump", "Super Jump", "Allows you to jump really high", g.self.super_jump); -} \ No newline at end of file diff --git a/src/backend/looped/weapons/increase_damage.cpp b/src/backend/looped/weapons/increase_damage.cpp index aca08264..d8b60a5e 100644 --- a/src/backend/looped/weapons/increase_damage.cpp +++ b/src/backend/looped/weapons/increase_damage.cpp @@ -1,15 +1,48 @@ -#include "backend/looped/looped.hpp" #include "natives.hpp" +#include "backend/looped_command.hpp" namespace big { - void looped::weapons_increased_damage() + + class increased_damage : looped_command { - if (g.weapons.increased_damage != 1) + using looped_command::looped_command; + + CWeaponInfo* p_modified_weapon = nullptr; + float og_damage = 0.0f; + + virtual void on_tick() override { - Hash weapon{}; - WEAPON::GET_CURRENT_PED_WEAPON(self::ped, &weapon, 0); - WEAPON::SET_WEAPON_DAMAGE_MODIFIER(weapon, g.weapons.increased_damage); + if (!g_local_player) + { + return; + } + + if (g_local_player->m_weapon_manager) + { + if (p_modified_weapon != g_local_player->m_weapon_manager->m_weapon_info + && g_local_player->m_weapon_manager->m_weapon_info) + { + if (p_modified_weapon) + p_modified_weapon->m_damage = og_damage; + + og_damage = g_local_player->m_weapon_manager->m_weapon_info->m_damage; + p_modified_weapon = g_local_player->m_weapon_manager->m_weapon_info; + g_local_player->m_weapon_manager->m_weapon_info->m_damage = g.weapons.increased_damage; + } + } } - } + + virtual void on_disable() override + { + if (g_local_player && p_modified_weapon) + { + p_modified_weapon->m_damage = og_damage; + p_modified_weapon = nullptr; + } + } + }; + + increased_damage + g_increased_damage("incrdamage", "Damage Override", "Sets your damage to whatever you want", g.weapons.increase_damage); } \ No newline at end of file diff --git a/src/backend/looped/weapons/infinite_ammo.cpp b/src/backend/looped/weapons/infinite_ammo.cpp index 09471f54..e08304aa 100644 --- a/src/backend/looped/weapons/infinite_ammo.cpp +++ b/src/backend/looped/weapons/infinite_ammo.cpp @@ -7,9 +7,6 @@ namespace big { using looped_command::looped_command; - CWeaponInfo* p_modified_weapon = nullptr; - float og_recoil_value = 0.0f; - virtual void on_tick() override { WEAPON::SET_PED_INFINITE_AMMO(self::ped, TRUE, NULL); @@ -22,4 +19,4 @@ namespace big }; infinite_ammo g_infinite_ammo("infammo", "Infinite Ammo", "Never run out of ammo again", g.weapons.infinite_ammo); -} +} \ No newline at end of file diff --git a/src/backend/looped/weapons/infinite_range.cpp b/src/backend/looped/weapons/infinite_range.cpp new file mode 100644 index 00000000..f190d5d9 --- /dev/null +++ b/src/backend/looped/weapons/infinite_range.cpp @@ -0,0 +1,47 @@ +#include "natives.hpp" +#include "backend/looped_command.hpp" + +namespace big +{ + + class infinite_range : looped_command + { + using looped_command::looped_command; + + CWeaponInfo* p_modified_weapon = nullptr; + float og_range = 0.0f; + + virtual void on_tick() override + { + if (!g_local_player) + { + return; + } + + if (g_local_player->m_weapon_manager) + { + if (p_modified_weapon != g_local_player->m_weapon_manager->m_weapon_info + && g_local_player->m_weapon_manager->m_weapon_info) + { + if (p_modified_weapon) + p_modified_weapon->m_weapon_range = og_range; + + og_range = g_local_player->m_weapon_manager->m_weapon_info->m_weapon_range; + p_modified_weapon = g_local_player->m_weapon_manager->m_weapon_info; + g_local_player->m_weapon_manager->m_weapon_info->m_weapon_range = 1000.0f; + } + } + } + + virtual void on_disable() override + { + if (g_local_player && p_modified_weapon) + { + p_modified_weapon->m_weapon_range = og_range; + p_modified_weapon = nullptr; + } + } + }; + + infinite_range g_infinite_range("infrange", "Infinite Range", "Kill anything at any distance.", g.weapons.infinite_range); +} \ No newline at end of file diff --git a/src/core/globals.hpp b/src/core/globals.hpp index 77b42859..9ca12721 100644 --- a/src/core/globals.hpp +++ b/src/core/globals.hpp @@ -252,48 +252,61 @@ namespace big NLOHMANN_DEFINE_TYPE_INTRUSIVE(ptfx_effects, show, size) } ptfx_effects{}; - bool clean_player = false; - bool force_wanted_level = false; - bool free_cam = false; - bool invisibility = false; - bool local_visibility = true; - bool never_wanted = false; - bool no_ragdoll = false; - bool noclip = false; - bool off_radar = false; - bool super_run = false; - bool no_collision = false; - bool unlimited_oxygen = false; - bool no_water_collision = false; - int wanted_level = 0; - bool god_mode = false; - bool part_water = false; - bool proof_bullet = false; - bool proof_fire = false; - bool proof_collision = false; - bool proof_melee = false; - bool proof_explosion = false; - bool proof_steam = false; - bool proof_drown = false; - bool proof_water = false; - uint32_t proof_mask = 0; - bool hide_radar = false; - bool hide_ammo = false; - int selected_hud_component = 1; - std::array hud_components_states = {false}; - bool force_show_hud_element = false; - bool force_show_hud = false; - bool mobile_radio = false; - bool fast_respawn = false; - bool auto_tp = false; - bool super_jump = false; - bool beast_jump = false; - bool superman = false; + bool clean_player = false; + bool force_wanted_level = false; + bool free_cam = false; + bool invisibility = false; + bool local_visibility = true; + bool never_wanted = false; + bool no_ragdoll = false; + bool noclip = false; + bool off_radar = false; + bool super_run = false; + bool no_collision = false; + bool unlimited_oxygen = false; + bool no_water_collision = false; + int wanted_level = 0; + bool god_mode = false; + bool part_water = false; + bool proof_bullet = false; + bool proof_fire = false; + bool proof_collision = false; + bool proof_melee = false; + bool proof_explosion = false; + bool proof_steam = false; + bool proof_drown = false; + bool proof_water = false; + uint32_t proof_mask = 0; + bool mobile_radio = false; + bool fast_respawn = false; + bool auto_tp = false; + bool super_jump = false; + bool beast_jump = false; + bool healthregen = false; + float healthregenrate = 1.0f; + bool superman = false; + struct hud + { + bool hudcolor = false; + bool shcolor = false; + bool mtcolor = false; + bool mhcolor = false; + int hcolor = 0; + int tcolor = 0; + int index, r, g, b, a; + bool hide_radar = false; + bool hide_ammo = false; + int selected_hud_component = 1; + std::array hud_components_states = {false}; + bool force_show_hud_element = false; + bool force_show_hud = false; + NLOHMANN_DEFINE_TYPE_INTRUSIVE(hud, hudcolor, shcolor, mtcolor, mhcolor, hcolor, tcolor, index, r, g, b, a, hide_radar, hide_ammo, selected_hud_component, hud_components_states, force_show_hud_element, force_show_hud) + } hud{}; // do not save below entries bool dance_mode = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(self, ptfx_effects, clean_player, force_wanted_level, free_cam, invisibility, local_visibility, never_wanted, no_ragdoll, noclip, off_radar, super_run, no_collision, unlimited_oxygen, no_water_collision, wanted_level, god_mode, part_water, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_drown, proof_water, proof_mask, hide_radar, hide_ammo, selected_hud_component, hud_components_states, force_show_hud_element, force_show_hud, mobile_radio, fast_respawn, auto_tp, super_jump, beast_jump, superman) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(self, ptfx_effects, clean_player, force_wanted_level, free_cam, invisibility, local_visibility, never_wanted, no_ragdoll, noclip, off_radar, super_run, no_collision, unlimited_oxygen, no_water_collision, wanted_level, god_mode, part_water, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_drown, proof_water, proof_mask, mobile_radio, fast_respawn, auto_tp, super_jump, beast_jump, healthregen, healthregenrate, hud, superman) } self{}; struct session @@ -380,10 +393,11 @@ namespace big int beastjump = 0; int invisveh = 0; int localinvisveh = 0; + int fill_ammo = 0; int fast_quit = 0; - int cmd_excecutor = 0x55; // U - - NLOHMANN_DEFINE_TYPE_INTRUSIVE(hotkeys, editing_menu_toggle, menu_toggle, teleport_waypoint, teleport_objective, noclip, bringvehicle, invis, heal, fill_inventory, skip_cutscene, freecam, superrun, superjump, beastjump, invisveh, localinvisveh, fast_quit, cmd_excecutor) + int cmd_excecutor = 0x55; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(hotkeys, editing_menu_toggle, menu_toggle, teleport_waypoint, teleport_objective, noclip, bringvehicle, invis, heal, fill_inventory, skip_cutscene, freecam, superrun, superjump, beastjump, invisveh, localinvisveh, fill_ammo, fast_quit, cmd_excecutor) } hotkeys{}; bool dev_dlc = false; @@ -458,7 +472,7 @@ namespace big int alpha = 150; rage::fvector3 pos; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(blackhole, enable, include_peds, include_vehicles, color, alpha) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(blackhole, include_peds, include_vehicles, color, alpha) } blackhole{}; struct nearby @@ -650,6 +664,7 @@ namespace big bool infinite_ammo = false; bool infinite_mag = false; float increased_damage = 1; + bool increase_damage = false; bool no_recoil = false; bool no_spread = false; std::string vehicle_gun_model = "bus"; @@ -658,8 +673,9 @@ namespace big bool rapid_fire = false; bool interior_weapon = false; bool triggerbot = false; + bool infinite_range = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(weapons, ammo_special, custom_weapon, aimbot, force_crosshairs, infinite_ammo, infinite_mag, increased_damage, no_recoil, no_spread, vehicle_gun_model, increased_c4_limit, increased_flare_limit, rapid_fire, gravity_gun, interior_weapon, triggerbot) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(weapons, ammo_special, custom_weapon, aimbot, force_crosshairs, infinite_ammo, infinite_mag, increased_damage, increase_damage, no_recoil, no_spread, vehicle_gun_model, increased_c4_limit, increased_flare_limit, rapid_fire, gravity_gun, interior_weapon, triggerbot, infinite_range) } weapons{}; struct window @@ -816,4 +832,4 @@ namespace big }; inline auto g = menu_settings(); -} +} \ No newline at end of file diff --git a/src/function_types.hpp b/src/function_types.hpp index 6b82a6a5..67c27780 100644 --- a/src/function_types.hpp +++ b/src/function_types.hpp @@ -92,9 +92,9 @@ namespace big::functions using fipackfile_unmount = bool (*)(const char* mount_point); using start_get_session_by_gamer_handle = bool (*)(int profile_index, rage::rlGamerHandle* handles, int count, rage::rlSessionByGamerTaskResult* result, int unk, bool* success, rage::rlTaskStatus* state); - using start_matchmaking_find_sessions = bool (*)(int profile_index, int available_slots, NetworkGameFilterMatchmakingComponent* m_filter, unsigned int max_sessions, rage::rlSessionInfo* result_sessions, int* result_session_count, rage::rlTaskStatus* state); - using start_get_presence_attributes = bool (*)(int profile_index, rage::rlScHandle* handle, rage::rlQueryPresenceAttributesContext* contexts, int count, rage::rlTaskStatus* state); - using join_session_by_info = bool (*)(Network* network, rage::rlSessionInfo* info, int unk, int flags, rage::rlGamerHandle* handles, int handlecount); + using start_matchmaking_find_sessions = bool (*)(int profile_index, int available_slots, NetworkGameFilterMatchmakingComponent* m_filter, unsigned int max_sessions, rage::rlSessionInfo* result_sessions, int* result_session_count, rage::rlTaskStatus* state); + using start_get_presence_attributes = bool (*)(int profile_index, rage::rlScHandle* handle, rage::rlQueryPresenceAttributesContext* contexts, int count, rage::rlTaskStatus* state); + using join_session_by_info = bool (*)(Network* network, rage::rlSessionInfo* info, int unk, int flags, rage::rlGamerHandle* handles, int handlecount); using generate_uuid = bool (*)(std::uint64_t* uuid); @@ -109,10 +109,10 @@ namespace big::functions using send_chat_message = bool (*)(int64_t* send_chat_ptr, rage::rlGamerInfo* gamer_info, char* message, bool is_team); using send_network_damage = void (*)(CEntity* source, CEntity* target, rage::fvector3* position, int hit_component, bool override_default_damage, int weapon_type, float override_damage, int tire_index, int suspension_index, int flags, std::uint32_t action_result_hash, std::int16_t action_result_id, int action_unk, bool hit_weapon, bool hit_weapon_ammo_attachment, bool silenced, bool unk, rage::fvector3* impact_direction); - using request_ragdoll = void (*)(uint16_t object_id); - using request_control = void (*)(rage::netObject* net_object); + using request_ragdoll = void (*)(uint16_t object_id); + using request_control = void (*)(rage::netObject* net_object); - using get_connection_peer = rage::netConnectionPeer* (*)(rage::netConnectionManager* manager, int peer_id); + using get_connection_peer = rage::netConnectionPeer* (*)(rage::netConnectionManager* manager, int peer_id); using send_remove_gamer_cmd = void (*)(rage::netConnectionManager* net_connection_mgr, rage::netConnectionPeer* player, int connection_id, rage::snMsgRemoveGamersFromSessionCmd* cmd, int flags); using handle_remove_gamer_cmd = void* (*)(rage::snSession* session, rage::snPlayer* origin, rage::snMsgRemoveGamersFromSessionCmd* cmd); @@ -127,8 +127,8 @@ namespace big::functions using save_json_data = char* (*)(datafile_commands::SveFileObject* object, int* out_length, const char* reason); using sync_network_time = bool (*)(rage::netConnectionManager* mgr, rage::netConnectionPeer* peer, int connection_id, rage::netTimeSyncMsg* msg, int flags); - using send_packet = bool (*)(rage::netConnectionManager* mgr, rage::netConnectionPeer* peer, int connection_id, void* data, int size, int flags); - using connect_to_peer = bool (*)(rage::netConnectionManager* mgr, rage::rlGamerInfoBase* gamer_info, rage::snConnectToPeerTaskData* data, rage::snConnectToPeerTaskResult* result, rage::rlTaskStatus* status); + using send_packet = bool (*)(rage::netConnectionManager* mgr, rage::netConnectionPeer* peer, int connection_id, void* data, int size, int flags); + using connect_to_peer = bool (*)(rage::netConnectionManager* mgr, rage::rlGamerInfoBase* gamer_info, rage::snConnectToPeerTaskData* data, rage::snConnectToPeerTaskResult* result, rage::rlTaskStatus* status); using clear_ped_tasks_network = void (*)(CPed* ped, bool immediately); diff --git a/src/gui.cpp b/src/gui.cpp index 4e60f149..adbfbff5 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -22,13 +22,13 @@ namespace big [this] { dx_on_tick(); }, - -5); + -5); g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { wndproc(hwnd, msg, wparam, lparam); }); - g_renderer->add_dx_callback(esp::draw, 2);// TODO: move to ESP service + g_renderer->add_dx_callback(esp::draw, 2); // TODO: move to ESP service g_renderer->add_dx_callback(view::context_menu, 1); dx_init(); diff --git a/src/hooking.cpp b/src/hooking.cpp index 99318f9d..a2d11182 100644 --- a/src/hooking.cpp +++ b/src/hooking.cpp @@ -114,6 +114,8 @@ namespace big detour_hook_helper::add("GMI", g_pointers->m_get_model_info); + detour_hook_helper::add("TJC", g_pointers->m_taskjump_constructor); + detour_hook_helper::add("EAD", g_pointers->m_enumerate_audio_devices); detour_hook_helper::add("DSCC", g_pointers->m_direct_sound_capture_create); diff --git a/src/hooking.hpp b/src/hooking.hpp index 3997cae0..6eee9517 100644 --- a/src/hooking.hpp +++ b/src/hooking.hpp @@ -155,6 +155,8 @@ namespace big static void write_player_creation_data_node(rage::netObject* player, CPlayerCreationDataNode* node); static void write_player_appearance_data_node(rage::netObject* player, CPlayerAppearanceDataNode* node); + static void task_jump_constructor(std::uint64_t a1, int a2); + static CBaseModelInfo* get_model_info(rage::joaat_t hash, uint32_t* a2); static int enumerate_audio_devices(CFoundDevice* found_devices, int count, int flags); diff --git a/src/hooks/misc/task_jump_constructor.cpp b/src/hooks/misc/task_jump_constructor.cpp new file mode 100644 index 00000000..7134c28e --- /dev/null +++ b/src/hooks/misc/task_jump_constructor.cpp @@ -0,0 +1,13 @@ +#include "hooking.hpp" + +namespace big +{ + void hooks::task_jump_constructor(std::uint64_t a1, int a2) + { + if (g.self.super_jump) + a2 |= 1 << 15; + if (g.self.beast_jump) + a2 |= (1 << 15) | (1 << 17); + return g_hooking->get_original()(a1, a2); + } +} diff --git a/src/main.cpp b/src/main.cpp index 75dfc2e4..b4031905 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,7 +34,6 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) if (reason == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hmod); - g_hmodule = hmod; g_main_thread = CreateThread( nullptr, @@ -149,9 +148,9 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) matchmaking_service_instance.reset(); LOG(INFO) << "Matchmaking Service reset."; player_database_service_instance.reset(); - LOG(INFO) << "API Service reset."; - api_service_instance.reset(); LOG(INFO) << "Player Database Service reset."; + api_service_instance.reset(); + LOG(INFO) << "API Service reset."; script_patcher_service_instance.reset(); LOG(INFO) << "Script Patcher Service reset."; gui_service_instance.reset(); diff --git a/src/pointers.cpp b/src/pointers.cpp index 45a8342a..cd5742ef 100644 --- a/src/pointers.cpp +++ b/src/pointers.cpp @@ -271,9 +271,9 @@ namespace big // Received clone sync & Get sync tree for type & Get net object for player & Get sync type info & Get net object main_batch.add("RCS/GSTFT/GNOFP/GNO/GSTI", "4C 8B FA 41 0F B7 D1", [this](memory::handle ptr) { m_received_clone_sync = ptr.sub(0x1D).as(); - m_get_sync_tree_for_type = ptr.add(0x14).rip().as();// 0F B7 CA 83 F9 07 .as() - m_get_net_object = ptr.add(0x76).rip().as();// E8 ? ? ? ? 0F B7 53 7C .add(1).rip().as() - m_get_sync_type_info = ptr.add(0x8C).rip().as();// 44 0F B7 C1 4C 8D 0D .as() + m_get_sync_tree_for_type = ptr.add(0x14).rip().as(); // 0F B7 CA 83 F9 07 .as() + m_get_net_object = ptr.add(0x76).rip().as(); // E8 ? ? ? ? 0F B7 53 7C .add(1).rip().as() + m_get_sync_type_info = ptr.add(0x8C).rip().as(); // 44 0F B7 C1 4C 8D 0D .as() }); // Read Bitbuffer Into Sync Tree @@ -471,7 +471,7 @@ namespace big // Is Matchmaking Session Valid main_batch.add("IMSV", "48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 41 54 41 55 41 56 41 57 48 83 EC 20 45 0F", [this](memory::handle ptr) { - memory::byte_patch::make(ptr.as(), std::to_array({0xB0, 0x01, 0xC3}))->apply();// has no observable side effects + memory::byte_patch::make(ptr.as(), std::to_array({0xB0, 0x01, 0xC3}))->apply(); // has no observable side effects }); // Send Network Damage @@ -624,8 +624,8 @@ namespace big // Sound Overload Detour main_batch.add("SOD", "66 45 3B C1 74 38", [this](memory::handle ptr) { - g_sound_overload_ret_addr = ptr.add(13 + 15).as(); - std::vector bytes = {0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90};// far jump opcode + a nop opcode + g_sound_overload_ret_addr = ptr.add(13 + 15).as(); + std::vector bytes = {0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90}; // far jump opcode + a nop opcode *(void**)(bytes.data() + 6) = sound_overload_detour; memory::byte_patch::make(ptr.add(13).as(), bytes)->apply(); }); @@ -733,7 +733,7 @@ namespace big // Allow Weapons In Vehicle main_batch.add("AWIV", "49 3B C9 7C F0 ? ? C3", [this](memory::handle ptr) { - m_allow_weapons_in_vehicle = memory::byte_patch::make(ptr.add(5).as(), 0x01B0).get();//In order for the second xref loop not to stop + m_allow_weapons_in_vehicle = memory::byte_patch::make(ptr.add(5).as(), 0x01B0).get(); //In order for the second xref loop not to stop }); // Write Vehicle Proximity Migration Data Node @@ -746,6 +746,11 @@ namespace big m_migrate_object = ptr.as(); }); + //Task Jump Constructor + main_batch.add("TJC", "48 89 5C 24 ? 89 54 24 10 57 48 83 EC 30 0F 29 74 24", [this](memory::handle ptr) { + m_taskjump_constructor = ptr.as(); + }); + auto mem_region = memory::module("GTA5.exe"); if (!main_batch.run(mem_region)) { diff --git a/src/pointers.hpp b/src/pointers.hpp index 949dd06d..3ab075c3 100644 --- a/src/pointers.hpp +++ b/src/pointers.hpp @@ -161,8 +161,8 @@ namespace big functions::generate_uuid m_generate_uuid{}; std::uint64_t* m_host_token{}; - rage::rlGamerInfo* m_profile_gamer_info{}; // per profile gamer info - rage::rlGamerInfo* m_player_info_gamer_info{};// the gamer info that is applied to CPlayerInfo + rage::rlGamerInfo* m_profile_gamer_info{}; // per profile gamer info + rage::rlGamerInfo* m_player_info_gamer_info{}; // the gamer info that is applied to CPlayerInfo CCommunications** m_communications{}; PVOID m_update_presence_attribute_int; @@ -256,6 +256,8 @@ namespace big memory::byte_patch* m_disable_collision{}; memory::byte_patch* m_allow_weapons_in_vehicle{}; + PVOID m_taskjump_constructor{}; + PVOID m_write_vehicle_proximity_migration_data_node{}; functions::migrate_object m_migrate_object{}; }; diff --git a/src/script_function.cpp b/src/script_function.cpp index 4d222984..6bac37ad 100644 --- a/src/script_function.cpp +++ b/src/script_function.cpp @@ -116,7 +116,7 @@ namespace big call(thread, gta_util::find_script_program(m_script), args); delete[] stack; - delete[](uint8_t*) thread;// without the cast it ends up calling the destructor which leads to some pretty funny crashes + delete[] (uint8_t*)thread; // without the cast it ends up calling the destructor which leads to some pretty funny crashes } void script_function::operator()(std::initializer_list args) diff --git a/src/services/hotkey/hotkey_service.cpp b/src/services/hotkey/hotkey_service.cpp index 735a2b7d..ca27f083 100644 --- a/src/services/hotkey/hotkey_service.cpp +++ b/src/services/hotkey/hotkey_service.cpp @@ -1,5 +1,4 @@ #include "hotkey_service.hpp" - #include "fiber_pool.hpp" #include "gui.hpp" #include "network/ChatData.hpp" @@ -24,9 +23,9 @@ namespace big register_hotkey("invisveh", g.settings.hotkeys.invisveh, RAGE_JOAAT("invisveh")); register_hotkey("localinvisveh", g.settings.hotkeys.localinvisveh, RAGE_JOAAT("localinvisveh")); register_hotkey("fastquit", g.settings.hotkeys.fast_quit, RAGE_JOAAT("fastquit")); + register_hotkey("fillammo", g.settings.hotkeys.fill_ammo, RAGE_JOAAT("fillammo")); register_hotkey("quicksearch", g.settings.hotkeys.cmd_excecutor, RAGE_JOAAT("cmdexecutor")); - g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { wndproc(static_cast(msg), wparam); }); diff --git a/src/views/players/player/player_info.cpp b/src/views/players/player/player_info.cpp index 0497d195..4d9a7fe0 100644 --- a/src/views/players/player/player_info.cpp +++ b/src/views/players/player/player_info.cpp @@ -164,7 +164,7 @@ namespace big ImGui::Text("PLAYER_INFO_LAP_DANCES"_T.data(), stats.LapDancesBought); ImGui::Text("PLAYER_INFO_MISSIONS_CREATED"_T.data(), stats.MissionsCreated); ImGui::Text("PLAYER_INFO_METLDOWN_COMPLETE"_T.data(), - scr_globals::gpbd_fm_1.as()->Entries[id].MeltdownComplete ? "YES"_T.data() : "NO"_T.data()); // curious to see if anyone has actually played singleplayer + scr_globals::gpbd_fm_1.as()->Entries[id].MeltdownComplete ? "YES"_T.data() : "NO"_T.data()); // curious to see if anyone has actually played singleplayer ImGui::Separator(); diff --git a/src/views/self/view_self.cpp b/src/views/self/view_self.cpp index be216b1f..4f51c298 100644 --- a/src/views/self/view_self.cpp +++ b/src/views/self/view_self.cpp @@ -19,6 +19,8 @@ namespace big components::command_button<"skipcutscene">(); ImGui::SameLine(); components::command_button<"clean">(); + ImGui::SameLine(); + components::command_button<"fillammo">(); ImGui::Separator(); @@ -164,6 +166,8 @@ namespace big components::sub_title("POLICE"_T); + components::command_button<"clearwantedlvl">(); + ImGui::Checkbox("NEVER_WANTED"_T.data(), &g.self.never_wanted); if (!g.self.never_wanted) @@ -184,50 +188,69 @@ namespace big ImGui::BeginGroup(); - ImGui::Checkbox("HIDE_RADAR"_T.data(), &g.self.hide_radar); + ImGui::Checkbox("HIDE_RADAR"_T.data(), &g.self.hud.hide_radar); ImGui::SameLine(); - ImGui::Checkbox("HIDE_AMMO"_T.data(), &g.self.hide_ammo); + ImGui::Checkbox("HIDE_AMMO"_T.data(), &g.self.hud.hide_ammo); ImGui::SameLine(); - ImGui::Checkbox("FORCE_SHOW_HUD"_T.data(), &g.self.force_show_hud); + ImGui::Checkbox("FORCE_SHOW_HUD"_T.data(), &g.self.hud.force_show_hud); - ImGui::Combo("##hud_comp_combo", &g.self.selected_hud_component, hud_component_names, (int)HudComponents::HUD_WEAPONS); + ImGui::Combo("##hud_comp_combo", &g.self.hud.selected_hud_component, hud_component_names, (int)HudComponents::HUD_WEAPONS); ImGui::SameLine(); components::button("HIDE"_T, [] { - g.self.hud_components_states[g.self.selected_hud_component] = true; + g.self.hud.hud_components_states[g.self.hud.selected_hud_component] = true; }); ImGui::SameLine(); components::button("SHOW"_T, [] { - g.self.hud_components_states[g.self.selected_hud_component] = false; + g.self.hud.hud_components_states[g.self.hud.selected_hud_component] = false; }); components::button("HIDE_ALL"_T, [] { - g.self.hide_radar = true; - g.self.hide_ammo = true; + + g.self.hud.hide_radar = true; + g.self.hud.hide_ammo = true; + for (int i = 0; i < (int)HudComponents::HUD_WEAPONS; i++) { - g.self.hud_components_states[i] = true; + g.self.hud.hud_components_states[i] = true; } }); ImGui::SameLine(); components::button("SHOW_ALL"_T, [] { - g.self.hide_radar = false; - g.self.hide_ammo = false; + + g.self.hud.hide_radar = false; + g.self.hud.hide_ammo = false; + for (int i = 0; i < (int)HudComponents::HUD_WEAPONS; i++) { - g.self.hud_components_states[i] = false; + g.self.hud.hud_components_states[i] = false; } }); ImGui::SameLine(); - ImGui::Checkbox("FORCE_SHOW_HUD_ELEMENT"_T.data(), &g.self.force_show_hud_element); + ImGui::Checkbox("FORCE_SHOW_HUD_ELEMENT"_T.data(), &g.self.hud.force_show_hud_element); if (ImGui::IsItemHovered()) ImGui::SetTooltip("FORCE_SHOW_HUD_ELEMENT_DESC"_T.data()); ImGui::EndGroup(); + components::command_checkbox<"hudcolor">(); + + ImGui::Checkbox("Override Hud Color Specify", &g.self.hud.shcolor); + ImGui::InputInt("Hud Index", &g.self.hud.index);//need to display current val if not displayed + ImGui::InputInt("Hud Red", &g.self.hud.r); + ImGui::InputInt("Hud Green", &g.self.hud.g); + ImGui::InputInt("Hud Blue", &g.self.hud.b); + ImGui::InputInt("Hud Alpha", &g.self.hud.a); + + ImGui::Checkbox("Override Multiplayer Hud Color", &g.self.hud.mhcolor); + ImGui::InputInt("Hud Color", &g.self.hud.hcolor); + + ImGui::Checkbox("Override Multiplayer Text Off Index", &g.self.hud.mtcolor); + ImGui::InputInt("Hud Text Color", &g.self.hud.tcolor); + g.self.proof_mask = 0; if (g.self.god_mode) { diff --git a/src/views/self/view_weapons.cpp b/src/views/self/view_weapons.cpp index a5a1352f..901a2ff5 100644 --- a/src/views/self/view_weapons.cpp +++ b/src/views/self/view_weapons.cpp @@ -18,6 +18,7 @@ namespace big components::command_checkbox<"infammo">(); components::command_checkbox<"infclip">(); + components::command_checkbox<"infrange">(); ImGui::Checkbox("Allow Weapons In Interiors", &g.weapons.interior_weapon); ImGui::EndGroup(); @@ -103,7 +104,8 @@ namespace big } }); - ImGui::SliderFloat("DMG_MULTIPLR"_T.data(), &g.weapons.increased_damage, 1.f, 10.f, "%.1f"); + components::command_checkbox<"incrdamage">(); + ImGui::InputFloat("Damage", &g.weapons.increased_damage, .1, 10, "%.1f"); ImGui::Separator(); diff --git a/src/views/settings/view_hotkey_settings.cpp b/src/views/settings/view_hotkey_settings.cpp index 674d96d5..8b3bb60c 100644 --- a/src/views/settings/view_hotkey_settings.cpp +++ b/src/views/settings/view_hotkey_settings.cpp @@ -40,6 +40,8 @@ namespace big g_hotkey_service->update_hotkey("invisveh", g.settings.hotkeys.invisveh); if (ImGui::Hotkey("Toggle Local Veh Invisibility", &g.settings.hotkeys.localinvisveh)) g_hotkey_service->update_hotkey("localinvisveh", g.settings.hotkeys.localinvisveh); + if (ImGui::Hotkey("Fill Ammo", &g.settings.hotkeys.fill_ammo)); + g_hotkey_service->update_hotkey("fillammo", g.settings.hotkeys.fill_ammo); if (ImGui::Hotkey("Rage Quit (Like Alt + F4)", &g.settings.hotkeys.fast_quit)) g_hotkey_service->update_hotkey("fastquit", g.settings.hotkeys.fast_quit); if (ImGui::Hotkey("Toggle Command Executor", &g.settings.hotkeys.cmd_excecutor)) diff --git a/src/views/vehicle/view_persist_car.cpp b/src/views/vehicle/view_persist_car.cpp index 30ff45fe..26d529f0 100644 --- a/src/views/vehicle/view_persist_car.cpp +++ b/src/views/vehicle/view_persist_car.cpp @@ -68,12 +68,28 @@ namespace big ImGui::SameLine(); - components::button("SAVE_VEHICLE"_T, [] { - save_vehicle(vehicle_file_name_input); + components::button("SAVE_VEHICLE"_T, [] + { + if (PED::GET_VEHICLE_PED_IS_IN(self::ped, false) == 0) + { + g_notification_service->push_warning("PERSIST_CAR"_T.data(), "You must be in a vehicle. Please enter a vehicle before using load."); + } + else + { + save_vehicle(vehicle_file_name_input); + } }); - components::button("LOAD_VEHICLE"_T, [] { - load_vehicle(selected_vehicle_file); + components::button("LOAD_VEHICLE"_T, [] + { + if (PED::GET_VEHICLE_PED_IS_IN(self::ped, false) != 0) + { + g_notification_service->push_warning("PERSIST_CAR"_T.data(), "You must not be in a vehicle. Please exit your vehicle before using load."); + } + else + { + load_vehicle(selected_vehicle_file); + } }); ImGui::EndGroup();