Add support for modifying affix limits (#8258)
* Add support for modifying affix limits * fix magic item limits and names
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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"] = { },
|
||||
|
||||
Reference in New Issue
Block a user