diff --git a/Modules/Build.lua b/Modules/Build.lua index f8f8422d..9879ffe0 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -260,6 +260,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion) { stat = "WithImpaleDPS", label = "Damage inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage" }, { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" }, { stat = "WithImpaleDPS", label = "Total DPS inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" }, + { stat = "CombinedDPS", label = "Combined DPS", fmt = ".1f", compPercent = true }, { stat = "Cooldown", label = "Skill Cooldown", fmt = ".2fs", lowerIsBetter = true }, { stat = "AreaOfEffectRadius", label = "AoE Radius", fmt = "d" }, { stat = "ManaCost", label = "Mana Cost", fmt = "d", compPercent = true, lowerIsBetter = true, condFunc = function() return true end }, diff --git a/Modules/CalcOffence-3_0.lua b/Modules/CalcOffence-3_0.lua index 4b00cfbe..d59c41ee 100644 --- a/Modules/CalcOffence-3_0.lua +++ b/Modules/CalcOffence-3_0.lua @@ -1700,7 +1700,10 @@ function calcs.offence(env, actor, activeSkill) local mult = skillModList:Sum("BASE", dotCfg, "PhysicalDotMultiplier", "BleedMultiplier") local effectMod = calcLib.mod(skillModList, dotCfg, "AilmentEffect") local rateMod = calcLib.mod(skillModList, cfg, "BleedFaster") - output.BleedDPS = baseVal * effectMod * rateMod * effMult + local maxStacks = skillModList:Override(cfg, "BleedStacksMax") or skillModList:Sum("BASE", cfg, "BleedStacksMax") + local configStacks = enemyDB:Sum("BASE", nil, "Multiplier:BleedStacks") + local bleedStacks = configStacks > 0 and m_min(configStacks, maxStacks) or maxStacks + output.BleedDPS = (baseVal * effectMod * rateMod * effMult) * bleedStacks local durationBase if skillData.bleedDurationIsSkillDuration then durationBase = skillData.duration @@ -1709,6 +1712,8 @@ function calcs.offence(env, actor, activeSkill) end local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyBleedDuration", "SkillAndDamagingAilmentDuration", skillData.bleedIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfBleedDuration") globalOutput.BleedDuration = durationBase * durationMod / rateMod * debuffDurationMult + globalOutput.BleedStacksMax = maxStacks + globalOutput.BleedStacks = bleedStacks if breakdown then t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(bleed deals %d%% per second)", basePercent/100, basePercent)) if effectMod ~= 1 then diff --git a/Modules/CalcSections-3_0.lua b/Modules/CalcSections-3_0.lua index 229fef93..b37c3235 100644 --- a/Modules/CalcSections-3_0.lua +++ b/Modules/CalcSections-3_0.lua @@ -526,6 +526,8 @@ return { { 1, "Bleed", 1, "Bleed", colorCodes.OFFENCE, { extra = "{0:output:BleedChance}% {1:output:BleedDPS} {2:output:BleedDuration}s", flag = "bleed", + { label = "Max Bleed Stacks", { format = "{0:output:BleedStacksMax}", { modName = "BleedStacksMax" } }, }, + { label = "Stacks on Enemy", { format = "{0:output:BleedStacks}" }}, { label = "Chance to Bleed", { format = "{0:output:BleedChance}%", { breakdown = "MainHand.BleedChance" }, { breakdown = "OffHand.BleedChance" }, diff --git a/Modules/CalcSetup.lua b/Modules/CalcSetup.lua index 2777c038..e0f44c50 100644 --- a/Modules/CalcSetup.lua +++ b/Modules/CalcSetup.lua @@ -29,6 +29,7 @@ function calcs.initModDB(env, modDB) modDB:NewMod("MaxLifeLeechRate", "BASE", 20, "Base") modDB:NewMod("MaxManaLeechRate", "BASE", 20, "Base") modDB:NewMod("ImpaleStacksMax", "BASE", 5, "Base") + modDB:NewMod("BleedStacksMax", "BASE", 1, "Base") if env.build.targetVersion ~= "2_6" then modDB:NewMod("MaxEnergyShieldLeechRate", "BASE", 10, "Base") modDB:NewMod("MaxLifeLeechInstance", "BASE", 10, "Base") diff --git a/Modules/ConfigOptions.lua b/Modules/ConfigOptions.lua index a47a671a..d592ac9a 100644 --- a/Modules/ConfigOptions.lua +++ b/Modules/ConfigOptions.lua @@ -708,6 +708,9 @@ return { { var = "multiplierImpalesOnEnemy", type = "count", label = "# of Impales on Enemy (if not maximum):", ifFlag = "impale", tooltip = "Set number of Impales if using Champions Master of Metal node", apply = function(val, modList, enemyModList) enemyModList:NewMod("Multiplier:ImpaleStacks", "BASE", m_min(val, 9), "Config", { type = "Condition", var = "Combat" }) end }, + { var = "multiplierBleedsOnEnemy", type = "count", label = "# of Bleeds on Enemy (if not maximum):", ifFlag = "bleed", tooltip = "Set number of Bleeds if using Crimson Dance node", apply = function(val, modList, enemyModList) + enemyModList:NewMod("Multiplier:BleedStacks", "BASE", val, "Config", { type = "Condition", var = "Combat" }) + end }, { var = "conditionKilledUniqueEnemy", type = "check", ifVer = "3_0", label = "Killed Rare or Unique Enemy Recently?", ifNode = 3184, apply = function(val, modList, enemyModList) modList:NewMod("Condition:KilledUniqueEnemy", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, diff --git a/Modules/ModParser-3_0.lua b/Modules/ModParser-3_0.lua index 1d2ec3ea..e2dc192a 100644 --- a/Modules/ModParser-3_0.lua +++ b/Modules/ModParser-3_0.lua @@ -1087,6 +1087,7 @@ local specialModList = { ["energy shield protects mana instead of life"] = { flag("EnergyShieldProtectsMana") }, ["modifiers to critical strike multiplier also apply to damage over time multiplier for ailments from critical strikes at (%d+)%% of their value"] = function(num) return { mod("CritMultiplierAppliesToDegen", "BASE", num) } end, ["your bleeding does not deal extra damage while the enemy is moving"] = { flag("Condition:NoExtraBleedDamageToMovingEnemy") }, + ["you can inflict bleeding on an enemy up to (%d+) times?"] = function(num) return { mod("BleedStacksMax", "OVERRIDE", num) } end, -- Ascendant ["grants (%d+) passive skill points?"] = function(num) return { mod("ExtraPoints", "BASE", num) } end, ["can allocate passives from the %a+'s starting point"] = { },