Several feature additions (#889)
* Added Infinite Range * Added Fill Ammo * Added Aim Assist * Added Hud Color Options * Added Clear Wanted Level * Added Health Regen * curly brackets in invisibility * Added hotkeys * Improved Increased Damage
This commit is contained in:
parent
cb23e221b6
commit
d87caaa6d7
@ -56,7 +56,6 @@ namespace big
|
|||||||
looped::weapons_cage_gun();
|
looped::weapons_cage_gun();
|
||||||
looped::weapons_delete_gun();
|
looped::weapons_delete_gun();
|
||||||
looped::weapons_gravity_gun();
|
looped::weapons_gravity_gun();
|
||||||
looped::weapons_increased_damage();
|
|
||||||
looped::weapons_repair_gun();
|
looped::weapons_repair_gun();
|
||||||
looped::weapons_steal_vehicle_gun();
|
looped::weapons_steal_vehicle_gun();
|
||||||
looped::weapons_vehicle_gun();
|
looped::weapons_vehicle_gun();
|
||||||
|
22
src/backend/commands/self/ammo.cpp
Normal file
22
src/backend/commands/self/ammo.cpp
Normal file
@ -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<std::uint64_t>&, const std::shared_ptr<command_context> 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);
|
||||||
|
}
|
7
src/backend/commands/self/beast_jump.cpp
Normal file
7
src/backend/commands/self/beast_jump.cpp
Normal file
@ -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);
|
||||||
|
}
|
21
src/backend/commands/self/clearwanted.cpp
Normal file
21
src/backend/commands/self/clearwanted.cpp
Normal file
@ -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<std::uint64_t>&, const std::shared_ptr<command_context> 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);
|
||||||
|
}
|
6
src/backend/commands/self/super_jump.cpp
Normal file
6
src/backend/commands/self/super_jump.cpp
Normal file
@ -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);
|
||||||
|
}
|
@ -55,7 +55,6 @@ namespace big
|
|||||||
static void custom_gun_disable_control_action();
|
static void custom_gun_disable_control_action();
|
||||||
static void weapons_delete_gun();
|
static void weapons_delete_gun();
|
||||||
static void weapons_gravity_gun();
|
static void weapons_gravity_gun();
|
||||||
static void weapons_increased_damage();
|
|
||||||
static void weapons_repair_gun();
|
static void weapons_repair_gun();
|
||||||
static void weapons_steal_vehicle_gun();
|
static void weapons_steal_vehicle_gun();
|
||||||
static void weapons_vehicle_gun();
|
static void weapons_vehicle_gun();
|
||||||
|
@ -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);
|
|
||||||
}
|
|
25
src/backend/looped/self/health.cpp
Normal file
25
src/backend/looped/self/health.cpp
Normal file
@ -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);
|
||||||
|
}
|
@ -9,11 +9,11 @@ namespace big
|
|||||||
|
|
||||||
void looped::self_hud()
|
void looped::self_hud()
|
||||||
{
|
{
|
||||||
const bool bHideRadar = g.self.hide_radar;
|
const bool bHideRadar = g.self.hud.hide_radar;
|
||||||
const bool bHideAmmo = g.self.hide_ammo;
|
const bool bHideAmmo = g.self.hud.hide_ammo;
|
||||||
const bool bForceShowElement = g.self.force_show_hud_element;
|
const bool bForceShowElement = g.self.hud.force_show_hud_element;
|
||||||
const bool bForceShowHUD = g.self.force_show_hud;
|
const bool bForceShowHUD = g.self.hud.force_show_hud;
|
||||||
auto& bHudComponents = g.self.hud_components_states;
|
auto& bHudComponents = g.self.hud.hud_components_states;
|
||||||
|
|
||||||
if (bHideRadar)
|
if (bHideRadar)
|
||||||
{
|
{
|
||||||
|
33
src/backend/looped/self/hudcolor.cpp
Normal file
33
src/backend/looped/self/hudcolor.cpp
Normal file
@ -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);
|
||||||
|
}
|
@ -39,4 +39,4 @@ namespace big
|
|||||||
invisibility g_invisibility("invis", "Invisiblity", "Makes you invisible", g.self.invisibility);
|
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",
|
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);
|
g.self.local_visibility);
|
||||||
}
|
}
|
@ -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);
|
|
||||||
}
|
|
@ -1,15 +1,48 @@
|
|||||||
#include "backend/looped/looped.hpp"
|
|
||||||
#include "natives.hpp"
|
#include "natives.hpp"
|
||||||
|
#include "backend/looped_command.hpp"
|
||||||
|
|
||||||
namespace big
|
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{};
|
if (!g_local_player)
|
||||||
WEAPON::GET_CURRENT_PED_WEAPON(self::ped, &weapon, 0);
|
{
|
||||||
WEAPON::SET_WEAPON_DAMAGE_MODIFIER(weapon, g.weapons.increased_damage);
|
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);
|
||||||
}
|
}
|
@ -7,9 +7,6 @@ namespace big
|
|||||||
{
|
{
|
||||||
using looped_command::looped_command;
|
using looped_command::looped_command;
|
||||||
|
|
||||||
CWeaponInfo* p_modified_weapon = nullptr;
|
|
||||||
float og_recoil_value = 0.0f;
|
|
||||||
|
|
||||||
virtual void on_tick() override
|
virtual void on_tick() override
|
||||||
{
|
{
|
||||||
WEAPON::SET_PED_INFINITE_AMMO(self::ped, TRUE, NULL);
|
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);
|
infinite_ammo g_infinite_ammo("infammo", "Infinite Ammo", "Never run out of ammo again", g.weapons.infinite_ammo);
|
||||||
}
|
}
|
47
src/backend/looped/weapons/infinite_range.cpp
Normal file
47
src/backend/looped/weapons/infinite_range.cpp
Normal file
@ -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);
|
||||||
|
}
|
@ -252,48 +252,61 @@ namespace big
|
|||||||
NLOHMANN_DEFINE_TYPE_INTRUSIVE(ptfx_effects, show, size)
|
NLOHMANN_DEFINE_TYPE_INTRUSIVE(ptfx_effects, show, size)
|
||||||
} ptfx_effects{};
|
} ptfx_effects{};
|
||||||
|
|
||||||
bool clean_player = false;
|
bool clean_player = false;
|
||||||
bool force_wanted_level = false;
|
bool force_wanted_level = false;
|
||||||
bool free_cam = false;
|
bool free_cam = false;
|
||||||
bool invisibility = false;
|
bool invisibility = false;
|
||||||
bool local_visibility = true;
|
bool local_visibility = true;
|
||||||
bool never_wanted = false;
|
bool never_wanted = false;
|
||||||
bool no_ragdoll = false;
|
bool no_ragdoll = false;
|
||||||
bool noclip = false;
|
bool noclip = false;
|
||||||
bool off_radar = false;
|
bool off_radar = false;
|
||||||
bool super_run = false;
|
bool super_run = false;
|
||||||
bool no_collision = false;
|
bool no_collision = false;
|
||||||
bool unlimited_oxygen = false;
|
bool unlimited_oxygen = false;
|
||||||
bool no_water_collision = false;
|
bool no_water_collision = false;
|
||||||
int wanted_level = 0;
|
int wanted_level = 0;
|
||||||
bool god_mode = false;
|
bool god_mode = false;
|
||||||
bool part_water = false;
|
bool part_water = false;
|
||||||
bool proof_bullet = false;
|
bool proof_bullet = false;
|
||||||
bool proof_fire = false;
|
bool proof_fire = false;
|
||||||
bool proof_collision = false;
|
bool proof_collision = false;
|
||||||
bool proof_melee = false;
|
bool proof_melee = false;
|
||||||
bool proof_explosion = false;
|
bool proof_explosion = false;
|
||||||
bool proof_steam = false;
|
bool proof_steam = false;
|
||||||
bool proof_drown = false;
|
bool proof_drown = false;
|
||||||
bool proof_water = false;
|
bool proof_water = false;
|
||||||
uint32_t proof_mask = 0;
|
uint32_t proof_mask = 0;
|
||||||
bool hide_radar = false;
|
bool mobile_radio = false;
|
||||||
bool hide_ammo = false;
|
bool fast_respawn = false;
|
||||||
int selected_hud_component = 1;
|
bool auto_tp = false;
|
||||||
std::array<bool, 22> hud_components_states = {false};
|
bool super_jump = false;
|
||||||
bool force_show_hud_element = false;
|
bool beast_jump = false;
|
||||||
bool force_show_hud = false;
|
bool healthregen = false;
|
||||||
bool mobile_radio = false;
|
float healthregenrate = 1.0f;
|
||||||
bool fast_respawn = false;
|
bool superman = false;
|
||||||
bool auto_tp = false;
|
struct hud
|
||||||
bool super_jump = false;
|
{
|
||||||
bool beast_jump = false;
|
bool hudcolor = false;
|
||||||
bool superman = 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<bool, 22> 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
|
// do not save below entries
|
||||||
bool dance_mode = false;
|
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{};
|
} self{};
|
||||||
|
|
||||||
struct session
|
struct session
|
||||||
@ -380,10 +393,11 @@ namespace big
|
|||||||
int beastjump = 0;
|
int beastjump = 0;
|
||||||
int invisveh = 0;
|
int invisveh = 0;
|
||||||
int localinvisveh = 0;
|
int localinvisveh = 0;
|
||||||
|
int fill_ammo = 0;
|
||||||
int fast_quit = 0;
|
int fast_quit = 0;
|
||||||
int cmd_excecutor = 0x55; // U
|
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, fast_quit, cmd_excecutor)
|
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{};
|
} hotkeys{};
|
||||||
|
|
||||||
bool dev_dlc = false;
|
bool dev_dlc = false;
|
||||||
@ -458,7 +472,7 @@ namespace big
|
|||||||
int alpha = 150;
|
int alpha = 150;
|
||||||
rage::fvector3 pos;
|
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{};
|
} blackhole{};
|
||||||
|
|
||||||
struct nearby
|
struct nearby
|
||||||
@ -650,6 +664,7 @@ namespace big
|
|||||||
bool infinite_ammo = false;
|
bool infinite_ammo = false;
|
||||||
bool infinite_mag = false;
|
bool infinite_mag = false;
|
||||||
float increased_damage = 1;
|
float increased_damage = 1;
|
||||||
|
bool increase_damage = false;
|
||||||
bool no_recoil = false;
|
bool no_recoil = false;
|
||||||
bool no_spread = false;
|
bool no_spread = false;
|
||||||
std::string vehicle_gun_model = "bus";
|
std::string vehicle_gun_model = "bus";
|
||||||
@ -658,8 +673,9 @@ namespace big
|
|||||||
bool rapid_fire = false;
|
bool rapid_fire = false;
|
||||||
bool interior_weapon = false;
|
bool interior_weapon = false;
|
||||||
bool triggerbot = 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{};
|
} weapons{};
|
||||||
|
|
||||||
struct window
|
struct window
|
||||||
@ -816,4 +832,4 @@ namespace big
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline auto g = menu_settings();
|
inline auto g = menu_settings();
|
||||||
}
|
}
|
@ -92,9 +92,9 @@ namespace big::functions
|
|||||||
using fipackfile_unmount = bool (*)(const char* mount_point);
|
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_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_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 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 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);
|
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_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 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_ragdoll = void (*)(uint16_t object_id);
|
||||||
using request_control = void (*)(rage::netObject* net_object);
|
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 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);
|
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 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 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 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 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);
|
using clear_ped_tasks_network = void (*)(CPed* ped, bool immediately);
|
||||||
|
|
||||||
|
@ -22,13 +22,13 @@ namespace big
|
|||||||
[this] {
|
[this] {
|
||||||
dx_on_tick();
|
dx_on_tick();
|
||||||
},
|
},
|
||||||
-5);
|
-5);
|
||||||
|
|
||||||
g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||||
wndproc(hwnd, msg, wparam, 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);
|
g_renderer->add_dx_callback(view::context_menu, 1);
|
||||||
|
|
||||||
dx_init();
|
dx_init();
|
||||||
|
@ -114,6 +114,8 @@ namespace big
|
|||||||
|
|
||||||
detour_hook_helper::add<hooks::get_model_info>("GMI", g_pointers->m_get_model_info);
|
detour_hook_helper::add<hooks::get_model_info>("GMI", g_pointers->m_get_model_info);
|
||||||
|
|
||||||
|
detour_hook_helper::add<hooks::task_jump_constructor>("TJC", g_pointers->m_taskjump_constructor);
|
||||||
|
|
||||||
detour_hook_helper::add<hooks::enumerate_audio_devices>("EAD", g_pointers->m_enumerate_audio_devices);
|
detour_hook_helper::add<hooks::enumerate_audio_devices>("EAD", g_pointers->m_enumerate_audio_devices);
|
||||||
detour_hook_helper::add<hooks::direct_sound_capture_create>("DSCC", g_pointers->m_direct_sound_capture_create);
|
detour_hook_helper::add<hooks::direct_sound_capture_create>("DSCC", g_pointers->m_direct_sound_capture_create);
|
||||||
|
|
||||||
|
@ -155,6 +155,8 @@ namespace big
|
|||||||
static void write_player_creation_data_node(rage::netObject* player, CPlayerCreationDataNode* node);
|
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 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 CBaseModelInfo* get_model_info(rage::joaat_t hash, uint32_t* a2);
|
||||||
|
|
||||||
static int enumerate_audio_devices(CFoundDevice* found_devices, int count, int flags);
|
static int enumerate_audio_devices(CFoundDevice* found_devices, int count, int flags);
|
||||||
|
13
src/hooks/misc/task_jump_constructor.cpp
Normal file
13
src/hooks/misc/task_jump_constructor.cpp
Normal file
@ -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<task_jump_constructor>()(a1, a2);
|
||||||
|
}
|
||||||
|
}
|
@ -34,7 +34,6 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID)
|
|||||||
if (reason == DLL_PROCESS_ATTACH)
|
if (reason == DLL_PROCESS_ATTACH)
|
||||||
{
|
{
|
||||||
DisableThreadLibraryCalls(hmod);
|
DisableThreadLibraryCalls(hmod);
|
||||||
|
|
||||||
g_hmodule = hmod;
|
g_hmodule = hmod;
|
||||||
g_main_thread = CreateThread(
|
g_main_thread = CreateThread(
|
||||||
nullptr,
|
nullptr,
|
||||||
@ -149,9 +148,9 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID)
|
|||||||
matchmaking_service_instance.reset();
|
matchmaking_service_instance.reset();
|
||||||
LOG(INFO) << "Matchmaking Service reset.";
|
LOG(INFO) << "Matchmaking Service reset.";
|
||||||
player_database_service_instance.reset();
|
player_database_service_instance.reset();
|
||||||
LOG(INFO) << "API Service reset.";
|
|
||||||
api_service_instance.reset();
|
|
||||||
LOG(INFO) << "Player Database Service reset.";
|
LOG(INFO) << "Player Database Service reset.";
|
||||||
|
api_service_instance.reset();
|
||||||
|
LOG(INFO) << "API Service reset.";
|
||||||
script_patcher_service_instance.reset();
|
script_patcher_service_instance.reset();
|
||||||
LOG(INFO) << "Script Patcher Service reset.";
|
LOG(INFO) << "Script Patcher Service reset.";
|
||||||
gui_service_instance.reset();
|
gui_service_instance.reset();
|
||||||
|
@ -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
|
// 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) {
|
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<decltype(m_received_clone_sync)>();
|
m_received_clone_sync = ptr.sub(0x1D).as<decltype(m_received_clone_sync)>();
|
||||||
m_get_sync_tree_for_type = ptr.add(0x14).rip().as<decltype(m_get_sync_tree_for_type)>();// 0F B7 CA 83 F9 07 .as()
|
m_get_sync_tree_for_type = ptr.add(0x14).rip().as<decltype(m_get_sync_tree_for_type)>(); // 0F B7 CA 83 F9 07 .as()
|
||||||
m_get_net_object = ptr.add(0x76).rip().as<decltype(m_get_net_object)>();// E8 ? ? ? ? 0F B7 53 7C .add(1).rip().as()
|
m_get_net_object = ptr.add(0x76).rip().as<decltype(m_get_net_object)>(); // E8 ? ? ? ? 0F B7 53 7C .add(1).rip().as()
|
||||||
m_get_sync_type_info = ptr.add(0x8C).rip().as<decltype(m_get_sync_type_info)>();// 44 0F B7 C1 4C 8D 0D .as()
|
m_get_sync_type_info = ptr.add(0x8C).rip().as<decltype(m_get_sync_type_info)>(); // 44 0F B7 C1 4C 8D 0D .as()
|
||||||
});
|
});
|
||||||
|
|
||||||
// Read Bitbuffer Into Sync Tree
|
// Read Bitbuffer Into Sync Tree
|
||||||
@ -471,7 +471,7 @@ namespace big
|
|||||||
|
|
||||||
// Is Matchmaking Session Valid
|
// 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) {
|
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<void*>(), std::to_array({0xB0, 0x01, 0xC3}))->apply();// has no observable side effects
|
memory::byte_patch::make(ptr.as<void*>(), std::to_array({0xB0, 0x01, 0xC3}))->apply(); // has no observable side effects
|
||||||
});
|
});
|
||||||
|
|
||||||
// Send Network Damage
|
// Send Network Damage
|
||||||
@ -624,8 +624,8 @@ namespace big
|
|||||||
|
|
||||||
// Sound Overload Detour
|
// Sound Overload Detour
|
||||||
main_batch.add("SOD", "66 45 3B C1 74 38", [this](memory::handle ptr) {
|
main_batch.add("SOD", "66 45 3B C1 74 38", [this](memory::handle ptr) {
|
||||||
g_sound_overload_ret_addr = ptr.add(13 + 15).as<decltype(g_sound_overload_ret_addr)>();
|
g_sound_overload_ret_addr = ptr.add(13 + 15).as<decltype(g_sound_overload_ret_addr)>();
|
||||||
std::vector<byte> bytes = {0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90};// far jump opcode + a nop opcode
|
std::vector<byte> 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;
|
*(void**)(bytes.data() + 6) = sound_overload_detour;
|
||||||
memory::byte_patch::make(ptr.add(13).as<void*>(), bytes)->apply();
|
memory::byte_patch::make(ptr.add(13).as<void*>(), bytes)->apply();
|
||||||
});
|
});
|
||||||
@ -733,7 +733,7 @@ namespace big
|
|||||||
|
|
||||||
// Allow Weapons In Vehicle
|
// Allow Weapons In Vehicle
|
||||||
main_batch.add("AWIV", "49 3B C9 7C F0 ? ? C3", [this](memory::handle ptr) {
|
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<uint16_t*>(), 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<uint16_t*>(), 0x01B0).get(); //In order for the second xref loop not to stop
|
||||||
});
|
});
|
||||||
|
|
||||||
// Write Vehicle Proximity Migration Data Node
|
// Write Vehicle Proximity Migration Data Node
|
||||||
@ -746,6 +746,11 @@ namespace big
|
|||||||
m_migrate_object = ptr.as<functions::migrate_object>();
|
m_migrate_object = ptr.as<functions::migrate_object>();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//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<PVOID>();
|
||||||
|
});
|
||||||
|
|
||||||
auto mem_region = memory::module("GTA5.exe");
|
auto mem_region = memory::module("GTA5.exe");
|
||||||
if (!main_batch.run(mem_region))
|
if (!main_batch.run(mem_region))
|
||||||
{
|
{
|
||||||
|
@ -161,8 +161,8 @@ namespace big
|
|||||||
|
|
||||||
functions::generate_uuid m_generate_uuid{};
|
functions::generate_uuid m_generate_uuid{};
|
||||||
std::uint64_t* m_host_token{};
|
std::uint64_t* m_host_token{};
|
||||||
rage::rlGamerInfo* m_profile_gamer_info{}; // per profile gamer info
|
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_player_info_gamer_info{}; // the gamer info that is applied to CPlayerInfo
|
||||||
CCommunications** m_communications{};
|
CCommunications** m_communications{};
|
||||||
|
|
||||||
PVOID m_update_presence_attribute_int;
|
PVOID m_update_presence_attribute_int;
|
||||||
@ -256,6 +256,8 @@ namespace big
|
|||||||
memory::byte_patch* m_disable_collision{};
|
memory::byte_patch* m_disable_collision{};
|
||||||
memory::byte_patch* m_allow_weapons_in_vehicle{};
|
memory::byte_patch* m_allow_weapons_in_vehicle{};
|
||||||
|
|
||||||
|
PVOID m_taskjump_constructor{};
|
||||||
|
|
||||||
PVOID m_write_vehicle_proximity_migration_data_node{};
|
PVOID m_write_vehicle_proximity_migration_data_node{};
|
||||||
functions::migrate_object m_migrate_object{};
|
functions::migrate_object m_migrate_object{};
|
||||||
};
|
};
|
||||||
|
@ -116,7 +116,7 @@ namespace big
|
|||||||
call(thread, gta_util::find_script_program(m_script), args);
|
call(thread, gta_util::find_script_program(m_script), args);
|
||||||
|
|
||||||
delete[] stack;
|
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<std::uint64_t> args)
|
void script_function::operator()(std::initializer_list<std::uint64_t> args)
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
#include "hotkey_service.hpp"
|
#include "hotkey_service.hpp"
|
||||||
|
|
||||||
#include "fiber_pool.hpp"
|
#include "fiber_pool.hpp"
|
||||||
#include "gui.hpp"
|
#include "gui.hpp"
|
||||||
#include "network/ChatData.hpp"
|
#include "network/ChatData.hpp"
|
||||||
@ -24,9 +23,9 @@ namespace big
|
|||||||
register_hotkey("invisveh", g.settings.hotkeys.invisveh, RAGE_JOAAT("invisveh"));
|
register_hotkey("invisveh", g.settings.hotkeys.invisveh, RAGE_JOAAT("invisveh"));
|
||||||
register_hotkey("localinvisveh", g.settings.hotkeys.localinvisveh, RAGE_JOAAT("localinvisveh"));
|
register_hotkey("localinvisveh", g.settings.hotkeys.localinvisveh, RAGE_JOAAT("localinvisveh"));
|
||||||
register_hotkey("fastquit", g.settings.hotkeys.fast_quit, RAGE_JOAAT("fastquit"));
|
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"));
|
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) {
|
g_renderer->add_wndproc_callback([this](HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
|
||||||
wndproc(static_cast<eKeyState>(msg), wparam);
|
wndproc(static_cast<eKeyState>(msg), wparam);
|
||||||
});
|
});
|
||||||
|
@ -164,7 +164,7 @@ namespace big
|
|||||||
ImGui::Text("PLAYER_INFO_LAP_DANCES"_T.data(), stats.LapDancesBought);
|
ImGui::Text("PLAYER_INFO_LAP_DANCES"_T.data(), stats.LapDancesBought);
|
||||||
ImGui::Text("PLAYER_INFO_MISSIONS_CREATED"_T.data(), stats.MissionsCreated);
|
ImGui::Text("PLAYER_INFO_MISSIONS_CREATED"_T.data(), stats.MissionsCreated);
|
||||||
ImGui::Text("PLAYER_INFO_METLDOWN_COMPLETE"_T.data(),
|
ImGui::Text("PLAYER_INFO_METLDOWN_COMPLETE"_T.data(),
|
||||||
scr_globals::gpbd_fm_1.as<GPBD_FM*>()->Entries[id].MeltdownComplete ? "YES"_T.data() : "NO"_T.data()); // curious to see if anyone has actually played singleplayer
|
scr_globals::gpbd_fm_1.as<GPBD_FM*>()->Entries[id].MeltdownComplete ? "YES"_T.data() : "NO"_T.data()); // curious to see if anyone has actually played singleplayer
|
||||||
|
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
@ -19,6 +19,8 @@ namespace big
|
|||||||
components::command_button<"skipcutscene">();
|
components::command_button<"skipcutscene">();
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
components::command_button<"clean">();
|
components::command_button<"clean">();
|
||||||
|
ImGui::SameLine();
|
||||||
|
components::command_button<"fillammo">();
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
@ -164,6 +166,8 @@ namespace big
|
|||||||
|
|
||||||
components::sub_title("POLICE"_T);
|
components::sub_title("POLICE"_T);
|
||||||
|
|
||||||
|
components::command_button<"clearwantedlvl">();
|
||||||
|
|
||||||
ImGui::Checkbox("NEVER_WANTED"_T.data(), &g.self.never_wanted);
|
ImGui::Checkbox("NEVER_WANTED"_T.data(), &g.self.never_wanted);
|
||||||
|
|
||||||
if (!g.self.never_wanted)
|
if (!g.self.never_wanted)
|
||||||
@ -184,50 +188,69 @@ namespace big
|
|||||||
|
|
||||||
ImGui::BeginGroup();
|
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::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::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();
|
ImGui::SameLine();
|
||||||
components::button("HIDE"_T, [] {
|
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();
|
ImGui::SameLine();
|
||||||
components::button("SHOW"_T, [] {
|
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, [] {
|
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++)
|
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();
|
ImGui::SameLine();
|
||||||
components::button("SHOW_ALL"_T, [] {
|
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++)
|
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::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())
|
if (ImGui::IsItemHovered())
|
||||||
ImGui::SetTooltip("FORCE_SHOW_HUD_ELEMENT_DESC"_T.data());
|
ImGui::SetTooltip("FORCE_SHOW_HUD_ELEMENT_DESC"_T.data());
|
||||||
|
|
||||||
ImGui::EndGroup();
|
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;
|
g.self.proof_mask = 0;
|
||||||
if (g.self.god_mode)
|
if (g.self.god_mode)
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,7 @@ namespace big
|
|||||||
|
|
||||||
components::command_checkbox<"infammo">();
|
components::command_checkbox<"infammo">();
|
||||||
components::command_checkbox<"infclip">();
|
components::command_checkbox<"infclip">();
|
||||||
|
components::command_checkbox<"infrange">();
|
||||||
ImGui::Checkbox("Allow Weapons In Interiors", &g.weapons.interior_weapon);
|
ImGui::Checkbox("Allow Weapons In Interiors", &g.weapons.interior_weapon);
|
||||||
|
|
||||||
ImGui::EndGroup();
|
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();
|
ImGui::Separator();
|
||||||
|
|
||||||
|
@ -40,6 +40,8 @@ namespace big
|
|||||||
g_hotkey_service->update_hotkey("invisveh", g.settings.hotkeys.invisveh);
|
g_hotkey_service->update_hotkey("invisveh", g.settings.hotkeys.invisveh);
|
||||||
if (ImGui::Hotkey("Toggle Local Veh Invisibility", &g.settings.hotkeys.localinvisveh))
|
if (ImGui::Hotkey("Toggle Local Veh Invisibility", &g.settings.hotkeys.localinvisveh))
|
||||||
g_hotkey_service->update_hotkey("localinvisveh", 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))
|
if (ImGui::Hotkey("Rage Quit (Like Alt + F4)", &g.settings.hotkeys.fast_quit))
|
||||||
g_hotkey_service->update_hotkey("fastquit", 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))
|
if (ImGui::Hotkey("Toggle Command Executor", &g.settings.hotkeys.cmd_excecutor))
|
||||||
|
@ -68,12 +68,28 @@ namespace big
|
|||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
components::button("SAVE_VEHICLE"_T, [] {
|
components::button("SAVE_VEHICLE"_T, []
|
||||||
save_vehicle(vehicle_file_name_input);
|
{
|
||||||
|
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, [] {
|
components::button("LOAD_VEHICLE"_T, []
|
||||||
load_vehicle(selected_vehicle_file);
|
{
|
||||||
|
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();
|
ImGui::EndGroup();
|
||||||
|
Reference in New Issue
Block a user