summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/SaveManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/SaveManager.cs')
-rw-r--r--Client/Assembly-CSharp/SaveManager.cs750
1 files changed, 750 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/SaveManager.cs b/Client/Assembly-CSharp/SaveManager.cs
new file mode 100644
index 0000000..8687d45
--- /dev/null
+++ b/Client/Assembly-CSharp/SaveManager.cs
@@ -0,0 +1,750 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using UnityEngine;
+
+public static class SaveManager
+{
+ public static Announcement LastAnnouncement
+ {
+ get
+ {
+ SaveManager.LoadAnnouncement();
+ return SaveManager.lastAnnounce;
+ }
+ set
+ {
+ SaveManager.lastAnnounce = value;
+ SaveManager.SaveAnnouncement();
+ }
+ }
+
+ public static DateTime LastStartDate
+ {
+ get
+ {
+ SaveManager.LoadSecureData2();
+ return SaveManager.lastStartDate;
+ }
+ set
+ {
+ SaveManager.LoadSecureData2();
+ if (SaveManager.lastStartDate < value)
+ {
+ SaveManager.lastStartDate = value;
+ SaveManager.SaveSecureData2();
+ }
+ }
+ }
+
+ public static int Month
+ {
+ get
+ {
+ return SaveManager.LastStartDate.Month;
+ }
+ }
+
+ public static bool BoughtNoAds
+ {
+ get
+ {
+ SaveManager.LoadSecureData();
+ return SaveManager.purchases.Contains("bought_ads");
+ }
+ }
+
+ public static bool CensorChat
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.censorChat;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.censorChat = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static ShowAdsState ShowAdsScreen
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return (ShowAdsState)SaveManager.showAdsScreen;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.showAdsScreen = (byte)value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static bool SendDataScreen
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.sendDataScreen;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.sendDataScreen = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static bool SendName
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.sendName && SaveManager.SendTelemetry;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.sendName = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static bool SendTelemetry
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.sendTelemetry;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.sendTelemetry = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static bool ShowMinPlayerWarning
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.showMinPlayerWarning;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.showMinPlayerWarning = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static bool ShowOnlineHelp
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.showOnlineHelp;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.showOnlineHelp = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static float SfxVolume
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return (float)SaveManager.sfxVolume / 255f;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.sfxVolume = (byte)(value * 255f);
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static float MusicVolume
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return (float)SaveManager.musicVolume / 255f;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.musicVolume = (byte)(value * 255f);
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static int TouchConfig
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.touchConfig;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.touchConfig = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static float JoystickSize
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.joyStickSize;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.joyStickSize = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static string PlayerName
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.lastPlayerName ?? "Enter Name";
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.lastPlayerName = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static uint LastPet
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.lastPet;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.lastPet = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static uint LastHat
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.lastHat;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.lastHat = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static uint LastSkin
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.lastSkin;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.lastSkin = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static uint LastLanguage
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return SaveManager.lastLanguage;
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.lastLanguage = value;
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static byte BodyColor
+ {
+ get
+ {
+ SaveManager.LoadPlayerPrefs();
+ return (byte)(SaveManager.colorConfig & 255U);
+ }
+ set
+ {
+ SaveManager.LoadPlayerPrefs();
+ SaveManager.colorConfig = ((SaveManager.colorConfig & 16776960U) | (uint)(value & byte.MaxValue));
+ SaveManager.SavePlayerPrefs();
+ }
+ }
+
+ public static GameOptionsData GameHostOptions
+ {
+ get
+ {
+ if (SaveManager.hostOptionsData == null)
+ {
+ SaveManager.hostOptionsData = SaveManager.LoadGameOptions("gameHostOptions");
+ }
+ SaveManager.hostOptionsData.NumImpostors = Mathf.Clamp(SaveManager.hostOptionsData.NumImpostors, 1, 3);
+ SaveManager.hostOptionsData.KillDistance = Mathf.Clamp(SaveManager.hostOptionsData.KillDistance, 0, 2);
+ return SaveManager.hostOptionsData;
+ }
+ set
+ {
+ SaveManager.hostOptionsData = value;
+ SaveManager.SaveGameOptions(SaveManager.hostOptionsData, "gameHostOptions");
+ }
+ }
+
+ public static GameOptionsData GameSearchOptions
+ {
+ get
+ {
+ GameOptionsData result;
+ if ((result = SaveManager.searchOptionsData) == null)
+ {
+ result = (SaveManager.searchOptionsData = SaveManager.LoadGameOptions("gameSearchOptions"));
+ }
+ return result;
+ }
+ set
+ {
+ SaveManager.searchOptionsData = value;
+ SaveManager.SaveGameOptions(SaveManager.searchOptionsData, "gameSearchOptions");
+ }
+ }
+
+ private static bool loaded;
+
+ private static bool loadedStats;
+
+ private static bool loadedAnnounce;
+
+ private static string lastPlayerName;
+
+ private static byte sfxVolume = byte.MaxValue;
+
+ private static byte musicVolume = byte.MaxValue;
+
+ private static bool showMinPlayerWarning = true;
+
+ private static bool showOnlineHelp = true;
+
+ private static bool sendDataScreen = false;
+
+ private static byte showAdsScreen = 0;
+
+ private static bool sendName = true;
+
+ private static bool sendTelemetry = true;
+
+ private static bool censorChat = true;
+
+ private static int touchConfig;
+
+ private static float joyStickSize = 1f;
+
+ private static uint colorConfig;
+
+ private static uint lastPet;
+
+ private static uint lastHat;
+
+ private static uint lastSkin;
+
+ private static uint lastLanguage;
+
+ private static GameOptionsData hostOptionsData;
+
+ private static GameOptionsData searchOptionsData;
+
+ private static Announcement lastAnnounce;
+
+ private static SaveManager.SecureDataFile secure2 = new SaveManager.SecureDataFile(Path.Combine(Application.persistentDataPath, "secure2"));
+
+ private static DateTime lastStartDate = DateTime.MinValue;
+
+ private static SaveManager.SecureDataFile purchaseFile = new SaveManager.SecureDataFile(Path.Combine(Application.persistentDataPath, "secureNew"));
+
+ private static HashSet<string> purchases = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
+
+ private class SecureDataFile
+ {
+ public bool Loaded { get; private set; }
+
+ private string filePath;
+
+ public SecureDataFile(string filePath)
+ {
+ this.filePath = filePath;
+ }
+
+ public BinaryReader LoadData()
+ {
+ this.Loaded = true;
+ Debug.Log("Loading secure: " + this.filePath);
+ if (File.Exists(this.filePath))
+ {
+ byte[] array = File.ReadAllBytes(this.filePath);
+ for (int i = 0; i < array.Length; i++)
+ {
+ byte[] array2 = array;
+ int num = i;
+ array2[num] ^= (byte)(i % 212);
+ }
+ try
+ {
+ BinaryReader binaryReader = new BinaryReader(new MemoryStream(array));
+ binaryReader.ReadString();
+ return binaryReader;
+ }
+ catch
+ {
+ Debug.Log("Deleted corrupt secure file inner");
+ this.Delete();
+ }
+ }
+ return null;
+ }
+
+ public void SaveData(params object[] items)
+ {
+ byte[] array;
+ using (MemoryStream memoryStream = new MemoryStream())
+ {
+ using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
+ {
+ binaryWriter.Write(SystemInfo.deviceUniqueIdentifier);
+ foreach (object obj in items)
+ {
+ if (obj is long)
+ {
+ binaryWriter.Write((long)obj);
+ }
+ else if (obj is HashSet<string>)
+ {
+ foreach (string value in ((HashSet<string>)obj))
+ {
+ binaryWriter.Write(value);
+ }
+ }
+ }
+ binaryWriter.Flush();
+ memoryStream.Position = 0L;
+ array = memoryStream.ToArray();
+ }
+ }
+ for (int j = 0; j < array.Length; j++)
+ {
+ byte[] array2 = array;
+ int num = j;
+ array2[num] ^= (byte)(j % 212);
+ }
+ File.WriteAllBytes(this.filePath, array);
+ }
+
+ public void Delete()
+ {
+ try
+ {
+ File.Delete(this.filePath);
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ private static void SaveSecureData2()
+ {
+ SaveManager.secure2.SaveData(new object[]
+ {
+ SaveManager.lastStartDate.Ticks
+ });
+ }
+
+ private static void LoadSecureData2()
+ {
+ if (SaveManager.secure2.Loaded)
+ {
+ return;
+ }
+ try
+ {
+ using (BinaryReader binaryReader = SaveManager.secure2.LoadData())
+ {
+ SaveManager.lastStartDate = new DateTime(binaryReader.ReadInt64());
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ public static bool GetPurchase(string key)
+ {
+ SaveManager.LoadSecureData();
+ return SaveManager.purchases.Contains(key);
+ }
+
+ public static void SetPurchased(string key)
+ {
+ SaveManager.LoadSecureData();
+ SaveManager.purchases.Add(key ?? "null");
+ if (key == "bought_ads")
+ {
+ SaveManager.ShowAdsScreen = ShowAdsState.Purchased;
+ }
+ SaveManager.SaveSecureData();
+ }
+
+ private static void LoadSecureData()
+ {
+ if (SaveManager.purchaseFile.Loaded)
+ {
+ return;
+ }
+ try
+ {
+ using (BinaryReader binaryReader = SaveManager.purchaseFile.LoadData())
+ {
+ while (binaryReader.BaseStream.Position < binaryReader.BaseStream.Length)
+ {
+ SaveManager.purchases.Add(binaryReader.ReadString());
+ }
+ }
+ }
+ catch (NullReferenceException)
+ {
+ }
+ catch (Exception arg)
+ {
+ Debug.Log("Deleted corrupt secure file outer: " + arg);
+ SaveManager.purchaseFile.Delete();
+ }
+ }
+
+ private static void SaveSecureData()
+ {
+ SaveManager.purchaseFile.SaveData(new object[]
+ {
+ SaveManager.purchases
+ });
+ }
+
+ private static GameOptionsData LoadGameOptions(string filename)
+ {
+ string path = Path.Combine(Application.persistentDataPath, filename);
+ if (File.Exists(path))
+ {
+ using (FileStream fileStream = File.OpenRead(path))
+ {
+ using (BinaryReader binaryReader = new BinaryReader(fileStream))
+ {
+ return GameOptionsData.Deserialize(binaryReader) ?? new GameOptionsData();
+ }
+ }
+ }
+ return new GameOptionsData();
+ }
+
+ private static void SaveGameOptions(GameOptionsData data, string filename)
+ {
+ using (FileStream fileStream = new FileStream(Path.Combine(Application.persistentDataPath, filename), FileMode.Create, FileAccess.Write))
+ {
+ using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
+ {
+ data.Serialize(binaryWriter);
+ }
+ }
+ }
+
+ private static void LoadAnnouncement()
+ {
+ if (SaveManager.loadedAnnounce)
+ {
+ return;
+ }
+ SaveManager.loadedAnnounce = true;
+ string path = Path.Combine(Application.persistentDataPath, "announcement");
+ if (File.Exists(path))
+ {
+ string[] array = File.ReadAllText(path).Split(new char[1]);
+ if (array.Length == 3)
+ {
+ Announcement announcement = default(Announcement);
+ SaveManager.TryGetUint(array, 0, out announcement.Id);
+ announcement.AnnounceText = array[1];
+ SaveManager.TryGetInt(array, 2, out announcement.DateFetched);
+ SaveManager.lastAnnounce = announcement;
+ return;
+ }
+ SaveManager.lastAnnounce = default(Announcement);
+ }
+ }
+
+ public static void SaveAnnouncement()
+ {
+ File.WriteAllText(Path.Combine(Application.persistentDataPath, "announcement"), string.Join("\0", new object[]
+ {
+ SaveManager.lastAnnounce.Id,
+ SaveManager.lastAnnounce.AnnounceText,
+ SaveManager.lastAnnounce.DateFetched
+ }));
+ }
+
+ private static void LoadPlayerPrefs()
+ {
+ if (SaveManager.loaded)
+ {
+ return;
+ }
+ SaveManager.loaded = true;
+ string path = Path.Combine(Application.persistentDataPath, "playerPrefs");
+ if (File.Exists(path))
+ {
+ string[] array = File.ReadAllText(path).Split(new char[]
+ {
+ ','
+ });
+ SaveManager.lastPlayerName = array[0];
+ if (array.Length > 1)
+ {
+ int.TryParse(array[1], out SaveManager.touchConfig);
+ }
+ if (array.Length <= 2 || !uint.TryParse(array[2], out SaveManager.colorConfig))
+ {
+ SaveManager.colorConfig = (uint)((byte)(Palette.PlayerColors.RandomIdx<Color32>() << 16) | (byte)(Palette.PlayerColors.RandomIdx<Color32>() << 8) | (byte)Palette.PlayerColors.RandomIdx<Color32>());
+ }
+ SaveManager.TryGetBool(array, 4, out SaveManager.sendName, false);
+ SaveManager.TryGetBool(array, 5, out SaveManager.sendTelemetry, false);
+ SaveManager.TryGetBool(array, 6, out SaveManager.sendDataScreen, false);
+ SaveManager.TryGetByte(array, 7, out SaveManager.showAdsScreen);
+ SaveManager.TryGetBool(array, 8, out SaveManager.showMinPlayerWarning, false);
+ SaveManager.TryGetBool(array, 9, out SaveManager.showOnlineHelp, false);
+ SaveManager.TryGetUint(array, 10, out SaveManager.lastHat);
+ SaveManager.TryGetByte(array, 11, out SaveManager.sfxVolume);
+ SaveManager.TryGetByte(array, 12, out SaveManager.musicVolume);
+ SaveManager.TryGetFloat(array, 13, out SaveManager.joyStickSize, 1f);
+ SaveManager.TryGetUint(array, 15, out SaveManager.lastSkin);
+ SaveManager.TryGetUint(array, 16, out SaveManager.lastPet);
+ SaveManager.TryGetBool(array, 17, out SaveManager.censorChat, true);
+ SaveManager.TryGetUint(array, 18, out SaveManager.lastLanguage);
+ }
+ }
+
+ private static void SavePlayerPrefs()
+ {
+ SaveManager.LoadPlayerPrefs();
+ File.WriteAllText(Path.Combine(Application.persistentDataPath, "playerPrefs"), string.Join(",", new object[]
+ {
+ SaveManager.lastPlayerName,
+ SaveManager.touchConfig,
+ SaveManager.colorConfig,
+ 1,
+ SaveManager.sendName,
+ SaveManager.sendTelemetry,
+ SaveManager.sendDataScreen,
+ SaveManager.showAdsScreen,
+ SaveManager.showMinPlayerWarning,
+ SaveManager.showOnlineHelp,
+ SaveManager.lastHat,
+ SaveManager.sfxVolume,
+ SaveManager.musicVolume,
+ SaveManager.joyStickSize.ToString(CultureInfo.InvariantCulture),
+ 0L,
+ SaveManager.lastSkin,
+ SaveManager.lastPet,
+ SaveManager.censorChat,
+ SaveManager.lastLanguage
+ }));
+ }
+
+ private static void TryGetBool(string[] parts, int index, out bool value, bool @default = false)
+ {
+ value = @default;
+ if (parts.Length > index)
+ {
+ bool.TryParse(parts[index], out value);
+ }
+ }
+
+ private static void TryGetByte(string[] parts, int index, out byte value)
+ {
+ value = 0;
+ if (parts.Length > index)
+ {
+ byte.TryParse(parts[index], out value);
+ }
+ }
+
+ private static void TryGetFloat(string[] parts, int index, out float value, float @default = 0f)
+ {
+ value = @default;
+ if (parts.Length > index)
+ {
+ float.TryParse(parts[index], NumberStyles.Number, CultureInfo.InvariantCulture, out value);
+ }
+ }
+
+ private static void TryGetInt(string[] parts, int index, out int value)
+ {
+ value = 0;
+ if (parts.Length > index)
+ {
+ int.TryParse(parts[index], out value);
+ }
+ }
+
+ private static void TryGetUint(string[] parts, int index, out uint value)
+ {
+ value = 0U;
+ if (parts.Length > index)
+ {
+ uint.TryParse(parts[index], out value);
+ }
+ }
+
+ private static void TryGetDateTicks(string[] parts, int index, out DateTime value)
+ {
+ value = DateTime.MinValue;
+ long ticks;
+ if (parts.Length > index && long.TryParse(parts[index], out ticks))
+ {
+ value = new DateTime(ticks, DateTimeKind.Utc);
+ }
+ }
+}