예제 #1
0
        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];
            }
        }
예제 #2
0
        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));
        }
예제 #3
0
        /// <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);
        }