From 7cb011d236daa1589a82e6b3045c2b6185eac970 Mon Sep 17 00:00:00 2001 From: cupkax Date: Thu, 25 Jun 2026 09:45:59 +1000 Subject: [PATCH 1/3] Channeling skills properly count lifecostpersecond as opposed to flat --- src/Classes/ModStore.lua | 4 ++-- src/Modules/ModParser.lua | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Classes/ModStore.lua b/src/Classes/ModStore.lua index b1e496349e..c9c80aabc3 100644 --- a/src/Classes/ModStore.lua +++ b/src/Classes/ModStore.lua @@ -557,8 +557,8 @@ function ModStoreClass:EvalMod(mod, cfg, globalLimits) local stat if tag.statList then stat = 0 - for _, stat in ipairs(tag.statList) do - stat = stat + GetStat(self, stat, cfg) + for _, statName in ipairs(tag.statList) do + stat = stat + GetStat(self, statName, cfg) end else stat = GetStat(self, tag.stat, cfg) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 8e4d54aec2..6f059fd0f6 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1285,7 +1285,7 @@ local preFlagList = { ["^attacks used by ballistas [hd][ae][va][el] "] = { flags = ModFlag.Attack, keywordFlags = KeywordFlag.Totem, tag = { type = "Condition", var = "BallistaSkill" } }, ["^attack skills [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Attack }, ["^spells [hgdf][aei][ivar][nel] a? ?"] = { flags = ModFlag.Spell }, - ["^spells which cost life gain "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, + ["^spells which cost life gain "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, ["^spell skills [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Spell }, ["^spell hits [ghd][ae][iva][eln] "] = { flags = ModFlag.Hit, keywordFlags = KeywordFlag.Spell }, ["^offering skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.Offering } }, @@ -1691,8 +1691,8 @@ local modTagList = { ["while affected by a normal abyss jewel"] = { tag = { type = "MultiplierThreshold", var = "NormalAbyssJewels", threshold = 1 } }, ["while an enemy with an open weakness is in your presence"] = { tag = { type = "Condition", var = "OpenWeaknessEnemyPresence" } }, -- This one means there's an enemy that has open weakness "nearby" ["against enemies with an open weakness"] = { tag = { type = "Condition", var = "EnemyHasOpenWeakness" } }, -- This one means the enemy you're targeting has open weakness - ["with skills that cost life"] = { tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, - ["with spells that cost life"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } }, + ["with skills that cost life"] = { tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, + ["with spells that cost life"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, -- Gem conditions ["if you have at least (%d+) (%a+) support gems socketed"] = function(count, _, color) return { tag = { type = "MultiplierThreshold", var = firstToUpper(color) .. "SupportGems", threshold = count } } end, ["if you have at least (%d+) red, green and blue support gems socketed"] = function(count) From da7f966bebc68275c192ea21a26249a4638dd0b8 Mon Sep 17 00:00:00 2001 From: cupkax Date: Thu, 25 Jun 2026 09:46:14 +1000 Subject: [PATCH 2/3] Regenerate cache --- src/Data/ModCache.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 9a787711e0..a72c1671f0 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -1500,7 +1500,7 @@ c["12% increased Spell Damage if you have Shapeshifted to Human form Recently"]= c["12% increased Spell Damage per 10 Spirit"]={{[1]={[1]={div=10,stat="Spirit",type="PerStat"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} c["12% increased Spell Damage while on Full Energy Shield"]={{[1]={[1]={type="Condition",var="FullEnergyShield"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} c["12% increased Spell Damage while wielding a Melee Weapon"]={{[1]={[1]={type="Condition",var="UsingMeleeWeapon"},flags=2,keywordFlags=0,name="Damage",type="INC",value=12}},nil} -c["12% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=12}},nil} +c["12% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={statList={[1]="LifeCost",[2]="LifePerSecondCost"},threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=12}},nil} c["12% increased Stun Buildup"]={{[1]={flags=0,keywordFlags=0,name="EnemyHeavyStunBuildup",type="INC",value=12}},nil} c["12% increased Stun Threshold"]={{[1]={flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=12}},nil} c["12% increased Stun Threshold if you haven't been Stunned Recently"]={{[1]={[1]={neg=true,type="Condition",var="StunnedRecently"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=12}},nil} @@ -2954,7 +2954,7 @@ c["40% increased Skill Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Dur c["40% increased Skill Speed while an enemy with an Open Weakness is in your Presence"]={{[1]={[1]={type="Condition",var="OpenWeaknessEnemyPresence"},flags=0,keywordFlags=0,name="Speed",type="INC",value=40},[2]={[1]={type="Condition",var="OpenWeaknessEnemyPresence"},flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=40},[3]={[1]={type="Condition",var="OpenWeaknessEnemyPresence"},flags=0,keywordFlags=0,name="TotemPlacementSpeed",type="INC",value=40}},nil} c["40% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=40}},nil} c["40% increased Spell Damage if one of your Minions has died Recently"]={{[1]={[1]={type="Condition",var="MinionsDiedRecently"},flags=2,keywordFlags=0,name="Damage",type="INC",value=40}},nil} -c["40% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=40}},nil} +c["40% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={statList={[1]="LifeCost",[2]="LifePerSecondCost"},threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=40}},nil} c["40% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=40}},nil} c["40% increased Spirit Reservation Efficiency"]={{[1]={flags=0,keywordFlags=0,name="SpiritReservationEfficiency",type="INC",value=40}},nil} c["40% increased Stun Buildup"]={{[1]={flags=0,keywordFlags=0,name="EnemyHeavyStunBuildup",type="INC",value=40}},nil} @@ -3338,7 +3338,7 @@ c["6% increased Reservation Efficiency of Minion Skills"]={{[1]={[1]={skillType= c["6% increased Skill Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=6}},nil} c["6% increased Skill Speed"]={{[1]={flags=0,keywordFlags=0,name="Speed",type="INC",value=6},[2]={flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=6},[3]={flags=0,keywordFlags=0,name="TotemPlacementSpeed",type="INC",value=6}},nil} c["6% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=6}},nil} -c["6% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=6}},nil} +c["6% increased Spell Damage with Spells that cost Life"]={{[1]={[1]={statList={[1]="LifeCost",[2]="LifePerSecondCost"},threshold=1,type="StatThreshold"},flags=2,keywordFlags=131072,name="Damage",type="INC",value=6}},nil} c["6% increased Strength"]={{[1]={flags=0,keywordFlags=0,name="Str",type="INC",value=6}},nil} c["6% increased Trap Throwing Speed"]={{[1]={flags=0,keywordFlags=0,name="TrapThrowingSpeed",type="INC",value=6}},nil} c["6% increased Warcry Cooldown Recovery Rate"]={{[1]={flags=0,keywordFlags=4,name="CooldownRecovery",type="INC",value=6}},nil} @@ -6725,8 +6725,8 @@ c["Spells fire 4 additional Projectiles"]={{[1]={flags=2,keywordFlags=0,name="Pr c["Spells fire Projectiles in a circle"]={nil,"Projectiles in a circle "} c["Spells for which this Sacrifice was fully made deal 30% more Damage"]={{[1]={flags=0,keywordFlags=0,name="EldritchEmpowerment",type="FLAG",value=true},[2]={[1]={type="Condition",var="EldritchEmpowermentSacrifice"},flags=2,keywordFlags=0,name="Damage",type="MORE",value=30}},nil} c["Spells have a 25% chance to inflict Withered for 4 seconds on Hit"]={{}," to inflict Withered "} -c["Spells which cost Life Gain 100% of Damage as Extra Physical Damage"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=0,keywordFlags=131072,name="DamageGainAsPhysical",type="BASE",value=100}},nil} -c["Spells which cost Life Gain 120% of Damage as Extra Physical Damage"]={{[1]={[1]={stat="LifeCost",threshold=1,type="StatThreshold"},flags=0,keywordFlags=131072,name="DamageGainAsPhysical",type="BASE",value=120}},nil} +c["Spells which cost Life Gain 100% of Damage as Extra Physical Damage"]={{[1]={[1]={statList={[1]="LifeCost",[2]="LifePerSecondCost"},threshold=1,type="StatThreshold"},flags=0,keywordFlags=131072,name="DamageGainAsPhysical",type="BASE",value=100}},nil} +c["Spells which cost Life Gain 120% of Damage as Extra Physical Damage"]={{[1]={[1]={statList={[1]="LifeCost",[2]="LifePerSecondCost"},threshold=1,type="StatThreshold"},flags=0,keywordFlags=131072,name="DamageGainAsPhysical",type="BASE",value=120}},nil} c["Stags deal 20% more damage per leap"]={nil,"Stags deal 20% more damage per leap "} c["Stags deal 20% more damage per leap Stags have 20% more Shock Magnitude per leap"]={nil,"Stags deal 20% more damage per leap Stags have 20% more Shock Magnitude per leap "} c["Stags have 20% more Shock Magnitude per leap"]={nil,"Stags have 20% more Shock Magnitude per leap "} From cfb0f059bdbe33e7d65e68ebac5b090b13ded95d Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 26 Jun 2026 17:07:45 +1000 Subject: [PATCH 3/3] Formatting --- src/Modules/ModParser.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 6f059fd0f6..4071f80049 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1285,7 +1285,7 @@ local preFlagList = { ["^attacks used by ballistas [hd][ae][va][el] "] = { flags = ModFlag.Attack, keywordFlags = KeywordFlag.Totem, tag = { type = "Condition", var = "BallistaSkill" } }, ["^attack skills [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Attack }, ["^spells [hgdf][aei][ivar][nel] a? ?"] = { flags = ModFlag.Spell }, - ["^spells which cost life gain "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, + ["^spells which cost life gain "] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = { "LifeCost", "LifePerSecondCost" }, threshold = 1 } }, ["^spell skills [hd][ae][va][el] "] = { keywordFlags = KeywordFlag.Spell }, ["^spell hits [ghd][ae][iva][eln] "] = { flags = ModFlag.Hit, keywordFlags = KeywordFlag.Spell }, ["^offering skills [hd][ae][va][el] "] = { tag = { type = "SkillType", skillType = SkillType.Offering } }, @@ -1691,8 +1691,8 @@ local modTagList = { ["while affected by a normal abyss jewel"] = { tag = { type = "MultiplierThreshold", var = "NormalAbyssJewels", threshold = 1 } }, ["while an enemy with an open weakness is in your presence"] = { tag = { type = "Condition", var = "OpenWeaknessEnemyPresence" } }, -- This one means there's an enemy that has open weakness "nearby" ["against enemies with an open weakness"] = { tag = { type = "Condition", var = "EnemyHasOpenWeakness" } }, -- This one means the enemy you're targeting has open weakness - ["with skills that cost life"] = { tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, - ["with spells that cost life"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = {"LifeCost", "LifePerSecondCost"}, threshold = 1 } }, + ["with skills that cost life"] = { tag = { type = "StatThreshold", statList = { "LifeCost", "LifePerSecondCost" }, threshold = 1 } }, + ["with spells that cost life"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "StatThreshold", statList = { "LifeCost", "LifePerSecondCost" }, threshold = 1 } }, -- Gem conditions ["if you have at least (%d+) (%a+) support gems socketed"] = function(count, _, color) return { tag = { type = "MultiplierThreshold", var = firstToUpper(color) .. "SupportGems", threshold = count } } end, ["if you have at least (%d+) red, green and blue support gems socketed"] = function(count)