private void comboBoxBoss_SelectedIndexChanged(object sender, EventArgs e) { if (!_loadingCalculationOptions) { _loadingCalculationOptions = true; CalculationsEnhance calcs = new CalculationsEnhance(); BossHandler boss = bosslist.GetBossFromBetterName(comboBoxBoss.Text); _calcOpts.SetBoss(boss); CB_TargLvl.Text = _calcOpts.TargetLevel.ToString(); CB_TargArmor.Text = _calcOpts.TargetArmor.ToString(); cmbLength.Value = (int)_calcOpts.FightLength; CK_InBack.Checked = _calcOpts.InBack; CB_InBackPerc.Value = _calcOpts.InBackPerc; CK_MultiTargs.Checked = _calcOpts.MultipleTargets; CB_MultiTargsMax.Enabled = CK_MultiTargs.Checked; CB_MultiTargsPerc.Enabled = CK_MultiTargs.Checked; CB_MultiTargsMax.Value = _calcOpts.AdditionalTargets; CB_MultiTargsPerc.Value = (int)(_calcOpts.AdditionalTargetPercent * 100 + .001f); Stats stats = calcs.GetCharacterStats(Character, null); TB_BossInfo.Text = boss.GenInfoString( 0, // The Boss' Damage bonuses against you (meaning YOU are debuffed) StatConversion.GetArmorDamageReduction(_calcOpts.TargetLevel, stats.Armor, 0, 0, 0), // Your Armor's resulting Damage Reduction StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Miss, _calcOpts.TargetLevel), // Your chance for Boss to Miss you StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Dodge, _calcOpts.TargetLevel), // Your chance Dodge StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Parry, _calcOpts.TargetLevel), // Your chance Parry 0, // Your Chance to Block 0); // How much you Block when you Block // Save the new names _loadingCalculationOptions = false; Character.OnCalculationsInvalidated(); } }
public EnhSim(Character character, CalculationOptionsEnhance calcOpts, BossOptions bossOpts) { _character = character; _calcOpts = calcOpts; _bossOpts = bossOpts; CalculationsEnhance ce = new CalculationsEnhance(); CharacterCalculationsEnhance calcs = ce.GetCharacterCalculations(character, null) as CharacterCalculationsEnhance; Stats stats = calcs.EnhSimStats; CombatStats cs = new CombatStats(character, stats, _calcOpts, bossOpts); getSpecialsNames(character, stats); StringBuilder sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine("##########################################"); sb.AppendLine("### Rawr.Enhance Data Export to EnhSim ###"); sb.AppendLine("##########################################"); sb.AppendLine(); sb.AppendLine("config_source rawr"); sb.AppendLine(); float MHSpeed = character.MainHand == null ? 3.0f : character.MainHand.Item.Speed; float wdpsMH = character.MainHand == null ? 46.3f : character.MainHand.Item.DPS; float OHSpeed = character.OffHand == null ? 3.0f : character.OffHand.Item.Speed; float wdpsOH = character.OffHand == null ? 46.3f : character.OffHand.Item.DPS; sb.AppendLine("race " + character.Race.ToString().ToLower()); sb.AppendLine("mh_speed " + MHSpeed.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("oh_speed " + OHSpeed.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("mh_dps " + wdpsMH.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("oh_dps " + wdpsOH.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("str " + stats.Strength.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("agi " + stats.Agility.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("int " + stats.Intellect.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("spi " + stats.Spirit.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("mastery_rating " + stats.MasteryRating.ToString("F0", CultureInfo.InvariantCulture)); float chanceCrit = cs.ExportMeleeCritMH * 100f; sb.AppendLine("mh_crit " + chanceCrit.ToString("F2", CultureInfo.InvariantCulture)); chanceCrit = cs.ExportMeleeCritOH * 100f; sb.AppendLine("oh_crit " + chanceCrit.ToString("F2", CultureInfo.InvariantCulture)); float hitBonus = StatConversion.GetHitFromRating(stats.HitRating) * 100f + 6f; if (character.Race == CharacterRace.Draenei) { hitBonus += 1f; } sb.AppendLine("mh_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("oh_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("mh_expertise_rating " + stats.ExpertiseRating.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("oh_expertise_rating " + stats.ExpertiseRating.ToString("F0", CultureInfo.InvariantCulture)); float unleashedRage = 0f; switch (character.ShamanTalents.UnleashedRage) { case 1: unleashedRage = .05f; break; case 2: unleashedRage = .10f; break; } sb.AppendLine("ap " + (stats.AttackPower * (1f + unleashedRage)).ToString("F0", CultureInfo.InvariantCulture)); float hasteBonus = StatConversion.GetHasteFromRating(stats.HasteRating, CharacterClass.Shaman) * 100f; sb.AppendLine("melee_haste " + hasteBonus.ToString("F2", CultureInfo.InvariantCulture)); float MQUnleashedRageSpellpower = stats.AttackPower * unleashedRage * 0.50f; sb.AppendLine("spellpower " + (stats.SpellPower + MQUnleashedRageSpellpower).ToString("F0", CultureInfo.InvariantCulture)); float chanceSpellCrit = cs.DisplaySpellCrit * 100f; sb.AppendLine("spell_crit " + chanceSpellCrit.ToString("F2", CultureInfo.InvariantCulture)); float elemPrec = character.ShamanTalents.ElementalPrecision > 0 ? (stats.Spirit - BaseStats.GetBaseStats(character).Spirit) * (character.ShamanTalents.ElementalPrecision / 3f) : 0f; hitBonus = StatConversion.GetSpellHitFromRating(stats.HitRating + elemPrec) * 100f; if (character.Race == CharacterRace.Draenei) { hitBonus += 1f; } sb.AppendLine("spell_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); hasteBonus = StatConversion.GetSpellHasteFromRating(stats.HasteRating) * 100f; sb.AppendLine("spell_haste " + hasteBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("max_mana " + stats.Mana.ToString()); sb.AppendLine("mp5 " + stats.Mp5.ToString()); sb.AppendLine(); sb.AppendLine("mh_imbue " + _calcOpts.MainhandImbue.ToString().ToLower()); sb.AppendLine("oh_imbue " + _calcOpts.OffhandImbue.ToString().ToLower()); sb.AppendLine(); sb.AppendLine("mh_enchant " + _mhEnchant); sb.AppendLine("oh_enchant " + _ohEnchant); String weaponType = "-"; if (character.MainHand != null) { if (character.MainHand.Type == ItemType.OneHandAxe || character.MainHand.Type == ItemType.TwoHandAxe) { weaponType = "axe"; } if (character.MainHand.Type == ItemType.FistWeapon) { weaponType = "fist"; } if (character.MainHand.Type == ItemType.OneHandMace || character.MainHand.Type == ItemType.TwoHandMace) { weaponType = "mace"; } } sb.AppendLine("mh_weapon " + weaponType); weaponType = "-"; if (character.OffHand != null) { if (character.OffHand.Type == ItemType.OneHandAxe) { weaponType = "axe"; } if (character.OffHand.Type == ItemType.FistWeapon) { weaponType = "fist"; } if (character.OffHand.Type == ItemType.OneHandMace) { weaponType = "mace"; } } sb.AppendLine("oh_weapon " + weaponType); sb.AppendLine(); sb.AppendLine("trinket1 " + _trinket1name); sb.AppendLine("trinket2 " + _trinket2name); sb.AppendLine(); sb.AppendLine(getSetBonuses(character)); sb.AppendLine("metagem " + _metagem); sb.AppendLine(); string glovesEnchant = character.HandsTinkering == null ? string.Empty : character.HandsTinkering.Name; if (glovesEnchant == "Synapse Springs") { sb.AppendLine("gloves_enchant synapse_springs"); } else if (glovesEnchant == "Tazik Shocker") { sb.AppendLine("gloves_enchant tazik_shocker"); } else { sb.AppendLine("gloves_enchant -"); } string cloakEnchant = character.BackEnchant == null ? string.Empty : character.BackEnchant.Name; if (cloakEnchant == "Lightweave Embroidery") { sb.AppendLine("cloak_enchant lightweave_embroidery"); } else if (cloakEnchant == "Swordguard Embroidery") { sb.AppendLine("cloak_enchant swordguard_embroidery"); } else { sb.AppendLine("cloak_enchant -"); } string weaponSetProc = "-"; if (character.MainHand != null && character.OffHand != null) { if (character.MainHand.Id == 63537 && character.OffHand.Id == 63538) { weaponSetProc = "agony_and_torment"; } } sb.AppendLine("weapon_set_proc " + weaponSetProc); /*addGlyphs(character, sb); * sb.AppendLine(); * sb.AppendLine("#############"); * sb.AppendLine("## Talents ##"); * sb.AppendLine("#############"); * sb.AppendLine("primary_talent enhancement"); * sb.AppendLine(); * sb.AppendLine("elemental_weapons " + character.ShamanTalents.ElementalWeapons + "/2"); * sb.AppendLine("focused_strikes " + character.ShamanTalents.FocusedStrikes + "/3"); * sb.AppendLine("improved_shields " + character.ShamanTalents.ImprovedShields + "/3"); * sb.AppendLine("elemental_devastation " + character.ShamanTalents.ElementalDevastation + "/3"); * sb.AppendLine("flurry " + character.ShamanTalents.Flurry + "/3"); * sb.AppendLine("static_shock " + character.ShamanTalents.StaticShock + "/3"); * sb.AppendLine("improved_fire_nova " + character.ShamanTalents.ImprovedFireNova + "/2"); * sb.AppendLine("searing_flames " + character.ShamanTalents.SearingFlames + "/3"); * sb.AppendLine("frozen_power " + character.ShamanTalents.FrozenPower + "/2"); * sb.AppendLine("shamanistic_rage " + character.ShamanTalents.ShamanisticRage + "/1"); * sb.AppendLine("unleashed_rage " + character.ShamanTalents.UnleashedRage + "/2"); * sb.AppendLine("maelstrom_weapon " + character.ShamanTalents.MaelstromWeapon + "/3"); * sb.AppendLine("improved_lava_lash " + character.ShamanTalents.ImprovedLavaLash + "/2"); * sb.AppendLine(); * //elemental talents in EnhSim have not been updated, so keep exporting old talent choices where appropriate. * sb.AppendLine("convection " + character.ShamanTalents.Convection + "/2"); * sb.AppendLine("concussion " + character.ShamanTalents.Concussion + "/3"); * sb.AppendLine("call_of_flame " + character.ShamanTalents.CallOfFlame + "/2"); * sb.AppendLine("reverberation " + character.ShamanTalents.Reverberation + "/2"); * sb.AppendLine("elemental_precision " + character.ShamanTalents.ElementalPrecision + "/3"); * sb.AppendLine("elemental_focus " + character.ShamanTalents.ElementalFocus + "/1"); * sb.AppendLine("elemental_oath " + character.ShamanTalents.ElementalOath + "/2"); * sb.AppendLine("lava_flows " + character.ShamanTalents.LavaFlows + "/3"); * sb.AppendLine("storm_earth_and_fire " + "0" + "/3"); * sb.AppendLine("elemental_mastery " + character.ShamanTalents.ElementalMastery + "/1"); * sb.AppendLine("feedback " + character.ShamanTalents.Feedback + "/3"); * sb.AppendLine("lava_surge " + character.ShamanTalents.LavaSurge + "/2"); * sb.AppendLine(); * * addBuffs(character, sb); * // add extras * sb.AppendLine(); * sb.AppendLine("combat_length " + (_bossOpts.BerserkTimer/60f).ToString("F2", CultureInfo.InvariantCulture));*/ _configText = sb.ToString(); }
public EnhSim(Character character, CalculationOptionsEnhance calcOpts) { _character = character; _calcOpts = calcOpts; CalculationsEnhance ce = new CalculationsEnhance(); CharacterCalculationsEnhance calcs = ce.GetCharacterCalculations(character, null) as CharacterCalculationsEnhance; Stats stats = calcs.EnhSimStats; if (_character.ActiveBuffsContains("Master of Anatomy")) { stats.CritRating += 40; } CombatStats cs = new CombatStats(character, stats, _calcOpts); getSpecialsNames(character, stats); StringBuilder sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine("##########################################"); sb.AppendLine("### Rawr.Enhance Data Export to EnhSim ###"); sb.AppendLine("##########################################"); sb.AppendLine(); sb.AppendLine("config_source rawr"); sb.AppendLine(); float MHSpeed = character.MainHand == null ? 3.0f : character.MainHand.Item.Speed; float wdpsMH = character.MainHand == null ? 46.3f : character.MainHand.Item.DPS; float OHSpeed = character.OffHand == null ? 3.0f : character.OffHand.Item.Speed; float wdpsOH = character.OffHand == null ? 46.3f : character.OffHand.Item.DPS; sb.AppendLine("race " + character.Race.ToString().ToLower()); sb.AppendLine("mh_speed " + MHSpeed.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("oh_speed " + OHSpeed.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("mh_dps " + wdpsMH.ToString("F1", CultureInfo.InvariantCulture)); sb.AppendLine("oh_dps " + wdpsOH.ToString("F1", CultureInfo.InvariantCulture)); float chanceCrit = cs.ExportMeleeCritMH * 100f; sb.AppendLine("mh_crit " + chanceCrit.ToString("F2", CultureInfo.InvariantCulture)); chanceCrit = cs.ExportMeleeCritOH * 100f; sb.AppendLine("oh_crit " + chanceCrit.ToString("F2", CultureInfo.InvariantCulture)); float hitBonus = StatConversion.GetHitFromRating(stats.HitRating) * 100f; sb.AppendLine("mh_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("oh_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("mh_expertise_rating " + stats.ExpertiseRating.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("oh_expertise_rating " + stats.ExpertiseRating.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("ap " + stats.AttackPower.ToString("F0", CultureInfo.InvariantCulture)); float hasteBonus = StatConversion.GetHasteFromRating(stats.HasteRating, CharacterClass.Shaman) * 100f; sb.AppendLine("melee_haste " + hasteBonus.ToString("F2", CultureInfo.InvariantCulture)); float armourPenBonus = StatConversion.GetArmorPenetrationFromRating(stats.ArmorPenetrationRating) * 100f; sb.AppendLine("armor_penetration " + armourPenBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("str " + stats.Strength.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("agi " + stats.Agility.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("int " + stats.Intellect.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("spi " + stats.Spirit.ToString("F0", CultureInfo.InvariantCulture)); sb.AppendLine("spellpower " + stats.SpellPower.ToString("F0", CultureInfo.InvariantCulture)); float chanceSpellCrit = cs.DisplaySpellCrit * 100f; sb.AppendLine("spell_crit " + chanceSpellCrit.ToString("F2", CultureInfo.InvariantCulture)); hitBonus = StatConversion.GetSpellHitFromRating(stats.HitRating) * 100f; sb.AppendLine("spell_hit " + hitBonus.ToString("F2", CultureInfo.InvariantCulture)); hasteBonus = StatConversion.GetSpellHasteFromRating(stats.HasteRating) * 100f; sb.AppendLine("spell_haste " + hasteBonus.ToString("F2", CultureInfo.InvariantCulture)); sb.AppendLine("max_mana " + stats.Mana.ToString()); sb.AppendLine("mp5 " + stats.Mp5.ToString()); sb.AppendLine(); sb.AppendLine("mh_imbue " + _calcOpts.MainhandImbue.ToString().ToLower()); sb.AppendLine("oh_imbue " + _calcOpts.OffhandImbue.ToString().ToLower()); sb.AppendLine(); sb.AppendLine("mh_enchant " + _mhEnchant); String weaponType = "-"; if (character.MainHand != null) { if (character.MainHand.Type == ItemType.OneHandAxe || character.MainHand.Type == ItemType.TwoHandAxe) { weaponType = "axe"; } if (character.MainHand.Type == ItemType.FistWeapon) { weaponType = "fist"; } } sb.AppendLine("mh_weapon " + weaponType); sb.AppendLine("oh_enchant " + _ohEnchant); weaponType = "-"; if (character.OffHand != null) { if (character.OffHand.Type == ItemType.OneHandAxe) { weaponType = "axe"; } if (character.OffHand.Type == ItemType.FistWeapon) { weaponType = "fist"; } } sb.AppendLine("oh_weapon " + weaponType); sb.AppendLine(); sb.AppendLine("trinket1 " + _trinket1name); sb.AppendLine("trinket2 " + _trinket2name); sb.AppendLine(); sb.AppendLine("totem " + _totemname); sb.AppendLine(getSetBonuses(character)); sb.AppendLine("metagem " + _metagem); sb.AppendLine(); string handEnchant = character.HandsEnchant == null ? string.Empty : character.HandsEnchant.Name; if (handEnchant == "Hyperspeed Accelerators") { sb.AppendLine("gloves_enchant hyperspeed_accelerators"); } else if (handEnchant == "Hand-Mounted Pyro Rocket") { sb.AppendLine("gloves_enchant hand_mounted_pyro_rocket"); } else { sb.AppendLine("gloves_enchant -"); } string backEnchant = character.BackEnchant == null ? string.Empty : character.BackEnchant.Name; if (backEnchant == "Lightweave Embroidery") { sb.AppendLine("cloak_enchant lightweave_embroidery"); } else if (backEnchant == "Swordguard Embroidery") { sb.AppendLine("cloak_enchant swordguard_embroidery"); } else { sb.AppendLine("cloak_enchant -"); } if (character.Finger1.Id == 50401 || character.Finger2.Id == 50401 || character.Finger1.Id == 50402 || character.Finger2.Id == 50402) { sb.AppendLine("ring_proc ashen_verdict"); } else { sb.AppendLine("ring_proc -"); } addGlyphs(character, sb); sb.AppendLine(); sb.AppendLine("glyph_minor1 -"); sb.AppendLine("glyph_minor2 -"); sb.AppendLine("glyph_minor3 -"); sb.AppendLine(); sb.AppendLine("necrotic_touch " + (character.MainHand.Id == 50035 ? "1" : "0")); sb.AppendLine("necrotic_touch_heroic " + (character.MainHand.Id == 50692 ? "1" : "0")); sb.AppendLine("mixology " + (character.PrimaryProfession == Profession.Alchemy || character.SecondaryProfession == Profession.Alchemy ? "1" : "0")); // addPriorities(_calcOpts, sb); addManaConfigs(character, sb); sb.AppendLine(); sb.AppendLine("#############"); sb.AppendLine("## Talents ##"); sb.AppendLine("#############"); sb.AppendLine(); sb.AppendLine("ancestral_knowledge " + character.ShamanTalents.AncestralKnowledge + "/5"); sb.AppendLine("improved_shields " + character.ShamanTalents.ImprovedShields + "/3"); sb.AppendLine("mental_dexterity " + character.ShamanTalents.MentalDexterity + "/3"); sb.AppendLine("shamanistic_focus " + character.ShamanTalents.ShamanisticFocus + "/1"); sb.AppendLine("flurry " + character.ShamanTalents.Flurry + "/5"); sb.AppendLine("elemental_weapons " + character.ShamanTalents.ElementalWeapons + "/3"); sb.AppendLine("unleashed_rage " + character.ShamanTalents.UnleashedRage + "/3"); sb.AppendLine("weapon_mastery " + character.ShamanTalents.WeaponMastery + "/3"); sb.AppendLine("dual_wield_specialization " + character.ShamanTalents.DualWieldSpecialization + "/3"); sb.AppendLine("mental_quickness " + character.ShamanTalents.MentalQuickness + "/3"); sb.AppendLine("improved_stormstrike " + character.ShamanTalents.ImprovedStormstrike + "/2"); sb.AppendLine("static_shock " + character.ShamanTalents.StaticShock + "/3"); sb.AppendLine("maelstrom_weapon " + character.ShamanTalents.MaelstromWeapon + "/5"); sb.AppendLine("convection " + character.ShamanTalents.Convection + "/5"); sb.AppendLine("concussion " + character.ShamanTalents.Concussion + "/5"); sb.AppendLine("call_of_flame " + character.ShamanTalents.CallOfFlame + "/3"); sb.AppendLine("elemental_devastation " + character.ShamanTalents.ElementalDevastation + "/3"); sb.AppendLine("reverberation " + character.ShamanTalents.Reverberation + "/5"); sb.AppendLine("elemental_focus " + character.ShamanTalents.ElementalFocus + "/1"); sb.AppendLine("elemental_fury " + character.ShamanTalents.ElementalFury + "/5"); sb.AppendLine("improved_fire_nova " + character.ShamanTalents.ImprovedFireNova + "/2"); sb.AppendLine("call_of_thunder " + character.ShamanTalents.CallOfThunder + "/1"); sb.AppendLine("unrelenting_storm " + character.ShamanTalents.UnrelentingStorm + "/3"); sb.AppendLine("elemental_precision " + character.ShamanTalents.ElementalPrecision + "/3"); sb.AppendLine("lightning_mastery " + character.ShamanTalents.LightningMastery + "/5"); sb.AppendLine("elemental_oath " + character.ShamanTalents.ElementalOath + "/2"); sb.AppendLine("lightning_overload " + character.ShamanTalents.LightningOverload + "/5"); sb.AppendLine("lava_flows " + character.ShamanTalents.LavaFlows + "/3"); sb.AppendLine("storm_earth_and_fire " + character.ShamanTalents.StormEarthAndFire + "/3"); sb.AppendLine("shamanism " + character.ShamanTalents.Shamanism + "/5"); sb.AppendLine(); addBuffs(character, sb); // add extras sb.AppendLine(); sb.AppendLine("combat_length " + _calcOpts.FightLength.ToString("F2", CultureInfo.InvariantCulture)); _configText = sb.ToString(); }