static async Task <int> RunDump(DumpOptions opts) { var db = await GetKTContextAsync(opts); List <string> factions = await db.Factions.Select(faction => faction.Id).ToListAsync(); var final_result = 0; foreach (string faction in factions) { var cost_opts = new CostOptions { DBPath = opts.DBPath, LegacyDB = opts.LegacyDB, Faction = faction, }; int result; try { result = await RunCost(cost_opts); } catch (Exception e) { Console.WriteLine(e.ToString()); result = 1; } if (result != 0) { final_result = result; } cost_opts.All = true; try { result = await RunCost(cost_opts); } catch (Exception e) { Console.WriteLine(e.ToString()); result = 1; } if (result != 0) { final_result = result; } } return(final_result); }
public static void Write(ProjectManager projects, string path, IdTable ids) { foreach (var p in projects) { if (p == Project.Empty) { continue; } var f = new XmlWriter(path + p.Name + ".xml"); f.Begin(p, ids); f.Begin("Assignments"); var faclist = new FlatAssignmentCollection[p.Assignments.Count]; lock (p.Assignments) p.Assignments.CopyTo(faclist, 0); foreach (var fac in faclist) { f.Begin(fac, ids); var falist = new FlatAssignment[fac.Count]; lock (fac) fac.CopyTo(falist, 0); foreach (var fa in falist) { f.Write(fa, ids); } f.End(fac); } f.End("Assignments"); f.Begin("Costs"); var costlist = new Cost[p.Costs.Count]; lock (p.Costs) p.Costs.CopyTo(costlist, 0); foreach (var c in costlist) { f.Begin(c, ids); f.Begin("Options"); var optionslist = new CostOptions[c.Options.Count]; lock (c.Options) c.Options.CopyTo(optionslist, 0); foreach (var o in optionslist) { f.Write(o, ids); } f.End("Options"); f.End(c); } f.End("Costs"); f.End(p); f.Close(); } }
static async Task <int> RunCost(CostOptions opts) { var db = await GetKTContextAsync(opts); var faction_id = opts.Faction; Faction faction = await db.Factions .Where(f => f.Id == faction_id) .Include(f => f.Models) .ThenInclude(m => m.Abilities) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.Abilities) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.Psychics) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.Specialists) .ThenInclude(sp => sp.Specialist) .Include(f => f.Models) .ThenInclude(m => m.WarGearOptions) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.WarGearOptions) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.LevelCosts) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.CostOverrides) .ThenInclude(co => co.Weapon) .Include(f => f.Models) .ThenInclude(m => m.ModelProfiles) .ThenInclude(mp => mp.ModelProfileWeapons) .ThenInclude(mpw => mpw.Weapon) .Include(f => f.Models) .ThenInclude(m => m.ModelWeapons) .ThenInclude(mv => mv.Weapon) .FirstAsync(); Console.WriteLine($"Faction: {faction.NameEn}"); if (opts.All) { int returncode = 0; foreach (var unit in faction.Models.OrderByDescending(m => m.KeywordsEn.Contains("COMMANDER")).ThenBy(m => m.NameEn)) { returncode += await ShowUnitTable(db, unit); Console.WriteLine("\n---------------------------------------------------------------------"); } return(returncode); } else if (opts.Unit != null) { var unit = faction.Models.Where(m => m.Id == opts.Unit).First(); return(await ShowUnitTable(db, unit)); } else { return(await ShowCostTable(db, faction)); } }
public DiscountEngine(IEnumerable <IDiscount> discounts, IOptions <CostOptions> costOptions) { _costOptions = costOptions.Value ?? throw new ArgumentNullException(nameof(costOptions.Value)); _discounts = discounts ?? throw new ArgumentNullException(nameof(discounts)); }