Changed the location where client save data is stored to the MikuSB directory.

This commit is contained in:
Kei-Luna
2026-05-15 09:19:00 +09:00
parent 5aa5ef92d0
commit 42b1ad1024
2 changed files with 51 additions and 1 deletions

View File

@@ -19,6 +19,11 @@ public static class ConfigManager
//LoadHotfixData(); //LoadHotfixData();
} }
public static void SaveConfig()
{
SaveData(Config, ConfigFilePath);
}
private static void LoadConfigData() private static void LoadConfigData()
{ {
var file = new FileInfo(ConfigFilePath); var file = new FileInfo(ConfigFilePath);
@@ -43,9 +48,26 @@ public static class ConfigManager
Config = JsonConvert.DeserializeObject<ConfigContainer>(json)!; Config = JsonConvert.DeserializeObject<ConfigContainer>(json)!;
} }
Config.Loader.Arguments = NormalizeLoaderArguments(Config.Loader.Arguments);
SaveData(Config, ConfigFilePath); SaveData(Config, ConfigFilePath);
} }
private static string[] NormalizeLoaderArguments(string[]? arguments)
{
var result = new List<string>(arguments ?? []);
var userDataDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "Client_User_Data"));
Directory.CreateDirectory(userDataDirectory);
var userDirArgument = $"-userdir={userDataDirectory}";
var existingIndex = result.FindIndex(x => x.StartsWith("-userdir=", StringComparison.OrdinalIgnoreCase));
if (existingIndex >= 0)
result[existingIndex] = userDirArgument;
else
result.Add(userDirArgument);
return result.ToArray();
}
private static void LoadHotfixData() private static void LoadHotfixData()
{ {
var file = new FileInfo(HotfixFilePath); var file = new FileInfo(HotfixFilePath);

View File

@@ -293,11 +293,14 @@ public sealed class LaunchOptions
public static LaunchOptions FromConfig(IEnumerable<string>? extraGameArguments = null) public static LaunchOptions FromConfig(IEnumerable<string>? extraGameArguments = null)
{ {
var config = ConfigManager.Config; var config = ConfigManager.Config;
var serverBaseDirectory = AppContext.BaseDirectory;
var gamePath = ResolvePath(config.Loader.GamePath, AppContext.BaseDirectory); var gamePath = ResolvePath(config.Loader.GamePath, AppContext.BaseDirectory);
var patchPaths = ResolvePatchPaths(config.Loader.PatchPaths, AppContext.BaseDirectory); var patchPaths = ResolvePatchPaths(config.Loader.PatchPaths, serverBaseDirectory);
var gameArgs = new List<string>(config.Loader.Arguments ?? []); var gameArgs = new List<string>(config.Loader.Arguments ?? []);
if (extraGameArguments is not null) if (extraGameArguments is not null)
gameArgs.AddRange(extraGameArguments.Where(x => !string.IsNullOrWhiteSpace(x))); gameArgs.AddRange(extraGameArguments.Where(x => !string.IsNullOrWhiteSpace(x)));
gameArgs = EnsureUserDirArgument(gameArgs, serverBaseDirectory);
PersistResolvedArgumentsIfChanged(config, gameArgs);
var env = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); var env = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (config.Loader.SetAllProxy && config.Proxy.Enabled) if (config.Loader.SetAllProxy && config.Proxy.Enabled)
@@ -330,6 +333,31 @@ public sealed class LaunchOptions
}; };
} }
private static List<string> EnsureUserDirArgument(List<string> gameArgs, string baseDirectory)
{
var userDataDirectory = Path.GetFullPath(Path.Combine(baseDirectory, "Client_User_Data"));
Directory.CreateDirectory(userDataDirectory);
var userDirArgument = $"-userdir={userDataDirectory}";
var existingIndex = gameArgs.FindIndex(x => x.StartsWith("-userdir=", StringComparison.OrdinalIgnoreCase));
if (existingIndex >= 0)
gameArgs[existingIndex] = userDirArgument;
else
gameArgs.Add(userDirArgument);
return gameArgs;
}
private static void PersistResolvedArgumentsIfChanged(Configuration.ConfigContainer config, List<string> gameArgs)
{
var currentArgs = config.Loader.Arguments ?? [];
if (currentArgs.SequenceEqual(gameArgs, StringComparer.Ordinal))
return;
config.Loader.Arguments = gameArgs.ToArray();
ConfigManager.SaveConfig();
}
private static string? ResolvePath(string? value, string baseDirectory) private static string? ResolvePath(string? value, string baseDirectory)
{ {
if (string.IsNullOrWhiteSpace(value)) if (string.IsNullOrWhiteSpace(value))