public IList <Zauber> KlerikerZauberErstellen(int stufe, int glueck, bool launenDerMagie, Random random) { if (stufe < 1 || stufe > 10) { throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen."); } Func <ZauberTemplate, Zauber> zauberErstellen = x => { var zauber = new Zauber(x) { Manifestation = GetManifestation(x) }; if (launenDerMagie) { zauber.LaunenDerMagie = CreateLaunenDerMagie(glueck); } else { zauber.LaunenDerMagie = new List <LauneDerMagie>(); } return(zauber); }; var anzahlZauber = AnzahlKlerikerZauber(stufe); return(Enumerable.Range(1, 5).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Klerikerzauber, x), random).Select(zauberErstellen).Take(anzahlZauber[x])).ToList()); }
public IList <Zauber> ZauberkundigenZauberErstellen(int stufe, int glueckMod, int intelligenz, Random random) { if (stufe < 1 || stufe > 10) { throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen."); } Zauber zauberErstellen(ZauberTemplate zt) => new Zauber(zt) { LaunenDerMagie = CreateLaunenDerMagie(glueckMod), Manifestation = GetManifestation(zt) }; var anzahlZauber = AnzahlZauberkundigenZauber(stufe, intelligenz); var zg1 = Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, 1), random); var zauberGrad1 = zg1.Select(zauberErstellen).Take(anzahlZauber.Stufe1).ToList(); // Anrufung und Pakt zählen als ein Zauber var patron = zauberGrad1.Where(x => x.Wurf == 1 || x.Wurf == 14).Sum(x => x.Wurf); if (patron == 1) { zauberGrad1.Add(zg1.Where(x => x.Wurf == 14).Select(zauberErstellen).First()); } else if (patron == 14) { zauberGrad1.Add(zg1.Where(x => x.Wurf == 1).Select(zauberErstellen).First()); } else if (patron == 15) { zauberGrad1.Add(zg1.Skip(zauberGrad1.Count).Select(zauberErstellen).First()); } else if (zauberGrad1.Any(x => x.Wurf == 27)) // Patronzauber ohne Patron. Ein neuer Zauber wird gewürfelt { var neuerZauber = zg1.Skip(zauberGrad1.Count).Select(zauberErstellen).First(); if (neuerZauber.Wurf == 1) { zauberGrad1.Add(zg1.Where(x => x.Wurf == 14).Select(zauberErstellen).First()); } else if (neuerZauber.Wurf == 14) { zauberGrad1.Add(zg1.Where(x => x.Wurf == 1).Select(zauberErstellen).First()); } zauberGrad1.Add(neuerZauber); zauberGrad1 = zauberGrad1.Where(x => x.Wurf != 27).ToList(); } var grad2bis5 = Enumerable.Range(2, 4).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, x), random).Where(x => x.Wurf != 99 || patron > 0).Select(zauberErstellen).Take(anzahlZauber[x])).ToList(); return(zauberGrad1.Concat(grad2bis5).ToList()); }
public IList <Zauber> ElfenZauberErstellen(int stufe, int intelligenz, Random random) { Zauber zauberErstellen(ZauberTemplate zt) => new Zauber(zt) { LaunenDerMagie = CreateLaunenDerMagie(0), // Glück wird erstmal nicht angerechnet bei Elfen. Das Regelwerk ist da nicht ganz eindeutig. Manifestation = GetManifestation(zt) }; if (stufe < 1 || stufe > 10) { throw new ArgumentOutOfRangeException(nameof(stufe), "Muss zwischen 1 und 10 liegen."); } var anzahlZauber = AnzahlElfZauber(stufe, intelligenz); var zg1 = Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, 1), random); var patronZauber = zg1.Where(x => x.Wurf == 1 || x.Wurf == 14).Select(zauberErstellen); var zauberGrad1 = zg1.Where(x => x.Wurf != 1 && x.Wurf != 14).Select(zauberErstellen).Take(anzahlZauber.Stufe1); var grad2bis5 = Enumerable.Range(2, 4).SelectMany(x => Shuffle(ZauberTemplate.Get(Zaubertyp.Zauberkundigenzauber, x), random).Select(zauberErstellen).Take(anzahlZauber[x])).ToList(); return(patronZauber.Concat(zauberGrad1).Concat(grad2bis5).ToList()); }
public Zauber(ZauberTemplate zauberTemplate) : this(zauberTemplate.Wurf, zauberTemplate.Seite, zauberTemplate.Name, zauberTemplate.Beschreibung) { }