From 3ca3653089bedbd06f4502eadb1e4a1622c9efb7 Mon Sep 17 00:00:00 2001 From: Yimura Date: Thu, 20 May 2021 15:51:42 +0200 Subject: [PATCH] feat(Globals): Load from settings.json file --- BigBaseV2/src/common.hpp | 4 +- BigBaseV2/src/core/globals.hpp | 107 ++++++++++++++++++++++++++++++++- BigBaseV2/src/main.cpp | 2 +- 3 files changed, 109 insertions(+), 4 deletions(-) diff --git a/BigBaseV2/src/common.hpp b/BigBaseV2/src/common.hpp index 849067b8..f2ab337c 100644 --- a/BigBaseV2/src/common.hpp +++ b/BigBaseV2/src/common.hpp @@ -50,7 +50,9 @@ #include "logger.hpp" -#include "settings.h" +#include "core/globals.hpp" +#include "gta/player.hpp" +// #include "settings.h" namespace big { diff --git a/BigBaseV2/src/core/globals.hpp b/BigBaseV2/src/core/globals.hpp index 079d0e0f..53fa1968 100644 --- a/BigBaseV2/src/core/globals.hpp +++ b/BigBaseV2/src/core/globals.hpp @@ -22,7 +22,110 @@ struct globals { self self{}; vehicle vehicle{}; weapons weapons{}; + + void from_json(const nlohmann::json& j) + { + this->self.godmode = j["self"]["godmode"]; + + this->vehicle.speedo_meter = (SpeedoMeter)j["vehicle"]["speedo_meter"]; + + this->weapons.custom_weapon = (CustomWeapon)j["weapons"]["custom_weapon"]; + } + + nlohmann::json to_json() + { + return nlohmann::json{ + { + "self", { + { + "godmode", this->self.godmode + } + } + }, + { + "vehicle", { + { + "speedo_meter", (int)this->vehicle.speedo_meter + } + } + }, + { + "weapons", { + { + "custom_weapon", (int)this->weapons.custom_weapon + } + } + } + }; + } + + bool load() + { + std::string settings_file = std::getenv("appdata"); + settings_file += "\\BigBaseV2\\settings.json"; + + std::ifstream file(settings_file); + + if (!file.is_open()) + { + this->write_default_config(); + + file.open(settings_file); + } + + nlohmann::json j; + file >> j; + + nlohmann::json default_j = this->to_json(); + + bool should_save = false; + for (auto& e : default_j.items()) + { + if (j.count(e.key()) == 0) + { + should_save = true; + j[e.key()] = e.value(); + } + } + + if (should_save) + { + LOG(INFO) << "Updating settings."; + + default_j.merge_patch(j); + j = default_j; + + save(); + } + this->from_json(j); + + return true; + } + + bool save() + { + std::string settings_file = std::getenv("appdata"); + settings_file += "\\BigBaseV2\\settings.json"; + + std::ofstream file(settings_file, std::ios::out | std::ios::trunc); + file << this->to_json().dump(4); + file.close(); + + return true; + } + + bool write_default_config() + { + std::string settings_file = std::getenv("appdata"); + settings_file += "\\BigBaseV2\\settings.json"; + + std::ofstream file(settings_file, std::ios::out); + file << this->to_json().dump(4); + file.close(); + + return true; + } }; -extern struct globals g; -#endif // !GLOBALS_H \ No newline at end of file +inline struct globals g; +#endif // !GLOBALS_H diff --git a/BigBaseV2/src/main.cpp b/BigBaseV2/src/main.cpp index a049a24d..db409051 100644 --- a/BigBaseV2/src/main.cpp +++ b/BigBaseV2/src/main.cpp @@ -45,7 +45,7 @@ BOOL APIENTRY DllMain(HMODULE hmod, DWORD reason, PVOID) auto hooking_instance = std::make_unique(); LOG(INFO) << "Hooking initialized."; - g_settings.load(); + g.load(); LOG(INFO) << "Settings Loaded."; g_script_mgr.add_script(std::make_unique