private IBuild ConvertXmlBuild(XmlPathOfBuilding xmlBuild) { var items = ConvertItems(xmlBuild.Items.Items); var gems = ConvertSkills(xmlBuild.Skills.Skills).ToList(); var specs = xmlBuild.Tree.Specs; if (specs.IsEmpty()) { return(ConvertXmlBuild(xmlBuild, new XmlPathOfBuildingTreeSpec { Url = Constants.DefaultTree }, items, gems)); } else if (specs.Count == 1) { return(ConvertXmlBuild(xmlBuild, specs.Single(), items, gems)); } else { var hasDifferentTreeVersions = specs.Select(s => s.TreeVersion).Distinct().Count() > 1; var folder = new BuildFolder { Name = "PoB Import" }; foreach (var spec in specs) { folder.Builds.Add(ConvertXmlBuild(xmlBuild, spec, items, gems, hasDifferentTreeVersions)); } return(folder); } }
private PoEBuild ConvertXmlBuild( XmlPathOfBuilding xmlBuild, XmlPathOfBuildingTreeSpec treeSpec, IReadOnlyDictionary <int, Item> items, IEnumerable <PoBGem> gems, bool addTreeVersionToName = false) { var name = treeSpec.Title ?? "Default"; if (addTreeVersionToName && treeSpec.TreeVersion != null) { name += $" ({treeSpec.TreeVersion})"; } return(new PoEBuild( new BanditSettings { Choice = xmlBuild.Build.Bandit }, new string[0][], new ushort[0], new ushort[0], ConfigurationStatConverter.Convert(xmlBuild.Config).Concat(ConvertMainSkillConfiguration(xmlBuild)), null) { ItemData = ConvertItemData(xmlBuild, items, gems, treeSpec.Sockets), Level = xmlBuild.Build.Level, Name = name, Note = xmlBuild.Notes?.Trim(), TreeUrl = treeSpec.Url.Trim(), }); }
private static IEnumerable <(string, double?)> ConvertMainSkillConfiguration(XmlPathOfBuilding xmlBuild) { if (xmlBuild.Skills.Skills.Count < xmlBuild.Build.MainSocketGroup) { yield break; } var xmlSkill = xmlBuild.Skills.Skills[xmlBuild.Build.MainSocketGroup - 1]; var slot = ConvertItemSlot(xmlSkill.Slot, ItemSlot.Amulet); yield return("Character.MainSkillItemSlot", (int)slot); if (xmlSkill.Gems.Count < xmlSkill.MainActiveSkill) { yield break; } yield return("Character.MainSkillSocketIndex", xmlSkill.MainActiveSkill); var xmlGem = xmlSkill.Gems[xmlSkill.MainActiveSkill - 1]; if (xmlGem.SkillPart > 0) { yield return("Character.MainSkillPart", xmlGem.SkillPart); } }
private string ConvertItemData( XmlPathOfBuilding xmlBuild, IReadOnlyDictionary <int, Item> items, IEnumerable <Skill> skills, IEnumerable <XmlPathOfBuildingTreeSocket> sockets) { var itemSerializer = new ItemAttributes(_equipmentData, null !); foreach (var(slot, group) in skills.GroupBy(s => s.ItemSlot)) { itemSerializer.SetSkillsInSlot(group.ToList(), slot); } foreach (var xmlSlot in xmlBuild.Items.Slots) { var(slotString, socket) = ConvertItemSocket(xmlSlot.Name); var slot = ConvertItemSlot(slotString); if (slot == ItemSlot.Unequipable) { continue; } var item = new Item(items[xmlSlot.ItemId]) { IsEnabled = xmlSlot.Active || !slot.IsFlask() }; itemSerializer.SetItemInSlot(item, slot, socket); } foreach (var xmlTreeSocket in sockets) { if (items.TryGetValue(xmlTreeSocket.ItemId, out var item)) { itemSerializer.SetItemInSlot(new Item(item), ItemSlot.SkillTree, (ushort)xmlTreeSocket.NodeId); } } return(itemSerializer.ToJsonString()); }