public CombatStats(Character character, Stats stats, CalculationOptionsEnhance calcOpts, BossOptions bossOpts) { _stats = stats; _character = character; _calcOpts = calcOpts; _bossOpts = bossOpts; _talents = _character.ShamanTalents; fightLength = _bossOpts.BerserkTimer; levelDifference = _bossOpts.Level - _character.Level; if (levelDifference > 3) { levelDifference = 3; } else if (levelDifference < 0) { levelDifference = 0; } whiteCritDepression = StatConversion.NPC_LEVEL_CRIT_MOD[levelDifference]; // 0.03f + 0.006f * levelDifference; yellowCritDepression = StatConversion.NPC_LEVEL_CRIT_MOD[levelDifference]; // 0.006f * levelDifference; UpdateCalcs(true); SetManaRegen(); _rotation = new Priorities(this, _calcOpts, _bossOpts, _character, _stats, _talents); _rotation.CalculateAbilities(); UpdateCalcs(false); // second pass to revise calcs based on new ability cooldowns }
public void LoadCalculationOptions() { _loadingCalculationOptions = true; if (Character.CalculationOptions == null) Character.CalculationOptions = new CalculationOptionsEnhance(); calcOpts = Character.CalculationOptions as CalculationOptionsEnhance; // Model Specific Code // _loadingCalculationOptions = false; }
protected override void LoadCalculationOptions() { _loadingCalculationOptions = true; if (Character.CalculationOptions == null) { Character.CalculationOptions = new CalculationOptionsEnhance(); } _calcOpts = Character.CalculationOptions as CalculationOptionsEnhance; CB_TargLvl.Text = _calcOpts.TargetLevel.ToString(); CB_TargArmor.Text = _calcOpts.TargetArmor.ToString(); comboBoxBoss.Text = _calcOpts.BossName; CK_InBack.Checked = _calcOpts.InBack; CB_InBackPerc.Value = _calcOpts.InBackPerc; trackBarAverageLag.Value = _calcOpts.AverageLag; trackBarReactionTime.Value = _calcOpts.ReactionTime; trackbarSRMana.Value = (int)_calcOpts.MinManaSR; trackbarSRMana.Enabled = _calcOpts.UseMana; labelAverageLag.Text = trackBarAverageLag.Value.ToString(); labelReactionTime.Text = trackBarReactionTime.Value.ToString(); labelSRMana.Text = trackbarSRMana.Value.ToString(); cmbLength.Value = (decimal)_calcOpts.FightLength; comboBoxMainhandImbue.SelectedItem = _calcOpts.MainhandImbue; comboBoxOffhandImbue.SelectedItem = _calcOpts.OffhandImbue; comboBoxCalculationToGraph.SelectedItem = _calcOpts.CalculationToGraph; chbMana.Checked = _calcOpts.UseMana; chbBaseStatOption.Checked = _calcOpts.BaseStatOption; chkStatsStrength.Checked = _calcOpts.StatsList[0]; chkStatsAgility.Checked = _calcOpts.StatsList[1]; chkStatsAP.Checked = _calcOpts.StatsList[2]; chkStatsCrit.Checked = _calcOpts.StatsList[3]; chkStatsHit.Checked = _calcOpts.StatsList[4]; chkStatsExp.Checked = _calcOpts.StatsList[5]; chkStatsHaste.Checked = _calcOpts.StatsList[6]; chkStatsArP.Checked = _calcOpts.StatsList[7]; chkStatsSP.Checked = _calcOpts.StatsList[8]; try { chkStatsInt.Checked = _calcOpts.StatsList[9]; } catch (Exception) { chkStatsInt.Checked = true; } LoadPriorities(); labelAverageLag.Text = trackBarAverageLag.Value.ToString(); tbModuleNotes.Text = "The EnhSim export option exists for users that wish to have very detailed analysis of their stats. " + "For most users the standard model should be quite sufficient.\r\n\r\n" + "If you wish to use the EnhSim Simulator you will need to get the latest version from http://enhsim.codeplex.com\r\n\r\n" + "Once you have installed the simulator the easiest way to run it is to run EnhSimGUI and use the Clipboard copy functions.\r\n\r\n" + "Press the button above to copy your current Rawr.Enhance data to the clipboard then in EnhSimGUI click on the 'Import from Clipboard' " + "button to replace the values in the EnhSimGUI with your Rawr values. Now all you need to do is click Simulate to get your results.\r\n\r\n" + "Refer to the EnhSim website for more detailed instructions on how to use the sim and its various options"; label10.Text = "Please note new smoothing functions mean for time being that the order of priorities have only minimal effect on the dps results.\r\n" + "Also note that currently priorites are not included in EnhSim export.\r\n\r\n" + "The Fire Elemental support added for patch 3.3 is currently quite rough calculations in particular more testing is needed " + "to establish the Fire Elementals crit rates."; _loadingCalculationOptions = false; }
public Priorities(CombatStats cs, CalculationOptionsEnhance calcOpts, Character character, Stats stats, ShamanTalents talents) { _cs = cs; _calcOpts = calcOpts; _character = character; _stats = stats; _talents = talents; fightLength = _calcOpts.FightLength * 60f; _abilities = SetupAbilities(); }
private void btnReset_Click(object sender, EventArgs e) { _loadingCalculationOptions = true; btnUp.Enabled = false; btnDown.Enabled = false; _calcOpts.PriorityList = CalculationOptionsEnhance.SetPriorityDefaults(); LoadPriorities(); _loadingCalculationOptions = false; Character.OnCalculationsInvalidated(); }
public void LoadCalculationOptions() { _loadingCalculationOptions = true; if (Character.CalculationOptions == null) Character.CalculationOptions = new CalculationOptionsEnhance(); calcOpts = Character.CalculationOptions as CalculationOptionsEnhance; bossOpts = Character.BossOptions; // Model Specific Code // _loadingCalculationOptions = false; }
public StatsSpecialEffects(Character character, Stats stats, CalculationOptionsEnhance calcOpts, BossOptions bossOpts) { _character = character; _stats = stats; _cs = new CombatStats(_character, _stats, calcOpts, bossOpts); if (character.MainHandEnchant != null) { Stats.SpecialEffectEnumerator mhEffects = character.MainHandEnchant.Stats.SpecialEffects(); if (mhEffects.MoveNext()) { mainHandEnchant = mhEffects.Current; } } if (character.OffHandEnchant != null) { Stats.SpecialEffectEnumerator ohEffects = character.OffHandEnchant.Stats.SpecialEffects(); if (ohEffects.MoveNext()) { offHandEnchant = ohEffects.Current; } } }
public StatsSpecialEffects(Character character, Stats stats, CalculationOptionsEnhance calcOpts) { _character = character; _stats = stats; _cs = new CombatStats(_character, _stats, calcOpts); if (character.MainHandEnchant != null) { Stats.SpecialEffectEnumerator mhEffects = character.MainHandEnchant.Stats.SpecialEffects(); if (mhEffects.MoveNext()) { mainHandEnchant = mhEffects.Current; } } if (_character.ShamanTalents.DualWield == 1 && character.OffHandEnchant != null) { Stats.SpecialEffectEnumerator ohEffects = character.OffHandEnchant.Stats.SpecialEffects(); if (ohEffects.MoveNext()) { offHandEnchant = ohEffects.Current; } } }
public CombatStats(Character character, Stats stats, CalculationOptionsEnhance calcOpts) { _stats = stats; _character = character; _calcOpts = calcOpts; _talents = _character.ShamanTalents; fightLength = _calcOpts.FightLength * 60f; levelDifference = _calcOpts.TargetLevel - _character.Level; if (levelDifference > 3) { levelDifference = 3; } if (levelDifference < 0) { levelDifference = 0; } whiteCritDepression = 0.03f + 0.006f * levelDifference; yellowCritDepression = 0.006f * levelDifference; SetManaRegen(); UpdateCalcs(true); _rotation = new Priorities(this, _calcOpts, _character, _stats, _talents); _rotation.CalculateAbilities(); UpdateCalcs(false); // second pass to revise calcs based on new ability cooldowns }
public CombatStats(Character character, Stats stats, CalculationOptionsEnhance calcOpts, BossOptions bossOpts) { _stats = stats; _character = character; _calcOpts = calcOpts; _bossOpts = bossOpts; _talents = _character.ShamanTalents; fightLength = _bossOpts.BerserkTimer; levelDifference = _bossOpts.Level - _character.Level; if (levelDifference > 3) levelDifference = 3; else if (levelDifference < 0) levelDifference = 0; whiteCritDepression = StatConversion.NPC_LEVEL_CRIT_MOD[levelDifference];// 0.03f + 0.006f * levelDifference; yellowCritDepression = StatConversion.NPC_LEVEL_CRIT_MOD[levelDifference];// 0.006f * levelDifference; UpdateCalcs(true); SetManaRegen(); _rotation = new Priorities(this, _calcOpts, _bossOpts, _character, _stats, _talents); _rotation.CalculateAbilities(); UpdateCalcs(false); // second pass to revise calcs based on new ability cooldowns }
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 override bool getBaseStatOption(Character character) { CalculationOptionsEnhance calcOpts = character.CalculationOptions as CalculationOptionsEnhance; return(calcOpts.BaseStatOption); }
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(); }