diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index 9e4f8675..4754a77d 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -182,10 +182,19 @@ local varList = { { var = "conditionEnemyCoveredInAsh", type = "check", label = "Is the enemy covered in Ash?", tooltip = "This adds the following modifiers:\n20% less enemy Movement Speed\n20% increased Fire Damage Taken by enemy", apply = function(val, modList, enemyModList) enemyModList:NewMod("FireDamageTaken", "INC", 20, "Ash") end }, - { var = "enemyIsBoss", type = "check", label = "Is the enemy a Boss?", tooltip = "This adds the following modifiers:\n60% less Effect of your Curses\n+30% to enemy Elemental Resistances\n+15% to enemy Chaos Resistance", apply = function(val, modList, enemyModList) - enemyModList:NewMod("CurseEffect", "MORE", -60, "Boss") - enemyModList:NewMod("ElementalResist", "BASE", 30, "Boss") - enemyModList:NewMod("ChaosResist", "BASE", 15, "Boss") + { var = "enemyIsBoss", type = "list", label = "Is the enemy a Boss?", tooltip = "Standard Boss adds the following modifiers:\n60% less Effect of your Curses\n+30% to enemy Elemental Resistances\n+15% to enemy Chaos Resistance\n\nShaper/Guardian adds the following modifiers:\n80% less Effect of your Curses\n+40% to enemy Elemental Resistances\n+25% to enemy Chaos Resistance\n50% less Duration of Bleed\n50% less Duration of Poison\n50% less Duration of Ignite", list = {{val="NONE",label="No"},{val=true,label="Standard Boss"},{val="SHAPER",label="Shaper/Guardian"}}, apply = function(val, modList, enemyModList) + if val == true then + enemyModList:NewMod("CurseEffect", "MORE", -60, "Boss") + enemyModList:NewMod("ElementalResist", "BASE", 30, "Boss") + enemyModList:NewMod("ChaosResist", "BASE", 15, "Boss") + elseif val == "SHAPER" then + enemyModList:NewMod("CurseEffect", "MORE", -80, "Boss") + enemyModList:NewMod("ElementalResist", "BASE", 40, "Boss") + enemyModList:NewMod("ChaosResist", "BASE", 25, "Boss") + enemyModList:NewMod("SelfBleedDuration", "MORE", -50, "Boss") + enemyModList:NewMod("SelfPoisonDuration", "MORE", -50, "Boss") + enemyModList:NewMod("SelfIgniteDuration", "MORE", -50, "Boss") + end end }, { var = "enemyPhysicalReduction", type = "number", label = "Enemy Phys. Damage Reduction:", apply = function(val, modList, enemyModList) enemyModList:NewMod("PhysicalDamageReduction", "INC", val, "Config") @@ -416,6 +425,10 @@ function ConfigTabClass:BuildModList() if input[varData.var] and input[varData.var] ~= 0 then varData.apply(input[varData.var], modList, enemyModList) end + elseif varData.type == "list" then + if input[varData.var] then + varData.apply(input[varData.var], modList, enemyModList) + end end end end diff --git a/Classes/PassiveSpec.lua b/Classes/PassiveSpec.lua index 9f4783d0..eac37f5e 100644 --- a/Classes/PassiveSpec.lua +++ b/Classes/PassiveSpec.lua @@ -400,16 +400,18 @@ function PassiveSpecClass:BuildAllDependsAndPaths() for id, node in pairs(self.nodes) do node.depends = wipeTable(node.depends) node.dependsOnIntuitiveLeap = false - for nodeId, itemId in pairs(self.jewels) do - if self.allocNodes[nodeId] and self.nodes[nodeId].nodesInRadius[1][node.id] then - if itemId ~= 0 and self.build.itemsTab.list[itemId] and self.build.itemsTab.list[itemId].jewelData and self.build.itemsTab.list[itemId].jewelData.intuitiveLeap then - -- This node depends on Intuitive Leap - -- This flag: - -- 1. Prevents generation of paths from this node - -- 2. Prevents this node from being deallocted via dependancy - -- 3. Prevents allocation of path nodes when this node is being allocated - node.dependsOnIntuitiveLeap = true - break + if node.type ~= "classStart" then + for nodeId, itemId in pairs(self.jewels) do + if self.allocNodes[nodeId] and self.nodes[nodeId].nodesInRadius[1][node.id] then + if itemId ~= 0 and self.build.itemsTab.list[itemId] and self.build.itemsTab.list[itemId].jewelData and self.build.itemsTab.list[itemId].jewelData.intuitiveLeap then + -- This node depends on Intuitive Leap + -- This flag: + -- 1. Prevents generation of paths from this node + -- 2. Prevents this node from being deallocted via dependancy + -- 3. Prevents allocation of path nodes when this node is being allocated + node.dependsOnIntuitiveLeap = true + break + end end end end diff --git a/Modules/CalcSections.lua b/Modules/CalcSections.lua index 0e8495a4..fc7403fb 100644 --- a/Modules/CalcSections.lua +++ b/Modules/CalcSections.lua @@ -414,7 +414,11 @@ return { { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "PhysicalDamage" }, modType = "MORE", cfg = "bleed" }, }, }, { label = "Effective DPS Mod", flag = "effective", { format = "x {3:output:BleedEffMult}", { breakdown = "BleedEffMult" }, { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "PhysicalDamageTaken", "PhysicalDamageReduction" }, enemy = true }, }, }, { label = "Bleed DPS", { format = "{1:output:BleedDPS}", { breakdown = "BleedDPS" }, { breakdown = "MainHand.BleedDPS" }, { breakdown = "OffHand.BleedDPS" }, }, }, - { label = "Bleed Duration", { format = "{2:output:BleedDuration}s", { breakdown = "BleedDuration" }, { modName = "Duration", cfg = "bleed" }, }, }, + { label = "Bleed Duration", { format = "{2:output:BleedDuration}s", + { breakdown = "BleedDuration" }, + { label = "Player modifiers", modName = "Duration", cfg = "bleed" }, + { label = "Enemy modifiers", modName = "SelfBleedDuration", enemy = true }, + }, }, } }, { 1, "Poison", 1, "Poison", data.colorCodes.OFFENCE, { extra = "{0:output:PoisonChance}% {1:output:PoisonDPS} {2:output:PoisonDuration}s", @@ -440,7 +444,8 @@ return { }, }, { label = "Poison Duration", { format = "{2:output:PoisonDuration}s", { breakdown = "PoisonDuration" }, - { modName = "Duration", cfg = "poison" }, + { label = "Player modifiers", modName = "Duration", cfg = "poison" }, + { label = "Enemy modifiers", modName = "SelfPoisonDuration", enemy = true }, }, }, { label = "Dmg. per Poison", { format = "{1:output:PoisonDamage}", { breakdown = "MainHand.PoisonDamage" }, diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index 11fdee1c..ff3bf597 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -1122,14 +1122,17 @@ local function performCalcs(env) quality = 0, data = data.gems[value.name], }) + modDB.multipliers["CurseOnEnemy"] = (modDB.multipliers["CurseOnEnemy"] or 0) + 1 + local curseModList = { } for _, mod in ipairs(modList) do for _, tag in ipairs(mod.tagList) do if tag.type == "GlobalEffect" and tag.effectType == "Curse" then - enemyDB:AddMod(mod) + t_insert(curseModList, mod) break end end end + enemyDB:ScaleAddList(curseModList, (1 + enemyDB:Sum("INC", nil, "CurseEffect") / 100) * enemyDB:Sum("MORE", nil, "CurseEffect")) end -- Check for extra modifiers to apply to aura skills @@ -2553,7 +2556,7 @@ local function performCalcs(env) local inc = modDB:Sum("INC", dotCfg, "Damage", "PhysicalDamage") local more = round(modDB:Sum("MORE", dotCfg, "Damage", "PhysicalDamage"), 2) output.BleedDPS = baseVal * (1 + inc/100) * more * effMult - local durationMod = calcMod(modDB, dotCfg, "Duration") + local durationMod = calcMod(modDB, dotCfg, "Duration") * calcMod(enemyDB, nil, "SelfBleedDuration") globalOutput.BleedDuration = 5 * durationMod * debuffDurationMult if breakdown then t_insert(breakdown.BleedDPS, "x 0.1 ^8(bleed deals 10% per second)") @@ -2611,7 +2614,7 @@ local function performCalcs(env) else durationBase = 2 end - local durationMod = calcMod(modDB, dotCfg, "Duration") + local durationMod = calcMod(modDB, dotCfg, "Duration") * calcMod(enemyDB, nil, "SelfPoisonDuration") globalOutput.PoisonDuration = durationBase * durationMod * debuffDurationMult output.PoisonDamage = output.PoisonDPS * globalOutput.PoisonDuration if env.mode_average then @@ -2694,7 +2697,8 @@ local function performCalcs(env) local burnRateMod = calcMod(modDB, cfg, "IgniteBurnRate") output.IgniteDPS = baseVal * (1 + inc/100) * more * burnRateMod * effMult local incDur = modDB:Sum("INC", dotCfg, "EnemyIgniteDuration") + enemyDB:Sum("INC", nil, "SelfIgniteDuration") - globalOutput.IgniteDuration = 4 * (1 + incDur / 100) / burnRateMod * debuffDurationMult + local moreDur = enemyDB:Sum("MORE", nil, "SelfIgniteDuration") + globalOutput.IgniteDuration = 4 * (1 + incDur / 100) * moreDur / burnRateMod * debuffDurationMult if skillFlags.igniteCanStack then output.IgniteDamage = output.IgniteDPS * globalOutput.IgniteDuration if env.mode_average then @@ -2724,6 +2728,9 @@ local function performCalcs(env) if incDur ~= 0 then t_insert(globalBreakdown.IgniteDuration, s_format("x %.2f ^8(increased/reduced duration)", 1 + incDur/100)) end + if moreDur ~= 1 then + t_insert(globalBreakdown.IgniteDuration, s_format("x %.2f ^8(more/less duration)", moreDur)) + end if burnRateMod ~= 1 then t_insert(globalBreakdown.IgniteDuration, s_format("/ %.2f ^8(rate modifier)", burnRateMod)) end diff --git a/README.md b/README.md index 1683efde..d0c92fbb 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,12 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases) ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) ## Changelog +### 1.3.7 - 2017/02/22 + * The "enemy is a Boss" option in the Configuration tab now has 2 modes: Standard Boss, and Shaper/Guardian + * Standard Boss is equivelant to the old boss setting (30/30/30/15 resists, -60% curse effect) + * Shaper/Guardian applies: 40/40/40/25 resists, -80% curse effect, 50% less Bleed/Poison/Ignite Duration + * Witchfire Brew's Vulnerability aura now correctly accounts for less curse effect on bosses, and now counts for Malediction + ### 1.3.6 - 2017/02/21 * Added a skill part for Barrage that calculates the DPS from all projectiles hitting the target * The breakdown for Crit Chance in the Calcs tab now shows how far overcapped your crit chance is diff --git a/changelog.txt b/changelog.txt index 4ef289d2..fa340c6d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +VERSION[1.3.7][2017/02/22] + * The "enemy is a Boss" option in the Configuration tab now has 2 modes: Standard Boss, and Shaper/Guardian + * Standard Boss is equivelant to the old boss setting (30/30/30/15 resists, -60% curse effect) + * Shaper/Guardian applies: 40/40/40/25 resists, -80% curse effect, 50% less Bleed/Poison/Ignite Duration + * Witchfire Brew's Vulnerability aura now correctly accounts for less curse effect on bosses, and now counts for Malediction VERSION[1.3.6][2017/02/21] * Added a skill part for Barrage that calculates the DPS from all projectiles hitting the target * The breakdown for Crit Chance in the Calcs tab now shows how far overcapped your crit chance is diff --git a/manifest.xml b/manifest.xml index cce26432..aae768a0 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,20 +1,20 @@ - + - + - + @@ -29,7 +29,7 @@ - + @@ -44,8 +44,8 @@ - - + +