From 1ef4aa027b6c77a45e7d895f4efcd074e3afaf88 Mon Sep 17 00:00:00 2001 From: TrueDoctor Date: Tue, 19 Jun 2018 14:25:14 +0200 Subject: Implemented session saves --- DiscoBot/DSA_Game/Dsa.cs | 2 +- DiscoBot/DSA_Game/Save/Properties.cs | 6 +++-- DiscoBot/DSA_Game/Save/SaveCommand.cs | 41 +++++++++++++++++++++++++++++------ DiscoBot/DSA_Game/Save/Session.cs | 9 +++++++- 4 files changed, 47 insertions(+), 11 deletions(-) (limited to 'DiscoBot/DSA_Game') diff --git a/DiscoBot/DSA_Game/Dsa.cs b/DiscoBot/DSA_Game/Dsa.cs index 5b4833b..f1ed069 100644 --- a/DiscoBot/DSA_Game/Dsa.cs +++ b/DiscoBot/DSA_Game/Dsa.cs @@ -22,7 +22,7 @@ public static List Talente { get; set; } = new List(); - public static Session Session { get; set; } + public static Session Session { get; set; } = new Session(); public static void Startup() { diff --git a/DiscoBot/DSA_Game/Save/Properties.cs b/DiscoBot/DSA_Game/Save/Properties.cs index 45bad4a..67d30b0 100644 --- a/DiscoBot/DSA_Game/Save/Properties.cs +++ b/DiscoBot/DSA_Game/Save/Properties.cs @@ -34,7 +34,7 @@ namespace DiscoBot.DSA_Game.Save public static List Sounds { get => objects["Sound"] as List; set => objects["Sound"] = value; } - public static void Deserialize(string path = @"..\..\sessions") + public static void Deserialize(string path = @"..\..\Properties") { var files = Directory.GetFiles(path, "*.json"); @@ -65,7 +65,7 @@ namespace DiscoBot.DSA_Game.Save } - public static void Serialize(string path = @"..\..\sessions\") + public static void Serialize(string path = @"..\..\Properties\") { try { @@ -80,6 +80,8 @@ namespace DiscoBot.DSA_Game.Save catch (Exception e) { // ignored + var log = new LogMessage(LogSeverity.Warning, "Properties", $"Speichern von Save-File fehlgeschlagen.", e); + Console.WriteLine(log); } } } diff --git a/DiscoBot/DSA_Game/Save/SaveCommand.cs b/DiscoBot/DSA_Game/Save/SaveCommand.cs index 310d38a..07bcbac 100644 --- a/DiscoBot/DSA_Game/Save/SaveCommand.cs +++ b/DiscoBot/DSA_Game/Save/SaveCommand.cs @@ -15,27 +15,54 @@ namespace DiscoBot.DSA_Game.Save public class SaveCommand : ModuleBase { - [Command("save"), Summary("Save Session")] - public async Task ReportAsync() + [Command("load"), Summary("Load Session")] + public async Task LoadSessionAsync([Remainder, Summary("Session Name")] string name = "") { - + if (name.Equals("?") || name.Equals(string.Empty)) + { + await this.ReplyAsync($"Gespeicherte Sessions:"); + await this.ReplyAsync(this.ListSessions()); + return; + } + + var path = DSA_Game.Save.Session.DirectoryPath + @"\" + name; + + var files = Directory.GetFiles(path); + var session = files.OrderByDescending(x => Convert.ToInt32(x.Split('-').Last().Split('.').First())).First(); + Dsa.Session = Session.Load(session); - await this.ReplyAsync($"Dein report wurde hinzugefĆ¼gt"); + await this.ReplyAsync($"{name} wurde geladen"); } [Command("save"), Summary("Save Session")] - public async Task ReportAsync([Remainder, Summary("Session Name")] string name) + public async Task SessionSaveAsync([Remainder, Summary("Session Name")] string name = "") { - if (name.Equals("?")) + if (name.Equals("?") || name.Equals(string.Empty)) { await this.ReplyAsync($"Gespeicherte Sessions:"); await this.ReplyAsync(this.ListSessions()); + return; } + + var path = DSA_Game.Save.Session.DirectoryPath + @"\" + name; + if (Directory.Exists(path)) + { + var files = Directory.GetFiles(path); + int current = files.Max(x => Convert.ToInt32(x.Split('-').Last().Split('.').First())); + Dsa.Session.Save(path + "\\" + name + $"-{++current}.json"); + } + else + { + Directory.CreateDirectory(path); + Dsa.Session.Save(path + "\\" + name + $"-0.json"); + } + + await this.ReplyAsync($"{name} wurde gespeichert"); } private string[] ListSessions() { - return Directory.GetDirectories(@"..\..\sessions"); + return Directory.GetDirectories(Session.DirectoryPath); } diff --git a/DiscoBot/DSA_Game/Save/Session.cs b/DiscoBot/DSA_Game/Save/Session.cs index ed9c18d..0358b22 100644 --- a/DiscoBot/DSA_Game/Save/Session.cs +++ b/DiscoBot/DSA_Game/Save/Session.cs @@ -10,12 +10,15 @@ namespace DiscoBot.DSA_Game.Save using DiscoBot.DSA_Game.Characters; + using Discord; using Discord.Commands; using Newtonsoft.Json; public class Session { + public static string DirectoryPath { get; set; } = @"..\..\sessions"; + public ICommandContext GeneralContext { get; set; } public Dictionary Relation { get; set; } = new Dictionary(); // dictionary to match the char @@ -23,7 +26,7 @@ namespace DiscoBot.DSA_Game.Save public List Chars { get; set; } = new List(); // list of all characters public string SessionName { get; set; } - + public static Session Load(string path = @"..\..\session.json") { try @@ -33,6 +36,8 @@ namespace DiscoBot.DSA_Game.Save catch (Exception e) { // ignored + var log = new LogMessage(LogSeverity.Warning, "Properties", $"Laden von Save-File {path} fehlgeschlagen.", e); + Console.WriteLine(log); return null; } } @@ -45,6 +50,8 @@ namespace DiscoBot.DSA_Game.Save } catch (Exception e) { + var log = new LogMessage(LogSeverity.Warning, "Properties", $"Speichern von Save-File {path} fehlgeschlagen.", e); + Console.WriteLine(log); // ignored } } -- cgit v1.2.3-54-g00ecf