This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
YimMenu/BigBaseV2/src/core/globals.hpp

363 lines
10 KiB
C++
Raw Normal View History

2021-05-19 14:32:30 +02:00
#pragma once
2021-05-26 13:17:19 +02:00
#include "data/player_struct.hpp"
2021-05-19 16:05:21 +02:00
#include "enums.hpp"
2021-05-19 14:32:30 +02:00
#ifndef GLOBALS_H
#define GLOBALS_H
using namespace big;
2021-05-19 14:32:30 +02:00
struct globals {
nlohmann::json default_options;
nlohmann::json options;
2021-07-24 00:16:04 +02:00
struct tunables {
bool disable_phone = false;
2021-07-24 14:39:13 +02:00
bool no_idle_kick = false;
2021-07-24 00:16:04 +02:00
};
2021-05-26 13:17:19 +02:00
struct player {
int character_slot = 1;
int set_level = 130;
2021-05-26 13:17:19 +02:00
bool spectating = false;
};
struct protections {
struct replay_interface {
bool attach = false;
bool cage = true;
};
struct script_events {
bool bounty = true;
bool ceo_ban = true;
bool ceo_kick = true;
bool ceo_money = true;
bool clear_wanted_level = true;
bool fake_deposit = true;
bool force_mission = true;
bool force_teleport = true;
bool gta_banner = true;
bool personal_vehicle_destroyed = true;
bool remote_off_radar = true;
bool send_to_cutscene = true;
bool send_to_island = true;
bool sound_spam = true;
bool spectate = true;
bool transaction_error = true;
bool vehicle_kick = true;
};
replay_interface replay_interface{};
script_events script_events{};
};
2021-05-19 14:32:30 +02:00
struct self {
2021-07-26 21:18:19 +02:00
struct frame_flags {
bool explosive_ammo = false;
bool explosive_melee = false;
bool fire_ammo = false;
bool super_jump = false;
};
bool godmode = false;
2021-09-21 01:44:24 +02:00
bool free_cam = false;
2021-05-21 01:16:33 +02:00
bool off_radar = false;
bool never_wanted = false;
2021-05-19 14:32:30 +02:00
bool noclip = false;
2021-05-21 00:52:59 +02:00
bool no_ragdoll = false;
int wanted_level = 0;
2021-07-26 21:18:19 +02:00
frame_flags frame_flags{};
2021-05-19 14:32:30 +02:00
};
struct vehicle {
struct speedo_meter {
SpeedoMeter type = SpeedoMeter::DISABLED;
float x = .9f;
float y = .72f;
bool left_side = false;
};
2021-08-16 23:11:08 +02:00
bool god_mode = false;
2021-05-20 23:18:44 +02:00
bool horn_boost = false;
speedo_meter speedo_meter{};
};
2021-05-19 15:32:51 +02:00
struct weapons {
CustomWeapon custom_weapon = CustomWeapon::NONE;
2021-05-20 22:39:56 +02:00
char vehicle_gun_model[12] = "bus";
2021-05-19 15:32:51 +02:00
};
2021-05-21 02:28:14 +02:00
struct window {
2021-07-25 21:06:49 +02:00
bool handling = false;
2021-05-21 12:44:43 +02:00
bool log = false;
2021-07-25 21:06:49 +02:00
bool main = true;
bool users = true;
2021-05-26 13:17:19 +02:00
bool player = false;
int x;
int y;
2021-05-21 02:28:14 +02:00
};
2021-07-23 18:06:33 +02:00
int friend_count = 0;
int player_count = 0;
2021-05-26 13:17:19 +02:00
CPlayer players[32];
CPlayer selected_player;
2021-07-24 00:16:04 +02:00
tunables tunables{};
2021-05-26 13:17:19 +02:00
player player{};
protections protections{};
2021-05-19 14:32:30 +02:00
self self{};
vehicle vehicle{};
2021-05-19 15:32:51 +02:00
weapons weapons{};
2021-05-21 02:28:14 +02:00
window window{};
void from_json(const nlohmann::json& j)
{
this->protections.script_events.bounty = j["protections"]["script_events"]["bounty"];
this->protections.script_events.ceo_ban = j["protections"]["script_events"]["ceo_ban"];
this->protections.script_events.ceo_kick = j["protections"]["script_events"]["ceo_kick"];
this->protections.script_events.ceo_money = j["protections"]["script_events"]["ceo_money"];
this->protections.script_events.clear_wanted_level = j["protections"]["script_events"]["clear_wanted_level"];
this->protections.script_events.fake_deposit = j["protections"]["script_events"]["fake_deposit"];
this->protections.script_events.force_mission = j["protections"]["script_events"]["force_mission"];
this->protections.script_events.force_teleport = j["protections"]["script_events"]["force_teleport"];
this->protections.script_events.gta_banner = j["protections"]["script_events"]["gta_banner"];
this->protections.script_events.personal_vehicle_destroyed = j["protections"]["script_events"]["personal_vehicle_destroyed"];
this->protections.script_events.remote_off_radar = j["protections"]["script_events"]["remote_off_radar"];
this->protections.script_events.send_to_cutscene = j["protections"]["script_events"]["send_to_cutscene"];
this->protections.script_events.send_to_island = j["protections"]["script_events"]["send_to_island"];
this->protections.script_events.sound_spam = j["protections"]["script_events"]["sound_spam"];
this->protections.script_events.spectate = j["protections"]["script_events"]["spectate"];
this->protections.script_events.transaction_error = j["protections"]["script_events"]["transaction_error"];
this->protections.script_events.vehicle_kick = j["protections"]["script_events"]["vehicle_kick"];
2021-07-24 00:16:04 +02:00
this->tunables.disable_phone = j["tunables"]["disable_phone"];
2021-07-24 14:39:13 +02:00
this->tunables.no_idle_kick = j["tunables"]["no_idle_kick"];
2021-07-24 00:16:04 +02:00
this->self.godmode = j["self"]["godmode"];
2021-05-21 01:16:33 +02:00
this->self.off_radar = j["self"]["off_radar"];
this->self.never_wanted = j["self"]["never_wanted"];
2021-05-21 00:52:59 +02:00
this->self.no_ragdoll = j["self"]["no_ragdoll"];
2021-07-26 21:18:19 +02:00
this->self.frame_flags.explosive_ammo = j["self"]["frame_flags"]["explosive_ammo"];
this->self.frame_flags.explosive_melee = j["self"]["frame_flags"]["explosive_melee"];
this->self.frame_flags.fire_ammo = j["self"]["frame_flags"]["fire_ammo"];
this->self.frame_flags.super_jump = j["self"]["frame_flags"]["super_jump"];
2021-08-16 23:11:08 +02:00
this->vehicle.god_mode = j["vehicle"]["god_mode"];
2021-05-20 23:18:44 +02:00
this->vehicle.horn_boost = j["vehicle"]["horn_boost"];
this->vehicle.speedo_meter.type = (SpeedoMeter)j["vehicle"]["speedo_meter"]["type"];
this->vehicle.speedo_meter.left_side = j["vehicle"]["speedo_meter"]["left_side"];
this->vehicle.speedo_meter.x = j["vehicle"]["speedo_meter"]["position_x"];
this->vehicle.speedo_meter.y = j["vehicle"]["speedo_meter"]["position_y"];
this->weapons.custom_weapon = (CustomWeapon)j["weapons"]["custom_weapon"];
2021-07-25 21:06:49 +02:00
this->window.handling = j["window"]["handling"];
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{
{
"protections",
{
{
"replay_interface", {
{ "attach", this->protections.replay_interface.attach },
{ "cage", this->protections.replay_interface.cage }
}
},
{
"script_events", {
{ "bounty", this->protections.script_events.bounty },
{ "ceo_ban", this->protections.script_events.ceo_ban },
{ "ceo_kick", this->protections.script_events.ceo_kick },
{ "ceo_money", this->protections.script_events.ceo_money },
{ "clear_wanted_level", this->protections.script_events.clear_wanted_level },
{ "fake_deposit", this->protections.script_events.fake_deposit },
{ "force_mission", this->protections.script_events.force_mission },
{ "force_teleport", this->protections.script_events.force_teleport },
{ "gta_banner", this->protections.script_events.gta_banner },
{ "personal_vehicle_destroyed", this->protections.script_events.personal_vehicle_destroyed },
{ "remote_off_radar", this->protections.script_events.remote_off_radar },
{ "send_to_cutscene", this->protections.script_events.send_to_cutscene },
{ "send_to_island", this->protections.script_events.send_to_island },
{ "sound_spam", this->protections.script_events.sound_spam },
{ "spectate", this->protections.script_events.spectate },
{ "transaction_error", this->protections.script_events.transaction_error },
{ "vehicle_kick", this->protections.script_events.vehicle_kick }
}
}
}
},
2021-07-24 00:16:04 +02:00
{
"tunables", {
2021-07-24 14:39:13 +02:00
{ "disable_phone", this->tunables.disable_phone },
{ "no_idle_kick", this->tunables.no_idle_kick }
2021-07-24 00:16:04 +02:00
}
},
{
"self", {
2021-05-21 00:52:59 +02:00
{ "godmode", this->self.godmode },
2021-05-21 01:16:33 +02:00
{ "off_radar", this->self.off_radar },
{ "never_wanted", this->self.never_wanted },
2021-07-26 21:18:19 +02:00
{ "no_ragdoll", this->self.no_ragdoll },
{
"frame_flags", {
{ "explosive_ammo", this->self.frame_flags.explosive_ammo },
{ "explosive_melee", this->self.frame_flags.explosive_melee },
{ "fire_ammo", this->self.frame_flags.fire_ammo },
{ "super_jump", this->self.frame_flags.super_jump }
}
}
}
},
{
"vehicle", {
2021-08-16 23:11:08 +02:00
{ "god_mode", this->vehicle.god_mode },
2021-05-20 23:18:44 +02:00
{ "horn_boost", this->vehicle.horn_boost },
{
"speedo_meter", {
{ "type", (int)this->vehicle.speedo_meter.type },
{ "left_side", this->vehicle.speedo_meter.left_side },
{ "position_x", this->vehicle.speedo_meter.x },
{ "position_y", this->vehicle.speedo_meter.y }
}
}
}
},
{
"weapons", {
2021-05-20 23:18:44 +02:00
{ "custom_weapon", (int)this->weapons.custom_weapon }
}
},
{
"window", {
2021-07-25 21:06:49 +02:00
{ "handling", this->window.handling },
{ "log", this->window.log },
{ "main", this->window.main },
{ "users", this->window.users }
}
}
};
}
void attempt_save()
{
nlohmann::json& j = this->to_json();
if (deep_compare(this->options, j, true))
this->save();
}
bool load()
{
this->default_options = this->to_json();
std::string settings_file = std::getenv("appdata");
settings_file += this->settings_location;
std::ifstream file(settings_file);
if (!file.is_open())
{
this->write_default_config();
file.open(settings_file);
}
try
{
file >> this->options;
}
catch (const std::exception&)
{
LOG(WARNING) << "Detected corrupt settings, writing default config...";
this->write_default_config();
return this->load();
}
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;
}
2021-05-21 00:52:59 +02:00
private:
const char* settings_location = "\\BigBaseV2\\settings.json";
bool deep_compare(nlohmann::json& current_settings, const nlohmann::json& default_settings, bool compare_value = false)
{
bool should_save = false;
for (auto& e : default_settings.items())
{
const std::string &key = e.key();
if (current_settings.count(key) == 0 || (compare_value && current_settings[key] != e.value()))
{
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(), compare_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 += this->settings_location;
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 += this->settings_location;
std::ofstream file(settings_file, std::ios::out);
file << this->to_json().dump(4);
file.close();
return true;
}
2021-05-19 14:32:30 +02:00
};
inline struct globals g;
#endif // !GLOBALS_H