Files
BetterAmongUs/Modules/BetterDataManager.cs
T
2024-07-28 16:30:38 -05:00

203 lines
7.1 KiB
C#

using System.Text.Json;
namespace BetterAmongUs;
class BetterDataManager
{
public static string GetFilePath(string name)
{
return Path.Combine(Main.GetDataPathToAmongUs(), $"{name}.json");
}
public static void SetUp()
{
string filePath = GetFilePath("BetterData");
if (!File.Exists(filePath))
{
// Initialize with predefined categories
var initialData = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>
{
{ "Data", new Dictionary<string, Dictionary<string, string>>() }, // Default category
{ "cheatData", new Dictionary<string, Dictionary<string, string>>() },
{ "sickoData", new Dictionary<string, Dictionary<string, string>>() },
{ "aumData", new Dictionary<string, Dictionary<string, string>>() }
};
string json = JsonSerializer.Serialize(initialData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, json);
}
else
{
// Load the existing JSON data
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, Dictionary<string, string>>>>(json) ?? new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
// Check and add missing categories
if (!jsonData.ContainsKey("Data"))
{
jsonData["Data"] = new Dictionary<string, Dictionary<string, string>>();
}
if (!jsonData.ContainsKey("cheatData"))
{
jsonData["cheatData"] = new Dictionary<string, Dictionary<string, string>>();
}
if (!jsonData.ContainsKey("sickoData"))
{
jsonData["sickoData"] = new Dictionary<string, Dictionary<string, string>>();
}
if (!jsonData.ContainsKey("aumData"))
{
jsonData["aumData"] = new Dictionary<string, Dictionary<string, string>>();
}
// Write the updated JSON data back to the file
json = JsonSerializer.Serialize(jsonData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, json);
}
}
public static void Save(string name, string dataToSave, string category = "Data")
{
string filePath = GetFilePath("BetterData");
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(json) ?? new Dictionary<string, Dictionary<string, string>>();
if (!jsonData.ContainsKey(category))
{
jsonData[category] = new Dictionary<string, string>();
}
jsonData[category][name] = dataToSave;
json = JsonSerializer.Serialize(jsonData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, json);
}
public static string Load(string name, string category = "Data")
{
try
{
string filePath = GetFilePath("BetterData");
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(json);
if (jsonData != null && jsonData.ContainsKey(category) && jsonData[category].ContainsKey(name))
{
return jsonData[category][name];
}
}
catch (Exception ex)
{
Logger.Error(ex.ToString());
}
return string.Empty;
}
public static void SaveCheatData(string puid, string friendCode, string name, string category = "cheatData", string reason = "None")
{
string filePath = GetFilePath("BetterData");
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, Dictionary<string, string>>>>(json) ?? new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
if (!jsonData.ContainsKey(category))
{
jsonData[category] = new Dictionary<string, Dictionary<string, string>>();
}
if (!jsonData[category].ContainsKey(name))
{
jsonData[category][name] = new Dictionary<string, string>();
}
jsonData[category][name]["FriendCode"] = friendCode;
jsonData[category][name]["HashPUID"] = puid;
jsonData[category][name]["Reason"] = reason;
json = JsonSerializer.Serialize(jsonData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, json);
}
public static void ClearCheatData()
{
string filePath = GetFilePath("BetterData");
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, Dictionary<string, string>>>>(json)
?? new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
// Clear in-save data
if (jsonData != null)
{
if (jsonData.ContainsKey("cheatData"))
{
jsonData["cheatData"].Clear();
}
if (jsonData.ContainsKey("sickoData"))
{
jsonData["sickoData"].Clear();
}
if (jsonData.ContainsKey("aumData"))
{
jsonData["aumData"].Clear();
}
json = JsonSerializer.Serialize(jsonData, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(filePath, json);
}
// Clear in-memory data
AntiCheat.PlayerData.Clear();
AntiCheat.SickoData.Clear();
AntiCheat.AUMData.Clear();
Logger.LogCheat("Cleared cheat memory and data");
}
public static void LoadCheatData()
{
try
{
string filePath = GetFilePath("BetterData");
string json = File.ReadAllText(filePath);
var jsonData = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, Dictionary<string, string>>>>(json);
if (jsonData != null)
{
if (jsonData.ContainsKey("cheatData"))
{
foreach (var item in jsonData["cheatData"])
{
AntiCheat.PlayerData[item.Value["HashPUID"]] = item.Value["FriendCode"];
}
}
if (jsonData.ContainsKey("sickoData"))
{
foreach (var item in jsonData["sickoData"])
{
AntiCheat.SickoData[item.Value["HashPUID"]] = item.Value["FriendCode"];
}
}
if (jsonData.ContainsKey("aumData"))
{
foreach (var item in jsonData["aumData"])
{
AntiCheat.AUMData[item.Value["HashPUID"]] = item.Value["FriendCode"];
}
}
}
}
catch (Exception ex)
{
Logger.Error(ex.ToString());
}
}
}