P2P host lobby: CONTINUE own save or NEW GAME (previous save backed up to MSCO_Saves, new world saved and sent to waiting players)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+48
@@ -24,6 +24,54 @@ namespace MSCO
|
||||
|
||||
public static bool HasBackup { get { return File.Exists(Marker); } }
|
||||
|
||||
static string ArchiveDir { get { return Path.Combine(SaveDir, "MSCO_Saves"); } }
|
||||
const int KeepArchives = 10;
|
||||
|
||||
/// <summary>Gibt es einen eigenen Spielstand zum Weiterspielen?</summary>
|
||||
public static bool HasLocalSave { get { return File.Exists(Path.Combine(SaveDir, "defaultES2File.txt")); } }
|
||||
|
||||
/// <summary>Wann der eigene Spielstand zuletzt gespeichert wurde (null = keiner).</summary>
|
||||
public static System.DateTime? LocalSaveTime
|
||||
{
|
||||
get
|
||||
{
|
||||
string file = Path.Combine(SaveDir, "defaultES2File.txt");
|
||||
return File.Exists(file) ? File.GetLastWriteTime(file) : (System.DateTime?)null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Ordner mit den Spielständen, die vor einem neuen Spiel gesichert wurden.</summary>
|
||||
public static string ArchiveFolder { get { return ArchiveDir; } }
|
||||
|
||||
/// <summary>
|
||||
/// Neues Spiel: den bisherigen Spielstand nach MSCO_Saves/Datum kopieren (nichts geht verloren) und die
|
||||
/// Spielstand-Dateien leeren, damit das Spiel eine frische Welt anlegt. Gibt den Sicherungsordner zurück (oder null).
|
||||
/// </summary>
|
||||
public static string ArchiveForNewGame()
|
||||
{
|
||||
// War noch der Spielstand eines anderen Hosts aktiv, erst den eigenen zurückholen
|
||||
if (HasBackup) RestoreBackup();
|
||||
string target = null;
|
||||
if (HasLocalSave)
|
||||
{
|
||||
target = Path.Combine(ArchiveDir, System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
|
||||
Directory.CreateDirectory(target);
|
||||
foreach (string name in Files)
|
||||
{
|
||||
string path = Path.Combine(SaveDir, name);
|
||||
if (File.Exists(path)) File.Copy(path, Path.Combine(target, name), true);
|
||||
}
|
||||
MscoLog.Info("[MSCO] Your previous save game was backed up to " + target);
|
||||
// Nur die letzten Sicherungen behalten
|
||||
string[] all = Directory.GetDirectories(ArchiveDir);
|
||||
System.Array.Sort(all);
|
||||
for (int i = 0; i < all.Length - KeepArchives; i++)
|
||||
try { Directory.Delete(all[i], true); } catch { }
|
||||
}
|
||||
DeleteSaveFiles();
|
||||
return target;
|
||||
}
|
||||
|
||||
public static List<KeyValuePair<string, byte[]>> ReadLocalSave()
|
||||
{
|
||||
var result = new List<KeyValuePair<string, byte[]>>();
|
||||
|
||||
Reference in New Issue
Block a user