// 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 void Accumulate(StatsPriest data) { base.Accumulate(data); this.PriestSpec = data.PriestSpec; this.InnerFire = data.InnerFire; this.InnerWill = data.InnerWill; this.ShieldDiscipline = data.ShieldDiscipline; this.EchoofLight = data.EchoofLight; }
// // 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."; } }
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); }
public SpellResurrection(Character character, StatsPriest stats) { Name = "Resurrection"; BaseCastTime = 10.0f; BaseManaCost = 0.6f; SetPriestInformation(character, stats); CritChance = 0f; }
public PriestSolver(CharacterCalculationsHealPriest calc, CalculationOptionsHealPriest calcOpts, bool verbose) { Name = "Priest Solver base"; this.character = calc.Character; this.stats = calc.BasicStats; this.calc = calc; this.calcOpts = calcOpts; this.bossOptions = character.BossOptions; this.verbose = verbose; }
public SpellGreaterHeal(Character character, StatsPriest stats) { Name = "Greater Heal"; BaseDirectValue = 9.56400012969971f * BaseScalar85; BaseDirectCoefficient = 0.967f; BaseDirectVariation = 0.15f; BaseCastTime = 3.0f - PriestInformation.GetDivineFury(character.PriestTalents.DivineFury); BaseManaCost = 0.27f; SetPriestInformation(character, stats); }
public SpellHeal(Character character, StatsPriest stats) { Name = "Heal"; BaseDirectValue = 3.58699989318848f * BaseScalar85; BaseDirectCoefficient = 0.362f; BaseDirectVariation = 0.15f; BaseCastTime = 3.0f - PriestInformation.GetDivineFury(character.PriestTalents.DivineFury); BaseManaCost = 0.09f; SetPriestInformation(character, stats); }
public SpellFlashHeal(Character character, StatsPriest stats) { Name = "Flash Heal"; BaseDirectValue = 7.17399978637695f * BaseScalar85; BaseDirectCoefficient = 0.725f; BaseDirectVariation = 0.15f; BaseCastTime = 1.5f; BaseManaCost = 0.28f; SetPriestInformation(character, stats); }
public SpellSerenity(Character character, StatsPriest stats) { Name = "Holy Word Serenity"; BaseDirectValue = 5.97700023651123f * BaseScalar85; BaseDirectCoefficient = 0.486f; BaseDirectVariation = 0.16f; BaseManaCost = 0.08f; BaseCooldown = 15f; SetPriestInformation(character, stats); }
public SpellRenew(Character character, StatsPriest stats) { Name = "Renew"; BaseOverTimeValue = 1.29499995708466f * BaseScalar85; BaseOverTimeCoefficient = 0.131f; BaseOverTimeTickPeriod = 3f; BaseOverTimeTicks = 4f; BaseManaCost = 0.17f; SetPriestInformation(character, stats); }
public SpellPowerWordShield(Character character, StatsPriest stats) { Name = "Power Word: Shield"; BaseDirectValue = 8.60879993438721f * BaseScalar85; BaseDirectCoefficient = 0.87f; BaseDirectVariation = 0.0f; BaseManaCost = 0.34f; BaseCooldown = 3; SetPriestInformation(character, stats); }
protected void Initialize(Character character, StatsPriest stats, int targets) { Name = "Holy Nova"; BaseDirectValue = 0.316000014543533f * BaseScalar85; BaseDirectCoefficient = 0.143f; BaseDirectVariation = 0.15f; BaseManaCost = 0.15f; Targets = targets; SetPriestInformation(character, stats); }
protected void Initialize(Character character, StatsPriest stats, int targets) { Name = "Prayer of Healing"; BaseDirectValue = 3.35899996757507f * BaseScalar85; BaseDirectCoefficient = 0.34f; BaseDirectVariation = 0.055f; BaseCastTime = 2.5f; BaseManaCost = 0.26f; Targets = targets; SetPriestInformation(character, stats); }
protected void Initialize(Character character, StatsPriest stats, int targets) { Name = "Prayer of Mending"; BaseDirectValue = 3.14400005340576f * BaseScalar85; BaseDirectCoefficient = 0.318f; BaseDirectVariation = 0.0f; Targets = targets; BaseManaCost = 0.18f; BaseCooldown = 10; SetPriestInformation(character, stats); }
protected void Initialize(Character character, StatsPriest stats, int targets) { Name = "Circle of Healing"; BaseDirectValue = 2.57100009918213f * BaseScalar85; BaseDirectCoefficient = 0.26f; BaseDirectVariation = 0.10f; BaseManaCost = 0.21f; Targets = targets; BaseCooldown = 10; SetPriestInformation(character, stats); }
protected void Initialize(Character character, StatsPriest stats, int targets) { Name = "Holy Word Sanctuary"; BaseDirectValue = 0.345999985933304f * BaseScalar85; BaseDirectCoefficient = 0.031f; BaseDirectVariation = 0.173f; BaseManaCost = 0.44f; Targets = targets; BaseCooldown = 40; SetPriestInformation(character, stats); }
public SpellBindingHeal(Character character, StatsPriest stats) { Name = "Binding Heal"; BaseDirectValue = 5.74599981307983f * BaseScalar85; BaseDirectCoefficient = 0.544f; BaseDirectVariation = 0.25f; BaseCastTime = 1.5f; BaseManaCost = 0.28f; Targets = 2; MaxTargets = 2; SetPriestInformation(character, stats); }
public SpellPenance(Character character, StatsPriest stats) { Name = "Penance"; BaseDirectValue = 3.1800000667572f * BaseScalar85; BaseDirectCoefficient = 0.321f; BaseDirectVariation = 0.122f; BaseCastTime = 2f; BaseManaCost = 0.14f; Targets = MaxTargets = 3; BaseCooldown = 12; SetPriestInformation(character, stats); }
public SpellLightwell(Character character, StatsPriest stats) { Name = "Lightwell"; BaseOverTimeValue = 3.04500007629395f * BaseScalar85; BaseOverTimeCoefficient = 0.308f; BaseOverTimeTickPeriod = 2f; BaseOverTimeTicks = 3f; BaseManaCost = 0.30f; MaxTargets = character.PriestTalents.GlyphofLightwell ? 15 : 10; Targets = MaxTargets; BaseCooldown = 3 * 60; SetPriestInformation(character, stats); }
public SpellDivineHymn(Character character, StatsPriest stats) { Name = "Divine Hymn"; BaseDirectValue = 4.24200010299683f * BaseScalar85; BaseDirectCoefficient = 0.429f; BaseDirectVariation = 0.0f; BaseCastTime = 8f; BaseOverTimeTickPeriod = 2f; BaseOverTimeTicks = BaseCastTime / BaseOverTimeTickPeriod; BaseManaCost = 0.36f; Targets = MaxTargets = 12; BaseCooldown = 60 * 8; SetPriestInformation(character, stats); }
// 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."; } }
public SpellHolyNova(Character character, StatsPriest stats, int targets) { MaxTargets = 5; Initialize(character, stats, targets); }
public SpellPrayerOfMending(Character character, StatsPriest stats) { MaxTargets = 5; Initialize(character, stats, MaxTargets); }
public override void SetPriestInformation(Character character, StatsPriest stats) { this.character = character; this.stats = stats; UpdateSpell(); }
// // 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."; }
public SpellSanctuary(Character character, StatsPriest stats, int targets) { MaxTargets = 6; Initialize(character, stats, targets); }
public SpellCircleOfHealing(Character character, StatsPriest stats, int targets) { MaxTargets = character.PriestTalents.GlyphofCircleOfHealing ? 6 : 5; Initialize(character, stats, targets); }
// 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."; }
public SpellGiftOfTheNaaru(Character character, StatsPriest stats) { SetPriestInformation(character, stats); CritChance = 0f; }
public SpellPrayerOfHealing(Character character, StatsPriest stats, int targets) { MaxTargets = 5; Initialize(character, stats, targets); }
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; }
public virtual void SetPriestInformation(Character character, StatsPriest stats) { this.character = character; this.stats = stats; UpdateSpell(); }
// 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; }