/// <summary> /// Adds custom talents to the talents list if enabled /// </summary> private static void AddCustomTalents(CharacterModel character) { if (SimpleIoc.Default.GetInstance <SettingsViewModel>().Setting.AdditionalTrials) { if (character.Talentliste != null) { // Heimlichkeit if (character.Talentliste.Any(t => t.Name == "Sinnenschärfe") && character.Talentliste.Any(t => t.Name == "Sich verstecken") && character.Talentliste.Any(t => t.Name == "Schleichen")) { var schleichen = character.Talentliste.Single(t => t.Name == "Schleichen").Value; var sichverstecken = character.Talentliste.Single(t => t.Name == "Sich verstecken").Value; var sinnenschaerfe = character.Talentliste.Single(t => t.Name == "Sinnenschärfe").Value; int talentValue = (int)Math.Round(((double)(sinnenschaerfe + sichverstecken + schleichen) / 3), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { sinnenschaerfe * 2, sichverstecken * 2, schleichen * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Heimlichkeit", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Gewandtheit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Custom }); } // Traumkontrolle if (character.Talentliste.Any(t => t.Name == "Orientierung") && character.Talentliste.Any(t => t.Name == "Sinnenschärfe") && character.Talentliste.Any(t => t.Name == "Selbstbeherrschung")) { var orientierung = character.Talentliste.Single(t => t.Name == "Orientierung").Value; var selbstbeherrschung = character.Talentliste.Single(t => t.Name == "Selbstbeherrschung").Value; var sinnenschaerfe = character.Talentliste.Single(t => t.Name == "Sinnenschärfe").Value; int talentValue = (int)Math.Round(((double)(orientierung + (sinnenschaerfe * 2) + (selbstbeherrschung * 3)) / 6), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { orientierung * 2, sinnenschaerfe * 2, selbstbeherrschung * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Traumkontrolle", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Mut, Attribut3 = AttributType.Intuition }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } // Sinnenschärfe FF + KL if (character.Talentliste.Any(t => t.Name == "Sinnenschärfe")) { Talent talent = character.Talentliste.Single(t => t.Name == "Sinnenschärfe"); character.Talentliste.Add(new Talent { Name = "Sinnenschärfe FF", Probe = new Probe { Attribut1 = AttributType.Klugheit, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Fingerfertigkeit }, Value = talent.Value, Gruppe = TalentGruppe.Koerper }); character.Talentliste.Add(new Talent { Name = "Sinnenschärfe KL", Probe = new Probe { Attribut1 = AttributType.Klugheit, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Klugheit }, Value = talent.Value, Gruppe = TalentGruppe.Koerper }); } // Fährtensuchen IN if (character.Talentliste.Any(t => t.Name == "Fährtensuchen")) { Talent talent = character.Talentliste.Single(t => t.Name == "Fährtensuchen"); character.Talentliste.Add(new Talent { Name = "Fährtensuchen IN", Probe = new Probe { Attribut1 = AttributType.Klugheit, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Intuition }, Value = talent.Value, Gruppe = TalentGruppe.Natur }); } // Geistiger Widerstand if (character.Talentliste.Any(t => t.Name == "Selbstbeherrschung")) { Talent talent = character.Talentliste.Single(t => t.Name == "Selbstbeherrschung"); character.Talentliste.Add(new Talent { Name = "Geistiger Widerstand", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Mut, Attribut3 = AttributType.Klugheit }, Value = talent.Value, Gruppe = TalentGruppe.Wissen }); } // Ausdauern klettern if (character.Talentliste.Any(t => t.Name == "Klettern")) { Talent talent = character.Talentliste.Single(t => t.Name == "Klettern"); character.Talentliste.Add(new Talent { Name = "Ausdauern klettern", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Gewandtheit, Attribut3 = AttributType.Konstitution }, Value = talent.Value, Gruppe = TalentGruppe.Koerper }); } // Langlauf if (character.Talentliste.Any(t => t.Name == "Athletik")) { Talent talent = character.Talentliste.Single(t => t.Name == "Athletik"); character.Talentliste.Add(new Talent { Name = "Langlauf", Probe = new Probe { Attribut1 = AttributType.Gewandtheit, Attribut2 = AttributType.Konstitution, Attribut3 = AttributType.Konstitution }, Value = talent.Value, Gruppe = TalentGruppe.Koerper }); } } } }
/// <summary> /// convert a given character xml document to a CharacterModel object /// </summary> /// <param name="doc"></param> /// <returns></returns> private static CharacterModel XmlToCharacterModel(XDocument doc) { CharacterModel character = ( from e in doc.Root.Elements("held") select new CharacterModel { Name = (string)e.Attribute("name"), Stand = (string)e.Attribute("stand"), Id = (string)e.Attribute("key"), Ausbildungen = new ObservableCollection <Ausbildung>( ( from ausbildung in e.Elements("basis").Elements("ausbildungen").Elements("ausbildung") select new Ausbildung { Art = (string)ausbildung.Attribute("art"), Name = (string)ausbildung.Attribute("string"), Tarnidentitaet = (string)ausbildung.Attribute("tarnidentitaet") }).ToList()), Attribute = new ObservableCollection <Attribut>( ( from attribut in e.Elements("eigenschaften").Elements("eigenschaft") select new Attribut { Name = (string)attribut.Attribute("name"), Value = (int)attribut.Attribute("value"), Mod = (int)attribut.Attribute("mod"), Type = MapStringToAttributType((string)attribut.Attribute("name")) }).ToList()), Vorteile = new ObservableCollection <Vorteil>( ( from vorteil in e.Elements("vt").Elements("vorteil") select new Vorteil { Name = (string)vorteil.Attribute("name"), Value = (string)vorteil.Attribute("value"), Auswahl = ( from auswahl in vorteil.Elements("auswahl") select new Auswahl { Name = (string)auswahl.Attribute("name"), Value = (string)auswahl.Attribute("value") }).ToArray(), }).ToList()), Sonderfertigkeiten = new ObservableCollection <Sonderfertigkeit>( ( from sonderfertigkeit in e.Elements("sf").Elements("sonderfertigkeit") select new Sonderfertigkeit { Name = (string)sonderfertigkeit.Attribute("name") }).ToList()), Talentliste = new ObservableCollection <Talent>( ( from talent in e.Elements("talentliste").Elements("talent") select new Talent { Name = (string)talent.Attribute("name"), Value = (int)talent.Attribute("value"), Probe = MapStringToProbe((string)talent.Attribute("probe")), Behinderungsfaktor = (string)talent.Attribute("be"), Gruppe = MapStringToTalentGruppe((string)talent.Attribute("name")) }).ToList()), Zauberliste = new ObservableCollection <Zauber>( ( from zauber in e.Elements("zauberliste").Elements("zauber") select new Zauber { Name = (string)zauber.Attribute("name"), Value = (int)zauber.Attribute("value"), Probe = MapStringToProbe((string)zauber.Attribute("probe")) }).ToList()), Ausruestung = new ObservableCollection <Heldenausruestung>( ( from heldenausruestung in e.Elements("ausrüstungen").Elements("heldenausruestung") select new Heldenausruestung { Name = (string)heldenausruestung.Attribute("name"), Set = (string)heldenausruestung.Attribute("set"), Slot = (string)heldenausruestung.Attribute("slot"), Nummer = (string)heldenausruestung.Attribute("nummer"), Talent = (string)heldenausruestung.Attribute("talent"), Waffenname = (string)heldenausruestung.Attribute("waffenname"), }).ToList()), }).First(); FindJagdwaffenTaW(character); AddMetaTalents(character); AddCustomTalents(character); CalcSuccessChances(character); //#if DEBUG // Directory.CreateDirectory(@"c:\temp\"); // var path = $@"c:\temp\{character.Name}.xml"; // doc.Save(path); //#endif return(character); }
/// <summary> /// Adds meta talents to the talents list /// </summary> private static void AddMetaTalents(CharacterModel character) { if (character.Talentliste != null) { // Ansitzjagd if (character.Talentliste.Any(t => t.Name == "Wildnisleben") && character.Talentliste.Any(t => t.Name == "Tierkunde") && character.Talentliste.Any(t => t.Name == "Fährtensuchen") && character.Talentliste.Any(t => t.Name == "Sich verstecken")) { var faehrtensuchen = character.Talentliste.Single(t => t.Name == "Fährtensuchen").Value; var sichverstecken = character.Talentliste.Single(t => t.Name == "Sich verstecken").Value; var tierkunde = character.Talentliste.Single(t => t.Name == "Tierkunde").Value; var wildnisleben = character.Talentliste.Single(t => t.Name == "Wildnisleben").Value; int talentValue = (int)Math.Round(((double)(wildnisleben + tierkunde + faehrtensuchen + sichverstecken + character.JagdwaffenTaW) / 5), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { wildnisleben * 2, tierkunde * 2, faehrtensuchen * 2, sichverstecken * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Ansitzjagd", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Gewandtheit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } // Pirschjagd if (character.Talentliste.Any(t => t.Name == "Wildnisleben") && character.Talentliste.Any(t => t.Name == "Tierkunde") && character.Talentliste.Any(t => t.Name == "Fährtensuchen") && character.Talentliste.Any(t => t.Name == "Schleichen")) { var faehrtensuchen = character.Talentliste.Single(t => t.Name == "Fährtensuchen").Value; var schleichen = character.Talentliste.Single(t => t.Name == "Schleichen").Value; var tierkunde = character.Talentliste.Single(t => t.Name == "Tierkunde").Value; var wildnisleben = character.Talentliste.Single(t => t.Name == "Wildnisleben").Value; int talentValue = (int)Math.Round(((double)(wildnisleben + tierkunde + faehrtensuchen + schleichen + character.JagdwaffenTaW) / 5), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { wildnisleben * 2, tierkunde * 2, faehrtensuchen * 2, schleichen * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Pirschjagd", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Gewandtheit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } // Hetzjagd if (character.Talentliste.Any(t => t.Name == "Wildnisleben") && character.Talentliste.Any(t => t.Name == "Tierkunde") && character.Talentliste.Any(t => t.Name == "Reiten")) { var reiten = character.Talentliste.Single(t => t.Name == "Reiten").Value; var tierkunde = character.Talentliste.Single(t => t.Name == "Tierkunde").Value; var wildnisleben = character.Talentliste.Single(t => t.Name == "Wildnisleben").Value; int talentValue = (int)Math.Round(((double)(wildnisleben + tierkunde + (2 * reiten) + character.JagdwaffenTaW) / 5), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { wildnisleben * 2, tierkunde * 2, reiten * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Hetzjagd", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Gewandtheit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } // Häuserlauf // besitze keine der Quellen: https://de.wiki-aventurica.de/wiki/H%C3%A4userlauf // Traumreise // besitze keine der Quellen: https://de.wiki-aventurica.de/wiki/Traumreise // Kräuter Suchen + Nahrung Sammeln if (character.Talentliste.Any(t => t.Name == "Wildnisleben") && character.Talentliste.Any(t => t.Name == "Sinnenschärfe") && character.Talentliste.Any(t => t.Name == "Pflanzenkunde")) { var pflanzenkunde = character.Talentliste.Single(t => t.Name == "Pflanzenkunde").Value; var sinnenschaerfe = character.Talentliste.Single(t => t.Name == "Sinnenschärfe").Value; var wildnisleben = character.Talentliste.Single(t => t.Name == "Wildnisleben").Value; int talentValue = (int)Math.Round(((double)(wildnisleben + sinnenschaerfe + pflanzenkunde) / 3), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { wildnisleben * 2, sinnenschaerfe * 2, pflanzenkunde * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Kräuter suchen", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Fingerfertigkeit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); character.Talentliste.Add(new Talent { Name = "Nahrung sammeln", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Fingerfertigkeit }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } // Wassersuchen // Besitze keine der Quellen: https://de.wiki-aventurica.de/wiki/Wassersuchen // Wache halten if (character.Talentliste.Any(t => t.Name == "Selbstbeherrschung") && character.Talentliste.Any(t => t.Name == "Sinnenschärfe")) { var selbstbeherrschung = character.Talentliste.Single(t => t.Name == "Selbstbeherrschung").Value; var sinnenschaerfe = character.Talentliste.Single(t => t.Name == "Sinnenschärfe").Value; int talentValue = (int)Math.Round(((double)(selbstbeherrschung + (2 * sinnenschaerfe) + 1) / 3), 0, MidpointRounding.AwayFromZero); var maxValue = new int[] { selbstbeherrschung * 2, sinnenschaerfe * 2 }.Min(); character.Talentliste.Add(new Talent { Name = "Wache halten", Probe = new Probe { Attribut1 = AttributType.Mut, Attribut2 = AttributType.Intuition, Attribut3 = AttributType.Konstitution }, Value = new int[] { talentValue, maxValue }.Min(), Gruppe = TalentGruppe.Meta }); } } }