Pit Of Goblin
In this online horror co-op, you play as a scrappy goblin, scavenging dungeons, dodging traps, and fleeing monsters to feed the Goblin King-Queen. Team up with goblin pals, or go rogue, as you dive deep and cause chaos! Fail to feed them, and you might be the next meal!
SAVING SYSTEM
public static class SaveLoad
{
private static readonly int m_version = 1;
public static readonly int Version = m_version;
public enum FileValidation
{
Valid,
Invalid,
Corrupted,
Empty
}
private static FileValidation m_validation = FileValidation.Valid;
public static FileValidation Validation => m_validation;
private static string m_directory = "/SaveFiles/";
private static List<string> m_saveFiles = new List<string>()
{
"Save_1.sav",
"Save_2.sav",
"Save_3.sav",
};
private static int m_currentSaveFile = 0;
public static int CurrentSaveFile
{
get => m_currentSaveFile;
set => m_currentSaveFile = value;
}
public static List<string> SaveFiles => m_saveFiles;
private static readonly string m_encryptionKey = "Pit0fG0blin";
private static readonly bool m_isEncrypted = false;
public static bool IsEncrypted => m_isEncrypted;
private static bool m_prettyPrint = true;
public static bool Prettyprint
{
get => m_prettyPrint;
set => m_prettyPrint = value;
}
public static bool IsCurrentSaveFileValid()
{
if (ServiceLocator.GetService<GameStateService>().Current.State == GameStateAsset.GameState.DebugGame)
return false;
if (ServiceLocator.GetService<GameStateService>().IsRandomGame)
return false;
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[CurrentSaveFile];
m_validation = ValidateSaveFile(fullDataPath, CurrentSaveFile);
if (m_validation == FileValidation.Valid) return true;
else return false;
}
public static bool IsSaveFileValid(string saveFile)
{
string fullDataPath = Application.persistentDataPath + m_directory + saveFile;
int save = m_saveFiles.IndexOf(saveFile);
m_validation = ValidateSaveFile(fullDataPath, save);
if (m_validation == FileValidation.Valid) return true;
else return false;
}
public static bool IsSaveFileValid(int saveFile)
{
if (saveFile == 3) return false;
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[saveFile];
m_validation = ValidateSaveFile(fullDataPath, saveFile);
if (m_validation == FileValidation.Valid) return true;
else return false;
}
public static bool IsSaveFileEmpty(int saveFile)
{
if (saveFile == 3) return false;
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[saveFile];
m_validation = ValidateSaveFile(fullDataPath, saveFile);
if (m_validation == FileValidation.Empty) return true;
else return false;
}
public static bool IsSaveFileEmpty(string saveFile)
{
string fullDataPath = Application.persistentDataPath + m_directory + saveFile;
int save = m_saveFiles.IndexOf(saveFile);
m_validation = ValidateSaveFile(fullDataPath, save);
if (m_validation == FileValidation.Empty) return true;
else return false;
}
public static void Save(SaveData saveData)
{
string directory = Application.persistentDataPath + m_directory;
GUIUtility.systemCopyBuffer = directory;
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
var fileDate = DateTime.Now.ToString("yyyy-MM-dd");
saveData.SaveFileCreationDate = fileDate;
string json = JsonUtility.ToJson(saveData, m_prettyPrint);
string finalJson = "";
if (IsEncrypted)
{
string encryptedJson = EncryptDecrypt(json);
finalJson = encryptedJson;
}
else
{
finalJson = json;
}
File.WriteAllText(directory + m_saveFiles[CurrentSaveFile], finalJson);
Debug.Log("SAVING GAME!");
}
public static SaveData Load()
{
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[CurrentSaveFile];
SaveData saveData = new SaveData();
m_validation = ValidateSaveFile(fullDataPath, CurrentSaveFile);
if (m_validation == FileValidation.Valid)
{
string json = File.ReadAllText(fullDataPath);
string finalJson = "";
if (IsEncrypted)
{
finalJson = EncryptDecrypt(json);
}
else
{
finalJson = json;
}
saveData = JsonUtility.FromJson<SaveData>(finalJson);
Debug.Log("LOADING GAME!");
return saveData;
}
Debug.LogError($"Validation Failed! -- Could not Load Game -- SaveData {CurrentSaveFile} will be set to Null!");
return null;
}
public static SaveData GetSelectedSaveData(int saveFile)
{
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[saveFile];
SaveData saveData = new SaveData();
m_validation = ValidateSaveFile(fullDataPath, saveFile);
if (m_validation == FileValidation.Valid)
{
string json = File.ReadAllText(fullDataPath);
string finalJson = "";
if (IsEncrypted)
{
finalJson = EncryptDecrypt(json);
}
else
{
finalJson = json;
}
saveData = JsonUtility.FromJson<SaveData>(json);
return saveData;
}
Debug.LogError($"Validation Failed! -- Could not Get Selected({saveFile + 1}) SaveData -- SaveData Set to Null!");
return null;
}
public static void Delete()
{
string fullDataPath = Application.persistentDataPath + m_directory + m_saveFiles[CurrentSaveFile];
if (File.Exists(fullDataPath))
{
File.Delete(fullDataPath);
Debug.Log("SAVE FILE DELETED!");
}
}
private static string EncryptDecrypt(string data)
{
string result = "";
for (int i = 0; i < data.Length; i++)
{
result += (char) (data[i] ^ m_encryptionKey[i % m_encryptionKey.Length]);
}
return result;
}
private static FileValidation ValidateSaveFile(string fullDataPath, int save)
{
if (!File.Exists(fullDataPath))
{
return FileValidation.Empty;
}
SaveData saveData = new SaveData();
string json = File.ReadAllText(fullDataPath);
string finalJson = "";
if (IsEncrypted)
{
finalJson = EncryptDecrypt(json);
}
else
{
finalJson = json;
}
if (finalJson == "")
{
Debug.LogError($"Validation Failed! -- JSON SaveData {save + 1} is Null!");
return FileValidation.Corrupted;
}
try
{
saveData = JsonUtility.FromJson<SaveData>(finalJson);
}
catch (Exception e)
{
Debug.LogError($"Validation Failed! -- Save File {save + 1} is Corrupted! -- Exception: {e}");
return FileValidation.Corrupted;
}
if (saveData.Version != Version)
{
if (saveData.Version > Version)
{
Debug.LogError($"Validation Failed! -- Save File {save + 1} Version Out of Date -- Current Version: {saveData.Version}, Expected Version: {Version}");
}
else if(saveData.Version < Version)
{
Debug.LogError($"Validation Failed! -- Save File {save + 1} Version Out of Date -- Current Version: {saveData.Version}, Expected Version: {Version}");
}
return FileValidation.Invalid;
}
return FileValidation.Valid;
}
}
SAVEDATA
TEXT
RAGDOLL ITEM
TEXT
CODE
FLAG VALUE
TEXT