From e58f9610b37847974c69324e89b6353973edac3f Mon Sep 17 00:00:00 2001 From: gir489 <100792176+gir489returns@users.noreply.github.com> Date: Mon, 28 Aug 2023 06:56:29 -0400 Subject: [PATCH] Refactored Allow All Vehicles in Heists to use the tunables service and backup the values before writing them. (#2036) --- .../vehicle/allow_all_vehicles_in_heists.cpp | 97 ++++++++----------- src/services/tunables/tunables_service.cpp | 30 ++---- 2 files changed, 49 insertions(+), 78 deletions(-) diff --git a/src/backend/looped/vehicle/allow_all_vehicles_in_heists.cpp b/src/backend/looped/vehicle/allow_all_vehicles_in_heists.cpp index 52408e57..5f69edb8 100644 --- a/src/backend/looped/vehicle/allow_all_vehicles_in_heists.cpp +++ b/src/backend/looped/vehicle/allow_all_vehicles_in_heists.cpp @@ -2,77 +2,58 @@ #include "backend/looped_command.hpp" #include "core/scr_globals.hpp" #include "services/tunables/tunables_service.hpp" +#include "pointers.hpp" namespace big { + static bool initalized_backup = false; + static std::map backup_map{}; + static constexpr auto list_of_hashes = {RAGE_JOAAT("GR_BLOCK_APC_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_ARDENT_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_NIGHTSHARK_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_INSURGENT3_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_TECHNICAL3_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_HALFTRACK_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_TRAILERSMALL_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_TAMPA3_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_DUNE3_IN_HEISTS"), RAGE_JOAAT("GR_BLOCK_OPPRESSOR_IN_HEISTS"), RAGE_JOAAT("SMUG_BLOCK_VIGILANTE_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_THRUSTER_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_DELUXO_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_STROMBERG_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_RCV_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_CHERNOBOG_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_BARRAGE_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_KHANJALI_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_SAFARI_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_SAVESTRA_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_AVENGER_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_VOLATOL_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_AKULA_IN_HEISTS"), RAGE_JOAAT("BB_BLOCK_OPPRESSOR2_IN_HEISTS"), RAGE_JOAAT("BB_BLOCK_SCRAMJET_IN_HEISTS"), RAGE_JOAAT("BLOCK_HYDRA_IN_HEISTS"), RAGE_JOAAT("BLOCK_TOREADOR_IN_HEISTS"), RAGE_JOAAT("H2_BLOCK_VISERIS_IN_HEISTS")}; + class allvehsinheists : looped_command { using looped_command::looped_command; virtual void on_tick() override { - *scr_globals::tuneables.at(21911).as() = FALSE; //APC - *scr_globals::tuneables.at(21912).as() = FALSE; //ARDENT - *scr_globals::tuneables.at(21913).as() = FALSE; //NIGHTSHARK - *scr_globals::tuneables.at(21914).as() = FALSE; //INSURGENT3 - *scr_globals::tuneables.at(21915).as() = FALSE; //TECHNICAL3 - *scr_globals::tuneables.at(21916).as() = FALSE; //HALFTRACK - *scr_globals::tuneables.at(21917).as() = FALSE; //TRAILERSMALL - *scr_globals::tuneables.at(21918).as() = FALSE; //TAMPA3 - *scr_globals::tuneables.at(21919).as() = FALSE; //DUNE3 - *scr_globals::tuneables.at(21920).as() = FALSE; //OPPRESSOR - *scr_globals::tuneables.at(23026).as() = FALSE; //VIGILANTE - *scr_globals::tuneables.at(23597).as() = FALSE; //THRUSTER - *scr_globals::tuneables.at(23598).as() = FALSE; //DELUXO - *scr_globals::tuneables.at(23599).as() = FALSE; //STROMBERG - *scr_globals::tuneables.at(23600).as() = FALSE; //RCV - *scr_globals::tuneables.at(23601).as() = FALSE; //CHERNOBOG - *scr_globals::tuneables.at(23602).as() = FALSE; //BARRAGE - *scr_globals::tuneables.at(23603).as() = FALSE; //KHANJALI - *scr_globals::tuneables.at(23604).as() = FALSE; //SAFARI - *scr_globals::tuneables.at(23605).as() = FALSE; //SAVESTRA - *scr_globals::tuneables.at(23607).as() = FALSE; //REVOLTER - *scr_globals::tuneables.at(23608).as() = FALSE; //AVENGER - *scr_globals::tuneables.at(23609).as() = FALSE; //VOLATOL - *scr_globals::tuneables.at(23610).as() = FALSE; //AKULA - *scr_globals::tuneables.at(23611).as() = FALSE; //OPPRESSOR2 - *scr_globals::tuneables.at(23612).as() = FALSE; //SCRAMJET - *scr_globals::tuneables.at(23613).as() = FALSE; //HYDRA - *scr_globals::tuneables.at(25952).as() = FALSE; //TOREADOR - *scr_globals::tuneables.at(23606).as() = FALSE; //VISERIS + if (*g_pointers->m_gta.m_is_session_started) + { + if (initalized_backup == false) + { + for (Hash tunable_hash : list_of_hashes) + { + if (auto tunable_ptr = g_tunables_service->get_tunable(tunable_hash)) + { + backup_map[tunable_hash] = *tunable_ptr; + initalized_backup = true; + } + } + } + else + { + for (Hash tunable_hash : list_of_hashes) + { + if (auto tunable_ptr = g_tunables_service->get_tunable(tunable_hash)) + { + *tunable_ptr = FALSE; + } + } + } + } } virtual void on_disable() override { - *scr_globals::tuneables.at(21911).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_APC_IN_HEISTS")); - *scr_globals::tuneables.at(21912).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_ARDENT_IN_HEISTS")); - *scr_globals::tuneables.at(21913).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_NIGHTSHARK_IN_HEISTS")); - *scr_globals::tuneables.at(21914).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_INSURGENT3_IN_HEISTS")); - *scr_globals::tuneables.at(21915).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_TECHNICAL3_IN_HEISTS")); - *scr_globals::tuneables.at(21916).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_HALFTRACK_IN_HEISTS")); - *scr_globals::tuneables.at(21917).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_TRAILERSMALL_IN_HEISTS")); - *scr_globals::tuneables.at(21918).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_TAMPA3_IN_HEISTS")); - *scr_globals::tuneables.at(21919).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_DUNE3_IN_HEISTS")); - *scr_globals::tuneables.at(21920).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("GR_BLOCK_OPPRESSOR_IN_HEISTS")); - *scr_globals::tuneables.at(23026).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("SMUG_BLOCK_VIGILANTE_IN_HEISTS")); - *scr_globals::tuneables.at(23597).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_THRUSTER_IN_HEISTS")); - *scr_globals::tuneables.at(23598).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_DELUXO_IN_HEISTS")); - *scr_globals::tuneables.at(23599).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_STROMBERG_IN_HEISTS")); - *scr_globals::tuneables.at(23600).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_RCV_IN_HEISTS")); - *scr_globals::tuneables.at(23601).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_CHERNOBOG_IN_HEISTS")); - *scr_globals::tuneables.at(23602).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_BARRAGE_IN_HEISTS")); - *scr_globals::tuneables.at(23603).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_KHANJALI_IN_HEISTS")); - *scr_globals::tuneables.at(23604).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_SAFARI_IN_HEISTS")); - *scr_globals::tuneables.at(23605).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_SAVESTRA_IN_HEISTS")); - *scr_globals::tuneables.at(23607).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_REVOLTER_IN_HEISTS")); - *scr_globals::tuneables.at(23608).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_AVENGER_IN_HEISTS")); - *scr_globals::tuneables.at(23609).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_VOLATOL_IN_HEISTS")); - *scr_globals::tuneables.at(23610).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_AKULA_IN_HEISTS")); - *scr_globals::tuneables.at(23611).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("BB_BLOCK_OPPRESSOR2_IN_HEISTS")); - *scr_globals::tuneables.at(23612).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("BB_BLOCK_SCRAMJET_IN_HEISTS")); - *scr_globals::tuneables.at(23613).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("BLOCK_HYDRA_IN_HEISTS")); - *scr_globals::tuneables.at(25952).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("BLOCK_TOREADOR_IN_HEISTS")); - *scr_globals::tuneables.at(23606).as() = *g_tunables_service->get_tunable(RAGE_JOAAT("H2_BLOCK_VISERIS_IN_HEISTS")); + if (*g_pointers->m_gta.m_is_session_started && initalized_backup) + { + for (Hash tunable_hash : list_of_hashes) + { + if (auto tunable_ptr = g_tunables_service->get_tunable(tunable_hash)) //Sanity check in case of tunables_service failure. + { + *tunable_ptr = backup_map[tunable_hash]; + } + } + } } }; diff --git a/src/services/tunables/tunables_service.cpp b/src/services/tunables/tunables_service.cpp index 1141df54..a06e090e 100644 --- a/src/services/tunables/tunables_service.cpp +++ b/src/services/tunables/tunables_service.cpp @@ -14,26 +14,6 @@ namespace big tunables_service::tunables_service() : m_cache_file(g_file_manager.get_project_file("./cache/tunables.bin"), 1) { - m_cache_file.load(); - - if (m_cache_file.up_to_date(memory::module("GTA5.exe").size())) - { - LOG(INFO) << "Loading tunables from cache"; - m_loading = true; - - g_thread_pool->push([this] { - while (!g_pointers->m_gta.m_script_globals[1]) - { - if (!m_loading || !g_running) - return; - - std::this_thread::yield(); - } - - load(); - }); - } - g_tunables_service = this; } @@ -49,6 +29,16 @@ namespace big { script::get_current()->yield(); + m_cache_file.load(); + + if (m_cache_file.up_to_date(memory::module("GTA5.exe").size())) + { + LOG(INFO) << "Loading tunables from cache"; + m_loading = true; + + load(); + } + if (m_initialized || m_loading) return;