public IActionResult SpecificGeneration(string selectedrace, string selectedclass, string selectedlevel) { AutoDelete(); int? SessionId = HttpContext.Session.GetInt32("UserId"); User SessionUser = _context.Users.FirstOrDefault(u => u.UserId == SessionId); if (SessionUser == null) { return(View("UserLogin")); } int Level = Int32.Parse(selectedlevel); if (Level == 0) //Assign the base choice value as == 0 { Level = rand.Next(1, 21); } //creating input for creation and modification of base in other functions PlayerStat playerStat = new PlayerStat(Level); // Run player stat through background PlayerBG playerBG = new PlayerBG(); // Returns player Stat VVV playerBG.BGSelector(playerStat, playerBG); // Determines player Race and then run stats PlayerRace playerRace = new PlayerRace(); // Returns player Stat VVV // Determine Player Class and run playerStat if (selectedrace != "Random") { playerRace.SpecificRaceSelector(Level, playerStat, playerRace, selectedrace); } else { playerRace.RaceSelector(Level, playerStat, playerRace); } PlayerClass playerClass = new PlayerClass(Level, playerStat); // Returns player Stat VVV if (selectedclass != "Random") { playerClass.SpecClassSelector(Level, playerStat, playerClass, selectedclass); } else { playerClass.ClassSelector(Level, playerStat, playerClass); } // reruns numbers based on updated proficiencies and skill increases playerStat.UpdatePro(playerStat); // create connection to all character objects within the character NewCharacter newPlayer = new NewCharacter(Level, playerStat, playerRace, playerClass, playerBG, SessionUser); _context.PlayerStats.Add(playerStat); _context.PlayerBGs.Add(playerBG); _context.PlayerClasses.Add(playerClass); _context.PlayerRaces.Add(playerRace); _context.NewCharacter.Add(newPlayer); // Feat Generation List <Feature> charFeatures = _context.Features.Where(f => ((f.FeatSource == playerClass.ClassName) && (f.FeatLevel <= Level)) || ((f.FeatSource == playerClass.SubClassName) && (f.FeatLevel <= Level))).ToList(); foreach (Feature feat in charFeatures) { var Fassoc = new FeatureAssoc(newPlayer, feat); _context.Feature_Associations.Add(Fassoc); _context.SaveChanges(); } List <Feature> Feats = _context.NewCharacter.Include(c => c.FeaturesList) .ThenInclude(fa => fa.FeatureA) .FirstOrDefault(c => c.CharacterId == newPlayer.CharacterId) .FeaturesList.Select(f => f.FeatureA) .OrderBy(f => f.FeatLevel) .ToList(); List <Spell> ClassAvailbleSpells = _context.Spells.Where(s => s.Source1 == newPlayer.playerClass.ClassName || s.Source2 == newPlayer.playerClass.ClassName || s.Source3 == newPlayer.playerClass.ClassName || s.Source4 == newPlayer.playerClass.ClassName || s.Source5 == newPlayer.playerClass.ClassName || s.Source6 == newPlayer.playerClass.ClassName || s.Source7 == newPlayer.playerClass.ClassName ).ToList(); List <Spell> NonClassSpells = _context.Spells.Where(s => s.Source1 != newPlayer.playerClass.ClassName || s.Source2 != newPlayer.playerClass.ClassName || s.Source3 != newPlayer.playerClass.ClassName || s.Source4 != newPlayer.playerClass.ClassName || s.Source5 != newPlayer.playerClass.ClassName || s.Source6 != newPlayer.playerClass.ClassName || s.Source7 != newPlayer.playerClass.ClassName ).ToList(); Spell FetchSpell = new Spell(); List <Spell> availableSpells = FetchSpell.GetPossibleSpells(newPlayer, ClassAvailbleSpells, NonClassSpells); SpellAssoc AlwaysPreppedChecker = new SpellAssoc(); foreach (Spell s in availableSpells) { SpellAssoc a = new SpellAssoc(newPlayer, s);//always true AlwaysPreppedChecker.AlwaysPreppedChecker(newPlayer, s, a); _context.Spell_Associations.Add(a); _context.SaveChanges(); } List <Spell> Spells = _context.NewCharacter .Include(c => c.SpellList) .ThenInclude(sa => sa.SpellA) .FirstOrDefault(c => c.CharacterId == newPlayer.CharacterId) .SpellList.Select(s => s.SpellA) .OrderBy(f => f.SpellLevel) .ThenBy(f => f.SpellName) .ToList(); _context.SaveChanges(); int passiveperception = 10 + newPlayer.playerStat.Perception; //Dynamic model with USer, Login, Character dynamic MyModel = new ExpandoObject(); MyModel.User = SessionUser; MyModel.Login = new Login(); MyModel.Character = newPlayer; MyModel.Features = Feats; MyModel.Spells = Spells; MyModel.PassivePerception = passiveperception; return(View("Index", MyModel)); }