1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-10 09:23:28 +08:00

CompressSave v1.3.2

This commit is contained in:
2023-09-26 21:19:46 +08:00
parent 6311e3b9fb
commit 7a0a1b90ab
7 changed files with 301 additions and 58 deletions

View File

@@ -20,7 +20,7 @@ public enum CompressionType
public class CompressSave : BaseUnityPlugin
{
private Harmony _patchSave, _patchUISave, _patchUILoad;
private static string StringFromCompresstionType(CompressionType type)
public static string StringFromCompresstionType(CompressionType type)
{
return type switch
{
@@ -46,25 +46,22 @@ public class CompressSave : BaseUnityPlugin
SaveUtil.Logger = Logger;
if (LZ4API.Avaliable && ZstdAPI.Avaliable)
{
PatchSave.CompressionTypeForSaves = CompressionTypeFromString(
Config.Bind("Compression", "Type", StringFromCompresstionType(PatchSave.CompressionTypeForSaves),
PatchSave.CompressionTypeForSavesConfig = Config.Bind("Compression", "Type", StringFromCompresstionType(PatchSave.CompressionTypeForSaves),
new ConfigDescription("Set default compression type for manual saves.",
new AcceptableValueList<string>("lz4", "zstd", "none"), new { }))
.Value);
PatchSave.CompressionTypeForAutoSaves = CompressionTypeFromString(
Config.Bind("Compression", "TypeForAuto", StringFromCompresstionType(PatchSave.CompressionTypeForSaves),
new AcceptableValueList<string>("lz4", "zstd", "none"), new { }));
PatchSave.CompressionTypeForSaves = CompressionTypeFromString(PatchSave.CompressionTypeForSavesConfig.Value);
PatchSave.CompressionTypeForAutoSavesConfig = Config.Bind("Compression", "TypeForAuto", StringFromCompresstionType(PatchSave.CompressionTypeForAutoSaves),
new ConfigDescription("Set default compression type for auto saves and last-exit save.",
new AcceptableValueList<string>("lz4", "zstd", "none"), new { }))
.Value);
new AcceptableValueList<string>("lz4", "zstd", "none"), new { }));
PatchSave.CompressionTypeForAutoSaves = CompressionTypeFromString(PatchSave.CompressionTypeForAutoSavesConfig.Value);
PatchSave.CompressionLevelForSaves = Config.Bind("Compression", "Level", PatchSave.CompressionLevelForSaves,
"Set default compression level for manual saves.\n0 for default level.\n3 ~ 12 for lz4, -5 ~ 22 for zstd.\nSmaller level leads to faster speed and less compression ratio.")
.Value;
PatchSave.CompressionLevelForAutoSaves = Config.Bind("Compression", "LevelForAuto", PatchSave.CompressionLevelForAutoSaves,
"Set default compression level for auto saves and last-exit save.\n0 for default level.\n3 ~ 12 for lz4, -5 ~ 22 for zstd.\nSmaller level leads to faster speed and less compression ratio.")
.Value;
PatchSave.EnableForAutoSaves = Config.Bind("Compression", "EnableForAutoSaves", PatchSave.EnableForAutoSaves,
"Enable the feature for auto saves and last-exit save.")
.Value;
PatchSave.EnableForAutoSaves = Config.Bind("Compression", "EnableForAutoSaves", true,
"Enable the feature for auto saves and last-exit save.");
PatchSave.CreateCompressBuffer();
if (GameConfig.gameVersion != SaveUtil.VerifiedVersion)
{
@@ -78,7 +75,14 @@ public class CompressSave : BaseUnityPlugin
_patchUILoad = Harmony.CreateAndPatchAll(typeof(PatchUILoadGame));
}
else
SaveUtil.Logger.LogWarning("Either lz4warp.dll or zstdwrap.dll is not avaliable.");
SaveUtil.Logger.LogWarning("Either nonewrap.dll, lz4warp.dll or zstdwrap.dll is not avaliable.");
I18N.Init();
I18N.Add("Store", "Store (No Compression)", "存储(不压缩)");
I18N.Add("Decompress", "Decompress", "解压存档");
I18N.Add("Save with Compression", "Save (Compress)", "压缩保存");
I18N.Add("Compression for auto saves", "Compression for auto saves", "  自动存档压缩方式");
I18N.Add("Compression for manual saves", "Compression for manual saves", "  手动存档压缩方式");
I18N.Apply();
}
public void OnDestroy()
@@ -108,9 +112,11 @@ public class PatchSave
private static int _compressionLevelForSaving;
public static CompressionType CompressionTypeForSaves = CompressionType.Zstd;
public static CompressionType CompressionTypeForAutoSaves = CompressionType.Zstd;
public static ConfigEntry<string> CompressionTypeForSavesConfig;
public static ConfigEntry<string> CompressionTypeForAutoSavesConfig;
public static int CompressionLevelForSaves;
public static int CompressionLevelForAutoSaves;
public static bool EnableForAutoSaves = true;
public static ConfigEntry<bool> EnableForAutoSaves;
private static Stream _compressionStream;
public static bool EnableCompress;
@@ -151,7 +157,7 @@ public class PatchSave
[HarmonyPatch(typeof(GameSave), "SaveAsLastExit")]
private static void BeforeAutoSave()
{
UseCompressSave = EnableForAutoSaves && EnableCompress;
UseCompressSave = EnableForAutoSaves.Value && EnableCompress;
if (!UseCompressSave) return;
_compressionTypeForSaving = CompressionTypeForAutoSaves;
_compressionLevelForSaving = CompressionLevelForAutoSaves;