Skip to content

Commit e72ba81

Browse files
authored
Add support for modifying affix limits (#8258)
* Add support for modifying affix limits * fix magic item limits and names
1 parent d3ede31 commit e72ba81

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

src/Classes/Item.lua

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,11 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
739739
end
740740

741741
local lineLower = line:lower()
742-
if lineLower == "this item can be anointed by cassia" then
742+
if lineLower:match(" prefix modifiers? allowed") then
743+
self.prefixes.limit = (self.prefixes.limit or 0) + (tonumber(lineLower:match("%+(%d+) prefix modifiers? allowed")) or 0) - (tonumber(lineLower:match("%-(%d+) prefix modifiers? allowed")) or 0)
744+
elseif lineLower:match(" suffix modifiers? allowed") then
745+
self.suffixes.limit = (self.suffixes.limit or 0) + (tonumber(lineLower:match("%+(%d+) suffix modifiers? allowed")) or 0) - (tonumber(lineLower:match("%-(%d+) suffix modifiers? allowed")) or 0)
746+
elseif lineLower == "this item can be anointed by cassia" then
743747
self.canBeAnointed = true
744748
elseif lineLower == "can have a second enchantment modifier" then
745749
self.canHaveTwoEnchants = true
@@ -827,15 +831,26 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
827831
if not self.affixes then
828832
self.crafted = false
829833
elseif self.rarity == "MAGIC" then
830-
self.affixLimit = 2
834+
if self.prefixes.limit or self.suffixes.limit then
835+
self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + 1, 2), 0)
836+
self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + 1, 2), 0)
837+
self.affixLimit = self.prefixes.limit + self.suffixes.limit
838+
else
839+
self.affixLimit = 2
840+
end
831841
elseif self.rarity == "RARE" then
832842
self.affixLimit = ((self.type == "Jewel" and not (self.base.subType == "Abyss" and self.corrupted)) and 4 or 6)
843+
if self.prefixes.limit or self.suffixes.limit then
844+
self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
845+
self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
846+
self.affixLimit = self.prefixes.limit + self.suffixes.limit
847+
end
833848
else
834849
self.crafted = false
835850
end
836851
if self.crafted then
837852
for _, list in ipairs({self.prefixes,self.suffixes}) do
838-
for i = 1, self.affixLimit/2 do
853+
for i = 1, (list.limit or (self.affixLimit / 2)) do
839854
if not list[i] then
840855
list[i] = { modId = "None" }
841856
elseif list[i].modId ~= "None" and not self.affixes[list[i].modId] then
@@ -1164,17 +1179,17 @@ function ItemClass:Craft()
11641179
self.requirements.level = self.base.req.level
11651180
local statOrder = { }
11661181
for _, list in ipairs({self.prefixes,self.suffixes}) do
1167-
for i = 1, self.affixLimit / 2 do
1182+
for i = 1, (list.limit or (self.affixLimit / 2)) do
11681183
local affix = list[i]
11691184
if not affix then
11701185
list[i] = { modId = "None" }
11711186
end
11721187
local mod = self.affixes[affix.modId]
11731188
if mod then
11741189
if mod.type == "Prefix" then
1175-
self.namePrefix = mod.affix .. " "
1190+
self.namePrefix = mod.affix .. " " .. self.namePrefix
11761191
elseif mod.type == "Suffix" then
1177-
self.nameSuffix = " " .. mod.affix
1192+
self.nameSuffix = self.nameSuffix .. " " .. mod.affix
11781193
end
11791194
self.requirements.level = m_max(self.requirements.level or 0, m_floor(mod.level * 0.8))
11801195
local rangeScalar = getCatalystScalar(self.catalyst, mod.modTags, self.catalystQuality)

src/Classes/ItemsTab.lua

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,9 +1655,13 @@ end
16551655
-- Update affix selection controls
16561656
function ItemsTabClass:UpdateAffixControls()
16571657
local item = self.displayItem
1658-
for i = 1, item.affixLimit/2 do
1659-
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i)
1660-
self:UpdateAffixControl(self.controls["displayItemAffix"..(i+item.affixLimit/2)], item, "Suffix", "suffixes", i)
1658+
local prefixLimit = item.prefixes.limit or (item.affixLimit / 2)
1659+
for i = 1, item.affixLimit do
1660+
if i <= prefixLimit then
1661+
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i)
1662+
else
1663+
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Suffix", "suffixes", i - prefixLimit)
1664+
end
16611665
end
16621666
-- The custom affixes may have had their indexes changed, so the custom control UI is also rebuilt so that it will
16631667
-- reference the correct affix index.
@@ -1668,7 +1672,7 @@ function ItemsTabClass:UpdateAffixControl(control, item, type, outputTable, outp
16681672
local extraTags = { }
16691673
local excludeGroups = { }
16701674
for _, table in ipairs({"prefixes","suffixes"}) do
1671-
for index = 1, item.affixLimit/2 do
1675+
for index = 1, (item[table].limit or (item.affixLimit / 2)) do
16721676
if index ~= outputIndex or table ~= outputTable then
16731677
local mod = item.affixes[item[table][index] and item[table][index].modId]
16741678
if mod then
@@ -2537,7 +2541,7 @@ function ItemsTabClass:AddCustomModifierToDisplayItem()
25372541
if sourceId == "MASTER" then
25382542
local excludeGroups = { }
25392543
for _, modLine in ipairs({ self.displayItem.prefixes, self.displayItem.suffixes }) do
2540-
for i = 1, self.displayItem.affixLimit / 2 do
2544+
for i = 1, (modLine.limit or (self.displayItem.affixLimit / 2)) do
25412545
if modLine[i].modId ~= "None" then
25422546
excludeGroups[self.displayItem.affixes[modLine[i].modId].group] = true
25432547
end

src/Data/ModCache.lua

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,8 @@ c["+1 Armour per 10 Unreserved Maximum Mana"]={{[1]={[1]={div=10,stat="ManaUnres
116116
c["+1 Armour per 2 Strength"]={{[1]={[1]={div=2,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="Armour",type="BASE",value=1}},nil}
117117
c["+1 Life per 4 Dexterity"]={{[1]={[1]={div=4,stat="Dex",type="PerStat"},flags=0,keywordFlags=0,name="Life",type="BASE",value=1}},nil}
118118
c["+1 Mana per 4 Strength"]={{[1]={[1]={div=4,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="Mana",type="BASE",value=1}},nil}
119-
c["+1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "}
120-
c["+1 Prefix Modifier allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed -1 Suffix Modifier allowed "}
121-
c["+1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "}
122-
c["+1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "}
119+
c["+1 Prefix Modifier allowed"]={{},nil}
120+
c["+1 Suffix Modifier allowed"]={{},nil}
123121
c["+1 maximum Energy Shield per 5 Strength"]={{[1]={[1]={div=5,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=1}},nil}
124122
c["+1 second to Summon Skeleton Cooldown"]={{}," second to Summon Cooldown "}
125123
c["+1 to Level of Socketed Active Skill Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="active skill",value=1}}},nil}
@@ -1432,10 +1430,8 @@ c["+95 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",v
14321430
c["+96 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=96}},nil}
14331431
c["-1 Fire Damage taken from Hits per Mana Burn"]={{[1]={[1]={type="Multiplier",var="ManaBurnStacks"},flags=0,keywordFlags=0,name="FireDamageTakenWhenHit",type="BASE",value=-1}},nil}
14341432
c["-1 Physical Damage taken from Hits per Level"]={{[1]={[1]={type="Multiplier",var="Level"},flags=0,keywordFlags=0,name="PhysicalDamageTakenWhenHit",type="BASE",value=-1}},nil}
1435-
c["-1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "}
1436-
c["-1 Prefix Modifier allowed +1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed +1 Suffix Modifier allowed "}
1437-
c["-1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "}
1438-
c["-1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "}
1433+
c["-1 Prefix Modifier allowed"]={{},nil}
1434+
c["-1 Suffix Modifier allowed"]={{},nil}
14391435
c["-1 to Maximum Endurance Charges"]={{[1]={flags=0,keywordFlags=0,name="EnduranceChargesMax",type="BASE",value=-1}},nil}
14401436
c["-1 to Maximum Frenzy Charges"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesMax",type="BASE",value=-1}},nil}
14411437
c["-1 to Maximum Power Charges"]={{[1]={flags=0,keywordFlags=0,name="PowerChargesMax",type="BASE",value=-1}},nil}
@@ -1470,8 +1466,7 @@ c["-16 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,na
14701466
c["-18 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-18}},nil}
14711467
c["-2 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil}
14721468
c["-2 Physical Damage taken from Attacks"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil}
1473-
c["-2 Prefix Modifiers allowed"]={{}," Prefix Modifiers allowed "}
1474-
c["-2 Prefix Modifiers allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifiers allowed -1 Suffix Modifier allowed "}
1469+
c["-2 Prefix Modifiers allowed"]={{},nil}
14751470
c["-2 to Accuracy Rating per Level"]={{[1]={[1]={type="Multiplier",var="Level"},flags=0,keywordFlags=0,name="Accuracy",type="BASE",value=-2}},nil}
14761471
c["-2 to Level of Socketed Skill Gems per Socketed Gem"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},[2]={type="Multiplier",var="SocketedGemsIn{SlotName}"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="grants_active_skill",value=-2}}},nil}
14771472
c["-2 to Level of Socketed Support Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="support",value=-2}}},nil}

src/Modules/ModParser.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5088,6 +5088,8 @@ local specialModList = {
50885088
["manifeste?d? dancing dervishe?s? dies? when rampage ends"] = { },
50895089
["survival"] = { },
50905090
["you can have two different banners at the same time"] = { },
5091+
["[%+%-](%d+) prefix modifiers? allowed"] = { },
5092+
["[%+%-](%d+) suffix modifiers? allowed"] = { },
50915093
["can have a second enchantment modifier"] = { },
50925094
["can have (%d+) additional enchantment modifiers"] = { },
50935095
["this item can be anointed by cassia"] = { },

0 commit comments

Comments
 (0)