/// <summary> /// Computes the <see cref="ItemAttributes"/> brought by the set bonuses. /// </summary> /// <param name="items"></param> /// <returns></returns> public static ItemAttributes GetActivatedSetBonus(this List <Item> items) { if (items == null) { throw new ArgumentNullException("items"); } var attributeSetItemDiscount = items .Select(i => i.AttributesRaw.AttributeSetItemDiscount) .Where(asid => asid != null) .Aggregate(ItemValueRange.Zero, (asid, current) => current + asid); var result = new ItemAttributes(); foreach (var set in items.GetActivatedSets()) { var setItemsCount = set.CountItemsOfSet(items); if (setItemsCount >= 2) { setItemsCount += (int)Math.Round(attributeSetItemDiscount.Min); } result += set.GetBonus(setItemsCount); } return(result); }
public List<Set> GetActivatedSets() { var allItems = new List<Item>(); allItems.AddRange(items); allItems.Add(MainHand); allItems.Add(offHand); return allItems.GetActivatedSets(); }
public List <Set> GetActivatedSets() { var allItems = new List <Item>(); allItems.AddRange(items); allItems.Add(MainHand); allItems.Add(offHand); return(allItems.GetActivatedSets()); }
private static async Task WriteCalculation(BattleTag battleTag) { Console.WriteLine("= = = = Calculator of {0} = = = =", battleTag); Console.WriteLine("Downloading {0}", "career"); var career = await D3Api.GetCareerFromBattleTagAsync(battleTag); if (career == null || career.Heroes.Length == 0) { return; } Console.WriteLine("Downloading Hero {0}/{1}", battleTag, career.Heroes[0].Name); var hero = await D3Api.GetHeroFromHeroIdAsync(battleTag, career.Heroes[0].Id); if (hero?.Items == null) { return; } var bracersTask = GetFullItem(hero.Items.Bracers, "bracers"); var feetTask = GetFullItem(hero.Items.Feet, "feet"); var handsTask = GetFullItem(hero.Items.Hands, "hands"); var headTask = GetFullItem(hero.Items.Hands, "head"); var leftFingerTask = GetFullItem(hero.Items.LeftFinger, "leftFinger"); var legsTask = GetFullItem(hero.Items.Legs, "legs"); var mainHandTask = GetFullItem(hero.Items.MainHand, "mainHand"); var neckTask = GetFullItem(hero.Items.Neck, "neck"); var offHandTask = GetFullItem(hero.Items.OffHand, "offHand"); var rightFingerTask = GetFullItem(hero.Items.RightFinger, "rightFinger"); var shouldersTask = GetFullItem(hero.Items.Shoulders, "shoulders"); var torsoTask = GetFullItem(hero.Items.Torso, "torso"); var waistTask = GetFullItem(hero.Items.Waist, "waist"); Task.WaitAll(bracersTask, feetTask, handsTask, headTask, leftFingerTask, legsTask, mainHandTask, neckTask, offHandTask, rightFingerTask, shouldersTask, torsoTask, waistTask); var bracers = bracersTask.Result; var feet = feetTask.Result; var hands = handsTask.Result; var head = headTask.Result; var leftFinger = leftFingerTask.Result; var legs = legsTask.Result; var mainHand = mainHandTask.Result; var neck = neckTask.Result; var offHand = offHandTask.Result; var rightFinger = rightFingerTask.Result; var shoulders = shouldersTask.Result; var torso = torsoTask.Result; var waist = waistTask.Result; var items = new List<Item> { bracers, feet, hands, head, leftFinger, legs, neck, rightFinger, shoulders, torso, waist }.Where(i => i != null).ToList(); var allItems = new List<Item>(items) { mainHand, offHand }.Where(i => i != null).ToList(); Console.WriteLine("Calculating activated set"); foreach (var set in allItems.GetActivatedSets()) { Console.WriteLine("Activated set: {0}", set.name); } var setBonus = new Item(allItems.GetActivatedSetBonus()); items.Add(setBonus); var d3Calculator = new D3Calculator(hero, mainHand, offHand, items.ToArray()); Console.WriteLine("Calculation results"); var dps = d3Calculator.GetHeroDps(new List<ID3SkillModifier>(), new List<ID3SkillModifier>()); Console.WriteLine("Dexterity : {0}", d3Calculator.GetHeroDexterity().Min); Console.WriteLine("DPS : {0}", dps.Min); Console.WriteLine("Attack speed: {0}", d3Calculator.GetActualAttackSpeed().Min); }
private static HeroItems FetchFullItems(FetchMode online) { var heroItems = D3Context.Instance.CurrentHero.Items; var dataProvider = (CacheableDataProvider)D3Api.DataProvider; dataProvider.FetchMode = online; try { // Compute set items bonus heroItems.UpdateToFullItems(); // Compute set items bonus var items = new List<Item> { (Item)heroItems.Bracers, (Item)heroItems.Feet, (Item)heroItems.Hands, (Item)heroItems.Head, (Item)heroItems.LeftFinger, (Item)heroItems.Legs, (Item)heroItems.Neck, (Item)heroItems.RightFinger, (Item)heroItems.Shoulders, (Item)heroItems.Torso, (Item)heroItems.Waist, (Item)heroItems.MainHand, (Item)heroItems.OffHand }; items = items.Where(i => i != null) .ToList(); D3Context.Instance.ActivatedSetBonus = new Item(items.GetActivatedSetBonus()); D3Context.Instance.ActivatedSets = items.GetActivatedSets(); } catch (Exception exception) { Console.WriteLine(exception); D3Context.Instance.CurrentHeroItems = null; D3Context.Instance.ActivatedSetBonus = null; throw; } finally { dataProvider.FetchMode = D3Context.Instance.FetchMode; } return heroItems; }
private static void WriteCalculation(BattleTag battleTag) { Console.WriteLine("= = = = Calculator of {0} = = = =", battleTag); Console.WriteLine("Downloading {0}", "career"); var career = Career.CreateFromBattleTag(battleTag); if (career == null || career.Heroes.Length == 0) { return; } Console.WriteLine("Downloading Hero {0}/{1}", battleTag, career.Heroes[0].name); var hero = Hero.CreateFromHeroId(battleTag, career.Heroes[0].id); if (hero == null || hero.items == null) { return; } Console.WriteLine("Downloading {0}", "bracers"); var bracers = hero.items.bracers.GetFullItem(); Console.WriteLine("Downloading {0}", "feet"); var feet = hero.items.feet.GetFullItem(); Console.WriteLine("Downloading {0}", "hands"); var hands = hero.items.hands.GetFullItem(); Console.WriteLine("Downloading {0}", "head"); var head = hero.items.head.GetFullItem(); Console.WriteLine("Downloading {0}", "leftFinger"); var leftFinger = hero.items.leftFinger.GetFullItem(); Console.WriteLine("Downloading {0}", "legs"); var legs = hero.items.legs.GetFullItem(); Console.WriteLine("Downloading {0}", "mainHand"); var mainHand = hero.items.mainHand.GetFullItem(); Console.WriteLine("Downloading {0}", "neck"); var neck = hero.items.neck.GetFullItem(); Console.WriteLine("Downloading {0}", "offHand"); var offHand = hero.items.offHand.GetFullItem(); Console.WriteLine("Downloading {0}", "rightFinger"); var rightFinger = hero.items.rightFinger.GetFullItem(); Console.WriteLine("Downloading {0}", "shoulders"); var shoulders = hero.items.shoulders.GetFullItem(); Console.WriteLine("Downloading {0}", "torso"); var torso = hero.items.torso.GetFullItem(); Console.WriteLine("Downloading {0}", "waist"); var waist = hero.items.waist.GetFullItem(); var items = new List <Item> { bracers, feet, hands, head, leftFinger, legs, neck, rightFinger, shoulders, torso, waist }.Where(i => i != null).ToList(); var allItems = new List <Item>(items) { mainHand, offHand }.Where(i => i != null).ToList(); Console.WriteLine("Calculating activated set"); foreach (var set in allItems.GetActivatedSets()) { Console.WriteLine("Activated set: {0}", set.name); } var setBonus = new Item(allItems.GetActivatedSetBonus()); items.Add(setBonus); var d3Calculator = new D3Calculator(hero, mainHand, offHand, items.ToArray()); Console.WriteLine("Calculation results"); var dps = d3Calculator.GetHeroDps(new List <ID3SkillModifier>(), new List <ID3SkillModifier>()); Console.WriteLine("Dexterity : {0}", d3Calculator.GetHeroDexterity().Min); Console.WriteLine("DPS : {0}", dps.Min); Console.WriteLine("Attack speed: {0}", d3Calculator.GetActualAttackSpeed().Min); }
private static async Task WriteCalculation(BattleTag battleTag) { Console.WriteLine("= = = = Calculator of {0} = = = =", battleTag); Console.WriteLine("Downloading {0}", "career"); var career = await D3Api.GetCareerFromBattleTagAsync(battleTag); if (career == null || career.Heroes.Length == 0) { return; } Console.WriteLine("Downloading Hero {0}/{1}", battleTag, career.Heroes[0].Name); var hero = await D3Api.GetHeroFromHeroIdAsync(battleTag, career.Heroes[0].Id); if (hero?.Items == null) { return; } var bracersTask = GetFullItem(hero.Items.Bracers, "bracers"); var feetTask = GetFullItem(hero.Items.Feet, "feet"); var handsTask = GetFullItem(hero.Items.Hands, "hands"); var headTask = GetFullItem(hero.Items.Hands, "head"); var leftFingerTask = GetFullItem(hero.Items.LeftFinger, "leftFinger"); var legsTask = GetFullItem(hero.Items.Legs, "legs"); var mainHandTask = GetFullItem(hero.Items.MainHand, "mainHand"); var neckTask = GetFullItem(hero.Items.Neck, "neck"); var offHandTask = GetFullItem(hero.Items.OffHand, "offHand"); var rightFingerTask = GetFullItem(hero.Items.RightFinger, "rightFinger"); var shouldersTask = GetFullItem(hero.Items.Shoulders, "shoulders"); var torsoTask = GetFullItem(hero.Items.Torso, "torso"); var waistTask = GetFullItem(hero.Items.Waist, "waist"); Task.WaitAll(bracersTask, feetTask, handsTask, headTask, leftFingerTask, legsTask, mainHandTask, neckTask, offHandTask, rightFingerTask, shouldersTask, torsoTask, waistTask); var bracers = bracersTask.Result; var feet = feetTask.Result; var hands = handsTask.Result; var head = headTask.Result; var leftFinger = leftFingerTask.Result; var legs = legsTask.Result; var mainHand = mainHandTask.Result; var neck = neckTask.Result; var offHand = offHandTask.Result; var rightFinger = rightFingerTask.Result; var shoulders = shouldersTask.Result; var torso = torsoTask.Result; var waist = waistTask.Result; var items = new List <Item> { bracers, feet, hands, head, leftFinger, legs, neck, rightFinger, shoulders, torso, waist }.Where(i => i != null).ToList(); var allItems = new List <Item>(items) { mainHand, offHand }.Where(i => i != null).ToList(); Console.WriteLine("Calculating activated set"); foreach (var set in allItems.GetActivatedSets()) { Console.WriteLine("Activated set: {0}", set.name); } var setBonus = new Item(allItems.GetActivatedSetBonus()); items.Add(setBonus); var d3Calculator = new D3Calculator(hero, mainHand, offHand, items.ToArray()); Console.WriteLine("Calculation results"); var dps = d3Calculator.GetHeroDps(new List <ID3SkillModifier>(), new List <ID3SkillModifier>()); Console.WriteLine("Dexterity : {0}", d3Calculator.GetHeroDexterity().Min); Console.WriteLine("DPS : {0}", dps.Min); Console.WriteLine("Attack speed: {0}", d3Calculator.GetActualAttackSpeed().Min); }
private static void WriteCalculation(BattleTag battleTag) { Console.WriteLine("= = = = Calculator of {0} = = = =", battleTag); Console.WriteLine("Downloading {0}", "career"); var career = Career.CreateFromBattleTag(battleTag); if (career == null || career.Heroes.Length == 0) { return; } Console.WriteLine("Downloading Hero {0}/{1}", battleTag, career.Heroes[0].name); var hero = Hero.CreateFromHeroId(battleTag, career.Heroes[0].id); if (hero == null || hero.items == null) { return; } Console.WriteLine("Downloading {0}", "bracers"); var bracers = hero.items.bracers.GetFullItem(); Console.WriteLine("Downloading {0}", "feet"); var feet = hero.items.feet.GetFullItem(); Console.WriteLine("Downloading {0}", "hands"); var hands = hero.items.hands.GetFullItem(); Console.WriteLine("Downloading {0}", "head"); var head = hero.items.head.GetFullItem(); Console.WriteLine("Downloading {0}", "leftFinger"); var leftFinger = hero.items.leftFinger.GetFullItem(); Console.WriteLine("Downloading {0}", "legs"); var legs = hero.items.legs.GetFullItem(); Console.WriteLine("Downloading {0}", "mainHand"); var mainHand = hero.items.mainHand.GetFullItem(); Console.WriteLine("Downloading {0}", "neck"); var neck = hero.items.neck.GetFullItem(); Console.WriteLine("Downloading {0}", "offHand"); var offHand = hero.items.offHand.GetFullItem(); Console.WriteLine("Downloading {0}", "rightFinger"); var rightFinger = hero.items.rightFinger.GetFullItem(); Console.WriteLine("Downloading {0}", "shoulders"); var shoulders = hero.items.shoulders.GetFullItem(); Console.WriteLine("Downloading {0}", "torso"); var torso = hero.items.torso.GetFullItem(); Console.WriteLine("Downloading {0}", "waist"); var waist = hero.items.waist.GetFullItem(); var items = new List<Item> { bracers, feet, hands, head, leftFinger, legs, neck, rightFinger, shoulders, torso, waist }.Where(i => i != null).ToList(); var allItems = new List<Item>(items) { mainHand, offHand }.Where(i => i != null).ToList(); Console.WriteLine("Calculating activated set"); foreach (var set in allItems.GetActivatedSets()) { Console.WriteLine("Activated set: {0}", set.name); } var setBonus = new Item(allItems.GetActivatedSetBonus()); items.Add(setBonus); var d3Calculator = new D3Calculator(hero, mainHand, offHand, items.ToArray()); Console.WriteLine("Calculation results"); var dps = d3Calculator.GetHeroDps(new List<ID3SkillModifier>(), new List<ID3SkillModifier>()); Console.WriteLine("Dexterity : {0}", d3Calculator.GetHeroDexterity().Min); Console.WriteLine("DPS : {0}", dps.Min); Console.WriteLine("Attack speed: {0}", d3Calculator.GetActualAttackSpeed().Min); }