diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 3f9771e386..9e1e59b038 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -272,14 +272,16 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild) { stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Ignite DPS exceeds in game limit" end }, { stat = "IgniteDamage", label = "Total Damage per Ignite", fmt = ".1f", compPercent = true, flag = "showAverage" }, { stat = "BurningGroundDPS", label = "Burning Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Burning Ground DPS exceeds in game limit" end }, + { stat = "MirageBurningGroundDPS", label = "Mirage Burning Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.BurningGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Burning Ground DPS exceeds in game limit" end }, { stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, { stat = "WithIgniteAverageDamage", label = "Average Dmg. inc. Ignite", fmt = ".1f", compPercent = true }, { stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Poison DPS exceeds in game limit" end }, { stat = "CausticGroundDPS", label = "Caustic Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Caustic Ground DPS exceeds in game limit" end }, + { stat = "MirageCausticGroundDPS", label = "Mirage Caustic Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.CausticGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Caustic Ground DPS exceeds in game limit" end }, { stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, { stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, flag = "poison", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, { stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true }, - { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= o.CausticGroundDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BurningGroundDPS and v ~= o.BleedDPS and v~= o.CorruptingBloodDPS ) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end }, + { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= o.CausticGroundDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BurningGroundDPS and v ~= o.BleedDPS and v~= o.CorruptingBloodDPS and v ~= o.MirageCausticGroundDPS and v ~= o.MirageBurningGroundDPS) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end }, { stat = "ImpaleDPS", label = "Impale Damage", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage" }, { stat = "WithImpaleDPS", label = "Damage inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index e9759066ce..f0a0fb6cfc 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -5344,14 +5344,6 @@ function calcs.offence(env, actor, activeSkill) else output.WithBleedDPS = baseDPS end - local TotalDotDPS = (output.TotalDot or 0) + (output.TotalPoisonDPS or 0) + (output.CausticGroundDPS or 0) + (output.TotalIgniteDPS or output.IgniteDPS or 0) + (output.BurningGroundDPS or 0) + (output.BleedDPS or 0) + (output.CorruptingBloodDPS or 0) + (output.DecayDPS or 0) - output.TotalDotDPS = m_min(TotalDotDPS, data.misc.DotDpsCap) - if output.TotalDotDPS ~= TotalDotDPS then - output.showTotalDotDPS = true - end - if not skillData.showAverage then - output.CombinedDPS = output.CombinedDPS + output.TotalDotDPS - end if skillFlags.impale then if skillFlags.attack then output.ImpaleHit = ((output.MainHand.PhysicalHitAverage or output.OffHand.PhysicalHitAverage) + (output.OffHand.PhysicalHitAverage or output.MainHand.PhysicalHitAverage)) / 2 * (1-output.CritChance/100) + ((output.MainHand.PhysicalCritAverage or output.OffHand.PhysicalCritAverage) + (output.OffHand.PhysicalCritAverage or output.MainHand.PhysicalCritAverage)) / 2 * (output.CritChance/100) @@ -5397,6 +5389,8 @@ function calcs.offence(env, actor, activeSkill) local mirageCount = activeSkill.mirage.count or 1 output.MirageDPS = activeSkill.mirage.output.TotalDPS * mirageCount output.CombinedDPS = output.CombinedDPS + activeSkill.mirage.output.TotalDPS * mirageCount + output.MirageBurningGroundDPS = activeSkill.mirage.output.BurningGroundDPS + output.MirageCausticGroundDPS = activeSkill.mirage.output.CausticGroundDPS if activeSkill.mirage.output.IgniteDPS and activeSkill.mirage.output.IgniteDPS > (output.IgniteDPS or 0) then output.MirageDPS = output.MirageDPS + activeSkill.mirage.output.IgniteDPS @@ -5428,6 +5422,16 @@ function calcs.offence(env, actor, activeSkill) end end + local TotalDotDPS = (output.TotalDot or 0) + (output.TotalPoisonDPS or 0) + (m_max(output.CausticGroundDPS or 0, output.MirageCausticGroundDPS or 0 )) + (output.TotalIgniteDPS or output.IgniteDPS or 0) + (m_max(output.BurningGroundDPS or 0, output.MirageBurningGroundDPS or 0)) + (output.BleedDPS or 0) + (output.CorruptingBloodDPS or 0) + (output.DecayDPS or 0) + output.TotalDotDPS = m_min(TotalDotDPS, data.misc.DotDpsCap) + ConPrintf(tostring(output.TotalDotDPS) .. "~=" .. TotalDotDPS .. ": " .. tostring(output.TotalDotDPS ~= TotalDotDPS)) + if output.TotalDotDPS ~= TotalDotDPS then + output.showTotalDotDPS = true + end + if not skillData.showAverage then + output.CombinedDPS = output.CombinedDPS + output.TotalDotDPS + end + bestCull = m_max(bestCull, output.CullMultiplier) output.CullingDPS = output.CombinedDPS * (bestCull - 1) output.ReservationDPS = output.CombinedDPS * (output.ReservationDpsMultiplier - 1) diff --git a/src/Modules/Calcs.lua b/src/Modules/Calcs.lua index a1c8e75d7b..147f7bac36 100644 --- a/src/Modules/Calcs.lua +++ b/src/Modules/Calcs.lua @@ -271,7 +271,7 @@ function calcs.calcFullDPS(build, mode, override, specEnv) if activeSkill.mirage then local mirageCount = (activeSkill.mirage.count or 1) * activeSkillCount if activeSkill.mirage.output.TotalDPS and activeSkill.mirage.output.TotalDPS > 0 then - t_insert(fullDPS.skills, { name = activeSkill.mirage.name, dps = activeSkill.mirage.output.TotalDPS, count = mirageCount, trigger = activeSkill.mirage.infoTrigger, skillPart = activeSkill.mirage.skillPartName }) + t_insert(fullDPS.skills, { name = activeSkill.mirage.name .. " (Mirage)", dps = activeSkill.mirage.output.TotalDPS, count = mirageCount, trigger = activeSkill.mirage.infoTrigger, skillPart = activeSkill.mirage.skillPartName }) fullDPS.combinedDPS = fullDPS.combinedDPS + activeSkill.mirage.output.TotalDPS * mirageCount end if activeSkill.mirage.output.BleedDPS and activeSkill.mirage.output.BleedDPS > fullDPS.bleedDPS then @@ -297,6 +297,14 @@ function calcs.calcFullDPS(build, mode, override, specEnv) if activeSkill.mirage.output.CullMultiplier and activeSkill.mirage.output.CullMultiplier > 1 and activeSkill.mirage.output.CullMultiplier > fullDPS.cullingMulti then fullDPS.cullingMulti = activeSkill.mirage.output.CullMultiplier end + if activeSkill.mirage.output.BurningGroundDPS and activeSkill.mirage.output.BurningGroundDPS > fullDPS.burningGroundDPS then + fullDPS.burningGroundDPS = activeSkill.mirage.output.BurningGroundDPS + burningGroundSource = activeSkill.activeEffect.grantedEffect.name .. " (Mirage)" + end + if activeSkill.mirage.output.CausticGroundDPS and activeSkill.mirage.output.CausticGroundDPS > fullDPS.causticGroundDPS then + fullDPS.causticGroundDPS = activeSkill.mirage.output.CausticGroundDPS + causticGroundSource = activeSkill.activeEffect.grantedEffect.name .. " (Mirage)" + end end if usedEnv.player.output.TotalDPS and usedEnv.player.output.TotalDPS > 0 then