From 68e49d3b0936101deba1251e95b9788716c0722a Mon Sep 17 00:00:00 2001 From: TrueDoctor Date: Mon, 18 Jun 2018 11:39:41 +0200 Subject: reworked Properties, to split each fiel into a different File --- DiscoBot/Audio/Soundeffects.cs | 2 +- DiscoBot/Commands/Gm.cs | 11 +- DiscoBot/Commands/HeldList.cs | 2 +- DiscoBot/Commands/Help.cs | 4 +- DiscoBot/Commands/LebenUndAstral.cs | 4 +- DiscoBot/Commands/ProbenTest.cs | 16 +- DiscoBot/DSA_Game/Dsa.cs | 36 +-- DiscoBot/DSA_Game/Save/Properties.cs | 70 +++-- DiscoBot/DSA_Game/Save/SaveCommand.cs | 43 +++ DiscoBot/DSA_Game/Save/Session.cs | 2 + DiscoBot/DiscoBot.csproj | 1 + DiscoBot/session.json | 16 +- DiscoBot/sessions/DiscoBot-Audio-Sound.json | 7 + DiscoBot/sessions/DiscoBot-Commands-Help.json | 20 ++ .../DiscoBot-DSA_Game-Characters-Character.json | 290 +++++++++++++++++++++ 15 files changed, 444 insertions(+), 80 deletions(-) create mode 100644 DiscoBot/DSA_Game/Save/SaveCommand.cs create mode 100644 DiscoBot/sessions/DiscoBot-Audio-Sound.json create mode 100644 DiscoBot/sessions/DiscoBot-Commands-Help.json create mode 100644 DiscoBot/sessions/DiscoBot-DSA_Game-Characters-Character.json (limited to 'DiscoBot') diff --git a/DiscoBot/Audio/Soundeffects.cs b/DiscoBot/Audio/Soundeffects.cs index d3e7cbb..f0d5a9f 100644 --- a/DiscoBot/Audio/Soundeffects.cs +++ b/DiscoBot/Audio/Soundeffects.cs @@ -64,7 +64,7 @@ break; }*/ - var tSound = Dsa.Properties.Sounds.OrderBy(x => SpellCorrect.CompareEasy(s, x.Name)).First(); + var tSound = DSA_Game.Save.Properties.Sounds.OrderBy(x => SpellCorrect.CompareEasy(s, x.Name)).First(); url = s; diff --git a/DiscoBot/Commands/Gm.cs b/DiscoBot/Commands/Gm.cs index 7fe858c..1ff0286 100644 --- a/DiscoBot/Commands/Gm.cs +++ b/DiscoBot/Commands/Gm.cs @@ -20,7 +20,7 @@ if (givenName.Length == 0 || (givenName.Length == 1 && (givenName[0].ToLower().Equals("bin") || givenName[0].ToLower().Equals("am")))) { - res = " \nDu bist " + Dsa.Relation[this.Context.User.Username] + "!\n \n"; + res = " \nDu bist " + Dsa.Session.Relation[this.Context.User.Username] + "!\n \n"; return this.ReplyAsync("```xl\n" + res + "\n```"); } @@ -41,11 +41,8 @@ } var character = Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(name, x.Name)).First(); // usage of compareEasy - - - - Dsa.Relation[this.Context.User.Username] = character.Name; + Dsa.Session.Relation[this.Context.User.Username] = character.Name; res = " \nWillkommen " + character.Name + "!\n \n"; @@ -103,7 +100,7 @@ temp = erschwernis.ToString(); } - res = Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Relation[this.Context.User.Username], x.Name)).First().get_LE_Text(waffe.Trim() + temp); + res = Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Session.Relation[this.Context.User.Username], x.Name)).First().get_LE_Text(waffe.Trim() + temp); break; case "ae": @@ -117,7 +114,7 @@ temp = erschwernis.ToString(); } - res = Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Relation[this.Context.User.Username], x.Name)).First().get_AE_Text(waffe.Trim() + temp); + res = Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Session.Relation[this.Context.User.Username], x.Name)).First().get_AE_Text(waffe.Trim() + temp); break; default: diff --git a/DiscoBot/Commands/HeldList.cs b/DiscoBot/Commands/HeldList.cs index d1b25be..ab4e794 100644 --- a/DiscoBot/Commands/HeldList.cs +++ b/DiscoBot/Commands/HeldList.cs @@ -21,7 +21,7 @@ { var res = new List(); - var character = ((Character)Dsa.Chars.Find(x => x.Name.Equals(Dsa.Relation[this.Context.User.Username]))); + var character = ((Character)Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username]))); int first_column_width = 18; diff --git a/DiscoBot/Commands/Help.cs b/DiscoBot/Commands/Help.cs index bf58070..aa168fc 100644 --- a/DiscoBot/Commands/Help.cs +++ b/DiscoBot/Commands/Help.cs @@ -46,14 +46,14 @@ namespace DiscoBot.Commands public static string Get_Specific_Help(string command) { // return command specific help - var com = Dsa.Properties.CommandInfos.OrderBy(x => SpellCorrect.CompareEasy(x.Name, command.ToLower())).First(); // get best fit command + var com = DSA_Game.Save.Properties.CommandInfos.OrderBy(x => SpellCorrect.CompareEasy(x.Name, command.ToLower())).First(); // get best fit command return com.GetDescription(); } public static string Get_Generic_Help() { string res = ""; - foreach (var com in Dsa.Properties.CommandInfos) + foreach (var com in DSA_Game.Save.Properties.CommandInfos) { int first_column_width = 8; res += ("!" + com.Name + ": ").AddSpaces(first_column_width) + com.Brief; diff --git a/DiscoBot/Commands/LebenUndAstral.cs b/DiscoBot/Commands/LebenUndAstral.cs index 86fe6f2..2b5e8f1 100644 --- a/DiscoBot/Commands/LebenUndAstral.cs +++ b/DiscoBot/Commands/LebenUndAstral.cs @@ -31,7 +31,7 @@ //Get the actual text - res += Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Relation[this.Context.User.Username], x.Name)).First().get_LE_Text(prop); + res += Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Session.Relation[this.Context.User.Username], x.Name)).First().get_LE_Text(prop); await this.ReplyAsync("```xl\n" + res + "\n```"); @@ -59,7 +59,7 @@ //Get the actual text - res += Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Relation[this.Context.User.Username], x.Name)).First().get_AE_Text(prop); + res += Dsa.Chars.OrderBy(x => SpellCorrect.CompareEasy(Dsa.Session.Relation[this.Context.User.Username], x.Name)).First().get_AE_Text(prop); diff --git a/DiscoBot/Commands/ProbenTest.cs b/DiscoBot/Commands/ProbenTest.cs index e14d5a4..9614b7c 100644 --- a/DiscoBot/Commands/ProbenTest.cs +++ b/DiscoBot/Commands/ProbenTest.cs @@ -16,7 +16,7 @@ try { res = Gm.CheckCommand( - Dsa.Relation[this.Context.User.Username], + Dsa.Session.Relation[this.Context.User.Username], CommandTypes.Talent, talent, erschwernis); @@ -24,7 +24,7 @@ catch { res = Gm.CheckCommand( - Dsa.Relation["Tardis"], + Dsa.Session.Relation["Tardis"], CommandTypes.Talent, talent, erschwernis); @@ -41,7 +41,7 @@ try { res = Gm.CheckCommand( - Dsa.Relation[this.Context.User.Username], + Dsa.Session.Relation[this.Context.User.Username], CommandTypes.Zauber, zauber, erschwernis); @@ -49,7 +49,7 @@ catch { res = Gm.CheckCommand( - Dsa.Relation["Tardis"], + Dsa.Session.Relation["Tardis"], CommandTypes.Zauber, zauber, erschwernis); @@ -62,7 +62,7 @@ [Alias("E", "Eigenschaft", "eigenschaft", "eigen")] public Task EigenschaftAsync([Summary("Eigenschaftskürzel und Erschwernis")] string talent, int erschwernis = 0) { - var chr = Dsa.Chars.Find(x => x.Name.Equals(Dsa.Relation[this.Context.User.Username])); + var chr = Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])); string res = chr.TestEigenschaft(talent, erschwernis); return this.ReplyAsync("```xl\n" + res + "\n```"); } @@ -71,21 +71,21 @@ [Alias("A", "At", "at", "Angriff", "angriff", "attackiere_mit", "attacke", "Attacke")] public Task AngriffAsync([Summary("Weapon")] string weapon, int erschwernis = 0) { - return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Relation[this.Context.User.Username])).Angriff(weapon, erschwernis) + "\n```"); + return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])).Angriff(weapon, erschwernis) + "\n```"); } [Command("p"), Summary("Würfelt eine Parade Probe")] [Alias("P", "Parade", "parade", "pariere_mit")] public Task ParadeAsync([Summary("Parade Weapon")] string talent, int erschwernis = 0) { - return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Relation[this.Context.User.Username])).Parade(talent, erschwernis) + "\n```"); + return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])).Parade(talent, erschwernis) + "\n```"); } [Command("f"), Summary("Führt eine Fernkampfprobe aus")] [Alias("F", "fern", "Fern", "Schuss", "schuss", "fernkampf", "Fernkampf", "schieße", "schieße_mit")] public Task FernkampfAsync([Summary("Fernkampfwaffe")] string waffe, int erschwernis = 0) { - return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Relation[this.Context.User.Username])).Fernkampf(waffe, erschwernis) + "\n```"); + return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])).Fernkampf(waffe, erschwernis) + "\n```"); } } } diff --git a/DiscoBot/DSA_Game/Dsa.cs b/DiscoBot/DSA_Game/Dsa.cs index 44175b6..d640df9 100644 --- a/DiscoBot/DSA_Game/Dsa.cs +++ b/DiscoBot/DSA_Game/Dsa.cs @@ -18,38 +18,14 @@ public static AudioService Service { get; set; } - public static Dictionary Relation { get; set; } = new Dictionary(); // dictionary to match the char - public static List Chars { get; set; } = new List(); // list of all characters public static List Talente { get; set; } = new List(); - public static Properties Properties { get; set; } - public static Session Session { get; set; } public static void Startup() { - Relation.Add("The Doctor", "Numeri Illuminus"); // Relation - Relation.Add("Tardis", "Helga von Drachenei, Tausendsasserin"); // "Numeri Illuminus"); - Relation.Add("DSA Bot", "Morla"); // "Felis Exodus Schattenwald"); - Relation.Add("Morla", "Morla"); - Relation.Add("Rhoktar", "Rhoktar4"); - Relation.Add("MagicBro5", "Krenko"); - Relation.Add("Nicolas", "Hartmut Reiher"); - Relation.Add("TrueKuehli", "Ledur Torfinson"); - - // Relation.Add("Papo","Gwendelson"); - // Relation.Add("Papo", "Pump aus der Gosse"); - - // Nachteile für LE, AE, MR - // Relation.Add("Papo", "Angilbert Arres"); - - // Vorteile für LE, AE, MR - Relation.Add("Papo", "Beef"); - - // Relation.Add("Papo", "Astrallos"); - Relation.Add("Potus", "Potus"); // relation.Add("Papo", "Pump aus der Gosse"); foreach (var filename in Directory.GetFiles("helden", "*.xml")) @@ -59,16 +35,16 @@ .Where(c => !Talente.Exists(v => v.Name.Equals(c.Name))).ToList().ForEach(v => Talente.Add(v)); } - Properties = Properties.Deserialize(); + Properties.Deserialize(); Properties.Serialize(); Talente = Talente.OrderBy(x => x.Name).ToList(); - Session = new Session(); - List save = Chars.Select(SaveChar.FromICharacter).ToList(); - Session.Chars = save.Select(x=>x as ICharacter).ToList(); - Session.GeneralContext = GeneralContext; - Session.Relation = Relation; + Session = new Session + { + Chars = Chars.Select(x => SaveChar.FromICharacter(x) as ICharacter).ToList(), + GeneralContext = GeneralContext + }; Session.Save(); } } diff --git a/DiscoBot/DSA_Game/Save/Properties.cs b/DiscoBot/DSA_Game/Save/Properties.cs index fe2f798..45bad4a 100644 --- a/DiscoBot/DSA_Game/Save/Properties.cs +++ b/DiscoBot/DSA_Game/Save/Properties.cs @@ -6,38 +6,76 @@ using System.Threading.Tasks; namespace DiscoBot.DSA_Game.Save { + using System.Collections; using System.IO; + using System.Reflection; + using System.Runtime.CompilerServices; using DiscoBot.Audio; using DiscoBot.Auxiliary; using DiscoBot.Commands; + using Discord; + using Newtonsoft.Json; - public class Properties + public static class Properties { - public List CommandInfos { get; set; } + private static Dictionary objects; - public List Sounds { get; set; } + static Properties() + { + objects = new Dictionary(); + /*this.objects.Add("Sounds", new List()); + this.objects.Add("CommandInfos", new List());*/ + } - public static Properties Deserialize(string path = @"..\..\Properties.json") - { - try - { - return JsonConvert.DeserializeObject(File.ReadAllText(path)); // Deserialize Data and create CommandInfo Struct - } - catch (Exception e) - { - // ignored - return null; - } + public static List CommandInfos { get => objects["CommandInfo"] as List; set => objects["CommandInfo"] = value; } // use Properties.Commandinfos to access the abstract Object array + + public static List Sounds { get => objects["Sound"] as List; set => objects["Sound"] = value; } + + public static void Deserialize(string path = @"..\..\sessions") + { + + var files = Directory.GetFiles(path, "*.json"); + + foreach (string file in files) + { + try + { + string name = file.Split('\\').Last().Split('.')[0].Replace('-', '.'); + string data = File.ReadAllText(file); + Type type = Type.GetType(name); + if (data.StartsWith("[")) + { + type = typeof(List<>).MakeGenericType(type); + } + + var o = JsonConvert.DeserializeObject(data, type); + objects.Add(name.Split('.').Last(), o); + } + catch (Exception e) + { + // ignored + var log = new LogMessage(LogSeverity.Warning, "Properties", $"Laden von Save-File {file} fehlgeschlagen.", e); + Console.WriteLine(log); + } + + } + } - public void Serialize(string path = @"..\..\Properties.json") + public static void Serialize(string path = @"..\..\sessions\") { try { - File.WriteAllText(path, JsonConvert.SerializeObject(this, Formatting.Indented)); // Deserialize Data and create CommandInfo Struct + foreach (var o in objects) + { + string assembly = o.Value is IList list ? ((IList)list)[0]?.GetType().FullName : o.Value.GetType().FullName; + + var name = path + assembly.Replace('.', '-') + ".json"; + File.WriteAllText(name, JsonConvert.SerializeObject(o.Value, Formatting.Indented)); // Deserialize Data and create CommandInfo Struct + } } catch (Exception e) { diff --git a/DiscoBot/DSA_Game/Save/SaveCommand.cs b/DiscoBot/DSA_Game/Save/SaveCommand.cs new file mode 100644 index 0000000..310d38a --- /dev/null +++ b/DiscoBot/DSA_Game/Save/SaveCommand.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DiscoBot.DSA_Game.Save +{ + using System.IO; + using System.Net.Http; + + using DiscoBot.Auxiliary; + + using Discord.Commands; + + public class SaveCommand : ModuleBase + { + [Command("save"), Summary("Save Session")] + public async Task ReportAsync() + { + + + await this.ReplyAsync($"Dein report wurde hinzugefügt"); + } + + [Command("save"), Summary("Save Session")] + public async Task ReportAsync([Remainder, Summary("Session Name")] string name) + { + if (name.Equals("?")) + { + await this.ReplyAsync($"Gespeicherte Sessions:"); + await this.ReplyAsync(this.ListSessions()); + } + } + + private string[] ListSessions() + { + return Directory.GetDirectories(@"..\..\sessions"); + } + + + } +} diff --git a/DiscoBot/DSA_Game/Save/Session.cs b/DiscoBot/DSA_Game/Save/Session.cs index b0a34a5..15ccc18 100644 --- a/DiscoBot/DSA_Game/Save/Session.cs +++ b/DiscoBot/DSA_Game/Save/Session.cs @@ -22,6 +22,8 @@ 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 diff --git a/DiscoBot/DiscoBot.csproj b/DiscoBot/DiscoBot.csproj index f632c76..e0f8668 100644 --- a/DiscoBot/DiscoBot.csproj +++ b/DiscoBot/DiscoBot.csproj @@ -111,6 +111,7 @@ + diff --git a/DiscoBot/session.json b/DiscoBot/session.json index 19251d5..cd2e455 100644 --- a/DiscoBot/session.json +++ b/DiscoBot/session.json @@ -1,17 +1,6 @@ { "GeneralContext": null, - "Relation": { - "The Doctor": "Numeri Illuminus", - "Tardis": "Helga von Drachenei, Tausendsasserin", - "DSA Bot": "Morla", - "Morla": "Morla", - "Rhoktar": "Rhoktar4", - "MagicBro5": "Krenko", - "Nicolas": "Hartmut Reiher", - "TrueKuehli": "Ledur Torfinson", - "Papo": "Beef", - "Potus": "Potus" - }, + "Relation": {}, "Chars": [ { "Name": "Felis Exodus Schattenwald", @@ -121,5 +110,6 @@ "Astralpunkte_Basis": 43, "Astralpunkte_Aktuell": 43 } - ] + ], + "SessionName": null } \ No newline at end of file diff --git a/DiscoBot/sessions/DiscoBot-Audio-Sound.json b/DiscoBot/sessions/DiscoBot-Audio-Sound.json new file mode 100644 index 0000000..87a0e6b --- /dev/null +++ b/DiscoBot/sessions/DiscoBot-Audio-Sound.json @@ -0,0 +1,7 @@ +[ + { + "Name": "Test", + "Url": "http", + "Volume": 100 + } +] \ No newline at end of file diff --git a/DiscoBot/sessions/DiscoBot-Commands-Help.json b/DiscoBot/sessions/DiscoBot-Commands-Help.json new file mode 100644 index 0000000..df1046d --- /dev/null +++ b/DiscoBot/sessions/DiscoBot-Commands-Help.json @@ -0,0 +1,20 @@ +[ + { + "Context": null + }, + { + "Context": null + }, + { + "Context": null + }, + { + "Context": null + }, + { + "Context": null + }, + { + "Context": null + } +] \ No newline at end of file diff --git a/DiscoBot/sessions/DiscoBot-DSA_Game-Characters-Character.json b/DiscoBot/sessions/DiscoBot-DSA_Game-Characters-Character.json new file mode 100644 index 0000000..2dee9db --- /dev/null +++ b/DiscoBot/sessions/DiscoBot-DSA_Game-Characters-Character.json @@ -0,0 +1,290 @@ +[ + { + "Name": "Felis Exodus Schattenwald", + "Lebenspunkte_Basis": 30, + "Lebenspunkte_Aktuell": 30, + "Astralpunkte_Basis": 20, + "Astralpunkte_Aktuell": 20, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Gardist", + "Lebenspunkte_Basis": 29, + "Lebenspunkte_Aktuell": 29, + "Astralpunkte_Basis": 0, + "Astralpunkte_Aktuell": 0, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Hartmut Reiher", + "Lebenspunkte_Basis": 31, + "Lebenspunkte_Aktuell": 31, + "Astralpunkte_Basis": 0, + "Astralpunkte_Aktuell": 0, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Helga vom Drachenei, Tausendsasserin", + "Lebenspunkte_Basis": 21, + "Lebenspunkte_Aktuell": 21, + "Astralpunkte_Basis": 35, + "Astralpunkte_Aktuell": 35, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Krenko", + "Lebenspunkte_Basis": 25, + "Lebenspunkte_Aktuell": 25, + "Astralpunkte_Basis": 0, + "Astralpunkte_Aktuell": 0, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Ledur Torfinson", + "Lebenspunkte_Basis": 39, + "Lebenspunkte_Aktuell": 39, + "Astralpunkte_Basis": 0, + "Astralpunkte_Aktuell": 0, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Morla", + "Lebenspunkte_Basis": 26, + "Lebenspunkte_Aktuell": 26, + "Astralpunkte_Basis": 13, + "Astralpunkte_Aktuell": 13, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Numeri Illuminus", + "Lebenspunkte_Basis": 28, + "Lebenspunkte_Aktuell": 28, + "Astralpunkte_Basis": 40, + "Astralpunkte_Aktuell": 40, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Potus", + "Lebenspunkte_Basis": 39, + "Lebenspunkte_Aktuell": 39, + "Astralpunkte_Basis": 16, + "Astralpunkte_Aktuell": 16, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Pump aus der Gosse", + "Lebenspunkte_Basis": 18, + "Lebenspunkte_Aktuell": 18, + "Astralpunkte_Basis": 13, + "Astralpunkte_Aktuell": 13, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Rhoktar4", + "Lebenspunkte_Basis": 34, + "Lebenspunkte_Aktuell": 34, + "Astralpunkte_Basis": 17, + "Astralpunkte_Aktuell": 17, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + }, + { + "Name": "Volant", + "Lebenspunkte_Basis": 28, + "Lebenspunkte_Aktuell": 28, + "Astralpunkte_Basis": 43, + "Astralpunkte_Aktuell": 43, + "Ausdauer_Basis": 0, + "Ausdauer_Aktuell": 0, + "Eigenschaften": {}, + "Talente": [], + "Zauber": [], + "Kampftalente": [], + "Vorteile": [], + "PropTable": { + "MU": "Mut", + "KL": "Klugheit", + "IN": "Intuition", + "CH": "Charisma", + "FF": "Fingerfertigkeit", + "GE": "Gewandtheit", + "KO": "Konstitution", + "KK": "Körperkraft" + } + } +] \ No newline at end of file -- cgit v1.2.3-70-g09d2