示例#1
0
        public RotationInfo SteadyRotation()
        {
            RotationInfo info = new RotationInfo();
            ShotSteady(info);

            return info;
        }
示例#2
0
        protected void ShotChimera(RotationInfo info, int steadyshots)
        {
            double chimCritDmgModifier = yellowCritDmgModifier + 0.02 * character.HunterTalents.MarkedForDeath;
            double critHitModifier     = (calculatedStats.BasicStats.PhysicalCrit * chimCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            double chimeraDmg = weaponDamageAverage * 1.25;

            // Imp Steady Shot only affects Bullet Damage
            double impSteadyChance = 1.0 - Math.Pow(1.0 - character.HunterTalents.ImprovedSteadyShot * 0.05, steadyshots);

            chimeraDmg *= 1.0 + 0.15 * impSteadyChance;
            //chimeraDmg *= this.talentedArmorReduction; // Both dmg components seem to be nature damage


            double serpentStingDmg        = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.STEADY_AP_SCALE + ratings.SERPENT_BONUS_DMG;
            double serpentTalentModifiers = 1.0 + character.HunterTalents.ImprovedStings * 0.10;

            serpentStingDmg *= serpentTalentModifiers;

            chimeraDmg += serpentStingDmg * 0.4;
            chimeraDmg *= critHitModifier * talentModifiers;

            info.rotationDmg  += chimeraDmg + 2.0 / 3.0 * serpentStingDmg * talentModifiers; // Add Serpent Sting dmg for 10 sec
            info.rotationTime += 1.5 + options.Latency;
        }
示例#3
0
        public RotationInfo SteadyRotation()
        {
            RotationInfo info = new RotationInfo();

            ShotSteady(info);

            return(info);
        }
示例#4
0
        protected void ShotAimed(RotationInfo info)
        {
            //double critHitModifier = ((calculatedStats.BasicStats.PhysicalCrit + character.HunterTalents.ImprovedBarrage * 0.04) * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            //double shotDmg = (weaponDamageAverage + ratings.AIMED_BONUS_DMG) * critHitModifier;
            //shotDmg *= talentModifiers * (1.0 + character.HunterTalents.Barrage * 0.04);

            //info.rotationDmg += shotDmg * talentedArmorReduction;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#5
0
        protected void ShotSerpentSting(RotationInfo info)
        {
            //double serpentStingDmg = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.SERPENT_AP_SCALE + ratings.SERPENT_BONUS_DMG;

            //double serpentTalentModifiers = 1.0 + character.HunterTalents.ImprovedStings * 0.10;

            //serpentStingDmg *= calculatedStats.BasicStats.PhysicalHit * talentModifiers * serpentTalentModifiers;

            //info.rotationDmg += serpentStingDmg;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#6
0
        protected void ShotCobra(RotationInfo info)
        {
            double cobraCritDmgModifier = abilitiesCritDmgModifier + 0.02 * character.HunterTalents.MarkedForDeath;
            //double critHitModifier = (calculatedStats.BasicStats.PhysicalCrit * steadyCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;
            //double cobraShotDmg = weaponDamageAverage + ammoDamage + (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.STEADY_AP_SCALE + ratings.STEADY_BONUS_DMG;

            //cobraShotDmg *= critHitModifier * talentModifiers;

            //double CobraShotCastTime = calculatedStats.SteadySpeed;

            //info.rotationDmg += cobraShotDmg * talentedArmorReduction;
            //info.rotationTime += (CobraShotCastTime > 1.5 ? CobraShotCastTime : 1.5) + options.Latency;
        }
示例#7
0
        protected void ShotExplosive(RotationInfo info)
        {
            //double explosiveCrit = calculatedStats.BasicStats.PhysicalCrit + 0.03 * character.HunterTalents.TNT + 0.02 * character.HunterTalents.SurvivalInstincts;
            //double critHitModifier = (explosiveCrit * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            //double explosiveShotDmg = ratings.EXPLOSIVE_AP_SCALE * (effectiveRAPAgainstMob + hawkRAPBonus) + ratings.EXPLOSIVE_BONUS_DMG;

            //explosiveShotDmg *= critHitModifier * talentModifiers;


            //info.rotationDmg += explosiveShotDmg * 3.0;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#8
0
        public RotationInfo ASSteadySerpentRotation()
        {
            RotationInfo info = new RotationInfo();

            ShotSerpentSting(info);
            ShotArcane(info, 3);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotArcane(info, 3);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);

            return(info);
        }
示例#9
0
        protected void ShotArcane(RotationInfo info, int steadyshots)
        {
            //double arcaneShotCrit = calculatedStats.BasicStats.PhysicalCrit + 0.02 * character.HunterTalents.SurvivalInstincts;

            //double critHitModifier = (arcaneShotCrit * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;
            //double arcaneShotDmg = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.ARCANE_AP_SCALE + ratings.ARCANE_BONUS_DMG;

            //double asTalentModifiers = 1.0 + character.HunterTalents.ImprovedArcaneShot * 0.05;

            double impSteadyChance = 1.0 - Math.Pow(1.0 - character.HunterTalents.ImprovedSteadyShot * 0.05, steadyshots);

            //asTalentModifiers *= 1.0 + 0.15 * impSteadyChance;

            //arcaneShotDmg *= critHitModifier * talentModifiers * asTalentModifiers;
            //info.rotationDmg += arcaneShotDmg;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#10
0
        public RotationInfo ASSteadyRotation(int steadys)
        {
            RotationInfo info = new RotationInfo();

            ShotArcane(info, steadys);
            for (int i = 0; i < steadys; i++)
            {
                ShotSteady(info);
            }

            if (info.rotationTime < 6.0)
            {
                info.rotationTime = 6.0;
            }

            return(info);
        }
示例#11
0
        public RotationInfo ExpCobraSerpRotation()
        {
            RotationInfo info = new RotationInfo();

            ShotExplosive(info);
            ShotSerpentSting(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotExplosive(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);

            if (info.rotationTime < 12.0)
            {
                info.rotationTime = 12.0;
            }


            return(info);
        }
示例#12
0
        public RotationInfo ChimASSteadyRotation()
        {
            RotationInfo info = new RotationInfo();

            //TODO: Update helptext
            double steadyTime   = 10.0 - 1.5 - 1.5; // Chim CD - 2x GCD
            int    steadyAmount = (int)Math.Ceiling(steadyTime / 1.5);

            ShotChimera(info, steadyAmount);
            ShotArcane(info, 0);

            for (int i = 0; i < steadyAmount; i++)
            {
                ShotSteady(info);
            }

            if (info.rotationTime < 10.0)
            {
                info.rotationTime = 10.0;
            }

            return(info);
        }
示例#13
0
        public RotationInfo createCustomRotation()
        {
            List<RotationShot> shots = new List<RotationShot>();
            List<double> timings = new List<double>();

            //if (options.ShotPriority1 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority1));
            //}
            //if (options.ShotPriority2 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority2));
            //}
            //if (options.ShotPriority3 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority3));
            //}
            /*
            if (options.ShotPriority4 != Shots.None)
            {
                shots.Add(createRotationShot(options.ShotPriority4));
            }
            */
            shots.Add(createRotationShot(Shots.SteadyShot));

            double currentTime = 0.0;
            List<Shots> rotation = new List<Shots>();

            int cycleLength;
            for (cycleLength = 1; cycleLength < 20; cycleLength++)
            {
                #region Step
                foreach (RotationShot s in shots)
                {
                    if (s.nextcast <= currentTime)
                    {
                        timings.Add(currentTime);
                        s.nextcast = currentTime + s.cooldown;
                        currentTime += s.casttime;
                        rotation.Add(s.type);
                        break;
                    }
                }

                foreach (RotationShot s in shots)
                {
                    if (s.nextcast <= currentTime)
                    {
                        timings.Add(currentTime);
                        s.nextcast = currentTime + s.cooldown;
                        currentTime += s.casttime;
                        rotation.Add(s.type);
                        break;
                    }
                }
                #endregion

                if (rotation[0] == rotation[cycleLength])
                {
                    bool cycle = true;
                    for (int i = 0; i < cycleLength; i++)
                    {
                        if (rotation[i] != rotation[cycleLength + i])
                        {
                            cycle = false;
                            break;
                        }
                    }
                    if (cycle)
                    {
                        break;
                    }
                }
            }

            double cycleTime = timings[cycleLength];

            rotation.RemoveRange(cycleLength, rotation.Count - cycleLength);
            timings.RemoveRange(cycleLength, rotation.Count - cycleLength);

            RotationInfo info = new RotationInfo();

            StringBuilder builder = new StringBuilder();
            builder.Append("*");

            for(int i = 0; i < cycleLength; i++)
            {
                builder.Append(timings[i].ToString("F1"));
                builder.Append("s ");
                builder.AppendLine(rotation[i].ToString());
                switch (rotation[i])
                {
                    case Shots.SteadyShot:
                        ShotSteady(info);
                        break;

                    case Shots.SerpentSting:
                        ShotSerpentSting(info);
                        break;

                    case Shots.MultiShot:
                        ShotMulti(info);
                        break;

                    case Shots.ExplosiveShot:
                        ShotExplosive(info);
                        break;

                    //case Shots.ChimeraShot_Serpent:
                    //    ShotChimera(info, 0); // TODO: Improved Steady Shot
                    //    break;

                    case Shots.ArcaneShot:
                        ShotArcane(info, 0); // TODO: Improved Steady Shot
                        break;

                    case Shots.AimedShot:
                        ShotAimed(info);
                        break;
                }
            }

            //calculatedStats.CustomRotation = builder.ToString();
            return info;
        }
示例#14
0
        protected void ShotAimed(RotationInfo info)
        {
            //double critHitModifier = ((calculatedStats.BasicStats.PhysicalCrit + character.HunterTalents.ImprovedBarrage * 0.04) * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            //double shotDmg = (weaponDamageAverage + ratings.AIMED_BONUS_DMG) * critHitModifier;
            //shotDmg *= talentModifiers * (1.0 + character.HunterTalents.Barrage * 0.04);

            //info.rotationDmg += shotDmg * talentedArmorReduction;
            info.rotationTime += 1.5 + options.Latency;

        }
示例#15
0
        protected void ShotSerpentSting(RotationInfo info)
        {
            //double serpentStingDmg = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.SERPENT_AP_SCALE + ratings.SERPENT_BONUS_DMG;

            //double serpentTalentModifiers = 1.0 + character.HunterTalents.ImprovedStings * 0.10;

            //serpentStingDmg *= calculatedStats.BasicStats.PhysicalHit * talentModifiers * serpentTalentModifiers;

            //info.rotationDmg += serpentStingDmg;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#16
0
        protected void ShotArcane(RotationInfo info, int steadyshots)
        {
            //double arcaneShotCrit = calculatedStats.BasicStats.PhysicalCrit + 0.02 * character.HunterTalents.SurvivalInstincts;

            //double critHitModifier = (arcaneShotCrit * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;
            //double arcaneShotDmg = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.ARCANE_AP_SCALE + ratings.ARCANE_BONUS_DMG;

            //double asTalentModifiers = 1.0 + character.HunterTalents.ImprovedArcaneShot * 0.05;

            double impSteadyChance = 1.0 - Math.Pow(1.0 - character.HunterTalents.ImprovedSteadyShot * 0.05, steadyshots);
            //asTalentModifiers *= 1.0 + 0.15 * impSteadyChance;

            //arcaneShotDmg *= critHitModifier * talentModifiers * asTalentModifiers;
            //info.rotationDmg += arcaneShotDmg;
            info.rotationTime += 1.5 + options.Latency;
        }
示例#17
0
        protected void ShotCobra(RotationInfo info)
        {
            double cobraCritDmgModifier = abilitiesCritDmgModifier + 0.02 * character.HunterTalents.MarkedForDeath;
            //double critHitModifier = (calculatedStats.BasicStats.PhysicalCrit * steadyCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;
            //double cobraShotDmg = weaponDamageAverage + ammoDamage + (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.STEADY_AP_SCALE + ratings.STEADY_BONUS_DMG;

            //cobraShotDmg *= critHitModifier * talentModifiers;

            //double CobraShotCastTime = calculatedStats.SteadySpeed;

            //info.rotationDmg += cobraShotDmg * talentedArmorReduction;
            //info.rotationTime += (CobraShotCastTime > 1.5 ? CobraShotCastTime : 1.5) + options.Latency;
        }
示例#18
0
        protected void ShotExplosive(RotationInfo info)
        {
            //double explosiveCrit = calculatedStats.BasicStats.PhysicalCrit + 0.03 * character.HunterTalents.TNT + 0.02 * character.HunterTalents.SurvivalInstincts;
            //double critHitModifier = (explosiveCrit * abilitiesCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            //double explosiveShotDmg = ratings.EXPLOSIVE_AP_SCALE * (effectiveRAPAgainstMob + hawkRAPBonus) + ratings.EXPLOSIVE_BONUS_DMG;

            //explosiveShotDmg *= critHitModifier * talentModifiers;


            //info.rotationDmg += explosiveShotDmg * 3.0;
            info.rotationTime += 1.5 + options.Latency;

        }
示例#19
0
        protected void ShotChimera(RotationInfo info, int steadyshots)
        {
            double chimCritDmgModifier = yellowCritDmgModifier + 0.02 * character.HunterTalents.MarkedForDeath;
            double critHitModifier = (calculatedStats.BasicStats.PhysicalCrit * chimCritDmgModifier + 1.0) * calculatedStats.BasicStats.PhysicalHit;

            double chimeraDmg = weaponDamageAverage * 1.25;

            // Imp Steady Shot only affects Bullet Damage
            double impSteadyChance = 1.0 - Math.Pow(1.0 - character.HunterTalents.ImprovedSteadyShot * 0.05, steadyshots);
            chimeraDmg *= 1.0 + 0.15 * impSteadyChance;
            //chimeraDmg *= this.talentedArmorReduction; // Both dmg components seem to be nature damage


            //double serpentStingDmg = (effectiveRAPAgainstMob + hawkRAPBonus) * ratings.STEADY_AP_SCALE + ratings.SERPENT_BONUS_DMG;
            //double serpentTalentModifiers = 1.0 + character.HunterTalents.ImprovedStings * 0.10;
            //serpentStingDmg *= serpentTalentModifiers;
            
            //chimeraDmg += serpentStingDmg * 0.4;
            chimeraDmg *= critHitModifier * talentModifiers;

            //info.rotationDmg += chimeraDmg + 2.0/3.0 * serpentStingDmg * talentModifiers; // Add Serpent Sting dmg for 10 sec
            info.rotationTime += 1.5 + options.Latency;

        }
示例#20
0
        public RotationInfo ChimASSteadyRotation()
        {
            RotationInfo info = new RotationInfo();

            //TODO: Update helptext
            double steadyTime = 10.0 - 1.5 - 1.5; // Chim CD - 2x GCD
            int steadyAmount = (int)Math.Ceiling(steadyTime/1.5);

            ShotChimera(info, steadyAmount);
            ShotArcane(info, 0);

            for (int i = 0; i < steadyAmount; i++)
            {
                ShotSteady(info);
            }

            if (info.rotationTime < 10.0)
            {
                info.rotationTime = 10.0;
            }

            return info;

        }
示例#21
0
        public RotationInfo ExpCobraSerpRotation()
        {
            RotationInfo info = new RotationInfo();

            ShotExplosive(info);
            ShotSerpentSting(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotExplosive(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);

            if (info.rotationTime < 12.0)
            {
                info.rotationTime = 12.0;
            }


            return info;
        }
示例#22
0
        public RotationInfo createCustomRotation()
        {
            List <RotationShot> shots   = new List <RotationShot>();
            List <double>       timings = new List <double>();

            //if (options.ShotPriority1 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority1));
            //}
            //if (options.ShotPriority2 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority2));
            //}
            //if (options.ShotPriority3 != Shots.None)
            //{
            //    shots.Add(createRotationShot(options.ShotPriority3));
            //}

            /*
             * if (options.ShotPriority4 != Shots.None)
             * {
             *  shots.Add(createRotationShot(options.ShotPriority4));
             * }
             */
            shots.Add(createRotationShot(Shots.SteadyShot));

            double       currentTime = 0.0;
            List <Shots> rotation    = new List <Shots>();

            int cycleLength;

            for (cycleLength = 1; cycleLength < 20; cycleLength++)
            {
                #region Step
                foreach (RotationShot s in shots)
                {
                    if (s.nextcast <= currentTime)
                    {
                        timings.Add(currentTime);
                        s.nextcast   = currentTime + s.cooldown;
                        currentTime += s.casttime;
                        rotation.Add(s.type);
                        break;
                    }
                }

                foreach (RotationShot s in shots)
                {
                    if (s.nextcast <= currentTime)
                    {
                        timings.Add(currentTime);
                        s.nextcast   = currentTime + s.cooldown;
                        currentTime += s.casttime;
                        rotation.Add(s.type);
                        break;
                    }
                }
                #endregion

                if (rotation[0] == rotation[cycleLength])
                {
                    bool cycle = true;
                    for (int i = 0; i < cycleLength; i++)
                    {
                        if (rotation[i] != rotation[cycleLength + i])
                        {
                            cycle = false;
                            break;
                        }
                    }
                    if (cycle)
                    {
                        break;
                    }
                }
            }

            double cycleTime = timings[cycleLength];

            rotation.RemoveRange(cycleLength, rotation.Count - cycleLength);
            timings.RemoveRange(cycleLength, rotation.Count - cycleLength);

            RotationInfo info = new RotationInfo();

            StringBuilder builder = new StringBuilder();
            builder.Append("*");

            for (int i = 0; i < cycleLength; i++)
            {
                builder.Append(timings[i].ToString("F1"));
                builder.Append("s ");
                builder.AppendLine(rotation[i].ToString());
                switch (rotation[i])
                {
                case Shots.SteadyShot:
                    ShotSteady(info);
                    break;

                case Shots.SerpentSting:
                    ShotSerpentSting(info);
                    break;

                case Shots.MultiShot:
                    ShotMulti(info);
                    break;

                case Shots.ExplosiveShot:
                    ShotExplosive(info);
                    break;

                //case Shots.ChimeraShot_Serpent:
                //    ShotChimera(info, 0); // TODO: Improved Steady Shot
                //    break;

                case Shots.ArcaneShot:
                    ShotArcane(info, 0);     // TODO: Improved Steady Shot
                    break;

                case Shots.AimedShot:
                    ShotAimed(info);
                    break;
                }
            }

            //calculatedStats.CustomRotation = builder.ToString();
            return(info);
        }
示例#23
0
        public RotationInfo ASSteadyRotation(int steadys)
        {
            RotationInfo info = new RotationInfo();

            ShotArcane(info, steadys);
            for (int i = 0; i < steadys; i++)
            {
                ShotSteady(info);
            }

            if (info.rotationTime < 6.0)
            {
                info.rotationTime = 6.0;
            }

            return info;
        }
示例#24
0
        public RotationInfo ASSteadySerpentRotation()
        {
            RotationInfo info = new RotationInfo();

            ShotSerpentSting(info);
            ShotArcane(info, 3);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);
            ShotArcane(info, 3);
            ShotSteady(info);
            ShotSteady(info);
            ShotSteady(info);

            return info;

        }