Пример #1
0
        private Proc GetProc(string damageType, WeaponStats weaponStats, double weight, double timeBetweenTicks, double timeToLive, double baseDamagePerTick, double typeDamagePerTick, out double initialDamage)
        {
            var    timeBetweenShots = (1 / weaponStats.ShotsPerSecond);
            double weightedDamage   = 0;

            if (typeDamagePerTick > 0)
            {
                weightedDamage = (weaponStats.BaseDamage * baseDamagePerTick + weaponStats.DamageDictionary[damageType] * typeDamagePerTick)
                                 * weight
                                 * weaponStats.StatusChance
                                 * weaponStats.getAverageCritMultiplier();
            }
            else
            {
                weightedDamage = (weaponStats.BaseDamage * baseDamagePerTick)
                                 * weight
                                 * weaponStats.StatusChance
                                 * weaponStats.getAverageCritMultiplier();
            }
            initialDamage = calculateDamage(damageType, weightedDamage); //Initial Tick
            var proc = new Proc
            {
                timeLeft      = timeToLive,
                damageType    = damageType,
                damagePerShot = weightedDamage * (timeBetweenShots / timeBetweenTicks)
            };

            return(proc);
        }
Пример #2
0
        private double calculateWeaponDamage(WeaponStats weaponStats)
        {
            double sum = 0;

            foreach (KeyValuePair <string, double> kvp in weaponStats.DamageDictionary)
            {
                var dmgCrit = kvp.Value * weaponStats.getAverageCritMultiplier();
                sum += calculateDamage(kvp.Key, dmgCrit);
            }
            return(sum);
        }
Пример #3
0
        private double calculateNewProcs(WeaponStats weaponStats)
        {
            double sum = 0;
            Dictionary <string, double> weightDict = weaponStats.getStatusWeights();
            double weightSum = weightDict.Sum(x => x.Value);

            foreach (var weight in weightDict)
            {
                double initialDamage = 0;
                switch (weight.Key)
                {
                case "Corrosive":
                    this.Armor.CurrentAmount -= this.Armor.CurrentAmount * (weightDict[weight.Key] / weightSum) * 0.25;
                    break;

                case "Toxin":
                    procList.Add(GetProc(damageType: weight.Key, weaponStats: weaponStats, weight: weight.Value / weightSum, timeBetweenTicks: 1, timeToLive: 8, baseDamagePerTick: 0.5, typeDamagePerTick: 0.5, initialDamage: out initialDamage));
                    break;

                case "Slash":
                    procList.Add(GetProc(damageType: "Finisher", weaponStats: weaponStats, weight: weight.Value / weightSum, timeBetweenTicks: 1, timeToLive: 6, baseDamagePerTick: 0.35, typeDamagePerTick: 0, initialDamage: out initialDamage));
                    break;

                case "Heat":
                    procList.Add(GetProc(damageType: weight.Key, weaponStats: weaponStats, weight: weight.Value / weightSum, timeBetweenTicks: 1, timeToLive: 6, baseDamagePerTick: 0.5, typeDamagePerTick: 0.5, initialDamage: out initialDamage));
                    break;

                case "Electricity":
                    var procDmg  = (weaponStats.BaseDamage + weaponStats.DamageDictionary[weight.Key]) / 2;
                    var finalDmg = procDmg * (weight.Value / weightSum) * weaponStats.StatusChance * weaponStats.getAverageCritMultiplier();
                    initialDamage = calculateDamage(weight.Key, finalDmg);
                    break;

                //case "Gas":
                //    var procDmg = (weaponStats.BaseDamage + weaponStats.DamageDictionary[weight.Key]) / 2;
                //    var finalDmg = procDmg * (weight.Value / weightSum) * weaponStats.StatusChance * weaponStats.getAverageCritMultiplier();
                //    initialDamage = calculateDamage(weight.Key, finalDmg);
                //    break;
                default:
                    break;
                }
                sum += initialDamage;
            }
            return(sum);
        }