diff --git a/src/core/settings.hpp b/src/core/settings.hpp index 16463cf5..02eaf121 100644 --- a/src/core/settings.hpp +++ b/src/core/settings.hpp @@ -772,8 +772,9 @@ namespace big bool show_infinite_mag = false; bool show_aimbot = false; bool show_triggerbot = false; + bool show_invisibility = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(ingame_overlay_indicators, show_player_godmode, show_off_radar, show_vehicle_godmode, show_never_wanted, show_always_full_ammo, show_infinite_ammo, show_infinite_mag, show_aimbot, show_triggerbot) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(ingame_overlay_indicators, show_player_godmode, show_off_radar, show_vehicle_godmode, show_never_wanted, show_always_full_ammo, show_infinite_ammo, show_infinite_mag, show_aimbot, show_triggerbot, show_invisibility) } ingame_overlay_indicators{}; struct vehicle_control @@ -786,7 +787,7 @@ namespace big NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle_control, operation_animation, max_summon_range, render_distance_on_veh) } vehicle_control{}; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(window, background_color, demo, text_color, button_color, frame_color, gui_scale, switched_view, ingame_overlay, vehicle_control) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(window, background_color, demo, text_color, button_color, frame_color, gui_scale, switched_view, ingame_overlay, vehicle_control, ingame_overlay_indicators) } window{}; struct context_menu diff --git a/src/gta/enums.hpp b/src/gta/enums.hpp index 321b8975..6cccc613 100644 --- a/src/gta/enums.hpp +++ b/src/gta/enums.hpp @@ -1910,6 +1910,15 @@ enum class eDoorId VEH_EXT_BOOT }; +enum class eWindowId +{ + WINDOW_INVALID_ID = -1, + FRONT_LEFT_WINDOW = 0, + FRONT_RIGHT_WINDOW = 1, + REAR_LEFT_WINDOW = 2, + REAR_RIGHT_WINDOW = 3, +}; + enum class eVehicleSeats { DRIVER = -1, @@ -1920,15 +1929,11 @@ enum class eVehicleSeats OUTSIDE_RIGHT, }; -enum class eCombatAbilityLevel{ +enum class eCombatAbilityLevel +{ POOR, AVERAGE, PROFESSIONAL }; -NLOHMANN_JSON_SERIALIZE_ENUM(eCombatAbilityLevel, - { - {eCombatAbilityLevel::POOR, "poor"}, - {eCombatAbilityLevel::AVERAGE, "average"}, - {eCombatAbilityLevel::PROFESSIONAL, "professional"} - }) +NLOHMANN_JSON_SERIALIZE_ENUM(eCombatAbilityLevel, {{eCombatAbilityLevel::POOR, "poor"}, {eCombatAbilityLevel::AVERAGE, "average"}, {eCombatAbilityLevel::PROFESSIONAL, "professional"}}) diff --git a/src/services/vehicle/vehicle_control_service.cpp b/src/services/vehicle/vehicle_control_service.cpp index dffbb5bd..54f06702 100644 --- a/src/services/vehicle/vehicle_control_service.cpp +++ b/src/services/vehicle/vehicle_control_service.cpp @@ -125,6 +125,14 @@ namespace big vehicle::operate_vehicle_door(m_controlled_vehicle.handle, door, open); } + void vehicle_control::operate_window(eWindowId window, bool open) + { + if (g.window.vehicle_control.operation_animation) + animated_vehicle_operation(self::ped); + + vehicle::operate_vehicle_window(m_controlled_vehicle.handle, window, open); + } + void vehicle_control::operate_lights(bool headlights, bool highbeams) { if (g.window.vehicle_control.operation_animation) diff --git a/src/services/vehicle/vehicle_control_service.hpp b/src/services/vehicle/vehicle_control_service.hpp index a5aa7fcf..c4060d0d 100644 --- a/src/services/vehicle/vehicle_control_service.hpp +++ b/src/services/vehicle/vehicle_control_service.hpp @@ -3,10 +3,11 @@ namespace big { - constexpr auto MAX_VEHICLE_DOORS = 6; + constexpr auto MAX_VEHICLE_DOORS = 6; + constexpr auto MAX_VEHICLE_WINDOWS = 4; constexpr auto MAX_VEHICLE_LOCK_STATES = 11; - constexpr auto VEH_OP_ANIM_DICT = "ANIM@MP_PLAYER_INTMENU@KEY_FOB@"; - constexpr auto VEH_OP_ANIM = "FOB_CLICK"; + constexpr auto VEH_OP_ANIM_DICT = "ANIM@MP_PLAYER_INTMENU@KEY_FOB@"; + constexpr auto VEH_OP_ANIM = "FOB_CLICK"; struct vehicle_door { @@ -17,6 +18,11 @@ namespace big bool valid; }; + struct vehicle_window + { + eWindowId id; + }; + struct controlled_vehicle { @@ -24,6 +30,7 @@ namespace big CVehicle* ptr; char model_name[100]; vehicle_door doors[6]; + vehicle_window windows[4]; int doorCount; eVehicleLockState lockstate; bool engine; @@ -32,8 +39,7 @@ namespace big bool radio; int radiochannel; int convertibelstate; - int headlights, - highbeams; + int headlights, highbeams; }; class vehicle_control @@ -62,6 +68,7 @@ namespace big void animated_vehicle_operation(Ped ped); void operate_door(eDoorId, bool); + void operate_window(eWindowId, bool); void operate_lights(bool headlights, bool highbeams); void operate_neons(int index, bool toggle); void summon_vehicle(); diff --git a/src/util/vehicle.hpp b/src/util/vehicle.hpp index 1416ca62..962994be 100644 --- a/src/util/vehicle.hpp +++ b/src/util/vehicle.hpp @@ -746,6 +746,35 @@ namespace big::vehicle return success; } + inline bool operate_vehicle_window(Vehicle veh, eWindowId windowId, bool open) + { + bool success = false; + if (ENTITY::DOES_ENTITY_EXIST(veh)) + { + for (int i = 0; i < 4; i++) + { + if (windowId == eWindowId::WINDOW_INVALID_ID) + { + if (open) + VEHICLE::ROLL_DOWN_WINDOWS(veh); + else + VEHICLE::ROLL_UP_WINDOW(veh, i); + } + + if ((int)windowId == i) + { + if (open) + VEHICLE::ROLL_DOWN_WINDOW(veh, i); + else + VEHICLE::ROLL_UP_WINDOW(veh, i); + + success = true; + } + } + } + return success; + } + inline bool operate_vehicle_headlights(Vehicle veh, bool lights, bool highbeams) { if (ENTITY::DOES_ENTITY_EXIST(veh)) diff --git a/src/views/core/view_overlay.cpp b/src/views/core/view_overlay.cpp index d141a561..769b78df 100644 --- a/src/views/core/view_overlay.cpp +++ b/src/views/core/view_overlay.cpp @@ -58,6 +58,9 @@ namespace big if (g.window.ingame_overlay_indicators.show_triggerbot) components::overlay_indicator("Triggerbot", g.weapons.triggerbot); + + if (g.window.ingame_overlay_indicators.show_invisibility) + components::overlay_indicator("Invisibility", g.self.invisibility); } if (g.window.ingame_overlay.show_position && g_local_player) diff --git a/src/views/settings/view_gui_settings.cpp b/src/views/settings/view_gui_settings.cpp index ae96250c..9d3ddf5a 100644 --- a/src/views/settings/view_gui_settings.cpp +++ b/src/views/settings/view_gui_settings.cpp @@ -69,13 +69,16 @@ namespace big ImGui::Checkbox("Show Vehicle Godmode", &g.window.ingame_overlay_indicators.show_vehicle_godmode); ImGui::Checkbox("Show Never Wanted", &g.window.ingame_overlay_indicators.show_never_wanted); ImGui::EndGroup(); + ImGui::SameLine(); + ImGui::BeginGroup(); ImGui::Checkbox("Show Infinite Ammo", &g.window.ingame_overlay_indicators.show_infinite_ammo); ImGui::Checkbox("Show Always Full Ammo", &g.window.ingame_overlay_indicators.show_always_full_ammo); ImGui::Checkbox("Show Infinite Magazine", &g.window.ingame_overlay_indicators.show_infinite_mag); ImGui::Checkbox("Show Aimbot", &g.window.ingame_overlay_indicators.show_aimbot); ImGui::Checkbox("Show Triggerbot", &g.window.ingame_overlay_indicators.show_triggerbot); + ImGui::Checkbox("Show Invisibility", &g.window.ingame_overlay_indicators.show_invisibility); ImGui::EndGroup(); ImGui::TreePop(); diff --git a/src/views/view_vehicle_control.cpp b/src/views/view_vehicle_control.cpp index f3e92ccf..bb0c82fa 100644 --- a/src/views/view_vehicle_control.cpp +++ b/src/views/view_vehicle_control.cpp @@ -93,7 +93,7 @@ namespace big } ImGui::SameLine(300); - + const auto button_label = g_vehicle_control_service.m_controlled_vehicle.doors[i].open ? "CLOSE"_T : "OPEN"_T; if (components::button(button_label)) { @@ -109,6 +109,48 @@ namespace big ImGui::EndGroup(); } + void render_windows_tab() + { + const char* const windownames[4]{ + "Front left", + "Front right", + "Back left", + "Back right", + }; + + ImGui::BeginGroup(); + ImGui::Spacing(); + ImGui::SetNextItemWidth(200); + components::button("Roll Down All", [] { + g_vehicle_control_service.operate_window(eWindowId::WINDOW_INVALID_ID, true); + }); + ImGui::SameLine(); + components::button("Roll Up All", [] { + g_vehicle_control_service.operate_window(eWindowId::WINDOW_INVALID_ID, false); + }); + ImGui::EndGroup(); + + ImGui::Spacing(); + ImGui::Separator(); + + ImGui::BeginGroup(); + for (int i = 0; i < 4; i++) + { + ImGui::SetNextItemWidth(200); + ImGui::PushID(i); + ImGui::Text(windownames[i]); + ImGui::SameLine(300); + components::button("Roll Down", [i] { + g_vehicle_control_service.operate_window((eWindowId)i, true); + }); + ImGui::SameLine(); + components::button("Roll Up", [i] { + g_vehicle_control_service.operate_window((eWindowId)i, false); + }); + ImGui::PopID(); + } + } + void render_lights_tab() { const char* const neonnames[4]{ @@ -321,6 +363,13 @@ namespace big ImGui::EndTabItem(); } + if (ImGui::BeginTabItem("Windows")) + { + render_windows_tab(); + + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Lights")) { render_lights_tab();