2023-03-01 21:27:15 +00:00
# include "core/data/bullet_impact_types.hpp"
2022-05-04 19:16:40 +02:00
# include "core/data/custom_weapons.hpp"
2023-03-01 21:27:15 +00:00
# include "core/data/special_ammo_types.hpp"
2022-05-04 19:16:40 +02:00
# include "fiber_pool.hpp"
2023-03-01 21:27:15 +00:00
# include "gta/joaat.hpp"
2023-07-14 09:02:47 +00:00
# include "gta/weapons.hpp"
2022-06-30 00:11:54 +02:00
# include "natives.hpp"
2023-03-01 21:27:15 +00:00
# include "pointers.hpp"
2022-07-29 19:51:19 +08:00
# include "services/gta_data/gta_data_service.hpp"
2023-07-09 17:01:42 -04:00
# include "services/persist_weapons/persist_weapons.hpp"
2023-07-14 09:02:47 +00:00
# include "views/view.hpp"
2022-05-04 19:16:40 +02:00
namespace big
{
2023-03-01 21:27:15 +00:00
void view : : weapons ( )
{
2023-06-27 14:05:44 +02:00
ImGui : : SeparatorText ( " AMMO " _T . data ( ) ) ;
2022-05-04 19:16:40 +02:00
2022-11-30 03:16:07 +08:00
ImGui : : BeginGroup ( ) ;
2022-05-04 19:16:40 +02:00
2022-12-22 21:23:32 +00:00
components : : command_checkbox < " infammo " > ( ) ;
2023-07-05 17:29:07 -04:00
components : : command_checkbox < " alwaysfullammo " > ( ) ;
2022-12-22 21:23:32 +00:00
components : : command_checkbox < " infclip " > ( ) ;
2023-03-13 17:10:21 -04:00
components : : command_checkbox < " infrange " > ( ) ;
2023-02-13 20:38:30 +00:00
ImGui : : Checkbox ( " Allow Weapons In Interiors " , & g . weapons . interior_weapon ) ;
2022-05-04 19:16:40 +02:00
2022-11-30 03:16:07 +08:00
ImGui : : EndGroup ( ) ;
ImGui : : SameLine ( ) ;
ImGui : : BeginGroup ( ) ;
2022-05-04 19:16:40 +02:00
2023-06-23 06:43:44 +00:00
ImGui : : Checkbox ( " Increase C4 Limit (Max = 50) " , & g . weapons . increased_c4_limit ) ;
ImGui : : Checkbox ( " Increase Flare Limit (Max = 50) " , & g . weapons . increased_flare_limit ) ;
2023-02-11 05:33:47 +08:00
2022-12-22 21:23:32 +00:00
components : : command_checkbox < " rapidfire " > ( ) ;
2022-11-30 03:16:07 +08:00
2023-02-01 19:46:33 +01:00
ImGui : : Checkbox ( " ENABLE_SPECIAL_AMMO " _T . data ( ) , & g . weapons . ammo_special . toggle ) ;
2023-06-10 14:47:19 +02:00
components : : options_modal ( " Special ammo " , [ ] {
eAmmoSpecialType selected_ammo = g . weapons . ammo_special . type ;
eExplosionTag selected_explosion = g . weapons . ammo_special . explosion_tag ;
2022-10-26 22:10:19 +02:00
2023-06-10 14:47:19 +02:00
if ( ImGui : : BeginCombo ( " SPECIAL_AMMO " _T . data ( ) , SPECIAL_AMMOS [ ( int ) selected_ammo ] . name ) )
2022-05-04 19:16:40 +02:00
{
2023-06-10 14:47:19 +02:00
for ( const auto & special_ammo : SPECIAL_AMMOS )
2022-07-29 19:51:19 +08:00
{
2023-06-10 14:47:19 +02:00
if ( ImGui : : Selectable ( special_ammo . name , special_ammo . type = = selected_ammo ) )
{
g . weapons . ammo_special . type = special_ammo . type ;
}
if ( special_ammo . type = = selected_ammo )
{
ImGui : : SetItemDefaultFocus ( ) ;
}
2022-07-29 19:51:19 +08:00
}
2023-06-10 14:47:19 +02:00
ImGui : : EndCombo ( ) ;
2022-05-04 19:16:40 +02:00
}
2023-06-10 14:47:19 +02:00
if ( ImGui : : BeginCombo ( " BULLET_IMPACT " _T . data ( ) , BULLET_IMPACTS [ selected_explosion ] ) )
2022-07-06 04:55:18 +08:00
{
2023-06-10 14:47:19 +02:00
for ( const auto & [ type , name ] : BULLET_IMPACTS )
2022-07-29 19:51:19 +08:00
{
2023-06-10 14:47:19 +02:00
if ( ImGui : : Selectable ( name , type = = selected_explosion ) )
{
g . weapons . ammo_special . explosion_tag = type ;
}
if ( type = = selected_explosion )
{
ImGui : : SetItemDefaultFocus ( ) ;
}
2022-07-29 19:51:19 +08:00
}
2022-07-06 04:55:18 +08:00
2023-06-10 14:47:19 +02:00
ImGui : : EndCombo ( ) ;
2022-07-06 04:55:18 +08:00
}
2023-06-10 14:47:19 +02:00
} ) ;
2022-07-06 04:55:18 +08:00
2023-06-10 14:47:19 +02:00
ImGui : : EndGroup ( ) ;
2022-07-06 04:55:18 +08:00
2023-06-27 14:05:44 +02:00
ImGui : : SeparatorText ( " MISC " _T . data ( ) ) ;
2022-05-04 19:16:40 +02:00
2022-12-22 21:23:32 +00:00
components : : command_checkbox < " norecoil " > ( ) ;
2022-05-04 19:16:40 +02:00
ImGui : : SameLine ( ) ;
2022-12-22 21:23:32 +00:00
components : : command_checkbox < " nospread " > ( ) ;
2022-05-04 19:16:40 +02:00
2023-03-01 21:27:15 +00:00
components : : button ( " GET_ALL_WEAPONS " _T , [ ] {
2022-10-19 00:30:32 +02:00
for ( const auto & [ _ , weapon ] : g_gta_data_service - > weapons ( ) )
2022-07-29 19:51:19 +08:00
{
2022-10-19 00:30:32 +02:00
WEAPON : : GIVE_DELAYED_WEAPON_TO_PED ( self : : ped , weapon . m_hash , 9999 , false ) ;
2022-05-04 19:16:40 +02:00
}
2022-07-29 19:51:19 +08:00
constexpr auto parachute_hash = RAGE_JOAAT ( " GADGET_PARACHUTE " ) ;
WEAPON : : GIVE_DELAYED_WEAPON_TO_PED ( self : : ped , parachute_hash , 0 , true ) ;
2022-10-19 00:30:32 +02:00
} ) ;
2022-05-23 06:38:45 +08:00
ImGui : : SameLine ( ) ;
2023-03-01 21:27:15 +00:00
components : : button ( " REMOVE_CUR_WEAPON " _T , [ ] {
2022-05-23 06:38:45 +08:00
Hash weaponHash ;
WEAPON : : GET_CURRENT_PED_WEAPON ( self : : ped , & weaponHash , 1 ) ;
2022-07-29 19:51:19 +08:00
if ( weaponHash ! = RAGE_JOAAT ( " WEAPON_UNARMED " ) )
{
2022-05-23 06:38:45 +08:00
WEAPON : : REMOVE_WEAPON_FROM_PED ( self : : ped , weaponHash ) ;
}
2022-10-19 00:30:32 +02:00
} ) ;
2022-05-04 19:16:40 +02:00
2023-03-13 17:10:21 -04:00
components : : command_checkbox < " incrdamage " > ( ) ;
ImGui : : InputFloat ( " Damage " , & g . weapons . increased_damage , .1 , 10 , " %.1f " ) ;
2022-05-04 19:16:40 +02:00
2023-06-27 14:05:44 +02:00
ImGui : : SeparatorText ( " CUSTOM_WEAPONS " _T . data ( ) ) ;
2022-05-04 19:16:40 +02:00
2023-04-15 17:17:43 -04:00
ImGui : : Checkbox ( " Custom Gun only fires when weapon is out " , & g . self . custom_weapon_stop ) ;
2022-12-18 23:15:52 +01:00
CustomWeapon selected = g . weapons . custom_weapon ;
2022-05-04 19:16:40 +02:00
2023-02-01 19:46:33 +01:00
if ( ImGui : : BeginCombo ( " WEAPON " _T . data ( ) , custom_weapons [ ( int ) selected ] . name ) )
2022-05-04 19:16:40 +02:00
{
for ( const custom_weapon & weapon : custom_weapons )
{
if ( ImGui : : Selectable ( weapon . name , weapon . id = = selected ) )
{
2022-12-18 23:15:52 +01:00
g . weapons . custom_weapon = weapon . id ;
2022-05-04 19:16:40 +02:00
}
if ( weapon . id = = selected )
2022-07-29 19:51:19 +08:00
{
2022-05-04 19:16:40 +02:00
ImGui : : SetItemDefaultFocus ( ) ;
2022-07-29 19:51:19 +08:00
}
2022-05-04 19:16:40 +02:00
}
ImGui : : EndCombo ( ) ;
}
switch ( selected )
{
2023-01-16 22:16:06 +01:00
case CustomWeapon : : GRAVITY_GUN :
2023-03-01 21:27:15 +00:00
ImGui : : Checkbox ( " Launch on release " , & g . weapons . gravity_gun . launch_on_release ) ;
break ;
2022-05-04 19:16:40 +02:00
case CustomWeapon : : VEHICLE_GUN :
2022-12-18 23:15:52 +01:00
// this some ugly ass looking code
static char vehicle_gun [ 12 ] ;
std : : memcpy ( vehicle_gun , g . weapons . vehicle_gun_model . c_str ( ) , 12 ) ;
2023-02-01 19:46:33 +01:00
if ( ImGui : : InputTextWithHint ( " SHOOTING_MODEL " _T . data ( ) , " NAME_VEHICLE_MODEL " _T . data ( ) , vehicle_gun , sizeof ( vehicle_gun ) ) )
2022-12-18 23:15:52 +01:00
{
g . weapons . vehicle_gun_model = vehicle_gun ;
}
if ( ImGui : : IsItemActive ( ) )
{
2023-03-01 21:27:15 +00:00
g_fiber_pool - > queue_job ( [ ] {
2022-12-18 23:15:52 +01:00
PAD : : DISABLE_ALL_CONTROL_ACTIONS ( 0 ) ;
} ) ;
}
2022-05-04 19:16:40 +02:00
break ;
2023-07-14 17:31:03 -04:00
case CustomWeapon : : PAINT_GUN :
ImGui : : Checkbox ( " Rainbow Color " , & g . weapons . paintgun . rainbow ) ;
2023-07-23 12:51:57 -04:00
ImGui : : SliderFloat ( " Rainbow Speed " , & g . weapons . paintgun . speed , 0.f , 10.f ) ;
2023-07-14 17:31:03 -04:00
if ( ! g . weapons . paintgun . rainbow ) { ImGui : : ColorEdit4 ( " Paint Gun Color " , g . weapons . paintgun . col ) ; }
2022-05-04 19:16:40 +02:00
}
Feature Additions, GUI Tweaks, Fixes (#975)
* Added view nearby to view header, moved get_entities function to entities and refactored some code. Also implemented a sphere scale to the blackhole as it can get big
* added delete and kill nearby peds and updated ped header
* added some nearby ped looped commands, and some changes to extend the buttons
* add vehicle options to nearby
* add most ciritcal feature kill enemies
* changes to ignore peds based off of some of maybegreat's suggestions, same with ped_rain, removed loose comment. Updated vehicle.hpp, changed size of vehicle buttons and inlined kill enemies
* fixed a problem where the vehicle options crashed + added color
* updated colors and added on disable for ped_rush
* finished and added vehicle rain feature
* added aimbot and triggerbot, added templating to buttons
* update vehicle rain desc
* added vdistance check, player check, police check, enemy check. Added even more commenting... sue me. 3 toggles added for the checks and slider for dist. Will tweak more later
* switched to goto statements instead of continue, should be done now
* removed delete nearby vehicles
* there was no check in get_entities for our local vehicle
2023-02-25 13:33:16 -07:00
2023-06-27 14:05:44 +02:00
ImGui : : SeparatorText ( " Aim Assistance " ) ;
2023-03-01 21:27:15 +00:00
components : : command_checkbox < " triggerbot " > ( ) ;
ImGui : : SameLine ( ) ;
Feature Additions, GUI Tweaks, Fixes (#975)
* Added view nearby to view header, moved get_entities function to entities and refactored some code. Also implemented a sphere scale to the blackhole as it can get big
* added delete and kill nearby peds and updated ped header
* added some nearby ped looped commands, and some changes to extend the buttons
* add vehicle options to nearby
* add most ciritcal feature kill enemies
* changes to ignore peds based off of some of maybegreat's suggestions, same with ped_rain, removed loose comment. Updated vehicle.hpp, changed size of vehicle buttons and inlined kill enemies
* fixed a problem where the vehicle options crashed + added color
* updated colors and added on disable for ped_rush
* finished and added vehicle rain feature
* added aimbot and triggerbot, added templating to buttons
* update vehicle rain desc
* added vdistance check, player check, police check, enemy check. Added even more commenting... sue me. 3 toggles added for the checks and slider for dist. Will tweak more later
* switched to goto statements instead of continue, should be done now
* removed delete nearby vehicles
* there was no check in get_entities for our local vehicle
2023-02-25 13:33:16 -07:00
components : : command_checkbox < " aimbot " > ( ) ;
2023-03-01 21:27:15 +00:00
if ( g . weapons . aimbot . enable )
Feature Additions, GUI Tweaks, Fixes (#975)
* Added view nearby to view header, moved get_entities function to entities and refactored some code. Also implemented a sphere scale to the blackhole as it can get big
* added delete and kill nearby peds and updated ped header
* added some nearby ped looped commands, and some changes to extend the buttons
* add vehicle options to nearby
* add most ciritcal feature kill enemies
* changes to ignore peds based off of some of maybegreat's suggestions, same with ped_rain, removed loose comment. Updated vehicle.hpp, changed size of vehicle buttons and inlined kill enemies
* fixed a problem where the vehicle options crashed + added color
* updated colors and added on disable for ped_rush
* finished and added vehicle rain feature
* added aimbot and triggerbot, added templating to buttons
* update vehicle rain desc
* added vdistance check, player check, police check, enemy check. Added even more commenting... sue me. 3 toggles added for the checks and slider for dist. Will tweak more later
* switched to goto statements instead of continue, should be done now
* removed delete nearby vehicles
* there was no check in get_entities for our local vehicle
2023-02-25 13:33:16 -07:00
{
2023-03-01 21:27:15 +00:00
components : : command_checkbox < " aimatplayer " > ( ) ;
ImGui : : SameLine ( ) ;
components : : command_checkbox < " aimatnpc " > ( ) ;
ImGui : : SameLine ( ) ;
components : : command_checkbox < " aimatpolice " > ( ) ;
ImGui : : SameLine ( ) ;
Feature Additions, GUI Tweaks, Fixes (#975)
* Added view nearby to view header, moved get_entities function to entities and refactored some code. Also implemented a sphere scale to the blackhole as it can get big
* added delete and kill nearby peds and updated ped header
* added some nearby ped looped commands, and some changes to extend the buttons
* add vehicle options to nearby
* add most ciritcal feature kill enemies
* changes to ignore peds based off of some of maybegreat's suggestions, same with ped_rain, removed loose comment. Updated vehicle.hpp, changed size of vehicle buttons and inlined kill enemies
* fixed a problem where the vehicle options crashed + added color
* updated colors and added on disable for ped_rush
* finished and added vehicle rain feature
* added aimbot and triggerbot, added templating to buttons
* update vehicle rain desc
* added vdistance check, player check, police check, enemy check. Added even more commenting... sue me. 3 toggles added for the checks and slider for dist. Will tweak more later
* switched to goto statements instead of continue, should be done now
* removed delete nearby vehicles
* there was no check in get_entities for our local vehicle
2023-02-25 13:33:16 -07:00
components : : command_checkbox < " aimatenemy " > ( ) ;
components : : command_checkbox < " smoothing " > ( ) ;
if ( g . weapons . aimbot . smoothing )
{
ImGui : : SameLine ( ) ;
ImGui : : PushItemWidth ( 220 ) ;
ImGui : : SliderFloat ( " Speed " , & g . weapons . aimbot . smoothing_speed , 1.f , 12.f , " %.1f " ) ;
ImGui : : PopItemWidth ( ) ;
}
ImGui : : PushItemWidth ( 350 ) ;
ImGui : : SliderFloat ( " FOV " , & g . weapons . aimbot . fov , 1.f , 360.f , " %.0f " ) ;
2023-06-22 10:39:13 +02:00
ImGui : : SliderFloat ( " Distance " , & g . weapons . aimbot . distance , 1.f , 1000.f , " %.0f " ) ;
Feature Additions, GUI Tweaks, Fixes (#975)
* Added view nearby to view header, moved get_entities function to entities and refactored some code. Also implemented a sphere scale to the blackhole as it can get big
* added delete and kill nearby peds and updated ped header
* added some nearby ped looped commands, and some changes to extend the buttons
* add vehicle options to nearby
* add most ciritcal feature kill enemies
* changes to ignore peds based off of some of maybegreat's suggestions, same with ped_rain, removed loose comment. Updated vehicle.hpp, changed size of vehicle buttons and inlined kill enemies
* fixed a problem where the vehicle options crashed + added color
* updated colors and added on disable for ped_rush
* finished and added vehicle rain feature
* added aimbot and triggerbot, added templating to buttons
* update vehicle rain desc
* added vdistance check, player check, police check, enemy check. Added even more commenting... sue me. 3 toggles added for the checks and slider for dist. Will tweak more later
* switched to goto statements instead of continue, should be done now
* removed delete nearby vehicles
* there was no check in get_entities for our local vehicle
2023-02-25 13:33:16 -07:00
ImGui : : PopItemWidth ( ) ;
}
2023-07-07 18:52:52 -04:00
2023-07-09 17:01:42 -04:00
if ( ImGui : : CollapsingHeader ( " Ammunation " ) )
2023-07-07 18:52:52 -04:00
{
2023-07-09 17:01:42 -04:00
static Hash selected_weapon_hash , selected_weapon_attachment_hash { } ;
static std : : string selected_weapon , selected_weapon_attachment ;
ImGui : : PushItemWidth ( 300 ) ;
if ( ImGui : : BeginCombo ( " Weapons " , selected_weapon . c_str ( ) ) )
2023-07-07 18:52:52 -04:00
{
2023-07-09 17:01:42 -04:00
for ( auto & weapon : g_gta_data_service - > weapons ( ) )
2023-07-07 18:52:52 -04:00
{
2023-07-09 17:01:42 -04:00
bool is_selected = weapon . second . m_hash = = selected_weapon_hash ;
if ( weapon . second . m_display_name ! = " NULL " & & ImGui : : Selectable ( weapon . second . m_display_name . c_str ( ) , is_selected , ImGuiSelectableFlags_None ) )
{
selected_weapon = weapon . second . m_display_name ;
selected_weapon_hash = weapon . second . m_hash ;
selected_weapon_attachment_hash = { } ;
selected_weapon_attachment . clear ( ) ;
}
if ( is_selected )
2023-07-11 17:14:35 -04:00
{
2023-07-09 17:01:42 -04:00
ImGui : : SetItemDefaultFocus ( ) ;
2023-07-11 17:14:35 -04:00
}
2023-07-07 18:52:52 -04:00
}
2023-07-09 17:01:42 -04:00
ImGui : : EndCombo ( ) ;
2023-07-07 18:52:52 -04:00
}
2023-07-09 17:01:42 -04:00
ImGui : : PopItemWidth ( ) ;
ImGui : : SameLine ( ) ;
components : : button ( " Give Weapon " , [ ] {
WEAPON : : GIVE_WEAPON_TO_PED ( self : : ped , selected_weapon_hash , 9999 , false , true ) ;
} ) ;
ImGui : : SameLine ( ) ;
components : : button ( " Remove Weapon " , [ ] {
WEAPON : : REMOVE_WEAPON_FROM_PED ( self : : ped , selected_weapon_hash ) ;
} ) ;
2023-07-07 18:52:52 -04:00
2023-07-09 17:01:42 -04:00
ImGui : : PushItemWidth ( 250 ) ;
if ( ImGui : : BeginCombo ( " Attachments " , selected_weapon_attachment . c_str ( ) ) )
2023-07-07 18:52:52 -04:00
{
2023-07-14 17:31:03 -04:00
weapon_item weapon = g_gta_data_service - > weapon_by_hash ( selected_weapon_hash ) ;
2023-07-09 17:01:42 -04:00
if ( ! weapon . m_attachments . empty ( ) )
2023-07-07 18:52:52 -04:00
{
2023-07-09 17:01:42 -04:00
for ( std : : string attachment : weapon . m_attachments )
2023-07-07 18:52:52 -04:00
{
2023-07-14 17:31:03 -04:00
weapon_component attachment_component = g_gta_data_service - > weapon_component_by_name ( attachment ) ;
2023-07-09 17:01:42 -04:00
std : : string attachment_name = attachment_component . m_display_name ;
Hash attachment_hash = attachment_component . m_hash ;
if ( attachment_hash = = NULL )
{
attachment_name = attachment ;
attachment_hash = rage : : joaat ( attachment ) ;
}
bool is_selected = attachment_hash = = selected_weapon_attachment_hash ;
std : : string display_name = attachment_name . append ( " ## " ) . append ( std : : to_string ( attachment_hash ) ) ;
if ( ImGui : : Selectable ( display_name . c_str ( ) , is_selected , ImGuiSelectableFlags_None ) )
{
selected_weapon_attachment = attachment_name ;
selected_weapon_attachment_hash = attachment_hash ;
}
if ( is_selected )
2023-07-11 17:14:35 -04:00
{
2023-07-09 17:01:42 -04:00
ImGui : : SetItemDefaultFocus ( ) ;
2023-07-11 17:14:35 -04:00
}
2023-07-07 18:52:52 -04:00
}
}
2023-07-09 17:01:42 -04:00
ImGui : : EndCombo ( ) ;
}
ImGui : : SameLine ( ) ;
components : : button ( " Add to Weapon " , [ ] {
WEAPON : : GIVE_WEAPON_COMPONENT_TO_PED ( self : : ped , selected_weapon_hash , selected_weapon_attachment_hash ) ;
} ) ;
ImGui : : SameLine ( ) ;
components : : button ( " Remove from Weapon " , [ ] {
WEAPON : : REMOVE_WEAPON_COMPONENT_FROM_PED ( self : : ped , selected_weapon_hash , selected_weapon_attachment_hash ) ;
} ) ;
ImGui : : PopItemWidth ( ) ;
2023-07-07 18:52:52 -04:00
2023-07-09 17:01:42 -04:00
static const char * default_tints [ ] { " Black tint " , " Green tint " , " Gold tint " , " Pink tint " , " Army tint " , " LSPD tint " , " Orange tint " , " Platinum tint " } ;
static const char * mk2_tints [ ] { " Classic Black " , " Classic Grey " , " Classic Two - Tone " , " Classic White " , " Classic Beige " , " Classic Green " , " Classic Blue " , " Classic Earth " , " Classic Brown & Black " , " Red Contrast " , " Blue Contrast " , " Yellow Contrast " , " Orange Contrast " , " Bold Pink " , " Bold Purple & Yellow " , " Bold Orange " , " Bold Green & Purple " , " Bold Red Features " , " Bold Green Features " , " Bold Cyan Features " , " Bold Yellow Features " , " Bold Red & White " , " Bold Blue & White " , " Metallic Gold " , " Metallic Platinum " , " Metallic Grey & Lilac " , " Metallic Purple & Lime " , " Metallic Red " , " Metallic Green " , " Metallic Blue " , " Metallic White & Aqua " , " Metallic Red & Yellow " } ;
static int tint ;
2023-07-07 18:52:52 -04:00
2023-07-09 17:01:42 -04:00
if ( selected_weapon . ends_with ( " Mk II " ) )
{
ImGui : : Combo ( " Tints " , & tint , mk2_tints , IM_ARRAYSIZE ( mk2_tints ) ) ;
}
else
{
ImGui : : Combo ( " Tints " , & tint , default_tints , IM_ARRAYSIZE ( default_tints ) ) ;
}
ImGui : : SameLine ( ) ;
components : : button ( " Apply " , [ ] {
WEAPON : : SET_PED_WEAPON_TINT_INDEX ( self : : ped , selected_weapon_hash , tint ) ;
} ) ;
2023-07-07 18:52:52 -04:00
}
2023-07-09 17:01:42 -04:00
if ( ImGui : : CollapsingHeader ( " Persist Weapons " ) )
2023-07-07 18:52:52 -04:00
{
2023-07-14 09:02:47 +00:00
ImGui : : Checkbox ( " Enabled##persist_weapons " , & g . persist_weapons . enabled ) ;
2023-07-09 17:01:42 -04:00
static std : : string selected_loadout = g . persist_weapons . weapon_loadout_file ;
ImGui : : PushItemWidth ( 250 ) ;
if ( ImGui : : BeginListBox ( " Saved Loadouts " , ImVec2 ( 200 , 200 ) ) )
{
2023-07-14 17:31:03 -04:00
for ( std : : string filename : persist_weapons : : list_weapon_loadouts ( ) )
2023-07-09 17:01:42 -04:00
{
if ( components : : selectable ( filename , filename = = selected_loadout ) )
{
selected_loadout = filename ;
}
}
ImGui : : EndListBox ( ) ;
}
ImGui : : SameLine ( ) ;
ImGui : : BeginGroup ( ) ;
static std : : string input_file_name ;
2023-07-26 22:22:40 +02:00
components : : input_text_with_hint ( " Weapon Loadout Filename " , " Loadout Name " , input_file_name ) ;
2023-07-09 17:01:42 -04:00
components : : button ( " Save Loadout " , [ ] {
persist_weapons : : save_weapons ( input_file_name ) ;
input_file_name . clear ( ) ;
} ) ;
ImGui : : SameLine ( ) ;
components : : button ( " Load Loadout " , [ ] {
persist_weapons : : give_player_loadout ( selected_loadout ) ;
} ) ;
ImGui : : SameLine ( ) ;
components : : button ( " Set Loadout " , [ ] {
persist_weapons : : set_weapon_loadout ( selected_loadout ) ;
} ) ;
ImGui : : Text ( std : : format ( " Current Loadout: {}: " , g . persist_weapons . weapon_loadout_file ) . data ( ) ) ;
ImGui : : EndGroup ( ) ;
ImGui : : PopItemWidth ( ) ;
2023-07-07 18:52:52 -04:00
}
2023-07-11 17:14:35 -04:00
if ( ImGui : : CollapsingHeader ( " Weapon Hotkeys " ) )
{
2023-07-14 09:02:47 +00:00
ImGui : : Checkbox ( " Enabled##weapon_hotkeys " , & g . weapons . enable_weapon_hotkeys ) ;
2023-07-11 17:14:35 -04:00
if ( ImGui : : IsItemHovered ( ) )
{
ImGui : : SetTooltip ( " This will select the next weapon in the hotkey list. \r \n The first weapon in the list is the first weapon it will select, then the second is the one it will select after and so on. \r \n After the end of the list, it will wrap back to the first weapon. " ) ;
}
static int selected_key = 0 ;
2023-07-14 09:02:47 +00:00
const char * const keys [ ] { " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " } ;
2023-07-11 17:14:35 -04:00
ImGui : : PushItemWidth ( 250 ) ;
ImGui : : Combo ( " Key " , & selected_key , keys , IM_ARRAYSIZE ( keys ) ) ;
ImGui : : PopItemWidth ( ) ;
if ( ! g . weapons . weapon_hotkeys [ selected_key ] . empty ( ) )
{
int counter { } ;
for ( auto & weapon_hash : g . weapons . weapon_hotkeys [ selected_key ] )
{
ImGui : : PushID ( counter ) ;
2023-07-14 17:31:03 -04:00
weapon_item weapon = g_gta_data_service - > weapon_by_hash ( weapon_hash ) ;
2023-07-11 17:14:35 -04:00
ImGui : : PushItemWidth ( 300 ) ;
if ( ImGui : : BeginCombo ( " Weapons " , weapon . m_display_name . c_str ( ) ) )
{
for ( auto & weapon : g_gta_data_service - > weapons ( ) )
{
if ( weapon . second . m_display_name = = " NULL " )
{
continue ;
}
bool is_selected = weapon . second . m_hash = = weapon_hash ;
if ( ImGui : : Selectable ( weapon . second . m_display_name . c_str ( ) , is_selected , ImGuiSelectableFlags_None ) )
{
weapon_hash = weapon . second . m_hash ;
}
if ( is_selected )
{
ImGui : : SetItemDefaultFocus ( ) ;
}
}
ImGui : : EndCombo ( ) ;
}
ImGui : : SameLine ( ) ;
components : : button ( " Set To Current Weapon " , [ & weapon_hash ] {
WEAPON : : GET_CURRENT_PED_WEAPON ( self : : ped , & weapon_hash , NULL ) ;
if ( weapon_hash = = NULL )
{
WEAPON : : GET_CURRENT_PED_VEHICLE_WEAPON ( self : : ped , & weapon_hash ) ;
}
} ) ;
ImGui : : SameLine ( ) ;
if ( ImGui : : Button ( " Remove Weapon " ) )
{
g . weapons . weapon_hotkeys [ selected_key ] . erase ( g . weapons . weapon_hotkeys [ selected_key ] . begin ( ) + counter ) ;
}
ImGui : : PopID ( ) ;
ImGui : : PopItemWidth ( ) ;
counter + + ;
}
}
if ( ImGui : : Button ( " Add Weapon " ) )
{
g . weapons . weapon_hotkeys [ selected_key ] . push_back ( WEAPON_UNARMED ) ;
}
}
2022-05-04 19:16:40 +02:00
}
2022-06-27 15:59:25 +02:00
}