341 lines
14 KiB
C++
341 lines
14 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
#include <cstdlib>
|
|
|
|
#include "config.h"
|
|
#include "../../../external/json/json.hpp"
|
|
|
|
namespace internal_config
|
|
{
|
|
class ConfigManager
|
|
{
|
|
private:
|
|
|
|
static std::filesystem::path GetConfigFolder()
|
|
{
|
|
char* userProfile = nullptr;
|
|
size_t len = 0;
|
|
errno_t err = _dupenv_s(&userProfile, &len, "USERPROFILE");
|
|
|
|
std::filesystem::path folder;
|
|
if (err != 0 || userProfile == nullptr || len == 0)
|
|
{
|
|
folder = ".templeware";
|
|
}
|
|
else
|
|
{
|
|
folder = userProfile;
|
|
free(userProfile);
|
|
folder /= ".templeware";
|
|
}
|
|
folder /= "internal";
|
|
|
|
std::error_code ec;
|
|
std::filesystem::create_directories(folder, ec);
|
|
|
|
return folder;
|
|
}
|
|
|
|
static std::filesystem::path GetConfigPath(const std::string& configName)
|
|
{
|
|
auto folder = GetConfigFolder();
|
|
return folder / (configName + ".json");
|
|
}
|
|
|
|
public:
|
|
|
|
static std::vector<std::string> ListConfigs()
|
|
{
|
|
std::vector<std::string> list;
|
|
auto folder = GetConfigFolder();
|
|
if (!std::filesystem::exists(folder))
|
|
return list;
|
|
|
|
for (const auto& entry : std::filesystem::directory_iterator(folder))
|
|
{
|
|
if (entry.is_regular_file())
|
|
{
|
|
auto path = entry.path();
|
|
if (path.extension() == ".json")
|
|
{
|
|
list.push_back(path.stem().string());
|
|
}
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
|
|
static void Save(const std::string& configName)
|
|
{
|
|
nlohmann::json j;
|
|
j["esp"] = Config::esp;
|
|
j["showHealth"] = Config::showHealth;
|
|
j["teamCheck"] = Config::teamCheck;
|
|
j["espFill"] = Config::espFill;
|
|
j["espThickness"] = Config::espThickness;
|
|
j["espFillOpacity"] = Config::espFillOpacity;
|
|
|
|
j["fovEnabled"] = Config::fovEnabled;
|
|
j["fov"] = Config::fov;
|
|
|
|
j["espColor"] = {
|
|
Config::espColor.x,
|
|
Config::espColor.y,
|
|
Config::espColor.z,
|
|
Config::espColor.w
|
|
};
|
|
|
|
j["Night"] = Config::Night;
|
|
j["NightColor"] = {
|
|
Config::NightColor.x,
|
|
Config::NightColor.y,
|
|
Config::NightColor.z,
|
|
Config::NightColor.w
|
|
};
|
|
|
|
j["armChams"] = Config::armChams;
|
|
j["viewmodelChams"] = Config::viewmodelChams;
|
|
|
|
j["armChams_color"] = {
|
|
Config::colArmChams.x,
|
|
Config::colArmChams.y,
|
|
Config::colArmChams.z,
|
|
Config::colArmChams.w
|
|
};
|
|
|
|
j["viewmodelChams_color"] = {
|
|
Config::colViewmodelChams.x,
|
|
Config::colViewmodelChams.y,
|
|
Config::colViewmodelChams.z,
|
|
Config::colViewmodelChams.w
|
|
};
|
|
|
|
j["aimbot"] = Config::aimbot;
|
|
j["aimbot_fov"] = Config::aimbot_fov;
|
|
j["antiflash"] = Config::antiflash;
|
|
j["rcs"] = Config::rcs;
|
|
j["fov_circle"] = Config::fov_circle;
|
|
j["aimbot_smooth"] = Config::aimbot_smooth;
|
|
j["aimbot_bone"] = Config::aimbot_bone;
|
|
j["aimbot_key"] = Config::aimbot_key;
|
|
j["team_check"] = Config::team_check;
|
|
j["always_on_aimbot"] = Config::always_on_aimbot;
|
|
j["aimbot_dynamic_smooth"] = Config::aimbot_dynamic_smooth;
|
|
j["aimbot_dynamic_smooth_factor"] = Config::aimbot_dynamic_smooth_factor;
|
|
j["aimbot_on_lmb"] = Config::aimbot_on_lmb;
|
|
j["showNameTags"] = Config::showNameTags;
|
|
j["triggerbot_hold_lmb"] = Config::triggerbot_hold_lmb;
|
|
j["shooterAfterAim"] = Config::shooterAfterAim;
|
|
j["silent_shooterAfterAim"] = Config::silent_shooterAfterAim;
|
|
j["always_on_triggerbot"] = Config::always_on_triggerbot;
|
|
j["triggerbot"] = Config::triggerbot;
|
|
j["triggerbot_key"] = Config::triggerbot_key;
|
|
j["triggerbot_alt_key"] = Config::triggerbot_alt_key;
|
|
j["triggerbot_delay"] = Config::triggerbot_delay;
|
|
j["silent_rage"] = Config::silent_rage;
|
|
|
|
j["enemyChamsInvisible"] = Config::enemyChamsInvisible;
|
|
j["enemyChams"] = Config::enemyChams;
|
|
j["teamChams"] = Config::teamChams;
|
|
j["teamChamsInvisible"] = Config::teamChamsInvisible;
|
|
j["chamsMaterial"] = Config::chamsMaterial;
|
|
j["colVisualChams"] = {
|
|
Config::colVisualChams.x,
|
|
Config::colVisualChams.y,
|
|
Config::colVisualChams.z,
|
|
Config::colVisualChams.w
|
|
};
|
|
j["colVisualChamsIgnoreZ"] = {
|
|
Config::colVisualChamsIgnoreZ.x,
|
|
Config::colVisualChamsIgnoreZ.y,
|
|
Config::colVisualChamsIgnoreZ.z,
|
|
Config::colVisualChamsIgnoreZ.w
|
|
};
|
|
j["teamcolVisualChamsIgnoreZ"] = {
|
|
Config::teamcolVisualChamsIgnoreZ.x,
|
|
Config::teamcolVisualChamsIgnoreZ.y,
|
|
Config::teamcolVisualChamsIgnoreZ.z,
|
|
Config::teamcolVisualChamsIgnoreZ.w
|
|
};
|
|
j["teamcolVisualChams"] = {
|
|
Config::teamcolVisualChams.x,
|
|
Config::teamcolVisualChams.y,
|
|
Config::teamcolVisualChams.z,
|
|
Config::teamcolVisualChams.w
|
|
};
|
|
j["fovCircleColor"] = {
|
|
Config::fovCircleColor.x,
|
|
Config::fovCircleColor.y,
|
|
Config::fovCircleColor.z,
|
|
Config::fovCircleColor.w
|
|
};
|
|
j["rcsActivationShots"] = Config::rcsActivationShots;
|
|
|
|
auto filePath = GetConfigPath(configName);
|
|
std::ofstream ofs(filePath);
|
|
if (ofs.is_open())
|
|
{
|
|
ofs << j.dump(4);
|
|
ofs.close();
|
|
}
|
|
}
|
|
|
|
static void Load(const std::string& configName)
|
|
{
|
|
auto filePath = GetConfigPath(configName);
|
|
if (!std::filesystem::exists(filePath))
|
|
return;
|
|
|
|
std::ifstream ifs(filePath);
|
|
if (!ifs.is_open())
|
|
return;
|
|
|
|
nlohmann::json j;
|
|
ifs >> j;
|
|
|
|
Config::esp = j.value("esp", false);
|
|
Config::showHealth = j.value("showHealth", false);
|
|
Config::teamCheck = j.value("teamCheck", false);
|
|
Config::espFill = j.value("espFill", false);
|
|
Config::espThickness = j.value("espThickness", 1.0f);
|
|
Config::espFillOpacity = j.value("espFillOpacity", 0.5f);
|
|
|
|
Config::fovEnabled = j.value("fovEnabled", false);
|
|
Config::fov = j.value("fov", 90.0f);
|
|
|
|
if (j.contains("espColor") && j["espColor"].is_array() && j["espColor"].size() == 4)
|
|
{
|
|
auto arr = j["espColor"];
|
|
Config::espColor.x = arr[0].get<float>();
|
|
Config::espColor.y = arr[1].get<float>();
|
|
Config::espColor.z = arr[2].get<float>();
|
|
Config::espColor.w = arr[3].get<float>();
|
|
}
|
|
|
|
Config::Night = j.value("Night", false);
|
|
if (j.contains("NightColor") && j["NightColor"].is_array() && j["NightColor"].size() == 4)
|
|
{
|
|
auto arr = j["NightColor"];
|
|
Config::NightColor.x = arr[0].get<float>();
|
|
Config::NightColor.y = arr[1].get<float>();
|
|
Config::NightColor.z = arr[2].get<float>();
|
|
Config::NightColor.w = arr[3].get<float>();
|
|
}
|
|
|
|
Config::enemyChamsInvisible = j.value("enemyChamsInvisible", false);
|
|
Config::enemyChams = j.value("enemyChams", false);
|
|
Config::teamChams = j.value("teamChams", false);
|
|
Config::teamChamsInvisible = j.value("teamChamsInvisible", false);
|
|
Config::chamsMaterial = j.value("chamsMaterial", 0);
|
|
|
|
Config::fov_circle = j.value("fov_circle", false);
|
|
Config::aimbot = j.value("aimbot", false);
|
|
Config::rcs = j.value("rcs", false);
|
|
Config::aimbot_fov = j.value("aimbot_fov", 0.f);
|
|
Config::aimbot_smooth = j.value("aimbot_smooth", 0.f);
|
|
Config::aimbot_bone = j.value("aimbot_bone", 0);
|
|
Config::aimbot_key = j.value("aimbot_key", 0x12);
|
|
Config::team_check = j.value("team_check", true);
|
|
Config::always_on_aimbot = j.value("always_on_aimbot", false);
|
|
Config::aimbot_dynamic_smooth = j.value("aimbot_dynamic_smooth", false);
|
|
Config::aimbot_dynamic_smooth_factor = j.value("aimbot_dynamic_smooth_factor", 1.0f);
|
|
Config::aimbot_on_lmb = j.value("aimbot_on_lmb", false);
|
|
Config::showNameTags = j.value("showNameTags", false);
|
|
Config::triggerbot_hold_lmb = j.value("triggerbot_hold_lmb", false);
|
|
Config::shooterAfterAim = j.value("shooterAfterAim", false);
|
|
Config::silent_shooterAfterAim = j.value("silent_shooterAfterAim", false);
|
|
Config::always_on_triggerbot = j.value("always_on_triggerbot", false);
|
|
Config::triggerbot = j.value("triggerbot", false);
|
|
Config::triggerbot_key = j.value("triggerbot_key", 0x05);
|
|
Config::triggerbot_alt_key = j.value("triggerbot_alt_key", 0x06);
|
|
Config::triggerbot_delay = j.value("triggerbot_delay", 0.0f);
|
|
Config::silent_rage = j.value("silent_rage", false);
|
|
|
|
Config::antiflash = j.value("antiflash", false);
|
|
|
|
Config::armChams = j.value("armChams", false);
|
|
Config::viewmodelChams = j.value("viewmodelChams", false);
|
|
|
|
if (j.contains("colArmChams") && j["colArmChams"].is_array() && j["colArmChams"].size() == 4)
|
|
{
|
|
auto arr = j["colArmChams"];
|
|
Config::colArmChams.x = arr[0].get<float>();
|
|
Config::colArmChams.y = arr[1].get<float>();
|
|
Config::colArmChams.z = arr[2].get<float>();
|
|
Config::colArmChams.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("colViewmodelChams") && j["colViewmodelChams"].is_array() && j["colViewmodelChams"].size() == 4)
|
|
{
|
|
auto arr = j["colViewmodelChams"];
|
|
Config::colViewmodelChams.x = arr[0].get<float>();
|
|
Config::colViewmodelChams.y = arr[1].get<float>();
|
|
Config::colViewmodelChams.z = arr[2].get<float>();
|
|
Config::colViewmodelChams.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("colVisualChams") && j["colVisualChams"].is_array() && j["colVisualChams"].size() == 4)
|
|
{
|
|
auto arr = j["colVisualChams"];
|
|
Config::colVisualChams.x = arr[0].get<float>();
|
|
Config::colVisualChams.y = arr[1].get<float>();
|
|
Config::colVisualChams.z = arr[2].get<float>();
|
|
Config::colVisualChams.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("colVisualChamsIgnoreZ") && j["colVisualChamsIgnoreZ"].is_array() && j["colVisualChamsIgnoreZ"].size() == 4)
|
|
{
|
|
auto arr = j["colVisualChamsIgnoreZ"];
|
|
Config::colVisualChamsIgnoreZ.x = arr[0].get<float>();
|
|
Config::colVisualChamsIgnoreZ.y = arr[1].get<float>();
|
|
Config::colVisualChamsIgnoreZ.z = arr[2].get<float>();
|
|
Config::colVisualChamsIgnoreZ.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("teamcolVisualChamsIgnoreZ") && j["teamcolVisualChamsIgnoreZ"].is_array() && j["teamcolVisualChamsIgnoreZ"].size() == 4)
|
|
{
|
|
auto arr = j["teamcolVisualChamsIgnoreZ"];
|
|
Config::teamcolVisualChamsIgnoreZ.x = arr[0].get<float>();
|
|
Config::teamcolVisualChamsIgnoreZ.y = arr[1].get<float>();
|
|
Config::teamcolVisualChamsIgnoreZ.z = arr[2].get<float>();
|
|
Config::teamcolVisualChamsIgnoreZ.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("teamcolVisualChams") && j["teamcolVisualChams"].is_array() && j["teamcolVisualChams"].size() == 4)
|
|
{
|
|
auto arr = j["teamcolVisualChams"];
|
|
Config::teamcolVisualChams.x = arr[0].get<float>();
|
|
Config::teamcolVisualChams.y = arr[1].get<float>();
|
|
Config::teamcolVisualChams.z = arr[2].get<float>();
|
|
Config::teamcolVisualChams.w = arr[3].get<float>();
|
|
}
|
|
|
|
if (j.contains("fovCircleColor") && j["fovCircleColor"].is_array() && j["fovCircleColor"].size() == 4) {
|
|
auto arr = j["fovCircleColor"];
|
|
Config::fovCircleColor.x = arr[0].get<float>();
|
|
Config::fovCircleColor.y = arr[1].get<float>();
|
|
Config::fovCircleColor.z = arr[2].get<float>();
|
|
Config::fovCircleColor.w = arr[3].get<float>();
|
|
}
|
|
|
|
Config::rcsActivationShots = j.value("rcsActivationShots", 1);
|
|
|
|
ifs.close();
|
|
}
|
|
|
|
static void Remove(const std::string& configName)
|
|
{
|
|
auto filePath = GetConfigPath(configName);
|
|
if (std::filesystem::exists(filePath))
|
|
{
|
|
std::error_code ec;
|
|
std::filesystem::remove(filePath, ec);
|
|
}
|
|
}
|
|
};
|
|
}
|