Add support for modifying affix limits (#8258)

* Add support for modifying affix limits

* fix magic item limits and names
This commit is contained in:
Regisle
2024-08-31 11:15:17 +09:30
committed by GitHub
parent d3ede31e96
commit e72ba81c56
4 changed files with 37 additions and 21 deletions

View File

@@ -739,7 +739,11 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
end
local lineLower = line:lower()
if lineLower == "this item can be anointed by cassia" then
if lineLower:match(" prefix modifiers? allowed") then
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)
elseif lineLower:match(" suffix modifiers? allowed") then
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)
elseif lineLower == "this item can be anointed by cassia" then
self.canBeAnointed = true
elseif lineLower == "can have a second enchantment modifier" then
self.canHaveTwoEnchants = true
@@ -827,15 +831,26 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
if not self.affixes then
self.crafted = false
elseif self.rarity == "MAGIC" then
self.affixLimit = 2
if self.prefixes.limit or self.suffixes.limit then
self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + 1, 2), 0)
self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + 1, 2), 0)
self.affixLimit = self.prefixes.limit + self.suffixes.limit
else
self.affixLimit = 2
end
elseif self.rarity == "RARE" then
self.affixLimit = ((self.type == "Jewel" and not (self.base.subType == "Abyss" and self.corrupted)) and 4 or 6)
if self.prefixes.limit or self.suffixes.limit then
self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
self.affixLimit = self.prefixes.limit + self.suffixes.limit
end
else
self.crafted = false
end
if self.crafted then
for _, list in ipairs({self.prefixes,self.suffixes}) do
for i = 1, self.affixLimit/2 do
for i = 1, (list.limit or (self.affixLimit / 2)) do
if not list[i] then
list[i] = { modId = "None" }
elseif list[i].modId ~= "None" and not self.affixes[list[i].modId] then
@@ -1164,7 +1179,7 @@ function ItemClass:Craft()
self.requirements.level = self.base.req.level
local statOrder = { }
for _, list in ipairs({self.prefixes,self.suffixes}) do
for i = 1, self.affixLimit / 2 do
for i = 1, (list.limit or (self.affixLimit / 2)) do
local affix = list[i]
if not affix then
list[i] = { modId = "None" }
@@ -1172,9 +1187,9 @@ function ItemClass:Craft()
local mod = self.affixes[affix.modId]
if mod then
if mod.type == "Prefix" then
self.namePrefix = mod.affix .. " "
self.namePrefix = mod.affix .. " " .. self.namePrefix
elseif mod.type == "Suffix" then
self.nameSuffix = " " .. mod.affix
self.nameSuffix = self.nameSuffix .. " " .. mod.affix
end
self.requirements.level = m_max(self.requirements.level or 0, m_floor(mod.level * 0.8))
local rangeScalar = getCatalystScalar(self.catalyst, mod.modTags, self.catalystQuality)

View File

@@ -1655,9 +1655,13 @@ end
-- Update affix selection controls
function ItemsTabClass:UpdateAffixControls()
local item = self.displayItem
for i = 1, item.affixLimit/2 do
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i)
self:UpdateAffixControl(self.controls["displayItemAffix"..(i+item.affixLimit/2)], item, "Suffix", "suffixes", i)
local prefixLimit = item.prefixes.limit or (item.affixLimit / 2)
for i = 1, item.affixLimit do
if i <= prefixLimit then
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i)
else
self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Suffix", "suffixes", i - prefixLimit)
end
end
-- The custom affixes may have had their indexes changed, so the custom control UI is also rebuilt so that it will
-- reference the correct affix index.
@@ -1668,7 +1672,7 @@ function ItemsTabClass:UpdateAffixControl(control, item, type, outputTable, outp
local extraTags = { }
local excludeGroups = { }
for _, table in ipairs({"prefixes","suffixes"}) do
for index = 1, item.affixLimit/2 do
for index = 1, (item[table].limit or (item.affixLimit / 2)) do
if index ~= outputIndex or table ~= outputTable then
local mod = item.affixes[item[table][index] and item[table][index].modId]
if mod then
@@ -2537,7 +2541,7 @@ function ItemsTabClass:AddCustomModifierToDisplayItem()
if sourceId == "MASTER" then
local excludeGroups = { }
for _, modLine in ipairs({ self.displayItem.prefixes, self.displayItem.suffixes }) do
for i = 1, self.displayItem.affixLimit / 2 do
for i = 1, (modLine.limit or (self.displayItem.affixLimit / 2)) do
if modLine[i].modId ~= "None" then
excludeGroups[self.displayItem.affixes[modLine[i].modId].group] = true
end

View File

@@ -116,10 +116,8 @@ c["+1 Armour per 10 Unreserved Maximum Mana"]={{[1]={[1]={div=10,stat="ManaUnres
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}
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}
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}
c["+1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "}
c["+1 Prefix Modifier allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed -1 Suffix Modifier allowed "}
c["+1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "}
c["+1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "}
c["+1 Prefix Modifier allowed"]={{},nil}
c["+1 Suffix Modifier allowed"]={{},nil}
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}
c["+1 second to Summon Skeleton Cooldown"]={{}," second to Summon Cooldown "}
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
c["+96 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=96}},nil}
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}
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}
c["-1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "}
c["-1 Prefix Modifier allowed +1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed +1 Suffix Modifier allowed "}
c["-1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "}
c["-1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "}
c["-1 Prefix Modifier allowed"]={{},nil}
c["-1 Suffix Modifier allowed"]={{},nil}
c["-1 to Maximum Endurance Charges"]={{[1]={flags=0,keywordFlags=0,name="EnduranceChargesMax",type="BASE",value=-1}},nil}
c["-1 to Maximum Frenzy Charges"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesMax",type="BASE",value=-1}},nil}
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
c["-18 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-18}},nil}
c["-2 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil}
c["-2 Physical Damage taken from Attacks"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil}
c["-2 Prefix Modifiers allowed"]={{}," Prefix Modifiers allowed "}
c["-2 Prefix Modifiers allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifiers allowed -1 Suffix Modifier allowed "}
c["-2 Prefix Modifiers allowed"]={{},nil}
c["-2 to Accuracy Rating per Level"]={{[1]={[1]={type="Multiplier",var="Level"},flags=0,keywordFlags=0,name="Accuracy",type="BASE",value=-2}},nil}
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}
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}

View File

@@ -5088,6 +5088,8 @@ local specialModList = {
["manifeste?d? dancing dervishe?s? dies? when rampage ends"] = { },
["survival"] = { },
["you can have two different banners at the same time"] = { },
["[%+%-](%d+) prefix modifiers? allowed"] = { },
["[%+%-](%d+) suffix modifiers? allowed"] = { },
["can have a second enchantment modifier"] = { },
["can have (%d+) additional enchantment modifiers"] = { },
["this item can be anointed by cassia"] = { },