From 7b6f99a49d32f79d4f419c9ccd74d8875305f6a8 Mon Sep 17 00:00:00 2001 From: vaisest <4550061+vaisest@users.noreply.github.com> Date: Sat, 11 Jul 2026 19:45:40 +0300 Subject: [PATCH 1/2] Fix rathpith per 100 life shock mod --- src/Modules/CalcPerform.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index b9bc986004..b9cd355965 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -3241,6 +3241,9 @@ function calcs.perform(env, skipEHP) }, } + -- precalculate life for rathpith Spells have 3% increased Magnitude of Ailments per 100 maximum + -- Life cultivated mod + calcs.doActorLifeManaSpirit(env.player, true) local hitFlag if env.mode == "CALCS" then hitFlag = env.player.mainSkill.activeEffect.statSetCalcs.skillFlags.hit @@ -3265,9 +3268,9 @@ function calcs.perform(env, skipEHP) -- if not, use the generic modifiers -- Scorch/Sap/Brittle do not have guaranteed sources from hits, and therefore will only end up in this bit of code if it's not supposed to apply the skillModList, which is bad if ailment ~= "Scorch" and ailment ~= "Sap" and ailment ~= "Brittle" and not env.player.mainSkill.skillModList:Flag(nil, "Cannot"..ailment) and hitFlag and modDB:Flag(nil, "ChecksHighestDamage") then - effect = effect * calcLib.mod(env.player.mainSkill.skillModList, env.player.mainSkill.skillModList.skillCfg, "Enemy"..ailment.."Magnitude", "AilmentMagnitude") * calcLib.mod(enemyDB, nil, "Self"..ailment.."Magnitude", "AilmentMagnitude") + effect = effect * calcLib.mod(env.player.mainSkill.skillModList, env.player.mainSkill.skillCfg, "Enemy" .. ailment .. "Magnitude", "AilmentMagnitude") * calcLib.mod(enemyDB, nil, "Self" .. ailment .. "Magnitude", "AilmentMagnitude") else - effect = effect * calcLib.mod(env.player.mainSkill.skillModList, env.player.mainSkill.skillModList.skillCfg, "Enemy"..ailment.."Magnitude", "AilmentMagnitude") * calcLib.mod(enemyDB, nil, "Self"..ailment.."Magnitude", "AilmentMagnitude") + effect = effect * calcLib.mod(env.player.mainSkill.skillModList, env.player.mainSkill.skillCfg, "Enemy" .. ailment .. "Magnitude", "AilmentMagnitude") * calcLib.mod(enemyDB, nil, "Self" .. ailment .. "Magnitude", "AilmentMagnitude") end modDB:NewMod(ailment.."Override", "BASE", effect, mod.source, mod.flags, mod.keywordFlags, unpack(mod)) if mod.name == ailment.."Minimum" then From 4607b191e5592aa94d6751de67fa19cf03ab3c74 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sun, 12 Jul 2026 17:46:00 +1000 Subject: [PATCH 2/2] Fix Bleed mod not getting scales In PR https://github.com/PathOfBuildingCommunity/PathOfBuilding-PoE2/pull/1034 I changed the handling of the Rathpith mods so that they used ModFlag.Spell instead of Keyword flag That broke the handling of the ailments line though as it uses dotCfg and we specifically strip out the ModFlag.Spell from it so it doesn't get scaled by spell damage. This also stopped the Ailment mod from working though I made it use it's own full parsed line to be simpler and still use KeywordFlag so that the interaction works and the breakdown does too Also added a case so we don't accidentally break this down the line --- spec/System/TestSkills_spec.lua | 13 +++++++++++++ src/Modules/ModParser.lua | 2 ++ 2 files changed, 15 insertions(+) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index ef9711135d..54c449879f 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -894,6 +894,19 @@ describe("TestSkills", function() assert.True(avgDPS < lightningDPS) end) + it("scales spell bleed magnitude from maximum Life", function() + build.configTab.input.customMods = [[ + +5000 to maximum Life + 100% chance to inflict Bleeding on Hit + Non-Channelling Spells have 3% increased Magnitude of Ailments per 100 maximum Life + ]] + build.configTab:BuildModList() + build.skillsTab:PasteSocketGroup("Unearth 20/0 1") + runCallback("OnFrame") + + assert.are.equals(1 + math.floor(build.calcsTab.mainOutput.Life / 100) * 0.03, build.calcsTab.mainOutput.BleedMagnitudeEffect) + end) + it("Test flicker strike scales with power charges", function() build.skillsTab:PasteSocketGroup("Flicker Strike 20/0 1") build.itemsTab:CreateDisplayItemFromRaw([[ diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 7f4f65f3dd..52fa3b4316 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3821,6 +3821,8 @@ local specialModList = { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num) }, { type = "ActorCondition", actor = "enemy", var = "Poisoned" }), mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num) }, { type = "ActorCondition", actor = "enemy", var = "Electrocuted" }), } end, + ["non%-channelling spells have (%d+)%% increased magnitude of ailments per (%d+) maximum life"] = function(num, _, div) return { mod("AilmentMagnitude", "INC", num, nil, 0, KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "PerStat", stat = "Life", div = tonumber(div) }) } end, + ["non%-channelling spells have (%d+)%% reduced magnitude of ailments per (%d+) maximum life"] = function(num, _, div) return { mod("AilmentMagnitude", "INC", -num, nil, 0, KeywordFlag.Spell, { type = "SkillType", skillType = SkillType.Channel, neg = true }, { type = "PerStat", stat = "Life", div = tonumber(div) }) } end, -- Elemental Ailments ["enemies take (%d+)%% increased damage for each elemental ailment type among your ailments on them"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num) }, { type = "ActorCondition", actor = "enemy", var = "Frozen" }),