diff --git a/BigBaseV2/src/backend/backend.cpp b/BigBaseV2/src/backend/backend.cpp index 942d6ebc..e8a0bab9 100644 --- a/BigBaseV2/src/backend/backend.cpp +++ b/BigBaseV2/src/backend/backend.cpp @@ -34,12 +34,14 @@ namespace big QUEUE_JOB_BEGIN_CLAUSE() { + looped::self_clean_player(); looped::self_frame_flags(); looped::self_free_cam(); looped::self_godmode(); + looped::self_invisibility(); + looped::self_no_ragdoll(); looped::self_off_radar(); looped::self_police(); - looped::self_no_ragdoll(); looped::self_super_run(); }QUEUE_JOB_END_CLAUSE @@ -57,12 +59,16 @@ namespace big { looped::weapons_cage_gun(); looped::weapons_delete_gun(); + looped::weapons_force_crosshairs(); looped::weapons_gravity_gun(); + looped::weapons_infinite_ammo(); + looped::weapons_increased_damage(); + looped::weapons_infinite_mag(); + looped::weapons_no_spread(); + looped::weapons_no_recoil(); looped::weapons_steal_vehicle_gun(); looped::weapons_repair_gun(); looped::weapons_vehicle_gun(); - looped::weapons_infinite_ammo(); - looped::weapons_infinite_mag(); }QUEUE_JOB_END_CLAUSE QUEUE_JOB_BEGIN_CLAUSE() diff --git a/BigBaseV2/src/backend/looped/looped.hpp b/BigBaseV2/src/backend/looped/looped.hpp index 4a6e3e30..24d524cf 100644 --- a/BigBaseV2/src/backend/looped/looped.hpp +++ b/BigBaseV2/src/backend/looped/looped.hpp @@ -14,13 +14,15 @@ namespace big static void protections_replay_interface(); + static void self_clean_player(); static void self_frame_flags(); static void self_free_cam(); static void self_godmode(); - static void self_off_radar(); - static void self_police(); + static void self_invisibility(); static void self_noclip(); static void self_no_ragdoll(); + static void self_off_radar(); + static void self_police(); static void self_super_run(); static void system_update_players(); @@ -36,11 +38,15 @@ namespace big static void weapons_cage_gun(); static void weapons_delete_gun(); + static void weapons_force_crosshairs(); static void weapons_gravity_gun(); + static void weapons_increased_damage(); + static void weapons_infinite_ammo(); + static void weapons_infinite_mag(); + static void weapons_no_recoil(); + static void weapons_no_spread(); static void weapons_repair_gun(); static void weapons_steal_vehicle_gun(); static void weapons_vehicle_gun(); - static void weapons_infinite_ammo(); - static void weapons_infinite_mag(); }; } \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/self/clean_player.cpp b/BigBaseV2/src/backend/looped/self/clean_player.cpp new file mode 100644 index 00000000..b84d732c --- /dev/null +++ b/BigBaseV2/src/backend/looped/self/clean_player.cpp @@ -0,0 +1,13 @@ +#include "backend/looped/looped.hpp" +#include "natives.hpp" +#include "util/entity.hpp" + +namespace big +{ + void looped::self_clean_player() + { + if (g->self.clean_player) { + entity::clean_ped(PLAYER::PLAYER_PED_ID()); + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/self/invisibility.cpp b/BigBaseV2/src/backend/looped/self/invisibility.cpp new file mode 100644 index 00000000..4d80ea15 --- /dev/null +++ b/BigBaseV2/src/backend/looped/self/invisibility.cpp @@ -0,0 +1,19 @@ +#include "backend/looped/looped.hpp" +#include "natives.hpp" + +namespace big +{ + static bool bLastInvisibility = false; + + void looped::self_invisibility() + { + bool bInvisibility = g->self.invisibility; + + if (bInvisibility || (!bInvisibility && bInvisibility != bLastInvisibility)) + { + ENTITY::SET_ENTITY_VISIBLE(PLAYER::PLAYER_PED_ID(), !g->self.invisibility, 0); + + bLastInvisibility = g->self.invisibility; + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/weapons/force_crosshairs.cpp b/BigBaseV2/src/backend/looped/weapons/force_crosshairs.cpp new file mode 100644 index 00000000..2159f948 --- /dev/null +++ b/BigBaseV2/src/backend/looped/weapons/force_crosshairs.cpp @@ -0,0 +1,12 @@ +#include "backend/looped/looped.hpp" +#include "natives.hpp" + +namespace big +{ + void looped::weapons_force_crosshairs() + { + if (g->weapons.force_crosshairs) { + HUD::SHOW_HUD_COMPONENT_THIS_FRAME(14 /*RETICLE*/); + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/weapons/increase_damage.cpp b/BigBaseV2/src/backend/looped/weapons/increase_damage.cpp new file mode 100644 index 00000000..b9b28ea7 --- /dev/null +++ b/BigBaseV2/src/backend/looped/weapons/increase_damage.cpp @@ -0,0 +1,16 @@ +#include "backend/looped/looped.hpp" +#include "natives.hpp" + +namespace big +{ + void looped::weapons_increased_damage() + { + auto const player_ped = PLAYER::PLAYER_PED_ID(); + + if (g->weapons.increased_damage != 1) { + Hash weapon{}; + WEAPON::GET_CURRENT_PED_WEAPON(player_ped, &weapon, 0); + WEAPON::SET_WEAPON_DAMAGE_MODIFIER_THIS_FRAME_(weapon, g->weapons.increased_damage); + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/weapons/no_recoil.cpp b/BigBaseV2/src/backend/looped/weapons/no_recoil.cpp new file mode 100644 index 00000000..cf9e1755 --- /dev/null +++ b/BigBaseV2/src/backend/looped/weapons/no_recoil.cpp @@ -0,0 +1,54 @@ +#include "backend/looped/looped.hpp" +#include "pointers.hpp" + +namespace big +{ + static std::vector> og_recoil_values{}; + static uint32_t prev_weapon_hash{}; + + bool is_recoil_value_cached(uint32_t hash) + { + return std::find_if(og_recoil_values.begin(), og_recoil_values.end(), [hash](auto const entry) + { + return hash == entry.first; + }) != og_recoil_values.end(); + } + + float get_og_recoil_value(uint32_t hash) + { + return std::find_if(og_recoil_values.begin(), og_recoil_values.end(), [hash](auto const entry) + { + return hash == entry.first; + })->second; + } + + float get_recoil_value(uint32_t hash) + { + return g->weapons.no_recoil + ? 0.f + : get_og_recoil_value(hash); + } + + void looped::weapons_no_recoil() + { + if (!g_local_player) + { + return; + } + + auto* const weapon_mgr = g_local_player->m_weapon_manager; + if (weapon_mgr) + { + auto const cur_weapon_hash = weapon_mgr->m_selected_weapon_hash; + if (prev_weapon_hash != cur_weapon_hash) + { + if (!is_recoil_value_cached(cur_weapon_hash)) + { + og_recoil_values.push_back({ cur_weapon_hash, weapon_mgr->m_weapon_info->m_explosion_shake_amplitude }); + } + + weapon_mgr->m_weapon_info->m_explosion_shake_amplitude = get_recoil_value(cur_weapon_hash); // m_explosion_shake_amplitude is the right offset in https://github.com/Yimura/GTAV-Classes + } + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/weapons/no_spread.cpp b/BigBaseV2/src/backend/looped/weapons/no_spread.cpp new file mode 100644 index 00000000..cda5060c --- /dev/null +++ b/BigBaseV2/src/backend/looped/weapons/no_spread.cpp @@ -0,0 +1,54 @@ +#include "backend/looped/looped.hpp" +#include "pointers.hpp" + +namespace big +{ + static std::vector> og_spread_values{}; + static uint32_t prev_weapon_hash{}; + + bool is_spread_value_cached(uint32_t hash) + { + return std::find_if(og_spread_values.begin(), og_spread_values.end(), [hash](auto const entry) + { + return hash == entry.first; + }) != og_spread_values.end(); + } + + float get_og_spread_value(uint32_t hash) + { + return std::find_if(og_spread_values.begin(), og_spread_values.end(), [hash](auto const entry) + { + return hash == entry.first; + })->second; + } + + float get_spread_value(uint32_t hash) + { + return g->weapons.no_spread + ? 0.f + : get_og_spread_value(hash); + } + + void looped::weapons_no_spread() + { + if (!g_local_player) + { + return; + } + + auto* const weapon_mgr = g_local_player->m_weapon_manager; + if (weapon_mgr) + { + auto const cur_weapon_hash = weapon_mgr->m_selected_weapon_hash; + if (prev_weapon_hash != cur_weapon_hash) + { + if (!is_spread_value_cached(cur_weapon_hash)) + { + og_spread_values.push_back({ cur_weapon_hash, weapon_mgr->m_weapon_info->m_accuracy_spread }); + } + + weapon_mgr->m_weapon_info->m_accuracy_spread = get_spread_value(cur_weapon_hash); + } + } + } +} \ No newline at end of file diff --git a/BigBaseV2/src/core/globals.hpp b/BigBaseV2/src/core/globals.hpp index 0abfca9e..f46bc3a4 100644 --- a/BigBaseV2/src/core/globals.hpp +++ b/BigBaseV2/src/core/globals.hpp @@ -63,14 +63,16 @@ namespace big bool super_jump = false; }; - bool godmode = false; + bool clean_player = false; + bool force_wanted_level = false; bool free_cam = false; - bool off_radar = false; + bool godmode = false; + bool invisibility = false; bool never_wanted = false; bool noclip = false; bool no_ragdoll = false; + bool off_radar = false; bool super_run = false; - bool force_wanted_level = false; int wanted_level = 0; frame_flags frame_flags{}; @@ -119,9 +121,13 @@ namespace big struct weapons { CustomWeapon custom_weapon = CustomWeapon::NONE; - char vehicle_gun_model[12] = "bus"; + bool force_crosshairs = false; bool infinite_ammo = false; bool infinite_mag = false; + float increased_damage = 1; + bool no_recoil = false; + bool no_spread = false; + char vehicle_gun_model[12] = "bus"; }; struct window { @@ -195,10 +201,12 @@ namespace big this->tunables.disable_phone = j["tunables"]["disable_phone"]; this->tunables.no_idle_kick = j["tunables"]["no_idle_kick"]; + this->self.clean_player = j["self"]["clean_player"]; this->self.godmode = j["self"]["godmode"]; - this->self.off_radar = j["self"]["off_radar"]; - this->self.never_wanted = j["self"]["never_wanted"]; + this->self.invisibility = j["self"]["invisibility"]; this->self.no_ragdoll = j["self"]["no_ragdoll"]; + this->self.never_wanted = j["self"]["never_wanted"]; + this->self.off_radar = j["self"]["off_radar"]; this->self.super_run = j["self"]["super_run"]; this->self.frame_flags.explosive_ammo = j["self"]["frame_flags"]["explosive_ammo"]; @@ -228,8 +236,12 @@ namespace big this->vehicle.speedo_meter.y = j["vehicle"]["speedo_meter"]["position_y"]; this->weapons.custom_weapon = (CustomWeapon)j["weapons"]["custom_weapon"]; + this->weapons.force_crosshairs = j["weapons"]["force_crosshairs"]; this->weapons.infinite_ammo = j["weapons"]["infinite_ammo"]; + this->weapons.increased_damage = j["weapons"]["increased_damage"]; this->weapons.infinite_mag = j["weapons"]["infinite_mag"]; + this->weapons.no_recoil = j["weapons"]["no_recoil"]; + this->weapons.no_spread = j["weapons"]["no_spread"]; this->window.debug = j["window"]["debug"]; this->window.handling = j["window"]["handling"]; @@ -283,10 +295,12 @@ namespace big }, { "self", { + { "clean_player", this->self.clean_player }, { "godmode", this->self.godmode }, - { "off_radar", this->self.off_radar }, + { "invisibility", this->self.invisibility }, { "never_wanted", this->self.never_wanted }, { "no_ragdoll", this->self.no_ragdoll }, + { "off_radar", this->self.off_radar }, { "super_run", this->self.super_run }, { @@ -341,8 +355,12 @@ namespace big { "weapons", { { "custom_weapon", (int)this->weapons.custom_weapon }, + { "force_crosshairs", this->weapons.force_crosshairs }, + { "increased_damage", this->weapons.increased_damage }, { "infinite_ammo", this->weapons.infinite_ammo }, - { "infinite_mag", this->weapons.infinite_mag } + { "infinite_mag", this->weapons.infinite_mag }, + { "no_recoil", this->weapons.no_recoil }, + { "no_spread", this->weapons.no_spread } } }, { diff --git a/BigBaseV2/src/gta/Weapons.h b/BigBaseV2/src/gta/Weapons.h index 5fd8138b..693d5486 100644 --- a/BigBaseV2/src/gta/Weapons.h +++ b/BigBaseV2/src/gta/Weapons.h @@ -30,6 +30,8 @@ enum WeaponHashes : Hash WEAPON_CROWBAR = RAGE_JOAAT("WEAPON_CROWBAR"), WEAPON_DAGGER = RAGE_JOAAT("WEAPON_DAGGER"), WEAPON_DOUBLEACTION = RAGE_JOAAT("WEAPON_DOUBLEACTION"), + WEAPON_EMPLAUNCHER = RAGE_JOAAT("WEAPON_EMPLAUNCHER"), + WEAPON_FERTILIZERCAN = RAGE_JOAAT("WEAPON_FERTILIZERCAN"), WEAPON_FIREEXTINGUISHER = RAGE_JOAAT("WEAPON_FIREEXTINGUISHER"), WEAPON_FIREWORK = RAGE_JOAAT("WEAPON_FIREWORK"), WEAPON_FLARE = RAGE_JOAAT("WEAPON_FLARE"), @@ -42,7 +44,9 @@ enum WeaponHashes : Hash WEAPON_GUSENBERG = RAGE_JOAAT("WEAPON_GUSENBERG"), WEAPON_HAMMER = RAGE_JOAAT("WEAPON_HAMMER"), WEAPON_HATCHET = RAGE_JOAAT("WEAPON_HATCHET"), + WEAPON_HAZARDCAN = RAGE_JOAAT("WEAPON_HAZARDCAN"), WEAPON_HEAVYPISTOL = RAGE_JOAAT("WEAPON_HEAVYPISTOL"), + WEAPON_HEAVYRIFLE = RAGE_JOAAT("WEAPON_HEAVYRIFLE"), WEAPON_HEAVYSHOTGUN = RAGE_JOAAT("WEAPON_HEAVYSHOTGUN"), WEAPON_HEAVYSNIPER = RAGE_JOAAT("WEAPON_HEAVYSNIPER"), WEAPON_HEAVYSNIPER_MK2 = RAGE_JOAAT("WEAPON_HEAVYSNIPER_MK2"), @@ -56,6 +60,7 @@ enum WeaponHashes : Hash WEAPON_MARKSMANRIFLE_MK2 = RAGE_JOAAT("WEAPON_MARKSMANRIFLE_MK2"), WEAPON_MG = RAGE_JOAAT("WEAPON_MG"), WEAPON_MICROSMG = RAGE_JOAAT("WEAPON_MICROSMG"), + WEAPON_MILITARYRIFLE = RAGE_JOAAT("WEAPON_MILITARYRIFLE"), WEAPON_MINIGUN = RAGE_JOAAT("WEAPON_MINIGUN"), WEAPON_MINISMG = RAGE_JOAAT("WEAPON_MINISMG"), WEAPON_MOLOTOV = RAGE_JOAAT("WEAPON_MOLOTOV"), @@ -91,12 +96,113 @@ enum WeaponHashes : Hash WEAPON_STINGER = RAGE_JOAAT("WEAPON_STINGER"), WEAPON_STONE_HATCHET = RAGE_JOAAT("WEAPON_STONE_HATCHET"), WEAPON_STUNGUN = RAGE_JOAAT("WEAPON_STUNGUN"), + WEAPON_STUNGUN_MP = RAGE_JOAAT("WEAPON_STUNGUN_MP"), WEAPON_SWITCHBLADE = RAGE_JOAAT("WEAPON_SWITCHBLADE"), WEAPON_UNARMED = RAGE_JOAAT("WEAPON_UNARMED"), WEAPON_VINTAGEPISTOL = RAGE_JOAAT("WEAPON_VINTAGEPISTOL"), WEAPON_WRENCH = RAGE_JOAAT("WEAPON_WRENCH"), }; +constexpr uint32_t weapon_list[] +{ + WEAPON_ADVANCEDRIFLE, + WEAPON_APPISTOL, + WEAPON_ASSAULTRIFLE, + WEAPON_ASSAULTRIFLE_MK2, + WEAPON_ASSAULTSHOTGUN, + WEAPON_ASSAULTSMG, + WEAPON_BALL, + WEAPON_BAT, + WEAPON_BATTLEAXE, + WEAPON_BOTTLE, + WEAPON_BULLPUPRIFLE, + WEAPON_BULLPUPRIFLE_MK2, + WEAPON_BULLPUPSHOTGUN, + WEAPON_BZGAS, + WEAPON_CARBINERIFLE, + WEAPON_CARBINERIFLE_MK2, + WEAPON_COMBATMG, + WEAPON_COMBATMG_MK2, + WEAPON_COMBATPDW, + WEAPON_COMBATPISTOL, + WEAPON_COMPACTLAUNCHER, + WEAPON_COMPACTRIFLE, + WEAPON_CROWBAR, + WEAPON_DAGGER, + WEAPON_DOUBLEACTION, + WEAPON_EMPLAUNCHER, + WEAPON_FERTILIZERCAN, + WEAPON_FIREEXTINGUISHER, + WEAPON_FIREWORK, + WEAPON_FLARE, + WEAPON_FLAREGUN, + WEAPON_FLASHLIGHT, + WEAPON_GOLFCLUB, + WEAPON_GRENADE, + WEAPON_GRENADELAUNCHER, + WEAPON_GRENADELAUNCHER_SMOKE, + WEAPON_GUSENBERG, + WEAPON_HAMMER, + WEAPON_HATCHET, + WEAPON_HAZARDCAN, + WEAPON_HEAVYPISTOL, + WEAPON_HEAVYRIFLE, + WEAPON_HEAVYSHOTGUN, + WEAPON_HEAVYSNIPER, + WEAPON_HEAVYSNIPER_MK2, + WEAPON_HOMINGLAUNCHER, + WEAPON_KNIFE, + WEAPON_KNUCKLE, + WEAPON_MACHETE, + WEAPON_MACHINEPISTOL, + WEAPON_MARKSMANPISTOL, + WEAPON_MARKSMANRIFLE, + WEAPON_MARKSMANRIFLE_MK2, + WEAPON_MG, + WEAPON_MICROSMG, + WEAPON_MILITARYRIFLE, + WEAPON_MINIGUN, + WEAPON_MINISMG, + WEAPON_MOLOTOV, + WEAPON_MUSKET, + WEAPON_NIGHTSTICK, + WEAPON_PETROLCAN, + WEAPON_PIPEBOMB, + WEAPON_PISTOL, + WEAPON_PISTOL50, + WEAPON_PISTOL_MK2, + WEAPON_POOLCUE, + WEAPON_PROXMINE, + WEAPON_PUMPSHOTGUN, + WEAPON_PUMPSHOTGUN_MK2, + WEAPON_RAILGUN, + WEAPON_RAYCARBINE, + WEAPON_RAYMINIGUN, + WEAPON_RAYPISTOL, + WEAPON_REVOLVER, + WEAPON_REVOLVER_MK2, + WEAPON_RPG, + WEAPON_SAWNOFFSHOTGUN, + WEAPON_SMG, + WEAPON_SMG_MK2, + WEAPON_SMOKEGRENADE, + WEAPON_SNIPERRIFLE, + WEAPON_SNOWBALL, + WEAPON_SNSPISTOL, + WEAPON_SNSPISTOL_MK2, + WEAPON_SPECIALCARBINE, + WEAPON_SPECIALCARBINE_MK2, + WEAPON_STICKYBOMB, + WEAPON_STINGER, + WEAPON_STONE_HATCHET, + WEAPON_STUNGUN, + WEAPON_STUNGUN_MP, + WEAPON_SWITCHBLADE, + WEAPON_UNARMED, + WEAPON_VINTAGEPISTOL, + WEAPON_WRENCH, +}; + enum Gadgets : Hash { GADGET_OBJECT = RAGE_JOAAT("OBJECT"), diff --git a/BigBaseV2/src/gui.cpp b/BigBaseV2/src/gui.cpp index 2d361517..211b60eb 100644 --- a/BigBaseV2/src/gui.cpp +++ b/BigBaseV2/src/gui.cpp @@ -11,7 +11,9 @@ #include "renderer.hpp" #include "script.hpp" + #include +#include "widgets/imgui_hotkey.hpp" #include "views/view.hpp" #include "services/notification_service.hpp" @@ -90,7 +92,7 @@ namespace big void gui::script_init() { - g_notification_service->push("Welcome", "Loaded YimMenu. Press INSERT to open"); + g_notification_service->push("Welcome", fmt::format("Loaded YimMenu. Press {} to open", ImGui::key_names[g->settings.hotkeys.menu_toggle])); } void gui::script_on_tick() diff --git a/BigBaseV2/src/util/entity.hpp b/BigBaseV2/src/util/entity.hpp index 42bdc4ee..9b9a4bed 100644 --- a/BigBaseV2/src/util/entity.hpp +++ b/BigBaseV2/src/util/entity.hpp @@ -14,6 +14,14 @@ namespace big::entity OBJECT::CREATE_OBJECT(hash, location.x, location.y, location.z - 1.f, true, false, false); } + inline void clean_ped(Ped ped) + { + PED::CLEAR_PED_BLOOD_DAMAGE(PLAYER::PLAYER_PED_ID()); + PED::CLEAR_PED_WETNESS(PLAYER::PLAYER_PED_ID()); + PED::CLEAR_PED_ENV_DIRT(PLAYER::PLAYER_PED_ID()); + PED::RESET_PED_VISIBLE_DAMAGE(PLAYER::PLAYER_PED_ID()); + } + inline void delete_entity(Entity ent) { ENTITY::DETACH_ENTITY(ent, 1, 1); diff --git a/BigBaseV2/src/views/view_self.cpp b/BigBaseV2/src/views/view_self.cpp index 62d76ab6..3ddaee4b 100644 --- a/BigBaseV2/src/views/view_self.cpp +++ b/BigBaseV2/src/views/view_self.cpp @@ -31,6 +31,21 @@ namespace big ImGui::Checkbox("Super Run", &g->self.super_run); ImGui::Checkbox("No Idle Kick", &g->tunables.no_idle_kick); + ImGui::EndGroup(); + ImGui::SameLine(); + ImGui::BeginGroup(); + + ImGui::Checkbox("Invisibility", &g->self.invisibility); + ImGui::Checkbox("Keep Player Clean", &g->self.clean_player); + if (ImGui::Button("Clean Player")) + { + QUEUE_JOB_BEGIN_CLAUSE() + { + entity::clean_ped(PLAYER::PLAYER_PED_ID()); + } + QUEUE_JOB_END_CLAUSE + } + ImGui::EndGroup(); ImGui::TreePop(); diff --git a/BigBaseV2/src/views/view_weapons.cpp b/BigBaseV2/src/views/view_weapons.cpp index cbe865f1..28cf9aad 100644 --- a/BigBaseV2/src/views/view_weapons.cpp +++ b/BigBaseV2/src/views/view_weapons.cpp @@ -1,4 +1,7 @@ #include "core/data/custom_weapons.hpp" +#include "fiber_pool.hpp" +#include "gta/Weapons.h" +#include "script.hpp" #include "views/view.hpp" namespace big @@ -15,6 +18,35 @@ namespace big ImGui::TreePop(); } + if (ImGui::TreeNode("Misc")) + { + ImGui::Checkbox("Force Crosshairs", &g->weapons.force_crosshairs); + + ImGui::SameLine(); + + ImGui::Checkbox("No Recoil", &g->weapons.no_recoil); + + ImGui::SameLine(); + + ImGui::Checkbox("No Spread", &g->weapons.no_spread); + + if (ImGui::Button("Get All Weapons")) + { + QUEUE_JOB_BEGIN_CLAUSE() + { + for (auto const& weapon : weapon_list) { + WEAPON::GIVE_DELAYED_WEAPON_TO_PED(PLAYER::PLAYER_PED_ID(), weapon, 9999, false); + } + WEAPON::GIVE_DELAYED_WEAPON_TO_PED(PLAYER::PLAYER_PED_ID(), -72657034, 0, true); + } + QUEUE_JOB_END_CLAUSE + } + + ImGui::SliderFloat("Damage Multiplier", &g->weapons.increased_damage, 1.f, 10.f, "%.1f"); + + ImGui::TreePop(); + } + if (ImGui::TreeNode("Custom Weapons")) { CustomWeapon selected = g->weapons.custom_weapon;