diff --git a/src/backend/looped/world/nearby/auto_disarm.cpp b/src/backend/looped/world/nearby/auto_disarm.cpp new file mode 100644 index 00000000..888055d0 --- /dev/null +++ b/src/backend/looped/world/nearby/auto_disarm.cpp @@ -0,0 +1,42 @@ +#include "backend/looped_command.hpp" +#include "natives.hpp" +#include "util/entity.hpp" +#include "util/pools.hpp" + +namespace big +{ + class auto_disarm : looped_command + { + using looped_command::looped_command; + + virtual void on_enable() override + { + g_notification_service->push("Auto disarm", "Nearby hostile peds will be disarmed"); + } + + virtual void on_tick() override + { + for (auto ped : pools::get_all_peds()) + { + if (!ped) + continue; + + auto handle = g_pointers->m_gta.m_ptr_to_handle(ped); + + if (!PED::IS_PED_A_PLAYER(handle) && ENTITY::DOES_ENTITY_EXIST(PED::GET_PED_TARGET_FROM_COMBAT_PED(handle, false))) + { + if (entity::take_control_of(handle)) + { + if (WEAPON::IS_PED_ARMED(handle, 1 | 2 | 4)) + WEAPON::REMOVE_ALL_PED_WEAPONS(handle, false); + + if (g.world.nearby.auto_disarm.neutralize) + TASK::TASK_STAND_STILL(handle, -1); + } + } + } + } + }; + + auto_disarm g_auto_disarm("autodisarm", "Auto Disarm", "Disarm nearby pedestrians", g.world.nearby.auto_disarm.enable); +} diff --git a/src/core/globals.hpp b/src/core/globals.hpp index efc0c51b..e555b5c5 100644 --- a/src/core/globals.hpp +++ b/src/core/globals.hpp @@ -513,7 +513,14 @@ namespace big bool ped_rush = false; bool combative = false; - NLOHMANN_DEFINE_TYPE_INTRUSIVE(nearby, ignore, ped_rain, veh_rain, high_alert, ped_rush, combative) + struct auto_disarm + { + bool enable = false; + bool neutralize = false; + NLOHMANN_DEFINE_TYPE_INTRUSIVE(auto_disarm, enable, neutralize) + } auto_disarm{}; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(nearby, ignore, ped_rain, veh_rain, high_alert, ped_rush, combative, auto_disarm) } nearby{}; struct model_swapper diff --git a/src/util/pools.hpp b/src/util/pools.hpp index da168582..ad30fe2f 100644 --- a/src/util/pools.hpp +++ b/src/util/pools.hpp @@ -1,3 +1,4 @@ +#pragma once #include "gta/pools.hpp" namespace big::pools diff --git a/src/views/world/view_nearby.cpp b/src/views/world/view_nearby.cpp index 8b8a4520..4c920356 100644 --- a/src/views/world/view_nearby.cpp +++ b/src/views/world/view_nearby.cpp @@ -42,6 +42,10 @@ namespace big components::command_checkbox<"highalert">(); ImGui::SameLine(140.f); components::command_checkbox<"pedrush">(); + components::command_checkbox<"autodisarm">(); + components::options_modal("Auto Disarm", []{ + ImGui::Checkbox("Neutralize", &g.world.nearby.auto_disarm.neutralize); + }); ImGui::Separator(); components::sub_title("Vehicles"); @@ -72,4 +76,4 @@ namespace big components::command_checkbox<"vehiclerain">(); } -} \ No newline at end of file +}