diff --git a/src/backend/looped/vehicle/keep_vehicle_clean.cpp b/src/backend/looped/vehicle/keep_vehicle_clean.cpp new file mode 100644 index 00000000..ed934a38 --- /dev/null +++ b/src/backend/looped/vehicle/keep_vehicle_clean.cpp @@ -0,0 +1,21 @@ +#include "backend/looped_command.hpp" +#include "natives.hpp" + +namespace big +{ + class keep_vehicle_clean : looped_command + { + using looped_command::looped_command; + + virtual void on_tick() override + { + if (ENTITY::DOES_ENTITY_EXIST(self::veh)) + { + VEHICLE::SET_VEHICLE_DIRT_LEVEL(self::veh, 0.0f); + } + } + }; + + keep_vehicle_clean + g_keep_vehicle_clean("keepvehicleclean", "Keep Vehicle Clean", "Keeps the vehicle clean", g.vehicle.keep_vehicle_clean); +} \ No newline at end of file diff --git a/src/core/settings.hpp b/src/core/settings.hpp index 0487ea64..9248c925 100644 --- a/src/core/settings.hpp +++ b/src/core/settings.hpp @@ -680,6 +680,7 @@ namespace big bool disable_engine_auto_start = false; bool change_engine_state_immediately = false; bool keep_engine_running = false; + bool keep_vehicle_clean = false; bool vehinvisibility = false; bool localveh_visibility = false; bool localped_visibility = true; @@ -688,7 +689,7 @@ namespace big bool unlimited_weapons = false; bool siren_mute = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle, speedo_meter, fly, rainbow_paint, speed_unit, god_mode, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_water, proof_mask, auto_drive_destination, auto_drive_style, auto_drive_speed, auto_turn_signals, boost_behavior, drive_on_water, horn_boost, instant_brake, block_homing, seatbelt, turn_signals, vehicle_jump, keep_vehicle_repaired, no_water_collision, disable_engine_auto_start, change_engine_state_immediately, keep_engine_running, vehinvisibility, localveh_visibility, localped_visibility, keep_on_ground, no_collision, unlimited_weapons, siren_mute) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(vehicle, speedo_meter, fly, rainbow_paint, speed_unit, god_mode, proof_bullet, proof_fire, proof_collision, proof_melee, proof_explosion, proof_steam, proof_water, proof_mask, auto_drive_destination, auto_drive_style, auto_drive_speed, auto_turn_signals, boost_behavior, drive_on_water, horn_boost, instant_brake, block_homing, seatbelt, turn_signals, vehicle_jump, keep_vehicle_repaired, no_water_collision, disable_engine_auto_start, change_engine_state_immediately, keep_engine_running, keep_vehicle_clean, vehinvisibility, localveh_visibility, localped_visibility, keep_on_ground, no_collision, unlimited_weapons, siren_mute) } vehicle{}; struct weapons diff --git a/src/views/vehicle/view_fun_vehicle.cpp b/src/views/vehicle/view_fun_vehicle.cpp index bb73e694..75b8b27e 100644 --- a/src/views/vehicle/view_fun_vehicle.cpp +++ b/src/views/vehicle/view_fun_vehicle.cpp @@ -14,7 +14,6 @@ namespace big { void view::fun_vehicle() { - ImGui::SeparatorText("SEAT_CHANGER"_T.data()); { static std::map seats; @@ -134,6 +133,34 @@ namespace big if (components::button("EMERGENCY_STOP"_T)) g.vehicle.auto_drive_destination = AutoDriveDestination::EMERGENCY_STOP; } + + ImGui::SeparatorText("DIRT_LEVEL"_T.data()); + { + if (!ENTITY::DOES_ENTITY_EXIST(self::veh)) + { + ImGui::Text("PLEASE_ENTER_VEHICLE"_T.data()); + return; + } + + if (g.vehicle.keep_vehicle_clean) + { + ImGui::Text("KEEP_VEHICLE_CLEAN"_T.data()); + return; + } + + if (g.vehicle.keep_vehicle_repaired) + { + ImGui::Text("KEEP_VEHICLE_REPAIRED"_T.data()); + return; + } + + float dirt_level = VEHICLE::GET_VEHICLE_DIRT_LEVEL(self::veh); + if (ImGui::SliderFloat("DIRT_LEVEL"_T.data(), &dirt_level, 0.f, 15.f, "%.1f")) + { + VEHICLE::SET_VEHICLE_DIRT_LEVEL(self::veh, dirt_level); + } + } + ImGui::SeparatorText("RAINBOW_PAINT"_T.data()); { components::command_checkbox<"rainbowpri">("PRIMARY"_T); @@ -175,7 +202,10 @@ namespace big } ImGui::Separator(); - const char* boost_behaviors[] = {"DEFAULT"_T.data(), "INSTANT_REFILL"_T.data(), "INFINITE"_T.data(), "HOLD_FOR_BOOST"_T.data()}; + const char* boost_behaviors[] = {"DEFAULT"_T.data(), + "INSTANT_REFILL"_T.data(), + "INFINITE"_T.data(), + "HOLD_FOR_BOOST"_T.data()}; if (ImGui::BeginCombo("BOOST_BEHAVIOR"_T.data(), boost_behaviors[static_cast(g.vehicle.boost_behavior)])) { for (int i = 0; i < 4; i++) diff --git a/src/views/vehicle/view_vehicle.cpp b/src/views/vehicle/view_vehicle.cpp index 04f74434..c3a7e75e 100644 --- a/src/views/vehicle/view_vehicle.cpp +++ b/src/views/vehicle/view_vehicle.cpp @@ -17,9 +17,9 @@ namespace big }); ImGui::SameLine(); - components::button("Delete Current",[]{ + components::button("Delete Current", [] { auto handle = self::veh; - if(ENTITY::DOES_ENTITY_EXIST(handle)) + if (ENTITY::DOES_ENTITY_EXIST(handle)) TASK::CLEAR_PED_TASKS_IMMEDIATELY(self::ped), entity::delete_entity(handle); }); @@ -86,6 +86,7 @@ namespace big components::command_checkbox<"blockhoming">(); components::command_checkbox<"driveonwater">(); components::command_checkbox<"vehiclecontrol">(); + components::command_checkbox<"keepvehicleclean">(); ImGui::EndGroup();