public double GetDamageOfDoTTick(StatsGroup stats) { double critRate = RatingConversions.GetCritChance(stats.CritRating); double critMult = RatingConversions.GetCritDamageMultiplier(stats.CritRating); double directHitRate = RatingConversions.GetDirectHitChance(stats.DirectHitRating); double directHitMult = RatingConversions.GetDirectHitDamageFactor(stats.DirectHitRating); double determinationFactor = RatingConversions.GetDeterminationFactor(stats.Determination); double tenacityFactor = RatingConversions.GetTenacityFactor(stats.Tenacity); double speedFactor = RatingConversions.GetSpeedDoTContribution(stats.SpeedRating); bool isCrit = (rng.NextDouble() < critRate); bool isDirectHit = (rng.NextDouble() < directHitRate); double damage = 1; if (isCrit) { damage *= critMult; } if (isDirectHit) { damage *= directHitMult; } damage *= determinationFactor; damage *= tenacityFactor; damage *= speedFactor; return(damage); }
public double GetDamageOfGCDAttack(StatsGroup stats, out bool isCrit, out bool isDirectHit) { double critRate = RatingConversions.GetCritChance(stats.CritRating); double critMult = RatingConversions.GetCritDamageMultiplier(stats.CritRating); double directHitRate = RatingConversions.GetDirectHitChance(stats.DirectHitRating); double determinationFactor = RatingConversions.GetDeterminationFactor(stats.Determination); double tenacityFactor = RatingConversions.GetTenacityFactor(stats.Tenacity); isCrit = (rng.NextDouble() < critRate); isDirectHit = (rng.NextDouble() < directHitRate); double damage = 1; if (isCrit) { damage *= critMult; } if (isDirectHit) { damage *= RatingConversions.GetDirectHitDamageFactor(stats.DirectHitRating); } damage *= determinationFactor; damage *= tenacityFactor; TotalCrits += isCrit ? 1 : 0; TotalDirectHits += isDirectHit ? 1 : 0; TotalAttacks++; return(damage); }