diff --git a/src/backend/backend.cpp b/src/backend/backend.cpp index 019823cb..4b460bf4 100644 --- a/src/backend/backend.cpp +++ b/src/backend/backend.cpp @@ -5,8 +5,10 @@ #include "script.hpp" #include "script_patches.hpp" #include "services/context_menu/context_menu_service.hpp" +#include "services/orbital_drone/orbital_drone.hpp" #include "thread_pool.hpp" + namespace big { void backend::loop() @@ -186,4 +188,22 @@ namespace big script::get_current()->yield(); } } + + void backend::orbital_drone() + { + while (true) + { + if (g.world.orbital_drone.enabled && PAD::IS_CONTROL_JUST_PRESSED(2, (int)ControllerInputs::INPUT_VEH_LOOK_BEHIND)) + { + if (!g_orbital_drone_service.initialized()) + g_orbital_drone_service.init(); + else + g_orbital_drone_service.destroy(); + } + + g_orbital_drone_service.tick(); + + script::get_current()->yield(); + } + } } diff --git a/src/backend/backend.hpp b/src/backend/backend.hpp index cfa2726e..d0d69401 100644 --- a/src/backend/backend.hpp +++ b/src/backend/backend.hpp @@ -18,5 +18,6 @@ namespace big static void vehiclefly_loop(); static void disable_control_action_loop(); static void world_loop(); + static void orbital_drone(); }; } diff --git a/src/backend/looped/self/noclip.cpp b/src/backend/looped/self/noclip.cpp index 439dd9d2..fc6dff43 100644 --- a/src/backend/looped/self/noclip.cpp +++ b/src/backend/looped/self/noclip.cpp @@ -4,6 +4,7 @@ #include "gta/enums.hpp" #include "natives.hpp" #include "util/entity.hpp" +#include "services/orbital_drone/orbital_drone.hpp" namespace big { @@ -20,6 +21,10 @@ namespace big virtual void on_tick() override { + + if (g_orbital_drone_service.initialized()) + return; + for (const auto& control : controls) PAD::DISABLE_CONTROL_ACTION(0, static_cast(control), true); diff --git a/src/core/globals.hpp b/src/core/globals.hpp index 3282848e..cbdcb230 100644 --- a/src/core/globals.hpp +++ b/src/core/globals.hpp @@ -68,8 +68,10 @@ namespace big { bool enabled = false; } cmd_executor{}; + rage::scrThread* m_modshop_thread = nullptr; - bool in_script_vm = false; + bool in_script_vm = false; + struct debug { struct logs @@ -428,6 +430,15 @@ namespace big struct world { + struct orbital_drone + { + bool enabled = false; + bool detect_player = false; + float nav_ovverride_fast = 3.f; + float nav_ovverride_slow = 0.25f; + NLOHMANN_DEFINE_TYPE_INTRUSIVE(orbital_drone, detect_player, nav_ovverride_fast, nav_ovverride_slow); + } orbital_drone{}; + struct train { bool derail_train = false; @@ -494,7 +505,7 @@ namespace big NLOHMANN_DEFINE_TYPE_INTRUSIVE(model_swapper, models) } model_swapper{}; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(world, water, spawn_ped, custom_time, blackhole, model_swapper, nearby) + NLOHMANN_DEFINE_TYPE_INTRUSIVE(world, water, spawn_ped, custom_time, blackhole, model_swapper, nearby, orbital_drone) } world{}; struct spoofing diff --git a/src/main.cpp b/src/main.cpp index 8789ea4d..49d4c1f5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include "script_mgr.hpp" #include "services/api/api_service.hpp" #include "services/context_menu/context_menu_service.hpp" +#include "services/orbital_drone/orbital_drone.hpp" #include "services/custom_text/custom_text_service.hpp" #include "services/globals/globals_service.hpp" #include "services/gta_data/gta_data_service.hpp" @@ -113,7 +114,9 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) g_script_mgr.add_script(std::make_unique