-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMyCustomSaveData.cs
150 lines (120 loc) · 4.18 KB
/
MyCustomSaveData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;
using CodeStage.AntiCheat.ObscuredTypes;
[Serializable]
public class MyCustomSaveDataElement
{
public ObscuredString Key { get; set; }
public ObscuredString Value { get; set; }
}
public static class SaveLoadManager
{
public static void Save()
{
#if UNITY_SWITCH && !UNITY_EDITOR
// Custom Switch saving
if (DDOL_Switch.instance)
{
DDOL_Switch.instance.Save();
}
#endif
#if UNITY_STANDALONE || UNITY_EDITOR && !UNITY_XBOXONE && !UNITY_SWITCH
string dataPathBaseString = Application.persistentDataPath;
// Create Save Data in a custom directory per user for Steam
// Check if we already have created a directory for the specific SteamID
dataPathBaseString += "/" + Steamworks.SteamClient.SteamId.ToString();
if (!Directory.Exists(dataPathBaseString))
{
Directory.CreateDirectory(dataPathBaseString); // Creates the Unique Steam User's save directory
}
MyCustomSaveData dataToSave = DDOL_MAIN.instance.myCustomSaveData;
BinaryFormatter bf = new BinaryFormatter();
MyCustomSaveData data = dataToSave;
byte[] encryptedData;
using (var ms = new MemoryStream())
{
bf.Serialize(ms, data);
encryptedData = ms.ToArray();
ObscuredByte.Encrypt(encryptedData, 42);
}
FileStream stream = new FileStream(dataPathBaseString + "/MyCustomSaveData.dat", FileMode.Create);
bf.Serialize(stream, encryptedData);
stream.Close();
// Update Steam Stats and Achievements after saving
DDOL_Steam.instance.UpdateSteamStatsAndAchievements();
#endif
}
public static MyCustomSaveData Load()
{
MyCustomSaveData loadedSaveData = null;
string dataPathBaseString = Application.persistentDataPath;
#if UNITY_STANDALONE || UNITY_EDITOR && !UNITY_XBOXONE && !UNITY_SWITCH
// Load Save Data from custom directory per user for Steam
dataPathBaseString += "/" + Steamworks.SteamClient.SteamId.ToString();
#endif
if (File.Exists(dataPathBaseString + "/MyCustomSaveData.dat"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream stream = new FileStream(dataPathBaseString + "/MyCustomSaveData.dat", FileMode.Open);
byte[] decryptedBytes = bf.Deserialize(stream) as byte[];
ObscuredByte.Decrypt(decryptedBytes, 42);
Stream decryptedStream = new MemoryStream(decryptedBytes);
loadedSaveData = bf.Deserialize(decryptedStream) as MyCustomSaveData;
stream.Close();
}
return loadedSaveData;
}
}
[Serializable]
public class MyCustomSaveData
{
// REWIRED information
public List<MyCustomSaveDataElement> myCustomSaveDataElementKeys = new List<MyCustomSaveDataElement>();
public void SetKey(string key, string value)
{
bool keyFound = false;
foreach (MyCustomSaveDataElement dataElement in myCustomSaveDataElementKeys)
{
if( key == dataElement.Key)
{
dataElement.Value = value;
keyFound = true;
break;
}
}
if(!keyFound)
{
myCustomSaveDataElementKeys.Add(new MyCustomSaveDataElement() { Key = key, Value = value });
}
}
public string GetKey(string key)
{
string returnValue = null;
foreach (MyCustomSaveDataElement dataElement in MyCustomSaveDataElementKeys)
{
if (key == dataElement.Key)
{
returnValue = dataElement.Value;
break;
}
}
return returnValue;
}
public bool HasKey(string key)
{
bool hasKey = false;
foreach (MyCustomSaveDataElement dataElement in myCustomSaveDataElementKeys)
{
if (key == dataElement.Key)
{
hasKey = true;
break;
}
}
return hasKey;
}
}