From 9d325c7f8944ec804d85d3493fb6caa7daccaa27 Mon Sep 17 00:00:00 2001 From: Viktor Magyari Date: Tue, 14 Jul 2026 11:43:32 +0200 Subject: [PATCH 1/4] Fix mod parsing for "enemies you " --- src/Data/ModCache.lua | 10 +++++----- src/Modules/ModParser.lua | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 96c7f933cb..ac24daaf6f 100644 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -5315,17 +5315,17 @@ c["Enemies take 18% increased Damage for each Elemental Ailment type among your c["Enemies take 20% increased Damage for each Elemental Ailment type among"]={nil,"Enemies take 20% increased Damage for each Elemental Ailment type among "} c["Enemies take 20% increased Damage for each Elemental Ailment type among your Ailments on them"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[2]={[1]={actor="enemy",type="ActorCondition",var="Chilled"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[3]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[4]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[5]={[1]={actor="enemy",type="ActorCondition",var="Scorched"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[6]={[1]={actor="enemy",type="ActorCondition",var="Brittle"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[7]={[1]={actor="enemy",type="ActorCondition",var="Sapped"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}},[8]={[1]={actor="enemy",type="ActorCondition",var="Electrocuted"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}}},nil} c["Enemies you Curse are Hindered, with 15% reduced Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="Condition:Hindered",type="FLAG",value=true}}}},nil} -c["Enemies you Curse cannot Recharge Energy Shield"]={{[1]={[1]={type="Condition",var="Curse"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="NoEnergyShieldRecharge",type="FLAG",value=true}}}},nil} -c["Enemies you Curse have -3% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Curse"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-3}}}},nil} -c["Enemies you Curse have -5% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Curse"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-5}}}},nil} -c["Enemies you Curse have -7% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Curse"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-7}}}},nil} +c["Enemies you Curse cannot Recharge Energy Shield"]={{[1]={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="NoEnergyShieldRecharge",type="FLAG",value=true}}}},nil} +c["Enemies you Curse have -3% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-3}}}},nil} +c["Enemies you Curse have -5% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-5}}}},nil} +c["Enemies you Curse have -7% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=-7}}}},nil} c["Enemies you Electrocute have 20% increased Damage taken"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Electrocuted"},flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=20}}}},nil} c["Enemies you Fully Armour Break are Maimed"]={nil,"Enemies you Fully Armour Break are Maimed "} c["Enemies you Fully Armour Break cannot Regenerate Life"]={nil,"Enemies you Fully Armour Break cannot Regenerate Life "} c["Enemies you Fully Armour Break cannot Regenerate Life Enemies you Fully Armour Break are Maimed"]={nil,"Enemies you Fully Armour Break cannot Regenerate Life Enemies you Fully Armour Break are Maimed "} c["Enemies you Heavy Stun while Shapeshifted are Intimidated for 6 seconds"]={nil,"Enemies you Heavy Stun while Shapeshifted are Intimidated for 6 seconds "} c["Enemies you Mark cannot deal Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Marked"},flags=0,keywordFlags=0,name="NeverCrit",type="FLAG",value=true}}},[2]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Marked"},flags=0,keywordFlags=0,name="Condition:NeverCrit",type="FLAG",value=true}}}},nil} -c["Enemies you Mark have 10% reduced Accuracy Rating"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Marked"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Accuracy",type="INC",value=-10}}}},nil} +c["Enemies you Mark have 10% reduced Accuracy Rating"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Marked"},flags=0,keywordFlags=0,name="Accuracy",type="INC",value=-10}}}},nil} c["Enemies you Mark take 10% increased Damage"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Marked"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DamageTaken",type="INC",value=10}}}},nil} c["Enemies you apply Incision to take 2% increased Physical Damage per Incision"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Multiplier",var="IncisionStack"},flags=0,keywordFlags=0,name="PhysicalDamageTaken",type="INC",value=2}}}},nil} c["Enemies you inflict Bleeding on cannot Regenerate Life"]={nil,"Enemies you inflict Bleeding on cannot Regenerate Life "} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 52fa3b4316..aee5e5f439 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -25,6 +25,17 @@ local function combineToUpper(str, sepPattern) end return outStr end + +-- Convert condition verb forms to their proper condition variable names +local function getConditionVar(verb) + local conditionMap = { + ["curse"] = "Cursed", + ["mark"] = "Marked", + ["electrocute"] = "Electrocuted", + } + return conditionMap[verb] or firstToUpper(verb) +end + -- Radius jewels that modify other nodes local function getSimpleConv(srcList, dst, type, remove, factor) return function(node, out, data) @@ -1370,7 +1381,7 @@ local preFlagList = { return { tag = { type = "Condition", var = cond:gsub("^%a", string.upper) }, applyToEnemy = true } end, ["^enemies you (%a+) have "] = function(cond) - return { tag = { type = "Condition", var = cond:gsub("^%a", string.upper) }, applyToEnemy = true } + return { tag = { type = "Condition", var = getConditionVar(cond) }, applyToEnemy = true } end, ["^while a pinnacle atlas boss is in your presence, enemies you've hit recently have "] = function(cond) return { playerTagList = { { type = "Condition", var = "HitRecently" }, { type = "ActorCondition", actor = "enemy", var = "PinnacleBoss" } }, applyToEnemy = true } @@ -1389,7 +1400,6 @@ local preFlagList = { ["^enemies you curse take "] = { tag = { type = "Condition", var = "Cursed" }, applyToEnemy = true, modSuffix = "Taken" }, ["^enemies you curse "] = { tag = { type = "Condition", var = "Cursed" }, applyToEnemy = true }, ["^targets cursed by you [hgd][ae][via][enl] "] = { tag = { type = "Condition", var = "Cursed" }, applyToEnemy = true }, - ["^enemies you electrocute have "] = { tag = { type = "Condition", var = "Electrocuted" }, applyToEnemy = true }, ["^nearby enemies take "] = { modSuffix = "Taken", applyToEnemy = true }, ["^nearby enemies have "] = { applyToEnemy = true }, ["^nearby enemies deal "] = { applyToEnemy = true }, @@ -4352,9 +4362,6 @@ local specialModList = { ["enemies you mark take (%d+)%% increased damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num) }, {type = "ActorCondition", actor = "enemy", var = "Marked" }), } end, - ["enemies you mark have (%d+)%% reduced accuracy rating"] = function(num) return { - mod("EnemyModifier", "LIST", { mod = mod("Accuracy", "INC", -num) }, {type = "ActorCondition", actor = "enemy", var = "Marked" }), - } end, ["you are cursed with level (%d+) (%D+)"] = function(num, _, name) return { mod("ExtraCurse", "LIST", { skillId = gemIdLookup[name], level = num, applyToPlayer = true }) } end, ["you are cursed with (%D+)"] = function(_, skill) return { mod("ExtraCurse", "LIST", { skillId = gemIdLookup[skill], level = 1, applyToPlayer = true }) } end, ["you are cursed with (%D+), with (%d+)%% increased effect"] = function(_, skill, num) return { @@ -5073,7 +5080,7 @@ local specialModList = { ["you cannot regenerate energy shield" ] = { flag("NoEnergyShieldRegen") }, ["cannot recharge or regenerate energy shield"] = { flag("NoEnergyShieldRecharge"), flag("NoEnergyShieldRegen") }, ["enemies you (%a+) cannot recharge energy shield"] = function(_, cond) return { - mod("EnemyModifier", "LIST", { mod = flag("NoEnergyShieldRecharge" )}, { type = "Condition", var = cond:gsub("^%a", string.upper) }) + mod("EnemyModifier", "LIST", { mod = flag("NoEnergyShieldRecharge" )}, { type = "Condition", var = getConditionVar(cond) }) } end, ["left ring slot: you cannot recharge or regenerate energy shield"] = { flag("NoEnergyShieldRecharge", { type = "SlotNumber", num = 1 }), flag("NoEnergyShieldRegen", { type = "SlotNumber", num = 1 }) }, ["cannot gain energy shield"] = { flag("CannotGainEnergyShield") }, From f6934472a8bf46d2bcdf4a2a542dc2dc7e42da9f Mon Sep 17 00:00:00 2001 From: Viktor Magyari Date: Wed, 15 Jul 2026 12:47:24 +0200 Subject: [PATCH 2/4] Move function and add todo notes --- src/Modules/ModParser.lua | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index aee5e5f439..74918c0932 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -26,16 +26,6 @@ local function combineToUpper(str, sepPattern) return outStr end --- Convert condition verb forms to their proper condition variable names -local function getConditionVar(verb) - local conditionMap = { - ["curse"] = "Cursed", - ["mark"] = "Marked", - ["electrocute"] = "Electrocuted", - } - return conditionMap[verb] or firstToUpper(verb) -end - -- Radius jewels that modify other nodes local function getSimpleConv(srcList, dst, type, remove, factor) return function(node, out, data) @@ -6408,6 +6398,18 @@ local flagTypes = { ["malediction"] = "HasMalediction", } + +-- Convert condition verb forms to their proper condition variable names +-- TODO better name? somehow combine with the function below? +local function getConditionVar(verb) + local conditionMap = { + ["curse"] = "Cursed", + ["mark"] = "Marked", + ["electrocute"] = "Electrocuted", + } + return conditionMap[verb] or firstToUpper(verb) +end + -- Table to map "status" like "Bleeding" to correct effect like "BleedImmune" local statusToEffectMap = { ["bleeding"] = "Bleed", From 249544f011976f69965d660478cf8e80bc7978ea Mon Sep 17 00:00:00 2001 From: Viktor Magyari Date: Wed, 15 Jul 2026 12:51:31 +0200 Subject: [PATCH 3/4] Move back getConditionVar --- src/Modules/ModParser.lua | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 74918c0932..b16292a2e4 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -26,6 +26,17 @@ local function combineToUpper(str, sepPattern) return outStr end +-- Convert condition verb forms to their proper condition variable names +-- TODO better name? somehow combine with the function below? +local function getConditionVar(verb) + local conditionMap = { + ["curse"] = "Cursed", + ["mark"] = "Marked", + ["electrocute"] = "Electrocuted", + } + return conditionMap[verb] or firstToUpper(verb) +end + -- Radius jewels that modify other nodes local function getSimpleConv(srcList, dst, type, remove, factor) return function(node, out, data) @@ -6398,18 +6409,6 @@ local flagTypes = { ["malediction"] = "HasMalediction", } - --- Convert condition verb forms to their proper condition variable names --- TODO better name? somehow combine with the function below? -local function getConditionVar(verb) - local conditionMap = { - ["curse"] = "Cursed", - ["mark"] = "Marked", - ["electrocute"] = "Electrocuted", - } - return conditionMap[verb] or firstToUpper(verb) -end - -- Table to map "status" like "Bleeding" to correct effect like "BleedImmune" local statusToEffectMap = { ["bleeding"] = "Bleed", From 62bc351fc6b189dc5133d6aad4fd244731ccf4d8 Mon Sep 17 00:00:00 2001 From: Viktor Magyari Date: Wed, 15 Jul 2026 12:55:36 +0200 Subject: [PATCH 4/4] Fix todo note --- src/Modules/ModParser.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index b16292a2e4..e56763f3ae 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -27,7 +27,7 @@ local function combineToUpper(str, sepPattern) end -- Convert condition verb forms to their proper condition variable names --- TODO better name? somehow combine with the function below? +-- TODO better name? somehow combine with statusToEffectMap local function getConditionVar(verb) local conditionMap = { ["curse"] = "Cursed",