public override void Calcluate(Stats stats, Character character) { base.Calcluate(stats, character); // Improved Chain Heal talent: float impCH = 1.0f; int points = CalculationsRestoSham.GetTalentPoints("Improved Chain Heal", "Restoration", character.Talents); impCH = 1f + .1f * points; // Skyshatter 4-piece bonus: impCH += stats.CHHealIncrease; // Now compute the chain heal numbers: _targetHeals[0] = this.AverageHealed * impCH; _targetHeals[1] = _targetHeals[0] / 2; _targetHeals[2] = _targetHeals[1] / 2; CalculationOptionsRestoSham options = character.CalculationOptions as CalculationOptionsRestoSham; this.AverageHealed = _targetHeals[0]; if (options.NumCHTargets > 1) { this.AverageHealed += _targetHeals[1]; } if (options.NumCHTargets == 3) { this.AverageHealed += _targetHeals[2]; } }
public override void Calcluate(Stats stats, Character character) { base.Calcluate(stats, character); // Healing Way bonus (assumes full stack) if spec'd for Healing Way: int points = CalculationsRestoSham.GetTalentPoints("Healing Way", "Restoration", character.Talents); HealingWay = (points > 0 ? AverageHealed * .18f : 0f); // Adjust cast time based on Improved Healing Wave talent: points = CalculationsRestoSham.GetTalentPoints("Improved Healing Wave", "Restoration", character.Talents); float baseTime = SpellRanks[Rank].CastTime - (.1f * points); CastTime = baseTime / (1 + (stats.SpellHasteRating / 1570)); }
/// <summary> /// Given some character statistics, and some fight criteria, compute various performance aspects /// of this spell. /// </summary> public virtual void Calcluate(Stats stats, Character character) { CalculationOptionsRestoSham options = character.CalculationOptions as CalculationOptionsRestoSham; // Base heal amount: float baseHeal = (SpellRanks[Rank].MaxHeal + SpellRanks[Rank].MinHeal) / 2; if (options.Totems[HealType].ID != 0 && options.Totems[HealType].Effect == TotemEffect.BaseHeal) { baseHeal += options.Totems[HealType].Amount; } // Bonus amount: float bonus = stats.Healing; if (options.Totems[HealType].ID != 0 && options.Totems[HealType].Effect == TotemEffect.BonusHeal) { bonus += options.Totems[HealType].Amount; } bonus *= SpellCoefficient; if (Rank < 70) { bonus *= DownrankCoefficient; } // Crit rate: float crit = .022f + ((stats.Intellect / 80f) / 100) + ((stats.SpellCritRating / 22.08f) / 100) + stats.SpellCrit; float critRate = 1 + 0.5f * crit; // Purification talent: float purificationBonus = 1.0f; int points = CalculationsRestoSham.GetTalentPoints("Purification", "Restoration", character.Talents); purificationBonus = 1f + .02f * points; // Now get total average heal: AverageHealed = (baseHeal + bonus) * critRate * purificationBonus; // Compute spell cast time: CastTime = SpellRanks[Rank].CastTime / (1 + (stats.SpellHasteRating / 1570)); // Compute mana cost: points = CalculationsRestoSham.GetTalentPoints("Tidal Focus", "Restoration", character.Talents); float f = 0.0f; if (options.Totems[HealType].ID != 0 && options.Totems[HealType].Effect == TotemEffect.ReduceMana) { f = options.Totems[HealType].Amount; } if (HealType == HealSpells.ChainHeal) { f += stats.CHManaReduction * SpellRanks[Rank].Mana; } if (HealType == HealSpells.LesserHealingWave) { f += stats.LHWManaReduction * SpellRanks[Rank].Mana; } ManaCost = (SpellRanks[Rank].Mana - f) * (1 - .01f * points); }