예제 #1
0
 public BeaconOfLight(Rotation rotation)
     : base(rotation)
 {
     Duration = 300f;
     Uptime = Rotation.FightLength * Rotation.CalcOpts.BoLUp;
     BaseCost = 0.06f * HealadinConstants.basemana * (Talents.GlyphOfBeaconOfLight ? 0f : 1f); 
 }
예제 #2
0
 public JudgementsOfThePure(Rotation rotation, float JudgementCasts)
     : base(rotation)
 {
     Duration = JudgementCasts;
     Uptime = Rotation.CalcOpts.Activity * Rotation.FightLength;
     BaseCost = HealadinConstants.basemana * 0.05f;
 }
예제 #3
0
 public Cleanse(Rotation rotation)
     : base(rotation)
 { }
예제 #4
0
 public Spell(Rotation rotation)
 {
     Rotation = rotation;
 }
예제 #5
0
 public FlashOfLight(Rotation rotation)
     : base(rotation)
 { }
예제 #6
0
 public EnlightenedJudgements(Rotation rotation)
     : base(rotation)
 { }
예제 #7
0
 public HolyRadiance(Rotation rotation)
     : base(rotation)
 { }
예제 #8
0
        public Stats GetCharacterStats(Character character, Item additionalItem, bool computeAverageStats, CharacterCalculationsHealadin calc)
        {
            PaladinTalents talents = character.PaladinTalents;

            CalculationOptionsHealadin calcOpts = character.CalculationOptions as CalculationOptionsHealadin;

            if (calcOpts == null)
            {
                calcOpts = new CalculationOptionsHealadin();
            }

#if (RAWR3)
            BossOptions bossOpts = character.BossOptions;
            if (bossOpts == null)
            {
                bossOpts = new BossOptions();
            }
#endif

#if (RAWR3)
            float fightLength = bossOpts.BerserkTimer * 60f;
#else
            float fightLength = calcOpts.Length * 60f;
#endif

            Stats statsRace     = BaseStats.GetBaseStats(character.Level, CharacterClass.Paladin, character.Race);
            Stats statsBaseGear = GetItemStats(character, additionalItem);
            Stats statsBuffs    = GetBuffsStats(character, calcOpts);
            Stats stats         = statsBaseGear + statsBuffs + statsRace;

            ConvertRatings(stats, talents, calcOpts);
            if (computeAverageStats)
            {
                Stats statsAverage = new Stats();

                foreach (SpecialEffect effect in stats.SpecialEffects())
                {
                    float trigger = 0f;
                    if (calc == null)
                    {
                        trigger = 1.5f / calcOpts.Activity / (1f + stats.SpellHaste);
                        if (effect.Trigger == Trigger.HealingSpellCrit || effect.Trigger == Trigger.SpellCrit)
                        {
                            trigger *= stats.SpellCrit;
                        }
                        else if (effect.Trigger == Trigger.HolyShockCast)
                        {
                            trigger = 6f / calcOpts.HolyShock;
                        }
                    }
                    else
                    {
                        if (effect.Trigger == Trigger.HealingSpellCast || effect.Trigger == Trigger.HealingSpellHit)
                        {
                            trigger = 1f / Rotation.GetHealingCastsPerSec(calc);
                        }
                        else if (effect.Trigger == Trigger.HealingSpellCrit || effect.Trigger == Trigger.SpellCrit)
                        {
                            trigger = 1f / Rotation.GetHealingCritsPerSec(calc);
                        }
                        else if (effect.Trigger == Trigger.SpellCast || effect.Trigger == Trigger.SpellHit)
                        {
                            trigger = 1f / Rotation.GetSpellCastsPerSec(calc);
                        }
                        else if (effect.Trigger == Trigger.DamageOrHealingDone)
                        {
                            trigger = 1f / Rotation.GetHealingCastsPerSec(calc);
                        }
                        else if (effect.Trigger == Trigger.HolyShockCast)
                        {
                            trigger = 6f / calcOpts.HolyShock;
                        }
                        else if (effect.Trigger == Trigger.Use)
                        {
                            trigger = 0f;
                            foreach (SpecialEffect childEffect in effect.Stats.SpecialEffects())
                            {
                                float childTrigger = 0f;

                                if (effect.Trigger == Trigger.HealingSpellCast || effect.Trigger == Trigger.HealingSpellHit)
                                {
                                    childTrigger = 1f / Rotation.GetHealingCastsPerSec(calc);
                                }
                                else if (effect.Trigger == Trigger.HealingSpellCrit || effect.Trigger == Trigger.SpellCrit)
                                {
                                    childTrigger = 1f / Rotation.GetHealingCritsPerSec(calc);
                                }
                                else if (effect.Trigger == Trigger.SpellCast || effect.Trigger == Trigger.SpellHit)
                                {
                                    childTrigger = 1f / Rotation.GetSpellCastsPerSec(calc);
                                }

                                statsAverage.Accumulate(childEffect.Stats,
                                                        effect.GetAverageUptime(0.0f, 1.0f)
                                                        * childEffect.GetAverageStackSize(childTrigger, 1f, 1.5f, effect.Duration));
                            }
                        }
                        else if (effect.Trigger == Trigger.HolyLightCast)
                        {
                            trigger = 1f / Rotation.GetHolyLightCastsPerSec(calc);
                        }
                        else
                        {
                            continue;
                        }
                    }
                    statsAverage.Accumulate(effect.GetAverageStats(trigger, 1f, 1.5f, fightLength));
                }
                statsAverage.ManaRestore *= fightLength;
                statsAverage.Healed      *= fightLength;

                stats = statsBaseGear + statsBuffs + statsRace + statsAverage;
                ConvertRatings(stats, talents, calcOpts);
            }

            return(stats);
        }
예제 #9
0
 public WordofGlory(Rotation rotation)
     : base(rotation)
 { }
예제 #10
0
 public LightofDawn(Rotation rotation)
     : base(rotation)
 { }
예제 #11
0
 public HolyShock(Rotation rotation)
     : base(rotation)
 { }
예제 #12
0
 public DivineLight(Rotation rotation)
     : base(rotation)
 { }
예제 #13
0
 public HolyLight(Rotation rotation)
     : base(rotation)
 { }
예제 #14
0
 public DivineIllumination(Rotation rotation)
     : base(rotation)
 {
     Duration = 180f;
     Uptime = Rotation.FightLength;
     BaseCost = 0f;
     HL_DI = new HolyLight(rotation) { DivineIllumination = true };
 }
예제 #15
0
 public LayonHands(Rotation rotation)
     : base(rotation)
 { }
예제 #16
0
 public DivineFavor(Rotation rotation)
     : base(rotation)
 {
     Duration = 120f;
     Uptime = Rotation.FightLength;
     BaseCost = 130f;
     HL_DF = new HolyLight(rotation) { ExtraCritChance = 1f };
 }
예제 #17
0
 public ProtectoroftheInnocent(Rotation rotation)
     : base(rotation)
 { }
예제 #18
0
        public override CharacterCalculationsBase GetCharacterCalculations(Character character, Item additionalItem, bool referenceCalculation, bool significantChange, bool needsDisplayCalculations)
        {
            // First things first, we need to ensure that we aren't using bad data
            CharacterCalculationsHealadin calc = new CharacterCalculationsHealadin();
            if (character == null) { return calc; }
            CalculationOptionsHealadin calcOpts = character.CalculationOptions as CalculationOptionsHealadin;
            if (calcOpts == null) { return calc; }
            //
            Stats stats;
            calc = null;
            PaladinTalents talents = character.PaladinTalents;

            for (int i = 0; i < 5; i++)
            {
                float oldBurst = 0;
                if (i > 0) oldBurst = calc.BurstPoints;

                stats = GetCharacterStats(character, additionalItem, true, calc);
                calc = new CharacterCalculationsHealadin();

                Rotation rot = new Rotation(character, stats);

                if (i > 0) calc.BurstPoints = oldBurst;
                else calc.BurstPoints = rot.CalculateBurstHealing(calc);
                calc.FightPoints = rot.CalculateFightHealing(calc);
                calc.OverallPoints = calc.BurstPoints + calc.FightPoints;
            }
            calc.BasicStats = GetCharacterStats(character, additionalItem, false, null);

            return calc;
        }
예제 #19
0
 public Heal(Rotation rotation)
 {
     Rotation = rotation;
 }