public override Dictionary <string, string> GetCharacterDisplayCalculationValues() { Dictionary <string, string> dictValues = new Dictionary <string, string>(); //string format = ""; CalcOpts = character.CalculationOptions as CalculationOptionsHunter; //Basic Stats dictValues.Add("Health and Stamina", string.Format("{0:##,##0}*{1:##,##0} : Stamina", Hunter.Health, Hunter.Stamina)); dictValues.Add("Focus", string.Format("{0:000}", Hunter.Focus.ToString("F0"))); dictValues.Add("Armor", Hunter.Armor.ToString("F0")); dictValues.Add("Agility", string.Format("{0}*{1} : After Special Effects", HunterUnBuffed.Agility, Hunter.Agility)); dictValues.Add("Ranged Attack Power", string.Format("{0:00,000}*{1:00,000} : After Special Effects", //+ // "\r\n{1:00,000} : Base" + // "\r\n{2:00,000} : Agility" + // "\r\n{3:00,000} : Gear / Spec" + // "\r\nProcs were averaged out and added", HunterUnBuffed.RangedAttackPower, Hunter.RangedAttackPower));//, apFromBase, apFromAGI, apFromGear)); dictValues.Add("Hit", string.Format("{0:00.00%} : {1}*" + "Ranged Cap: " + Hunter.HitNeededLabel, HunterUnBuffed.HitRatingPercent, HunterUnBuffed.HitRating, HunterUnBuffed.HitRatingNeeded)); dictValues.Add("Crit", string.Format("{0:00.00%} : {1}*Includes:" + "\r\n{2:00.00%} : Agility" + "\r\n{3:00.00%} : Rating" + "\r\n{4:00.00%} : Buffs" + "\r\n{5:00.00%} : Target Modifier" + "\r\n\r\nNote that individual Shots will handle their own crit caps", HunterUnBuffed.ChancetoCrit, HunterUnBuffed.CritRating, HunterUnBuffed.CritfromAgility, HunterUnBuffed.CritfromRating, HunterUnBuffed.PhysicalCrit, HunterUnBuffed.CritModifiedfromTarget)); dictValues.Add("Haste", string.Format("{0:00.00%} : {1:0}", // "*Includes:" + // "\r\n{2:00.00%} : Base" + // "\r\n{3:00.00%} : Rating" + HunterUnBuffed.Haste, HunterUnBuffed.HasteRating)); dictValues.Add("Mastery", string.Format("{0:00.00%} : {1}* Includes:" + "\r\n{2:00.0000} : Mastery From Rating" + "\r\n{3:00.0000%} : Spec base %" + "\r\n{4:00.0000%} : Incremental %" + HunterUnBuffed.MasteryLabel, HunterUnBuffed.MasteryRatePercent, HunterUnBuffed.MasteryRating, HunterUnBuffed.MasteryRateConversion, HunterUnBuffed.BaseMastery, HunterUnBuffed.IncrementalmasterywithConversion, HunterUnBuffed.MasteryRatePercent)); dictValues.Add("Attack Speed", BaseAttackSpeed.ToString("F2")); // Pet Stats /* dictValues.Add("Pet Health", string.Format("{0:000,000}*" + * "{1:000,000} : Base" + * "\r\n{2:000,000} : Hunter" + * "\r\n{3:000,000} : Bonus", * pet.PetStats.Health, petBaseHealth, petHealthfromStamina, petBonusHealth)); * dictValues.Add("Pet Armor", pet.PetStats.Armor.ToString("F0")); * dictValues.Add("Pet Focus", focus.ToString("F0")); * dictValues.Add("Pet Attack Power", pet.PetStats.AttackPower.ToString("F0") + * string.Format("*Full Pet Stats:\r\n" * // + "Strength: {0:0.0}\r\n" * // + "Agility: {1:0.0}\r\n" + "Hit: {0:0.00%}\r\n" + "PhysCrit: {1:0.00%}\r\n" + "PhysHaste: {2:0.00%}\r\n", + // pet.PetStats.Strength, + // pet.PetStats.Agility, + pet.PetStats.PhysicalHit, + pet.PetStats.PhysicalCrit, + pet.PetStats.PhysicalHaste)); + dictValues.Add("Pet Hit %", petHitTotal.ToString("P2")); + dictValues.Add("Pet Dodge %", petTargetDodge.ToString("P2")); + dictValues.Add("Pet Melee Crit %", petCritTotalMelee.ToString("P2") + "*includes:\n" + + petCritFromBase.ToString("P2") + " from base\n" + + petCritFromAgility.ToString("P2") + " from agility\n" + + petCritFromSpidersBite.ToString("P2") + " from Spider's Bite\n" + + petCritFromFerocity.ToString("P2") + " from Ferocity\n" + + petCritFromGear.ToString("P2") + " from gear\n" + + petCritFromBuffs.ToString("P2") + " from buffs\n" + + petCritFromTargetDebuffs.ToString("P2") + " from target debuffs\n" + + petCritFromDepression.ToString("P2") + " from depression"); + dictValues.Add("Pet Specials Crit %", petCritTotalSpecials.ToString("P2") + "*includes:\n" + + petCritTotalMelee.ToString("P2") + " from melee crit\n" + + petCritFromCobraStrikes.ToString("P2") + " from Cobra Strikes"); + dictValues.Add("Pet White DPS", petWhiteDPS.ToString("F2")); + dictValues.Add("Pet Kill Command DPS", petKillCommandDPS.ToString("F2")); + dictValues.Add("Pet Specials DPS", petSpecialDPS.ToString("F2") /*+ + string.Format("Breakout:\r\n" + "Furious Howl: Use {0} DPS {1:0.00}" + "Bite: Use {2} DPS {3:0.00}", + pet.priorityRotation.getSkillFrequency(PetAttacks.FuriousHowl), 0f, + pet.priorityRotation.getSkillFrequency(PetAttacks.Bite), pet.priorityRotation.dps - petWhiteDPS)); */ // Shot Stats // dictValues.Add("Aimed Shot", Aimed.GenTooltip(CustomDPS)); dictValues.Add("Aimed Shot", Aimed.DPS.ToString("F2")); dictValues.Add("MMM Aimed Shot", MMMAimed.DPS.ToString("F2")); dictValues.Add("CA Aimed Shot", CAAimed.DPS.ToString("F2")); // dictValues.Add("Arcane Shot", Arcane.GenTooltip(CustomDPS)); dictValues.Add("Arcane Shot", Arcane.DPS.ToString("F2")); // dictValues.Add("Multi Shot", multiShot.GenTooltip()); // dictValues.Add("Cobra Shot", cobraShot.GenTooltip()); // dictValues.Add("Steady Shot", Steady.GenTooltip(CustomDPS)); dictValues.Add("Steady Shot", Steady.DPS.ToString("F2")); // dictValues.Add("Kill Shot", Kill.GenTooltip(CustomDPS)); dictValues.Add("Kill Shot", Kill.DPS.ToString("F2")); // dictValues.Add("Explosive Shot", explosiveShot.GenTooltip()); // dictValues.Add("Black Arrow", blackArrow.GenTooltip()); // dictValues.Add("Chimera Shot", Chimera.GenTooltip(CustomDPS)); dictValues.Add("Chimera Shot", Chimera.DPS.ToString("F2")); //dictValues.Add("Rapid Fire", rapidFire.GenTooltip()); //dictValues.Add("Readiness", readiness.GenTooltip()); //dictValues.Add("Bestial Wrath", bestialWrath.GenTooltip()); // Sting Stats // dictValues.Add("Serpent Sting", Serpent.GenTooltip(CustomDPS)); dictValues.Add("Serpent Sting", Serpent.DPS.ToString("F2")); // Trap Stats //dictValues.Add("Immolation Trap", immolationTrap.GenTooltip()); //dictValues.Add("Explosive Trap", explosiveTrap.GenTooltip()); //dictValues.Add("Freezing Trap", freezingTrap.GenTooltip()); //dictValues.Add("Frost Trap", frostTrap.GenTooltip()); // Hunter DPS dictValues.Add("Autoshot DPS", Whites.GenTooltip(CustomDPS)); dictValues.Add("Priority Rotation DPS", CustomDPS.ToString("F2")); dictValues.Add("Wild Quiver DPS", WildQuiverDPS.ToString("F2")); // dictValues.Add("Kill Shot low HP gain", killShotSub20FinalGain.ToString("F2")+"*"+ // "Kill Shot freq: "+killShot.Freq.ToString("F2")+" -> "+killShot.start_freq.ToString("F2")+"\n"+ // "Steady Shot freq: "+steadyShot.Freq.ToString("F2")+" -> "+killShotSub20NewSteadyFreq.ToString("F2")+"\n"+ // "Kill Shot DPS: "+killShot.DPS.ToString("F2")+" -> "+killShotSub20NewDPS.ToString("F2")+"\n"+ // "Steady Shot DPS: "+steadyShot.DPS.ToString("F2")+" -> "+killShotSub20NewSteadyDPS.ToString("F2")+"\n"+ // "DPS Gain when switched: " + killShotSub20Gain.ToString("F2")+"\n"+ // "Time spent sub-20%: " + killShotSub20TimeSpent.ToString("P2")); dictValues.Add("Aspect Loss", aspectBeastLostDPS.ToString("F2") + "*" + "Hawk Uptime: " + aspectUptimeHawk.ToString("P2") + "\n" + "Fox Uptime: " + aspectUptimeBeast.ToString("P2")); dictValues.Add("Piercing Shots DPS", PiercingShotsDPS.ToString("F2") + "*" + "Steady Shot: " + PiercingShotsDPSSteadyShot.ToString("F2") + "\n" + "Aimed Shot: " + PiercingShotsDPSAimedShot.ToString("F2") + "\n" + "Chimera Shot: " + PiercingShotsDPSChimeraShot.ToString("F2") + "\n"); dictValues.Add("Special DMG Procs DPS", SpecProcDPS.ToString("F2")); // Combined DPS dictValues.Add("Hunter DPS", HunterDpsPoints.ToString("F2")); dictValues.Add("Pet DPS", PetDpsPoints.ToString("F2")); dictValues.Add("Total DPS", OverallPoints.ToString("F2")); return(dictValues); }
public override Dictionary <string, string> GetCharacterDisplayCalculationValues() { Dictionary <string, string> dictValues = new Dictionary <string, string>(); //string format = ""; CalcOpts = character.CalculationOptions as CalculationOptionsHunter; // Basic Stats dictValues.Add("Health and Stamina", string.Format("{0:##,##0} : {1:##,##0}*{2:00,000} : Base Health" + "\r\n{3:00,000} : Stam Bonus", BasicStats.Health, BasicStats.Stamina, BaseHealth, StatConversion.GetHealthFromStamina(BasicStats.Stamina))); dictValues.Add("Mana", BasicStats.Mana.ToString("F0")); dictValues.Add("Armor", BasicStats.Armor.ToString("F0")); dictValues.Add("Agility", BasicStats.Agility.ToString("F0")); dictValues.Add("Ranged Attack Power", string.Format("{0:0000}*Includes:" + "\r\n{1:0000} : Base" + "\r\n{2:0000} : Agility" + "\r\n{3:0000} : Gear" + "\r\nProcs were averaged out and added", apTotal, apFromBase, apFromAGI, apFromGear)); dictValues.Add("Intellect", BasicStats.Intellect.ToString("F0")); // old float HitPercent = StatConversion.GetHitFromRating(BasicStats.HitRating); float HitPercBonus = BasicStats.PhysicalHit - HitPercent; // Hit Soft Cap ratings check, how far from it #if RAWR3 || SILVERLIGHT float capA1 = StatConversion.WHITE_MISS_CHANCE_CAP[BossOpts.Level - character.Level]; #else float capA1 = StatConversion.WHITE_MISS_CHANCE_CAP[CalcOpts.TargetLevel - character.Level]; #endif float convcapA1 = (float)Math.Ceiling(StatConversion.GetRatingFromHit(capA1)); float sec2lastNumA1 = (convcapA1 - StatConversion.GetRatingFromHit(HitPercent) - StatConversion.GetRatingFromHit(HitPercBonus)) * -1; dictValues.Add("Hit", string.Format("{0:00.00%} : {1}*" + "{2:0.00%} : From Other Bonuses" + Environment.NewLine + "{3:0.00%} : Total Hit % Bonus" + Environment.NewLine + Environment.NewLine + "Ranged Cap: " + (sec2lastNumA1 > 0 ? "You can free {4:0} Rating" : "You need {4:0} more Rating"), StatConversion.GetHitFromRating(BasicStats.HitRating), BasicStats.HitRating, HitPercBonus, HitPercent + HitPercBonus, (sec2lastNumA1 > 0 ? sec2lastNumA1 : sec2lastNumA1 * -1) )); dictValues.Add("Crit", string.Format("{0:00.00%} : {1}*Includes:" + "\r\n{2:00.00%} : Base Crit" + "\r\n{3:00.00%} : Agility" + "\r\n{4:00.00%} : Rating" + "\r\n{5:00.00%} : Racial" + "\r\n{6:00.00%} : Proc Effects" + "\r\n{7:00.00%} : Lethal Shots" + "\r\n{8:00.00%} : Killer Instincts" + "\r\n{9:00.00%} : Master Marksman" + "\r\n{10:00.00%} : Master Tactician" + "\r\n{11:00.00%} : Buffs & Debuffs" + "\r\n{12:00.00%} : Level Adjustment" + "\r\n\r\nNote that individual Shots will handle their own crit caps", critRateOverall, BasicStats.CritRating, critBase, critFromAgi, critFromRating, critFromRacial, critFromProcRating, critFromLethalShots, critFromKillerInstincts, critFromMasterMarksman, critFromMasterTactician, critFromBuffs, critFromDepression * -1f)); dictValues.Add("Armor Penetration", string.Format("{0:00.00%} : {1}" + "*Enemy's Damage Reduction from armor: {2:00.00%}", StatConversion.GetArmorPenetrationFromRating(BasicStats.ArmorPenetrationRating), BasicStats.ArmorPenetrationRating, damageReductionFromArmor)); dictValues.Add("Haste", string.Format("{0:00.00%} : {1:0}*Includes:" + "\r\n{2:00.00%} : Base" + "\r\n{3:00.00%} : Rating" + "\r\n{4:00.00%} : Serpent's Swiftness" + "\r\n{5:00.00%} : Buffs" + "\r\n{6:00.00%} : Rapid Fire" + "\r\n{7:00.00%} : Proc Effects", BasicStats.PhysicalHaste, BasicStats.HasteRating, hasteFromBase, hasteFromRating, hasteFromTalentsStatic, hasteFromRangedBuffs, hasteFromRapidFire, hasteFromProcs)); dictValues.Add("Attack Speed", BaseAttackSpeed.ToString("F2")); // Pet Stats dictValues.Add("Pet Attack Power", pet.PetStats.AttackPower.ToString("F0") + string.Format("*Full Pet Stats:\r\n" + "Strength: {0:0.0}\r\n" + "Agility: {1:0.0}\r\n" + "Hit: {2:0.00%}\r\n" + "PhysCrit: {3:0.00%}\r\n" + "PhysHaste: {4:0.00%}\r\n", pet.PetStats.Strength, pet.PetStats.Agility, pet.PetStats.PhysicalHit, pet.PetStats.PhysicalCrit, pet.PetStats.PhysicalHaste)); dictValues.Add("Pet Hit %", petHitTotal.ToString("P2")); dictValues.Add("Pet Dodge %", petTargetDodge.ToString("P2")); dictValues.Add("Pet Melee Crit %", petCritTotalMelee.ToString("P2") + "*includes:\n" + petCritFromBase.ToString("P2") + " from base\n" + petCritFromAgility.ToString("P2") + " from agility\n" + petCritFromSpidersBite.ToString("P2") + " from Spider's Bite\n" + petCritFromFerocity.ToString("P2") + " from Ferocity\n" + petCritFromGear.ToString("P2") + " from gear\n" + petCritFromBuffs.ToString("P2") + " from buffs\n" + petCritFromTargetDebuffs.ToString("P2") + " from target debuffs\n" + petCritFromDepression.ToString("P2") + " from depression"); dictValues.Add("Pet Specials Crit %", petCritTotalSpecials.ToString("P2") + "*includes:\n" + petCritTotalMelee.ToString("P2") + " from melee crit\n" + petCritFromCobraStrikes.ToString("P2") + " from Cobra Strikes"); dictValues.Add("Pet White DPS", petWhiteDPS.ToString("F2")); dictValues.Add("Pet Kill Command DPS", petKillCommandDPS.ToString("F2")); dictValues.Add("Pet Specials DPS", petSpecialDPS.ToString("F2") /*+ * string.Format("Breakout:\r\n" + "Furious Howl: Use {0} DPS {1:0.00}" + "Bite: Use {2} DPS {3:0.00}", + pet.priorityRotation.getSkillFrequency(PetAttacks.FuriousHowl), 0f, + pet.priorityRotation.getSkillFrequency(PetAttacks.Bite), pet.priorityRotation.dps - petWhiteDPS)*/); // Shot Stats dictValues.Add("Aimed Shot", aimedShot.GenTooltip()); dictValues.Add("Arcane Shot", arcaneShot.GenTooltip()); dictValues.Add("Multi Shot", multiShot.GenTooltip()); dictValues.Add("Silencing Shot", silencingShot.GenTooltip()); dictValues.Add("Steady Shot", steadyShot.GenTooltip()); dictValues.Add("Kill Shot", killShot.GenTooltip()); dictValues.Add("Explosive Shot", explosiveShot.GenTooltip()); dictValues.Add("Black Arrow", blackArrow.GenTooltip()); dictValues.Add("Volley", volley.GenTooltip()); dictValues.Add("Chimera Shot", chimeraShot.GenTooltip()); //dictValues.Add("Rapid Fire", rapidFire.GenTooltip()); //dictValues.Add("Readiness", readiness.GenTooltip()); //dictValues.Add("Bestial Wrath", bestialWrath.GenTooltip()); // Sting Stats dictValues.Add("Serpent Sting", serpentSting.GenTooltip()); dictValues.Add("Scorpid Sting", scorpidSting.GenTooltip()); dictValues.Add("Viper Sting", viperSting.GenTooltip()); // Trap Stats dictValues.Add("Immolation Trap", immolationTrap.GenTooltip()); dictValues.Add("Explosive Trap", explosiveTrap.GenTooltip()); dictValues.Add("Freezing Trap", freezingTrap.GenTooltip()); dictValues.Add("Frost Trap", frostTrap.GenTooltip()); // Mana dictValues.Add("Mana Usage Per Second", manaUsageTotal.ToString("F2") + "*includes:\n" + manaUsageRotation.ToString("F2") + " from shot rotation\n" + manaUsageKillCommand.ToString("F2") + " from Kill Command"); dictValues.Add("Mana Regen Per Second", manaRegenTotal.ToString("F2") + "*includes:\n" + (manaRegenGearBuffs + manaRegenConstantViper + manaRegenViper + manaRegenRoarOfRecovery + manaRegenRapidRecuperation + manaRegenChimeraViperProc + manaRegenInvigoration + manaRegenHuntingParty + manaRegenTargetDebuffs + manaRegenFromPots > 0f ? (manaRegenGearBuffs != 0 ? manaRegenGearBuffs.ToString("F2") + " from Gear and Buffs\n" : "") + (manaRegenConstantViper != 0 ? manaRegenConstantViper.ToString("F2") + " from Constant Aspect of the Viper\n" : "") + (manaRegenViper != 0 ? manaRegenViper.ToString("F2") + " from Aspect of the Viper\n" : "") + (manaRegenRoarOfRecovery != 0 ? manaRegenRoarOfRecovery.ToString("F2") + " from Roar of Recovery\n" : "") + (manaRegenRapidRecuperation != 0 ? manaRegenRapidRecuperation.ToString("F2") + " from Rapid Recuperation\n" : "") + (manaRegenChimeraViperProc != 0 ? manaRegenChimeraViperProc.ToString("F2") + " from Chimera Viper String Proc\n" : "") + (manaRegenInvigoration != 0 ? manaRegenInvigoration.ToString("F2") + " from Invigoration\n" : "") + (manaRegenHuntingParty != 0 ? manaRegenHuntingParty.ToString("F2") + " from Hunting Party\n" : "") + (manaRegenTargetDebuffs != 0 ? manaRegenTargetDebuffs.ToString("F2") + " from Target Debuffs\n" : "") + (manaRegenFromPots != 0 ? manaRegenFromPots.ToString("F2") + " from Pots" : "") : "Nothing to add") ); dictValues.Add("Normal Change", manaChangeDuringNormal.ToString("F2")); dictValues.Add("Change during Viper", manaChangeDuringViper.ToString("F2")); dictValues.Add("Time to OOM", manaTimeToOOM.ToString("F2")); dictValues.Add("Time to Full", manaTimeToFull.ToString("F2")); dictValues.Add("Viper Damage Penalty", aspectViperPenalty.ToString("P2")); dictValues.Add("Viper Uptime", aspectUptimeViper.ToString("P2")); dictValues.Add("No Mana Damage Penalty", NoManaDPSDownTimePerc.ToString("P2")); // Hunter DPS dictValues.Add("Autoshot DPS", AutoshotDPS.ToString("F2")); dictValues.Add("Priority Rotation DPS", CustomDPS.ToString("F2")); dictValues.Add("Wild Quiver DPS", WildQuiverDPS.ToString("F2")); dictValues.Add("Kill Shot low HP gain", killShotSub20FinalGain.ToString("F2") + "*" + "Kill Shot freq: " + killShot.Freq.ToString("F2") + " -> " + killShot.start_freq.ToString("F2") + "\n" + "Steady Shot freq: " + steadyShot.Freq.ToString("F2") + " -> " + killShotSub20NewSteadyFreq.ToString("F2") + "\n" + "Kill Shot DPS: " + killShot.DPS.ToString("F2") + " -> " + killShotSub20NewDPS.ToString("F2") + "\n" + "Steady Shot DPS: " + steadyShot.DPS.ToString("F2") + " -> " + killShotSub20NewSteadyDPS.ToString("F2") + "\n" + "DPS Gain when switched: " + killShotSub20Gain.ToString("F2") + "\n" + "Time spent sub-20%: " + killShotSub20TimeSpent.ToString("P2")); dictValues.Add("Aspect Loss", aspectBeastLostDPS.ToString("F2") + "*" + "Hawk Uptime: " + aspectUptimeHawk.ToString("P2") + "\n" + "Viper Uptime: " + aspectUptimeViper.ToString("P2") + "\n" + "Beast Uptime: " + aspectUptimeBeast.ToString("P2")); dictValues.Add("Piercing Shots DPS", PiercingShotsDPS.ToString("F2") + "*" + "Steady Shot: " + PiercingShotsDPSSteadyShot.ToString("F2") + "\n" + "Aimed Shot: " + PiercingShotsDPSAimedShot.ToString("F2") + "\n" + "Chimera Shot: " + PiercingShotsDPSChimeraShot.ToString("F2") + "\n"); dictValues.Add("Special DMG Procs DPS", SpecProcDPS.ToString("F2")); // Combined DPS string zod = (BonusAttackProcsDPS != 0 ? string.Format("*Includes:\r\nZod's Proc: {0:0.0}", BonusAttackProcsDPS) : ""); dictValues.Add("Hunter DPS", HunterDpsPoints.ToString("F2") + zod); dictValues.Add("Pet DPS", PetDpsPoints.ToString("F2")); dictValues.Add("Total DPS", OverallPoints.ToString("F2")); return(dictValues); }