218 lines
4.3 KiB
C++
218 lines
4.3 KiB
C++
#pragma once
|
|
#include "data/player_struct.hpp"
|
|
#include "enums.hpp"
|
|
|
|
#ifndef GLOBALS_H
|
|
#define GLOBALS_H
|
|
|
|
using namespace big;
|
|
struct globals {
|
|
nlohmann::json default_options;
|
|
nlohmann::json options;
|
|
|
|
struct tunables {
|
|
bool disable_phone = false;
|
|
bool no_idle_kick = false;
|
|
};
|
|
|
|
struct player {
|
|
int character_slot = 1;
|
|
int set_level = 130;
|
|
bool spectating = false;
|
|
};
|
|
|
|
struct self {
|
|
bool godmode = false;
|
|
bool off_radar = false;
|
|
bool noclip = false;
|
|
bool no_ragdoll = false;
|
|
};
|
|
|
|
struct vehicle {
|
|
bool horn_boost = false;
|
|
SpeedoMeter speedo_meter = SpeedoMeter::DISABLED;
|
|
};
|
|
|
|
struct weapons {
|
|
CustomWeapon custom_weapon = CustomWeapon::NONE;
|
|
char vehicle_gun_model[12] = "bus";
|
|
};
|
|
|
|
struct window {
|
|
bool main = true;
|
|
bool log = false;
|
|
bool users = true;
|
|
bool player = false;
|
|
|
|
int x;
|
|
int y;
|
|
};
|
|
|
|
int friend_count = 0;
|
|
int player_count = 0;
|
|
CPlayer players[32];
|
|
CPlayer selected_player;
|
|
|
|
tunables tunables{};
|
|
player player{};
|
|
self self{};
|
|
vehicle vehicle{};
|
|
weapons weapons{};
|
|
window window{};
|
|
|
|
void from_json(const nlohmann::json& j)
|
|
{
|
|
this->tunables.disable_phone = j["tunables"]["disable_phone"];
|
|
this->tunables.no_idle_kick = j["tunables"]["no_idle_kick"];
|
|
|
|
this->self.godmode = j["self"]["godmode"];
|
|
this->self.off_radar = j["self"]["off_radar"];
|
|
this->self.no_ragdoll = j["self"]["no_ragdoll"];
|
|
|
|
this->vehicle.horn_boost = j["vehicle"]["horn_boost"];
|
|
this->vehicle.speedo_meter = (SpeedoMeter)j["vehicle"]["speedo_meter"];
|
|
|
|
this->weapons.custom_weapon = (CustomWeapon)j["weapons"]["custom_weapon"];
|
|
|
|
this->window.log = j["window"]["log"];
|
|
this->window.main = j["window"]["main"];
|
|
this->window.users = j["window"]["users"];
|
|
}
|
|
|
|
nlohmann::json to_json()
|
|
{
|
|
return nlohmann::json{
|
|
{
|
|
"tunables", {
|
|
{ "disable_phone", this->tunables.disable_phone },
|
|
{ "no_idle_kick", this->tunables.no_idle_kick }
|
|
}
|
|
},
|
|
{
|
|
"self", {
|
|
{ "godmode", this->self.godmode },
|
|
{ "off_radar", this->self.off_radar },
|
|
{ "no_ragdoll", this->self.no_ragdoll }
|
|
}
|
|
},
|
|
{
|
|
"vehicle", {
|
|
{ "horn_boost", this->vehicle.horn_boost },
|
|
{ "speedo_meter", (int)this->vehicle.speedo_meter }
|
|
}
|
|
},
|
|
{
|
|
"weapons", {
|
|
{ "custom_weapon", (int)this->weapons.custom_weapon }
|
|
}
|
|
},
|
|
{
|
|
"window", {
|
|
{ "log", this->window.log },
|
|
{ "main", this->window.main },
|
|
{ "users", this->window.users }
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
void attempt_save()
|
|
{
|
|
nlohmann::json& j = this->to_json();
|
|
if (j != this->options)
|
|
{
|
|
this->save();
|
|
|
|
this->options = j;
|
|
}
|
|
}
|
|
|
|
bool load()
|
|
{
|
|
this->default_options = this->to_json();
|
|
|
|
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);
|
|
}
|
|
|
|
file >> this->options;
|
|
|
|
bool should_save = this->deep_compare(this->options, this->default_options);
|
|
|
|
this->from_json(this->options);
|
|
|
|
if (should_save)
|
|
{
|
|
LOG(INFO) << "Updating settings.";
|
|
save();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
bool deep_compare(nlohmann::json& current_settings, const nlohmann::json& default_settings)
|
|
{
|
|
bool should_save = false;
|
|
|
|
for (auto& e : default_settings.items())
|
|
{
|
|
const std::string &key = e.key();
|
|
|
|
if (current_settings.count(key) == 0)
|
|
{
|
|
current_settings[key] = e.value();
|
|
|
|
should_save = true;
|
|
}
|
|
else if (current_settings[key].is_structured() && e.value().is_structured())
|
|
{
|
|
if (deep_compare(current_settings[key], e.value()))
|
|
should_save = true;
|
|
}
|
|
else if (!current_settings[key].is_structured() && e.value().is_structured()) {
|
|
current_settings[key] = e.value();
|
|
|
|
should_save = true;
|
|
}
|
|
}
|
|
|
|
return should_save;
|
|
}
|
|
|
|
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;
|
|
}
|
|
};
|
|
|
|
inline struct globals g;
|
|
#endif // !GLOBALS_H
|