Skip to content

Commit 09170ad

Browse files
committed
Add support for "% increased .+ modifier magnitudes" and Unborn Lich
1 parent ce8bffa commit 09170ad

4 files changed

Lines changed: 85 additions & 17 deletions

File tree

src/Classes/Item.lua

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,58 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
12871287
self.requirements.level = self.requirements.level or self.requirements.naturalLevel
12881288
self.requirements.level = m_max(self.requirements.level, self.requirements.naturalLevel, self.requirements.runeLevel)
12891289
end
1290+
-- first pass: parse
1291+
local modMagnitudeMods = {}
1292+
for _, mod in ipairs(self.explicitModLines) do
1293+
local rangedLine = itemLib.applyRange(mod.line, mod.range or 1, mod.valueScalar)
1294+
local pat = "(%d+)%% increased ?e?x?p?l?i?c?i?t? ([%a%s]+) modifier magnitudes"
1295+
local amount, modTagsString = rangedLine:lower():match(pat)
1296+
if amount and modTagsString then
1297+
local modTags = {}
1298+
-- elemental damage -> {elemental, damage}
1299+
for word in (modTagsString .. " "):gmatch("%S+") do
1300+
table.insert(modTags, word:lower())
1301+
end
1302+
table.insert(modMagnitudeMods, { tags = modTags, quality = tonumber(amount) })
1303+
end
1304+
end
1305+
if modMagnitudeMods and #modMagnitudeMods > 0 then
1306+
for _, mod in ipairs(self.explicitModLines) do
1307+
-- a modifier not having a range implies it's copied from a source that has information
1308+
-- baked into it, such as the trade copy paste format
1309+
if not mod.range then
1310+
goto magnitudeContinue
1311+
end
1312+
-- Create a fast lookup table for all provided tags
1313+
local tagLookup = {}
1314+
for _, curTag in ipairs(mod.modTags) do
1315+
tagLookup[curTag] = true;
1316+
end
1317+
-- the unborn lich "increased Desecrated Modifier magnitudes"
1318+
if mod.desecrated then
1319+
tagLookup.desecrated = true
1320+
end
1321+
for _, modMagnitudeMod in ipairs(modMagnitudeMods) do
1322+
local match = true
1323+
for _, magnitudeTag in ipairs(modMagnitudeMod.tags) do
1324+
if not tagLookup[magnitudeTag] then
1325+
match = false
1326+
end
1327+
end
1328+
if match then
1329+
mod.valueScalar = (mod.valueScalar or 1) + (modMagnitudeMod.quality / 100)
1330+
end
1331+
end
1332+
if mod.valueScalar and mod.valueScalar ~= 1 then
1333+
local rangedLine = itemLib.applyRange(mod.line, mod.range, mod.valueScalar, 1)
1334+
local modList, extra = modLib.parseMod(rangedLine)
1335+
mod.displayValueScalar = 1
1336+
mod.modList = modList
1337+
mod.extra = extra
1338+
end
1339+
::magnitudeContinue::
1340+
end
1341+
end
12901342
self.affixLimit = 0
12911343
if self.crafted then
12921344
if not self.affixes then
@@ -1457,8 +1509,13 @@ function ItemClass:BuildRaw()
14571509
t_insert(rawLines, "Item Level: " .. self.itemLevel)
14581510
end
14591511
local function writeModLine(modLine)
1460-
local displayValueScalar = modLine.displayValueScalar and (modLine.valueScalar or 1) * modLine.displayValueScalar
1461-
local line = displayValueScalar and itemLib.applyRange(modLine.line, modLine.range or main.defaultItemAffixQuality, displayValueScalar, modLine.corruptedRange) or modLine.line
1512+
local line
1513+
if modLine.rune then
1514+
local displayValueScalar = modLine.displayValueScalar and (modLine.valueScalar or 1) * modLine.displayValueScalar
1515+
line = displayValueScalar and itemLib.applyRange(modLine.line, modLine.range or main.defaultItemAffixQuality, displayValueScalar, modLine.corruptedRange) or modLine.line
1516+
else
1517+
line = modLine.line
1518+
end
14621519
if modLine.range and line:match("%(%-?[%d%.]+%-%-?[%d%.]+%)") then
14631520
line = "{range:" .. round(modLine.range, 3) .. "}" .. line
14641521
end

src/Data/ModCache.lua

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,7 @@ c["+80 to Evasion Rating"]={{[1]={flags=0,keywordFlags=0,name="Evasion",type="BA
949949
c["+80 to Stun Threshold"]={{[1]={flags=0,keywordFlags=0,name="StunThreshold",type="BASE",value=80}},nil}
950950
c["+80 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",value=80}},nil}
951951
c["+80 to maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="BASE",value=80}},nil}
952+
c["+85 to Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="BASE",value=85}},nil}
952953
c["+85 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",value=85}},nil}
953954
c["+85 to maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="BASE",value=85}},nil}
954955
c["+86 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=86}},nil}
@@ -1538,6 +1539,7 @@ c["13% increased Rarity of Items found"]={{[1]={flags=0,keywordFlags=0,name="Loo
15381539
c["13% increased Skill Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=13}},nil}
15391540
c["13% increased Skill Speed"]={{[1]={flags=0,keywordFlags=0,name="Speed",type="INC",value=13},[2]={flags=0,keywordFlags=0,name="WarcrySpeed",type="INC",value=13},[3]={flags=0,keywordFlags=0,name="TotemPlacementSpeed",type="INC",value=13}},nil}
15401541
c["13% increased Spell damage for each 200 total Mana you have Spent Recently"]={{[1]={[1]={div=200,type="Multiplier",var="ManaSpentRecently"},flags=2,keywordFlags=0,name="Damage",type="INC",value=13}},nil}
1542+
c["13% increased Spirit Reservation Efficiency"]={{[1]={flags=0,keywordFlags=0,name="SpiritReservationEfficiency",type="INC",value=13}},nil}
15411543
c["13% increased maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="INC",value=13}},nil}
15421544
c["13% increased maximum Mana"]={{[1]={flags=0,keywordFlags=0,name="Mana",type="INC",value=13}},nil}
15431545
c["13% of Damage from Deflected Hits is taken from Damageable Companion's Life before you"]={{[1]={flags=0,keywordFlags=0,name="TakenFromCompanionBeforeYouFromDeflected",type="BASE",value=13}},nil}
@@ -2216,6 +2218,9 @@ c["22% increased Attack Speed"]={{[1]={flags=1,keywordFlags=0,name="Speed",type=
22162218
c["22% increased Critical Damage Bonus for Attack Damage"]={{[1]={flags=1,keywordFlags=0,name="CritMultiplier",type="INC",value=22}},nil}
22172219
c["22% increased Critical Hit Chance for Attacks"]={{[1]={flags=1,keywordFlags=0,name="CritChance",type="INC",value=22}},nil}
22182220
c["22.5 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=22.5}},nil}
2221+
c["221% increased Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosDamage",type="INC",value=221}},nil}
2222+
c["221% increased Elemental Damage"]={{[1]={flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=221}},nil}
2223+
c["221% increased Spell Physical Damage"]={{[1]={flags=2,keywordFlags=0,name="PhysicalDamage",type="INC",value=221}},nil}
22192224
c["225% increased Armour, Evasion and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="Defences",type="INC",value=225}},nil}
22202225
c["225% increased Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=225}},nil}
22212226
c["225% increased Evasion Rating"]={{[1]={flags=0,keywordFlags=0,name="Evasion",type="INC",value=225}},nil}
@@ -2338,6 +2343,7 @@ c["25% increased Damage with Spears"]={{[1]={flags=268435460,keywordFlags=0,name
23382343
c["25% increased Damage with Swords"]={{[1]={flags=4194308,keywordFlags=0,name="Damage",type="INC",value=25}},nil}
23392344
c["25% increased Daze Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=25}}," Daze "}
23402345
c["25% increased Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=25}},nil}
2346+
c["25% increased Duration of Elemental Ailments on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyElementalAilmentDuration",type="INC",value=25}},nil}
23412347
c["25% increased Duration of each Puppet Master stack"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=25}}," of each Puppet Master stack "}
23422348
c["25% increased Electrocute Buildup"]={{[1]={flags=0,keywordFlags=0,name="EnemyElectrocuteBuildup",type="INC",value=25}},nil}
23432349
c["25% increased Elemental Ailment Threshold"]={{[1]={flags=0,keywordFlags=0,name="AilmentThreshold",type="INC",value=25}},nil}
@@ -2993,6 +2999,7 @@ c["400% increased Armour and Evasion"]={{[1]={flags=0,keywordFlags=0,name="Armou
29932999
c["400% increased Armour, Evasion and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="Defences",type="INC",value=400}},nil}
29943000
c["400% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=400}},nil}
29953001
c["41% increased Cast Speed"]={{[1]={flags=16,keywordFlags=0,name="Speed",type="INC",value=41}},nil}
3002+
c["42% chance to inflict Bleeding on Hit"]={{[1]={flags=0,keywordFlags=0,name="BleedChance",type="BASE",value=42}},nil}
29963003
c["43% increased Melee Damage against Heavy Stunned enemies"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="HeavyStunned"},flags=256,keywordFlags=0,name="Damage",type="INC",value=43}},nil}
29973004
c["43% reduced Effect of Chill on you"]={{[1]={flags=0,keywordFlags=0,name="SelfChillEffect",type="INC",value=-43}},nil}
29983005
c["43% reduced Magnitude of Ignite on you"]={{[1]={flags=0,keywordFlags=0,name="SelfIgniteEffect",type="INC",value=-43}},nil}
@@ -3416,6 +3423,7 @@ c["7% increased Exposure Effect"]={{[1]={flags=0,keywordFlags=0,name="FireExposu
34163423
c["7.5 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=7.5}},nil}
34173424
c["70% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=70}},nil}
34183425
c["70% increased Armour and Evasion"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEvasion",type="INC",value=70}},nil}
3426+
c["70% increased Desecrated Modifier magnitudes"]={{},nil}
34193427
c["70% increased Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=70}},nil}
34203428
c["70% increased Energy Shield from Equipped Helmet"]={{[1]={[1]={slotName="Helmet",type="SlotName"},flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=70}},nil}
34213429
c["70% increased Evasion Rating"]={{[1]={flags=0,keywordFlags=0,name="Evasion",type="INC",value=70}},nil}
@@ -3425,6 +3433,7 @@ c["70% increased Rarity of Items found"]={{[1]={flags=0,keywordFlags=0,name="Loo
34253433
c["70% reduced Recovery rate"]={{[1]={flags=0,keywordFlags=0,name="FlaskRecoveryRate",type="INC",value=-70}},nil}
34263434
c["700% increased Armour and Evasion"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEvasion",type="INC",value=700}},nil}
34273435
c["700% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=700}},nil}
3436+
c["71% increased Magnitude of Unholy Might buffs you grant"]={{[1]={flags=0,keywordFlags=0,name="Condition:UnholyMight",type="INC",value=71}}," Magnitude of buffs you grant "}
34283437
c["72% increased Amount Recovered"]={{[1]={flags=0,keywordFlags=0,name="FlaskRecovery",type="INC",value=72}},nil}
34293438
c["74% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=74}},nil}
34303439
c["74% increased Armour and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEnergyShield",type="INC",value=74}},nil}
@@ -3569,8 +3578,7 @@ c["80% increased Critical Damage Bonus with Crossbows"]={{[1]={flags=67108868,ke
35693578
c["80% increased Critical Hit Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=80}},nil}
35703579
c["80% increased Critical Hit Chance for Spells"]={{[1]={flags=2,keywordFlags=0,name="CritChance",type="INC",value=80}},nil}
35713580
c["80% increased Damage with Hits against Enemies that are on Full Life"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="FullLife"},flags=0,keywordFlags=262144,name="Damage",type="INC",value=80}},nil}
3572-
c["80% increased Desecrated Modifier magnitudes"]={{[1]={flags=0,keywordFlags=0,name="Magnitude",type="INC",value=80}}," Desecrated Modifier "}
3573-
c["80% increased Desecrated Modifier magnitudes 160% increased Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="Magnitude",type="INC",value=80}}," Desecrated Modifier 160% increased Chaos Damage "}
3581+
c["80% increased Desecrated Modifier magnitudes"]={{},nil}
35743582
c["80% increased Elemental Damage with Attacks"]={{[1]={flags=0,keywordFlags=65536,name="ElementalDamage",type="INC",value=80}},nil}
35753583
c["80% increased Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=80}},nil}
35763584
c["80% increased Evasion Rating"]={{[1]={flags=0,keywordFlags=0,name="Evasion",type="INC",value=80}},nil}
@@ -5316,6 +5324,7 @@ c["Enemies take 20% increased Damage for each Elemental Ailment type among"]={ni
53165324
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}
53175325
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}
53185326
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}
5327+
c["Enemies you Curse have -11% 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=-11}}}},nil}
53195328
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}
53205329
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}
53215330
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}

src/Data/Uniques/staff.lua

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -229,17 +229,17 @@ Grants Skill: Level (1-20) Feast of Flesh
229229
{variant:5}Grants Skill: Level (1-20) His Vile Intrusion
230230
{variant:6}Grants Skill: Level (1-20) His Winnowing Flame
231231
(60-80)% increased Desecrated Modifier magnitudes
232-
{variant:9}(100-160)% increased Chaos Damage
233-
{variant:11}(100-160)% increased Chaos Damage
234-
{variant:10}(100-160)% increased Spell Physical Damage
235-
{variant:8}+(40-60) to Spirit
236-
{variant:7}(10-20)% increased Duration of Elemental Ailments on Enemies
237-
{variant:7}(100-160)% increased Elemental Damage
238-
{variant:11}Enemies you kill have a (5-10)% chance to explode, dealing a quarter of their maximum Life as Chaos damage
239-
{variant:9}Enemies you Curse have -(8-5)% to Chaos Resistance
240-
{variant:10}(20-30)% chance to inflict Bleeding on Hit
241-
{variant:8}(6-10)% increased Spirit Reservation Efficiency
242-
{variant:12}(28-56)% increased Magnitude of Unholy Might buffs you grant
243-
{variant:12}You have Unholy Might
232+
{variant:9}{desecrated}(100-160)% increased Chaos Damage
233+
{variant:11}{desecrated}(100-160)% increased Chaos Damage
234+
{variant:10}{desecrated}(100-160)% increased Spell Physical Damage
235+
{variant:8}{desecrated}+(40-60) to Spirit
236+
{variant:7}{desecrated}(10-20)% increased Duration of Elemental Ailments on Enemies
237+
{variant:7}{desecrated}(100-160)% increased Elemental Damage
238+
{variant:11{desecrated}Enemies you kill have a (5-10)% chance to explode, dealing a quarter of their maximum Life as Chaos damage
239+
{variant:9}{desecrated}Enemies you Curse have -(8-5)% to Chaos Resistance
240+
{variant:10}{desecrated}(20-30)% chance to inflict Bleeding on Hit
241+
{variant:8}{desecrated}(6-10)% increased Spirit Reservation Efficiency
242+
{variant:12}{desecrated}(28-56)% increased Magnitude of Unholy Might buffs you grant
243+
{variant:12}{desecrated}You have Unholy Might
244244
]],
245245
}

src/Modules/ModParser.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6229,7 +6229,9 @@ local specialModList = {
62296229
} end,
62306230
["you can socket an additional copy of each lineage support gem, in different skills"] = { mod("MaxLineageCount", "BASE", 1) },
62316231
["you can socket (%d+) additional copies of each lineage support gem, in different skills"] = function(num) return { mod("MaxLineageCount", "BASE", num) } end,
6232-
["can be modified while corrupted"] = {}
6232+
["can be modified while corrupted"] = {},
6233+
-- handled in item parsing
6234+
["(%d+)%% increased ?e?x?p?l?i?c?i?t? ([%a%s]+) modifier magnitudes"] = {},
62336235
}
62346236
for _, name in pairs(data.keystones) do
62356237
specialModList[name:lower()] = { mod("Keystone", "LIST", name) }

0 commit comments

Comments
 (0)