You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
10 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using QO.IO;
using Qoo;
using Qoo.AM.Game;
using Qoo.Def;
using Qoo.Game;
using UnityEngine;
// Token: 0x0200013E RID: 318
public class SaveLoadManager
{
// Token: 0x060008BA RID: 2234 RVA: 0x000268C4 File Offset: 0x00024AC4
public static void Delete(int index)
{
string str = SaveLoadManager.SAVEDATA_NAME + index.ToString();
if (File.Exists(SaveLoadManager.SAVEDIR + "/" + str))
{
File.Delete(SaveLoadManager.SAVEDIR + "/" + str);
}
if (File.Exists(SaveLoadManager.SAVEDIR + "/H_" + str))
{
File.Delete(SaveLoadManager.SAVEDIR + "/H_" + str);
}
}
// Token: 0x060008BB RID: 2235 RVA: 0x00026944 File Offset: 0x00024B44
public static void DeleteAll()
{
SaveLoadManager.DeleteAllGameSaveData();
SaveLoadManager.DeleteAutoSaveData();
SaveLoadManager.DeleteSystemSaveData();
}
// Token: 0x060008BC RID: 2236 RVA: 0x00026958 File Offset: 0x00024B58
public static void DeleteAllGameSaveData()
{
for (int i = 0; i < SaveLoadManager.AUTO_SAVE_INDEX; i++)
{
SaveLoadManager.Delete(i);
}
}
// Token: 0x060008BD RID: 2237 RVA: 0x00026984 File Offset: 0x00024B84
public static void DeleteSystemSaveData()
{
SaveLoadManager.Delete(SaveLoadManager.SYSTEM_DATA_INDEX);
}
// Token: 0x060008BE RID: 2238 RVA: 0x00026990 File Offset: 0x00024B90
public static void DeleteAutoSaveData()
{
SaveLoadManager.Delete(SaveLoadManager.AUTO_SAVE_INDEX);
}
// Token: 0x060008BF RID: 2239 RVA: 0x0002699C File Offset: 0x00024B9C
public static bool Save(byte[] bytes, SaveFileInfo info, int index)
{
string text = SaveLoadManager.SAVEDATA_NAME + index.ToString();
byte[] array = null;
for (int i = 0; i < SaveLoadManager.SAVE_RETRY_CNT; i++)
{
try
{
array = SaveLoadManager.SaveBytes(text + "_TMP", bytes, false);
if (array != null)
{
break;
}
}
catch (IOException ex)
{
Qoo.Debug.Print(ex.Message);
}
catch (Exception ex2)
{
Qoo.Debug.Print(ex2.Message);
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_SAVE_CATCH_EXCEPTION, UnityApp.Instance.isJapanese ? "ゲームデータの保存を正常に終了できませんでした。" : "The game data could not be saved");
break;
}
}
if (array == null)
{
Qoo.Debug.Print("####Save file create error");
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_SAVE_DATA_CREATE, UnityApp.Instance.isJapanese ? "ゲームデータの保存を正常に終了できませんでした。" : "The game data could not be saved");
return false;
}
string text2 = BytesHash.CreateHashCode(array);
if (text2 == null)
{
Qoo.Debug.Print("####hash = null death");
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_SAVE_HASHCODE_CREATE, UnityApp.Instance.isJapanese ? "ゲームデータの保存を正常に終了できませんでした。" : "The game data could not be saved");
return false;
}
info.HashCode = text2;
if (SaveLoadManager.SaveToXML<SaveFileInfo>("H_" + text + "_TMP", info, Encoding.UTF8, false) == null)
{
Qoo.Debug.Print("header file save error");
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_SAVE_HEADER_CREATE, UnityApp.Instance.isJapanese ? "ゲームデータの保存を正常に終了できませんでした。" : "The game data could not be saved");
return false;
}
try
{
if (File.Exists(SaveLoadManager.SAVEDIR + "/" + text))
{
File.Delete(SaveLoadManager.SAVEDIR + "/" + text);
}
if (File.Exists(SaveLoadManager.SAVEDIR + "/H_" + text))
{
File.Delete(SaveLoadManager.SAVEDIR + "/H_" + text);
}
File.Move(SaveLoadManager.SAVEDIR + "/" + text + "_TMP", SaveLoadManager.SAVEDIR + "/" + text);
File.Move(SaveLoadManager.SAVEDIR + "/H_" + text + "_TMP", SaveLoadManager.SAVEDIR + "/H_" + text);
}
catch (Exception ex3)
{
Qoo.Debug.Print(ex3.Message);
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_SAVE_RENAME, "ゲームデータの保存を正常に終了できませんでした。");
}
return true;
}
// Token: 0x060008C0 RID: 2240 RVA: 0x00026BD0 File Offset: 0x00024DD0
public static bool SaveSystem()
{
SysSaveData sysSaveData = new SysSaveData();
byte[] bytes = sysSaveData.Save();
SaveFileInfo info = new SaveFileInfo();
bool result = SaveLoadManager.Save(bytes, info, SaveLoadManager.SYSTEM_DATA_INDEX);
Qoo.Debug.Print("SaveSysData");
return result;
}
// Token: 0x060008C1 RID: 2241 RVA: 0x00026C08 File Offset: 0x00024E08
public static bool SaveAuto()
{
byte[] array = GameData.Save();
if (array != null)
{
bool result = SaveLoadManager.Save(array, new SaveFileInfo
{
LastMessage = GameData.LastMessage,
PlayCharaId = (int)GameData.GetRoute(),
SceneName = GameData.GetSceneName(),
TimeStamp = DateTime.Now.ToString("yyyyMMdd HHmm")
}, SaveLoadManager.AUTO_SAVE_INDEX);
Qoo.Debug.Print("SaveAutoSave");
return result;
}
Qoo.Debug.Print("SaveAutoSave:Fail");
return false;
}
// Token: 0x060008C2 RID: 2242 RVA: 0x00026C84 File Offset: 0x00024E84
public static byte[] Load(int index)
{
string text = SaveLoadManager.SAVEDATA_NAME + index.ToString();
if (!File.Exists(SaveLoadManager.SAVEDIR + "/" + text))
{
return null;
}
SaveFileInfo saveFileInfo = SaveLoadManager.LoadHeader(index);
byte[] array = null;
for (int i = 0; i < SaveLoadManager.SAVE_RETRY_CNT; i++)
{
try
{
array = SaveLoadManager.LoadBytes(text, false);
if (array != null)
{
break;
}
}
catch (IOException ex)
{
Qoo.Debug.Print(ex.Message);
}
catch (Exception ex2)
{
Qoo.Debug.Print(ex2.Message);
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_LOAD_CATCH_EXCEPTION, UnityApp.Instance.isJapanese ? "ゲームデータの読込を正常に終了できませんでした。" : "The game data could not be loaded");
break;
}
}
if (array == null)
{
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.FAIL_LOAD, UnityApp.Instance.isJapanese ? "ゲームデータの読込を正常に終了できませんでした。" : "The game data could not be loaded");
return null;
}
string hashCode = BytesHash.CreateHashCode(array);
if (!saveFileInfo.CheckHash(hashCode))
{
Qoo.Debug.Print("hash ga tigau yo");
DispAssert.Show(ErrorDef.ASSERT_ERROR_CODE.UNMATCH_SAVE_HASH, UnityApp.Instance.isJapanese ? "ゲームデータの読込を正常に終了できませんでした。" : "The game data could not be loaded");
return null;
}
return array;
}
// Token: 0x060008C3 RID: 2243 RVA: 0x00026DA0 File Offset: 0x00024FA0
public static byte[] LoadSystem()
{
return SaveLoadManager.Load(SaveLoadManager.SYSTEM_DATA_INDEX);
}
// Token: 0x060008C4 RID: 2244 RVA: 0x00026DAC File Offset: 0x00024FAC
public static byte[] LoadAuto()
{
return SaveLoadManager.Load(SaveLoadManager.AUTO_SAVE_INDEX);
}
// Token: 0x060008C5 RID: 2245 RVA: 0x00026DB8 File Offset: 0x00024FB8
public static SaveFileInfo LoadHeader(int index)
{
string str = SaveLoadManager.SAVEDATA_NAME + index.ToString();
return SaveLoadManager.LoadXML<SaveFileInfo>("H_" + str, false);
}
// Token: 0x060008C6 RID: 2246 RVA: 0x00026DEC File Offset: 0x00024FEC
private static byte[] SaveBytes(string fname, byte[] savedata, bool encrypt = false)
{
string text = SaveLoadManager.SAVEDIR + "/" + fname;
QODirectory.CreatePathToFileDirectory(text);
byte[] array = savedata;
if (encrypt)
{
array = BytesEncrypter.EncryptRijndael(array, SaveLoadManager.SALT_STRING, SaveLoadManager.PASSWORD);
}
byte[] result;
try
{
File.WriteAllBytes(text, array);
result = array;
}
catch (IOException ex)
{
Qoo.Debug.Print("####Catch IOException!!");
throw ex;
}
catch (Exception ex2)
{
Qoo.Debug.Print("####Catch Other Exception!!");
throw ex2;
}
return result;
}
// Token: 0x060008C7 RID: 2247 RVA: 0x00026E98 File Offset: 0x00025098
private static byte[] LoadBytes(string fname, bool decrypt = false)
{
string path = SaveLoadManager.SAVEDIR + "/" + fname;
if (!File.Exists(path))
{
return null;
}
byte[] result;
try
{
byte[] array = File.ReadAllBytes(path);
if (decrypt)
{
array = BytesEncrypter.DecryptRijndael(array, SaveLoadManager.SALT_STRING, SaveLoadManager.PASSWORD);
}
result = array;
}
catch (IOException ex)
{
Qoo.Debug.Print("####Catch IOException!!");
throw ex;
}
catch (Exception ex2)
{
Qoo.Debug.Print("####Catch Other Exception!!");
throw ex2;
}
return result;
}
// Token: 0x060008C8 RID: 2248 RVA: 0x00026F48 File Offset: 0x00025148
private static byte[] SaveToXML<T>(string fname, object saveData, Encoding encode, bool encrypt = false) where T : class
{
byte[] savedata = SaveLoadManager.SerializeXML<T>(saveData, encode);
return SaveLoadManager.SaveBytes(fname, savedata, encrypt);
}
// Token: 0x060008C9 RID: 2249 RVA: 0x00026F68 File Offset: 0x00025168
private static T LoadXML<T>(string fname, bool decrypt = false) where T : class
{
byte[] array = SaveLoadManager.LoadBytes(fname, decrypt);
if (array == null)
{
return (T)((object)null);
}
return SaveLoadManager.DeserializeXML<T>(array);
}
// Token: 0x060008CA RID: 2250 RVA: 0x00026F90 File Offset: 0x00025190
private static byte[] SerializeXML<T>(object data, Encoding encode) where T : class
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
MemoryStream memoryStream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(memoryStream, encode);
xmlSerializer.Serialize(streamWriter, data);
byte[] buffer = memoryStream.GetBuffer();
streamWriter.Close();
return buffer;
}
// Token: 0x060008CB RID: 2251 RVA: 0x00026FD4 File Offset: 0x000251D4
private static T DeserializeXML<T>(byte[] bytes) where T : class
{
MemoryStream stream = new MemoryStream(bytes);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
object obj = xmlSerializer.Deserialize(stream);
return (T)((object)obj);
}
// Token: 0x0400077A RID: 1914
public static readonly int SYSTEM_DATA_INDEX = 99;
// Token: 0x0400077B RID: 1915
public static readonly int AUTO_SAVE_INDEX = 9;
// Token: 0x0400077C RID: 1916
public static readonly string SAVEDATA_NAME = "SAVEDATA";
// Token: 0x0400077D RID: 1917
public static readonly int SAVE_RETRY_CNT = 5;
// Token: 0x0400077E RID: 1918
private static readonly string SALT_STRING = "jp.co.qourier";
// Token: 0x0400077F RID: 1919
private static readonly string PASSWORD = "Qourier1045";
// Token: 0x04000780 RID: 1920
private static readonly string SAVEDIR = Application.persistentDataPath + "/save";
}