mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2025-12-09 19:33:28 +08:00
release CompressSave 1.2.1
This commit is contained in:
@@ -12,56 +12,25 @@ class PatchUILoadGame
|
||||
{
|
||||
static UIButton decompressButton;
|
||||
|
||||
[HarmonyTranspiler]
|
||||
[HarmonyPatch(typeof(UISaveGameWindow), "OnSelectedChange")]
|
||||
[HarmonyPatch(typeof(UILoadGameWindow), "OnSelectedChange")]
|
||||
static IEnumerable<CodeInstruction> OnSelectedChange_Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator)
|
||||
{
|
||||
var ReadHeader = typeof(GameSave).GetMethod("ReadHeaderAndDescAndProperty", BindingFlags.Static | BindingFlags.Public);
|
||||
if (ReadHeader == null) return instructions;
|
||||
var codes = new List<CodeInstruction>(instructions);
|
||||
for (int i = 0; i < codes.Count; i++)
|
||||
{
|
||||
var code = codes[i];
|
||||
if (code.opcode == OpCodes.Ldstr && code.OperandIs("#,##0"))
|
||||
{
|
||||
var iffalse = generator.DefineLabel();
|
||||
var ifzstd = generator.DefineLabel();
|
||||
var callLabel = generator.DefineLabel();
|
||||
code.WithLabels(iffalse)
|
||||
.operand = "(N)#,##0";
|
||||
codes[i + 1].WithLabels(callLabel);
|
||||
var IL = new List<CodeInstruction> {
|
||||
new CodeInstruction(OpCodes.Ldloc_0),
|
||||
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(CompressionGameSaveHeader),"CompressionType")),
|
||||
new CodeInstruction(OpCodes.Ldc_I4_S, 0),
|
||||
new CodeInstruction(OpCodes.Beq_S, iffalse),
|
||||
new CodeInstruction(OpCodes.Ldloc_0),
|
||||
new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(CompressionGameSaveHeader),"CompressionType")),
|
||||
new CodeInstruction(OpCodes.Ldc_I4_S, 2),
|
||||
new CodeInstruction(OpCodes.Beq_S, ifzstd),
|
||||
new CodeInstruction(OpCodes.Ldstr,"(LZ4)#,##0"),
|
||||
new CodeInstruction(OpCodes.Br_S,callLabel),
|
||||
new CodeInstruction(OpCodes.Ldstr,"(ZSTD)#,##0").WithLabels(ifzstd),
|
||||
new CodeInstruction(OpCodes.Br_S,callLabel),
|
||||
};
|
||||
codes.InsertRange(i, IL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return codes.AsEnumerable();
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(UILoadGameWindow), "OnSelectedChange"), HarmonyPostfix]
|
||||
static void OnSelectedChange(UILoadGameWindow __instance, UIButton ___loadButton, Text ___prop3Text)
|
||||
static void OnSelectedChange(UILoadGameWindow __instance, Text ___prop3Text)
|
||||
{
|
||||
bool compressedSave = (___prop3Text != null && (___prop3Text.text.Contains("(LZ4)") || ___prop3Text.text.Contains("(ZSTD)"))) || (___loadButton.button.interactable == false && SaveUtil.SaveGetCompressType(__instance.selected?.saveName) != CompressionType.None);
|
||||
if (decompressButton)
|
||||
var compressedType = SaveUtil.SaveGetCompressType(__instance.selected?.saveName);
|
||||
switch (compressedType)
|
||||
{
|
||||
decompressButton.button.interactable = compressedSave;
|
||||
decompressButton.gameObject.SetActive(compressedSave);
|
||||
case CompressionType.LZ4:
|
||||
___prop3Text.text = "(LZ4)" + ___prop3Text.text;
|
||||
break;
|
||||
case CompressionType.Zstd:
|
||||
___prop3Text.text = "(ZSTD)" + ___prop3Text.text;
|
||||
break;
|
||||
default:
|
||||
___prop3Text.text = "(N)" + ___prop3Text.text;
|
||||
break;
|
||||
}
|
||||
if (!decompressButton) return;
|
||||
decompressButton.button.interactable = compressedType != CompressionType.None;
|
||||
decompressButton.gameObject.SetActive(compressedType != CompressionType.None);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(UILoadGameWindow), "_OnOpen"), HarmonyPostfix]
|
||||
|
||||
Reference in New Issue
Block a user