/// <inheritdoc /> public ItemAttributes GetBonus(D3Calculator calculator) { var attr = new ItemAttributes { attacksPerSecondPercent = multiplier * calculator.GetActualAttackSpeed() }; return(attr); }
private void UpdateCalculationResults(D3Calculator d3Calculator) { var attr = d3Calculator.HeroStatsItem.AttributesRaw; guiCalculatedAttackPerSecond.Text = d3Calculator.GetActualAttackSpeed().Min.ToString(); PopulateCalculatedData(guiCalcultatedDamageMin, d3Calculator.HeroStatsItem.GetWeaponDamageMin() * d3Calculator.GetDamageMultiplierNormal()); PopulateCalculatedData(guiCalcultatedDamageMax, d3Calculator.HeroStatsItem.GetWeaponDamageMax() * d3Calculator.GetDamageMultiplierNormal()); PopulateCalculatedData(guiCalcultatedDamageCriticMin, d3Calculator.HeroStatsItem.GetWeaponDamageMin() * d3Calculator.GetDamageMultiplierCritic()); PopulateCalculatedData(guiCalcultatedDamageCriticMax, d3Calculator.HeroStatsItem.GetWeaponDamageMax() * d3Calculator.GetDamageMultiplierCritic()); PopulateCalculatedData(guiCalculatedHitpoints, d3Calculator.GetHeroHitpoints()); guiCalculatedDodge.Text = d3Calculator.GetHeroDodge().ToString(); PopulateCalculatedData(guiCalculatedArmor, d3Calculator.GetHeroArmor()); PopulateCalculatedData(guiCalculatedResistance_Arcane, d3Calculator.GetHeroResistance("Arcane")); PopulateCalculatedData(guiCalculatedResistance_Cold, d3Calculator.GetHeroResistance("Cold")); PopulateCalculatedData(guiCalculatedResistance_Fire, d3Calculator.GetHeroResistance("Fire")); PopulateCalculatedData(guiCalculatedResistance_Lightning, d3Calculator.GetHeroResistance("Lightning")); PopulateCalculatedData(guiCalculatedResistance_Physical, d3Calculator.GetHeroResistance("Physical")); PopulateCalculatedData(guiCalculatedResistance_Poison, d3Calculator.GetHeroResistance("Poison")); PopulateCalculatedData(guiCalculatedResistance_All, d3Calculator.getHeroResistance_All()); guiCalculatedDamageReduction_Armor.Text = (100 * d3Calculator.GetHeroDamageReduction_Armor(heroLevel)).ToString(); guiCalculatedDamageReduction_Arcane.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Arcane")).ToString(); guiCalculatedDamageReduction_Cold.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Cold")).ToString(); guiCalculatedDamageReduction_Fire.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Fire")).ToString(); guiCalculatedDamageReduction_Lightning.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Lightning")).ToString(); guiCalculatedDamageReduction_Physical.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Physical")).ToString(); guiCalculatedDamageReduction_Poison.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Poison")).ToString(); PopulateCalculatedData(guiCalculatedBlockChance, attr.blockChanceItem); PopulateCalculatedData(guiCalculatedBlockMin, attr.blockAmountItemMin); PopulateCalculatedData(guiCalculatedBlockMax, attr.blockAmountItemMin + attr.blockAmountItemDelta); guiCalculatedEffectiveHitpoints.Text = Math.Round(d3Calculator.GetHeroEffectiveHitpoints(heroLevel)).ToString(); guiCalculatedDPSEHPRatio.Text = Math.Round(d3Calculator.GetHeroDps().Min *d3Calculator.GetHeroEffectiveHitpoints(heroLevel) / 1000000).ToString(); }
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); }
/// <inheritdoc /> public ItemAttributes GetBonus(D3Calculator calculator) { var attr = new ItemAttributes { attacksPerSecondPercent = multiplier * calculator.GetActualAttackSpeed() }; return attr; }
private void UpdateCalculationResults(D3Calculator d3Calculator) { var attr = d3Calculator.HeroStatsItem.AttributesRaw; guiCalculatedDPS.Text = calculatedDps.Min.ToString("N"); guiCalculatedAttackPerSecond.Text = d3Calculator.GetActualAttackSpeed().Min.ToString("N2"); PopulateCalculatedData(guiCalcultatedDamageMin, d3Calculator.HeroStatsItem.GetWeaponDamageMin() * d3Calculator.GetDamageMultiplierNormal()); PopulateCalculatedData(guiCalcultatedDamageMax, d3Calculator.HeroStatsItem.GetWeaponDamageMax() * d3Calculator.GetDamageMultiplierNormal()); PopulateCalculatedData(guiCalcultatedDamageCriticMin, d3Calculator.HeroStatsItem.GetWeaponDamageMin() * d3Calculator.GetDamageMultiplierCritic()); PopulateCalculatedData(guiCalcultatedDamageCriticMax, d3Calculator.HeroStatsItem.GetWeaponDamageMax() * d3Calculator.GetDamageMultiplierCritic()); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Arcane, attr.damageDealtPercentBonusArcane); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Cold, attr.damageDealtPercentBonusCold); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Fire, attr.damageDealtPercentBonusFire); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Holy, attr.damageDealtPercentBonusHoly); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Lightning, attr.damageDealtPercentBonusLightning); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Physical, attr.damageDealtPercentBonusPhysical); PopulateCalculatedDataPercent(guiCalculatedSkillBonusPercent_Poison, attr.damageDealtPercentBonusPoison); PopulateCalculatedData(guiCalculatedSkillDamage_Arcane, calculatedDps * (1 + attr.damageDealtPercentBonusArcane)); PopulateCalculatedData(guiCalculatedSkillDamage_Cold, calculatedDps * (1 + attr.damageDealtPercentBonusCold)); PopulateCalculatedData(guiCalculatedSkillDamage_Fire, calculatedDps * (1 + attr.damageDealtPercentBonusFire)); PopulateCalculatedData(guiCalculatedSkillDamage_Holy, calculatedDps * (1 + attr.damageDealtPercentBonusHoly)); PopulateCalculatedData(guiCalculatedSkillDamage_Lightning, calculatedDps * (1 + attr.damageDealtPercentBonusLightning)); PopulateCalculatedData(guiCalculatedSkillDamage_Physical, calculatedDps * (1 + attr.damageDealtPercentBonusPhysical)); PopulateCalculatedData(guiCalculatedSkillDamage_Poison, calculatedDps * (1 + attr.damageDealtPercentBonusPoison)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Arcane, calculatedDps * (1 + attr.damageDealtPercentBonusArcane) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Cold, calculatedDps * (1 + attr.damageDealtPercentBonusCold) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Fire, calculatedDps * (1 + attr.damageDealtPercentBonusFire) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Holy, calculatedDps * (1 + attr.damageDealtPercentBonusHoly) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Lightning, calculatedDps * (1 + attr.damageDealtPercentBonusLightning) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Physical, calculatedDps * (1 + attr.damageDealtPercentBonusPhysical) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedData(guiCalculatedSkillDamageVsElites_Poison, calculatedDps * (1 + attr.damageDealtPercentBonusPoison) * (1 + attr.damagePercentBonusVsElites)); PopulateCalculatedDataPercent(guiSkillCooldownReductionAll, attr.powerCooldownReductionPercentAll); PopulateCalculatedDataPercent(guiCalculatedReductionFromElitesPercent, attr.damagePercentReductionFromElites); PopulateCalculatedDataPercent(guiCalculatedReductionFromMeleePercent, attr.damagePercentReductionFromMelee); PopulateCalculatedDataPercent(guiCalculatedReductionFromRangedPercent, attr.damagePercentReductionFromRanged); PopulateCalculatedData(guiCalculatedHitpoints, d3Calculator.GetHeroHitpoints()); guiCalculatedDodge.Text = d3Calculator.GetHeroDodge().ToString(); PopulateCalculatedData(guiCalculatedArmor, d3Calculator.GetHeroArmor()); PopulateCalculatedData(guiCalculatedResistance_Arcane, d3Calculator.GetHeroResistance("Arcane")); PopulateCalculatedData(guiCalculatedResistance_Cold, d3Calculator.GetHeroResistance("Cold")); PopulateCalculatedData(guiCalculatedResistance_Fire, d3Calculator.GetHeroResistance("Fire")); PopulateCalculatedData(guiCalculatedResistance_Lightning, d3Calculator.GetHeroResistance("Lightning")); PopulateCalculatedData(guiCalculatedResistance_Physical, d3Calculator.GetHeroResistance("Physical")); PopulateCalculatedData(guiCalculatedResistance_Poison, d3Calculator.GetHeroResistance("Poison")); PopulateCalculatedData(guiCalculatedResistance_All, d3Calculator.GetHeroResistance_All()); guiCalculatedDamageReduction_Armor.Text = (100 * d3Calculator.GetHeroDamageReduction_Armor(heroLevel)).ToString("N2"); guiCalculatedDamageReduction_Arcane.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Arcane")).ToString("N2"); guiCalculatedDamageReduction_Cold.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Cold")).ToString("N2"); guiCalculatedDamageReduction_Fire.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Fire")).ToString("N2"); guiCalculatedDamageReduction_Lightning.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Lightning")).ToString("N2"); guiCalculatedDamageReduction_Physical.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Physical")).ToString("N2"); guiCalculatedDamageReduction_Poison.Text = (100 * d3Calculator.GetHeroDamageReduction(heroLevel, "Poison")).ToString("N2"); PopulateCalculatedData(guiCalculatedBlockChance, attr.blockChanceItem); PopulateCalculatedData(guiCalculatedBlockMin, attr.blockAmountItemMin); PopulateCalculatedData(guiCalculatedBlockMax, attr.blockAmountItemMin + attr.blockAmountItemDelta); guiCalculatedEffectiveHitpoints.Text = Math.Round(d3Calculator.GetHeroEffectiveHitpoints(heroLevel)).ToString("N0"); guiCalculatedDPSEHPRatio.Text = Math.Round(d3Calculator.GetHeroDps().Min *d3Calculator.GetHeroEffectiveHitpoints(heroLevel) / 1000000).ToString("N0"); }