private bool SetLootTreeConfig(GroupAndItemConfig config, LootTree root) { depth++; bool modified = false; foreach (var ch in config.Children) { depth++; modified = SubSetLootTreeConfig(ch, root.Root); depth--; } depth--; return(false); }
static void Main() { Console.OutputEncoding = Encoding.UTF8; var random = Rand.GetRandom(); var logger = new ConsoleLogger { Take = LoggerSeverity.Error }; var randomLoot = new RandomLoot <string, string>(random) { Logger = logger }; var partition = new PartitionLoot <string, string>(random) { Logger = logger }; var fpl = new FirstPickLoot <string, string>(); LootTree <string, string> tree = new LootTree <string, string>(partition, logger); ILootable <string, string>[] convertPath(params string[] s) => s.Select(x => { if (!x.Contains(':')) { return(new DefaultLoot <string, string>(50, x, x)); } var parts = x.Split(':'); return(new DefaultLoot <string, string>(int.Parse(parts[1]), parts[0], parts[0])); }) .ToArray(); var bonusPath = convertPath("Bonus:5"); var defaultPath = convertPath("Default:95"); var genPath = convertPath("Default", "Generation"); var miscPath = convertPath("Default", "Generation", "Useful", "Misc:70"); var weaponPath = convertPath("Default", "Generation", "Useful", "Gear:25", "Weapon:35"); var legendaryWeaponPath = convertPath("Default", "Generation", "Useful", "Gear", "LegendaryWeapon:5"); var armorPath = convertPath("Default", "Generation", "Useful", "Gear", "Armor:60"); var crapPath = convertPath("Default", "Generation", "Crap"); var legacyPath = convertPath("LegacyGeneration:10"); var prov = new LootProvider(); var miscNode = tree.AddPath(miscPath).AddRangeAsLeafs(prov.Misc); var crapNode = tree.AddPath(crapPath).AddLeaf(prov.Crap); var defaultNode = tree.AddPath(defaultPath); var legacyHalfRoot = tree.AddHalfRoot("Legacy"); var legacyNode = tree .AddPath(legacyHalfRoot, legacyPath) .AddRangeAsLeafs(prov.Armor) .AddRangeAsLeafs(prov.Weapons) .AddLeaf(prov.LegendaryWeapon); var genNode = tree.AddPath(genPath); var bonusNode = tree.AddPath(bonusPath); var armorNode = tree.AddPath(armorPath).AddRangeAsLeafs(prov.Armor); var weaponNode = tree.AddPath(weaponPath).AddRangeAsLeafs(prov.Weapons); var legyNode = tree.AddPath(legendaryWeaponPath).AddLeaf(prov.LegendaryWeapon); NodeUpdateList <string, string> nodes = tree.AutoList; nodes.OnDetachedNodeRemoved += n => Console.WriteLine($"registered node {n} being removed"); armorNode.SetFallback(weaponNode); weaponNode.SetFallback(legyNode); nodes.First(x => x.Key == "Gear").SetFallback(legacyHalfRoot); tree.Connect(bonusNode, (genNode, 1)); legacyHalfRoot.AddChildNodes((crapNode, 90)); legacyNode.IgnoreAvailability = true; legacyHalfRoot.Algorithm = fpl; bonusNode.Algorithm = fpl; defaultNode.Algorithm = fpl; crapNode.Algorithm = fpl; nodes.ForEach(Console.WriteLine); for (int i = 0; i < 100; i++) { Console.WriteLine(tree.GetResult()); } nodes.ForEach(Console.WriteLine); Console.ReadKey(); }