public override Stats GetCharacterStats(Character character, Item additionalItem) { CalculationOptionsHealPriest calcOpts = character.CalculationOptions as CalculationOptionsHealPriest; StatsPriest statsTotal = new StatsPriest() { SpellHaste = PriestInformation.GetDarkness(character.PriestTalents.Darkness), InnerFire = true, BonusIntellectMultiplier = 0.05f, // Cloth bonus. PriestSpec = PriestSpec.GetPriestSpec(character.PriestTalents), }; if (statsTotal.PriestSpec == ePriestSpec.Spec_Disc) { statsTotal.SpellCombatManaRegeneration = 0.5f; statsTotal.BonusIntellectMultiplier = 0.15f; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_Holy) { statsTotal.SpellCombatManaRegeneration = 0.5f + PriestInformation.GetHolyConcentration(character.PriestTalents.HolyConcentration); statsTotal.BonusHealingDoneMultiplier = 0.15f; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_ERROR) { throw new Exception("Unpossible Talent Spec!"); } statsTotal.Accumulate(BaseStats.GetBaseStats(character)); statsTotal.Accumulate(GetItemStats(character, additionalItem)); statsTotal.Accumulate(GetBuffsStats(character, calcOpts)); statsTotal.Stamina = (float)Math.Floor((statsTotal.Stamina) * (1 + statsTotal.BonusStaminaMultiplier)); statsTotal.Intellect = (float)Math.Floor((statsTotal.Intellect) * (1 + statsTotal.BonusIntellectMultiplier)); statsTotal.Spirit = (float)Math.Floor((statsTotal.Spirit) * (1 + statsTotal.BonusSpiritMultiplier)); statsTotal.SpellPower += (statsTotal.InnerFire ? PriestInformation.GetInnerFireSpellPowerBonus(character) : 0) + (statsTotal.Intellect - 10); statsTotal.SpellPower *= (1f + statsTotal.BonusSpellPowerMultiplier); statsTotal.Mana += StatConversion.GetManaFromIntellect(statsTotal.Intellect); statsTotal.Mana *= (1f + statsTotal.BonusManaMultiplier); statsTotal.Health += StatConversion.GetHealthFromStamina(statsTotal.Stamina); statsTotal.Health = (float)Math.Floor(statsTotal.Health * (1f + statsTotal.BonusHealthMultiplier)); statsTotal.SpellCrit += StatConversion.GetSpellCritFromIntellect(statsTotal.Intellect) + StatConversion.GetSpellCritFromRating(statsTotal.CritRating); statsTotal.SpellHaste = (1f + statsTotal.SpellHaste) * (1f + StatConversion.GetSpellHasteFromRating(statsTotal.HasteRating)) - 1f; statsTotal.Armor *= (1 + (statsTotal.InnerFire ? PriestInformation.GetInnerFireArmorBonus(character) : 0)); if (statsTotal.PriestSpec == ePriestSpec.Spec_Disc) { statsTotal.ShieldDiscipline = (PriestInformation.DisciplineMasteryBase + StatConversion.GetMasteryFromRating(statsTotal.MasteryRating)) * PriestInformation.DisciplineMasteryEffect; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_Holy) { statsTotal.EchoofLight = (PriestInformation.HolyMasteryBase + StatConversion.GetMasteryFromRating(statsTotal.MasteryRating)) * PriestInformation.HolyMasteryEffect; } return(statsTotal); }
// This was called 'Horrible' by Jothay, but he claimed it would work. public new StatsPriest Clone() { StatsPriest clone = new StatsPriest(); clone.Accumulate(this); return(clone); }
// // PWS, Penance_BT, PROH_BT, PWS, PROH_BT, PWS, PROH_BT, GH, GH public override void Solve() { float graceBonus = PriestInformation.GetGrace(character.PriestTalents.Grace) * 3; float borrowedTime = PriestInformation.GetBorrowedTime(character.PriestTalents.BorrowedTime); float renewedHope = PriestInformation.GetRenewedHope(character.PriestTalents.RenewedHope); StatsPriest statsGR = new StatsPriest() { BonusHealingDoneMultiplier = graceBonus }; statsGR.Accumulate(stats); StatsPriest statsBTGR = new StatsPriest() { SpellHaste = borrowedTime, BonusHealingDoneMultiplier = graceBonus }; statsBTGR.Accumulate(stats); StatsPriest statsRHGR = new StatsPriest() { SpellCrit = renewedHope, BonusHealingDoneMultiplier = graceBonus }; statsRHGR.Accumulate(stats); StatsPriest statsBTRHGR = new StatsPriest() { SpellHaste = borrowedTime, SpellCrit = renewedHope, BonusHealingDoneMultiplier = graceBonus }; statsBTRHGR.Accumulate(stats); // BT = Borrowed Time, RH = Renewed Hope, GR = Grace SpellPowerWordShield pwsGR = new SpellPowerWordShield(character, statsGR); SpellPenance penanceBTGRRH = new SpellPenance(character, statsBTRHGR); SpellGreaterHeal ghBTGRRH = new SpellGreaterHeal(character, statsBTRHGR); SpellGreaterHeal ghGTRH = new SpellGreaterHeal(character, statsRHGR); SpellPrayerOfHealing prohBTGR = new SpellPrayerOfHealing(character, statsBTGR, 3); castSequence.Add(pwsGR); castSequence.Add(penanceBTGRRH); castSequence.Add(prohBTGR); castSequence.Add(ghGTRH); castSequence.Add(pwsGR); castSequence.Add(prohBTGR); castSequence.Add(ghGTRH); castSequence.Add(pwsGR); castSequence.Add(prohBTGR); DoCalcs(); if (verbose) { Name += "\n\nThree tank healing, keeping Grace up on 3 targets, using Prayer of Healing as filler."; } }
// PWS // ProH_BT public override void Solve() { float borrowedTime = PriestInformation.GetBorrowedTime(character.PriestTalents.BorrowedTime); StatsPriest statsBT = new StatsPriest() { SpellHaste = borrowedTime }; statsBT.Accumulate(stats); castSequence.Clear(); castSequence.Add(new SpellPowerWordShield(character, stats)); castSequence.Add(new SpellPrayerOfHealing(character, statsBT)); DoCalcs(); if (verbose) { Name += "\nCasting Power Word: Shield and then Prayer of Healing, repeat."; } }
// This was called 'Horrible' by Jothay, but he claimed it would work. public new StatsPriest Clone() { StatsPriest clone = new StatsPriest(); clone.Accumulate(this); return clone; }
public override Stats GetCharacterStats(Character character, Item additionalItem) { CalculationOptionsHealPriest calcOpts = character.CalculationOptions as CalculationOptionsHealPriest; StatsPriest statsTotal = new StatsPriest() { SpellHaste = PriestInformation.GetDarkness(character.PriestTalents.Darkness), InnerFire = true, BonusIntellectMultiplier = 0.05f, // Cloth bonus. PriestSpec = PriestSpec.GetPriestSpec(character.PriestTalents), }; if (statsTotal.PriestSpec == ePriestSpec.Spec_Disc) { statsTotal.SpellCombatManaRegeneration = 0.5f; statsTotal.BonusIntellectMultiplier = 0.15f; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_Holy) { statsTotal.SpellCombatManaRegeneration = 0.5f + PriestInformation.GetHolyConcentration(character.PriestTalents.HolyConcentration); statsTotal.BonusHealingDoneMultiplier = 0.15f; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_ERROR) { throw new Exception("Unpossible Talent Spec!"); } statsTotal.Accumulate(BaseStats.GetBaseStats(character)); statsTotal.Accumulate(GetItemStats(character, additionalItem)); statsTotal.Accumulate(GetBuffsStats(character, calcOpts)); statsTotal.Stamina = (float)Math.Floor((statsTotal.Stamina) * (1 + statsTotal.BonusStaminaMultiplier)); statsTotal.Intellect = (float)Math.Floor((statsTotal.Intellect) * (1 + statsTotal.BonusIntellectMultiplier)); statsTotal.Spirit = (float)Math.Floor((statsTotal.Spirit) * (1 + statsTotal.BonusSpiritMultiplier)); statsTotal.SpellPower += (statsTotal.InnerFire ? PriestInformation.GetInnerFireSpellPowerBonus(character) : 0) + (statsTotal.Intellect - 10); statsTotal.SpellPower *= (1f + statsTotal.BonusSpellPowerMultiplier); statsTotal.Mana += StatConversion.GetManaFromIntellect(statsTotal.Intellect); statsTotal.Mana *= (1f + statsTotal.BonusManaMultiplier); statsTotal.Health += StatConversion.GetHealthFromStamina(statsTotal.Stamina); statsTotal.Health = (float)Math.Floor(statsTotal.Health * (1f + statsTotal.BonusHealthMultiplier)); statsTotal.SpellCrit += StatConversion.GetSpellCritFromIntellect(statsTotal.Intellect) + StatConversion.GetSpellCritFromRating(statsTotal.CritRating); statsTotal.SpellHaste = (1f + statsTotal.SpellHaste) * (1f + StatConversion.GetSpellHasteFromRating(statsTotal.HasteRating)) - 1f; statsTotal.Armor *= (1 + (statsTotal.InnerFire ? PriestInformation.GetInnerFireArmorBonus(character) : 0)); if (statsTotal.PriestSpec == ePriestSpec.Spec_Disc) { statsTotal.ShieldDiscipline = (PriestInformation.DisciplineMasteryBase + StatConversion.GetMasteryFromRating(statsTotal.MasteryRating)) * PriestInformation.DisciplineMasteryEffect; } else if (statsTotal.PriestSpec == ePriestSpec.Spec_Holy) { statsTotal.EchoofLight = (PriestInformation.HolyMasteryBase + StatConversion.GetMasteryFromRating(statsTotal.MasteryRating)) * PriestInformation.HolyMasteryEffect; } return statsTotal; }
// // PWS, Penance_BT, PROH_BT, PWS, PROH_BT, PWS, PROH_BT, GH, GH public override void Solve() { float graceBonus = PriestInformation.GetGrace(character.PriestTalents.Grace) * 3; float borrowedTime = PriestInformation.GetBorrowedTime(character.PriestTalents.BorrowedTime); float renewedHope = PriestInformation.GetRenewedHope(character.PriestTalents.RenewedHope); StatsPriest statsGR = new StatsPriest() { BonusHealingDoneMultiplier = graceBonus }; statsGR.Accumulate(stats); StatsPriest statsBTGR = new StatsPriest() { SpellHaste = borrowedTime, BonusHealingDoneMultiplier = graceBonus }; statsBTGR.Accumulate(stats); StatsPriest statsRHGR = new StatsPriest() { SpellCrit = renewedHope, BonusHealingDoneMultiplier = graceBonus }; statsRHGR.Accumulate(stats); StatsPriest statsBTRHGR = new StatsPriest() { SpellHaste = borrowedTime, SpellCrit = renewedHope, BonusHealingDoneMultiplier = graceBonus }; statsBTRHGR.Accumulate(stats); // BT = Borrowed Time, RH = Renewed Hope, GR = Grace SpellPowerWordShield pwsGR = new SpellPowerWordShield(character, statsGR); SpellPenance penanceBTGRRH = new SpellPenance(character, statsBTRHGR); SpellGreaterHeal ghBTGRRH = new SpellGreaterHeal(character, statsBTRHGR); SpellGreaterHeal ghGTRH = new SpellGreaterHeal(character, statsRHGR); SpellPrayerOfHealing prohBTGR = new SpellPrayerOfHealing(character, statsBTGR, 3); castSequence.Add(pwsGR); castSequence.Add(penanceBTGRRH); castSequence.Add(prohBTGR); castSequence.Add(ghGTRH); castSequence.Add(pwsGR); castSequence.Add(prohBTGR); castSequence.Add(ghGTRH); castSequence.Add(pwsGR); castSequence.Add(prohBTGR); DoCalcs(); if (verbose) Name += "\n\nThree tank healing, keeping Grace up on 3 targets, using Prayer of Healing as filler."; }
// PWS // ProH_BT public override void Solve() { float borrowedTime = PriestInformation.GetBorrowedTime(character.PriestTalents.BorrowedTime); StatsPriest statsBT = new StatsPriest() { SpellHaste = borrowedTime }; statsBT.Accumulate(stats); castSequence.Clear(); castSequence.Add(new SpellPowerWordShield(character, stats)); castSequence.Add(new SpellPrayerOfHealing(character, statsBT)); DoCalcs(); if (verbose) Name += "\nCasting Power Word: Shield and then Prayer of Healing, repeat."; }