From 5ee5cf8cbddd0f83b464a00892d9fca414da99e5 Mon Sep 17 00:00:00 2001 From: Peechey Date: Mon, 18 May 2026 07:13:11 +0000 Subject: [PATCH] Apply changes from https://github.com/PathOfBuildingCommunity/PathOfBuilding-PoE2/pull/1868 --- spec/System/TestItemMods_spec.lua.rej | 37 +++++++++++++++++++++++++++ src/Data/ModCache.lua.rej | 10 ++++++++ src/Modules/CalcDefence.lua | 1 - src/Modules/CalcDefence.lua.rej | 20 +++++++++++++++ src/Modules/CalcSections.lua.rej | 19 ++++++++++++++ src/Modules/ModParser.lua.rej | 15 +++++++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 spec/System/TestItemMods_spec.lua.rej create mode 100644 src/Data/ModCache.lua.rej create mode 100644 src/Modules/CalcDefence.lua.rej create mode 100644 src/Modules/CalcSections.lua.rej create mode 100644 src/Modules/ModParser.lua.rej diff --git a/spec/System/TestItemMods_spec.lua.rej b/spec/System/TestItemMods_spec.lua.rej new file mode 100644 index 0000000000..7de8976f70 --- /dev/null +++ b/spec/System/TestItemMods_spec.lua.rej @@ -0,0 +1,37 @@ +diff a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua (rejected hunks) +@@ -220,4 +220,35 @@ describe("TetsItemMods", function() + assert.are_not.equals(120, build.calcsTab.mainOutput.Armour) + runCallback("OnFrame") + end) ++ ++ it("sacrosanctum - add life recoup to es recoup", function() ++ build.itemsTab:CreateDisplayItemFromRaw([[ ++ Rarity: UNIQUE ++ Sacrosanctum ++ Corvus Mantle ++ Armour: 588 ++ Energy Shield: 202 ++ League: Dawn of the Hunt ++ Variant: Pre 0.4.0 ++ Variant: Current ++ Selected Variant: 2 ++ Quality: 20 ++ LevelReq: 68 ++ Implicits: 1 ++ {range:0.5}+(20-30) to Spirit ++ {range:0.5}(80-120)% increased Armour and Energy Shield ++ {range:0.5}+(20-30) to Strength ++ {range:0.5}+(20-30) to Intelligence ++ {range:0.5}+(17-23)% to Chaos Resistance ++ {variant:1}{range:0.5}(5-10)% of Damage taken Recouped as Life ++ {variant:2}{range:0.5}(10-20)% of Damage taken Recouped as Life ++ Damage taken Recouped as Life is also Recouped as Energy Shield ++ ]]) ++ build.itemsTab:AddDisplayItem() ++ runCallback("OnFrame") ++ ++ assert.True(build.calcsTab.calcsOutput.LifeRecoupRecoveryAvg > 0) ++ assert.True(build.calcsTab.calcsOutput.EnergyShieldRecoupRecoveryAvg > 0) ++ assert.True(build.calcsTab.calcsOutput.LifeRecoupRecoveryAvg == build.calcsTab.calcsOutput.EnergyShieldRecoupRecoveryAvg) ++ end) + end) diff --git a/src/Data/ModCache.lua.rej b/src/Data/ModCache.lua.rej new file mode 100644 index 0000000000..5155fdbccb --- /dev/null +++ b/src/Data/ModCache.lua.rej @@ -0,0 +1,10 @@ +diff a/src/Data/ModCache.lua b/src/Data/ModCache.lua (rejected hunks) +@@ -4677,7 +4677,7 @@ c["Damage of Enemies Hitting you is Unlucky while you are on Low Life 50% chance + c["Damage over Time bypasses your Energy Shield"]={nil,"Damage over Time bypasses your Energy Shield "} + c["Damage over Time bypasses your Energy Shield While not on Full Life, Sacrifice 1% of maximum Mana per Second to Recover that much Life"]={nil,"Damage over Time bypasses your Energy Shield While not on Full Life, Sacrifice 1% of maximum Mana per Second to Recover that much Life "} + c["Damage over Time bypasses your Energy Shield While not on Full Life, Sacrifice 10% of maximum Mana per Second to Recover that much Life"]={nil,"Damage over Time bypasses your Energy Shield While not on Full Life, Sacrifice 10% of maximum Mana per Second to Recover that much Life "} +-c["Damage taken Recouped as Life is also Recouped as Energy Shield"]={nil,"Damage taken Recouped as Life is also Recouped as Energy Shield "} ++c["Damage taken Recouped as Life is also Recouped as Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="AddLifeRecoupToEnergyShieldRecoup",type="FLAG",value=true}},nil} + c["Damage taken is Reserved from Darkness before being taken from Life or Energy Shield"]={nil,"Damage taken is Reserved from Darkness before being taken from Life or Energy Shield "} + c["Damage taken is Reserved from Darkness before being taken from Life or Energy Shield Darkness Reservation lasts for 5 seconds"]={nil,"Damage taken is Reserved from Darkness before being taken from Life or Energy Shield Darkness Reservation lasts for 5 seconds "} + c["Damage taken is Reserved from Darkness before being taken from Life or Energy Shield Darkness Reservation lasts for 5 seconds +10 to Maximum Darkness per Level"]={nil,"Damage taken is Reserved from Darkness before being taken from Life or Energy Shield Darkness Reservation lasts for 5 seconds +10 to Maximum Darkness per Level "} diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 6f73ef814b..0cd6e61660 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1451,7 +1451,6 @@ function calcs.defence(env, actor) end end end - -- pseudo recoup (eg %physical damage prevented from hits regenerated) for _, resource in ipairs(recoupTypeList) do if not modDB:Flag(nil, "No"..resource.."Regen") and not modDB:Flag(nil, "CannotGain"..resource) then diff --git a/src/Modules/CalcDefence.lua.rej b/src/Modules/CalcDefence.lua.rej new file mode 100644 index 0000000000..5788b89337 --- /dev/null +++ b/src/Modules/CalcDefence.lua.rej @@ -0,0 +1,20 @@ +diff a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua (rejected hunks) +@@ -1750,7 +1750,7 @@ function calcs.defence(env, actor) + + -- recoup + local function calcRecoup(recoup, recoupType, damageType) +- output[damageType..recoupType.."Recoup"] = (output[damageType..recoupType.."Recoup"] or 0) + recoup * output[recoupType.."RecoveryRateMod"] ++ output[damageType..recoupType.."Recoup"] = recoup * output[recoupType.."RecoveryRateMod"] + output["anyRecoup"] = output["anyRecoup"] + output[damageType..recoupType.."Recoup"] + if breakdown then + if output[recoupType.."RecoveryRateMod"] ~= 1 then +@@ -1777,9 +1777,6 @@ function calcs.defence(env, actor) + modDB:ReplaceMod("EnergyShieldRecoup", "BASE", recoup, mod.source) + end + end +- -- Kurgal mod +- calcRecoup(modDB:Sum("BASE", nil, "ElementalEnergyShieldRecoup"), "EnergyShield", "") +- + -- iterate over each damageType and add to base Life/Mana/Energy Shield Recoup + for _, recoupType in ipairs(recoupTypeList) do + for _, damageType in ipairs(dmgTypeList) do diff --git a/src/Modules/CalcSections.lua.rej b/src/Modules/CalcSections.lua.rej new file mode 100644 index 0000000000..82f2f8e9a0 --- /dev/null +++ b/src/Modules/CalcSections.lua.rej @@ -0,0 +1,19 @@ +diff a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua (rejected hunks) +@@ -2365,7 +2365,7 @@ return { + }, + { format = "{0:output:EnergyShieldRecoupRecoveryMax}", + { breakdown = "EnergyShieldRecoupRecoveryMax" }, +- { label = "Sources", modName = { "EnergyShieldRecoup", "ElementalEnergyShieldRecoup", "PhysicalEnergyShieldRecoup", "LightningEnergyShieldRecoup", "ColdEnergyShieldRecoup", "FireEnergyShieldRecoup", "ChaosEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } }, ++ { label = "Sources", modName = { "EnergyShieldRecoup", "ElementalEnergyShieldRecoup", "PhysicalEnergyShieldRecoup", "LightningEnergyShieldRecoup", "ColdEnergyShieldRecoup", "FireEnergyShieldRecoup", "ChaosEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } }, + { label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" }, + { label = "Faster Recoup", modName = "3SecondRecoup" }, + }, +@@ -2384,7 +2384,7 @@ return { + { label = "Faster Recoup", modName = "3SecondRecoup" }, + }, + { format = "{0:output:EnergyShieldRecoupRecoveryAvg}", +- { breakdown = "EnergyShieldRecoupRecoveryAvg" }, ++ { breakdown = "EnergyShieldRecoupRecoveryAvg" }, + { label = "Sources", modName = { "EnergyShieldRecoup", "ElementalEnergyShieldRecoup", "PhysicalEnergyShieldRecoup", "LightningEnergyShieldRecoup", "ColdEnergyShieldRecoup", "FireEnergyShieldRecoup", "ChaosEnergyShieldRecoup", "PhysicalDamageMitigatedEnergyShieldPseudoRecoup" } }, + { label = "Recovery modifiers", modName = "EnergyShieldRecoveryRate" }, + { label = "Faster Recoup", modName = "3SecondRecoup" }, diff --git a/src/Modules/ModParser.lua.rej b/src/Modules/ModParser.lua.rej new file mode 100644 index 0000000000..d74c27275b --- /dev/null +++ b/src/Modules/ModParser.lua.rej @@ -0,0 +1,15 @@ +diff a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua (rejected hunks) +@@ -4889,8 +4889,11 @@ local specialModList = { + ["(%d+)%% of damage taken while affected by clarity recouped as mana"] = function(num) return { mod("ManaRecoup", "BASE", num, { type = "Condition", var = "AffectedByClarity" }) } end, + ["recoup effects instead occur over 4 seconds"] = { flag("4SecondRecoup") }, + ["life recoup effects instead occur over 4 seconds"] = { flag("4SecondLifeRecoup") }, +- ["([%d%.]+)%% of physical damage prevented from hits in the past (%d+) seconds is regenerated as life per second"] = function(num, _, duration) return { +- mod("PhysicalDamageMitigatedLifePseudoRecoup", "BASE", num * duration), ++ ["damage taken recouped as (%a+) is also recouped as energy shield"] = function(_, type) return { ++ flag("Add"..firstToUpper(type).."RecoupToEnergyShieldRecoup"), ++ } end, ++ ["([%d%).]+)%% of physical damage prevented from hits in the past (%d+) seconds is regenerated as life per second"] = function(num, _, duration) return { ++ mod("PhysicalDamageMitigatedLifePseudoRecoup", "BASE", num * duration), + mod("PhysicalDamageMitigatedLifePseudoRecoupDuration", "BASE", duration), + } end, + ["([%d%.]+)%% of physical damage prevented from hits recently is regenerated as energy shield per second"] = function(num) return { mod("PhysicalDamageMitigatedEnergyShieldPseudoRecoup", "BASE", num * 4) } end,