diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index 938447ae0a..d63d7374f9 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -11,21 +11,25 @@ local m_max = math.max local m_floor = math.floor local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"} -local catalystList = {"Abrasive", "Accelerating", "Fertile", "Imbued", "Intrinsic", "Noxious", "Prismatic", "Tempering", "Turbulent", "Unstable"} +local catalystList = {"Abrasive", "Accelerating", "Dextral", "Fertile", "Imbued", "Intrinsic", "Noxious", "Prismatic", "Sinistral", "Tempering", "Turbulent", "Unstable"} local catalystTags = { { "attack" }, { "speed" }, + { "suffix" }, { "life", "mana", "resource" }, { "caster" }, { "jewellery_attribute", "attribute" }, { "physical_damage", "chaos_damage" }, { "jewellery_resistance", "resistance" }, + { "prefix" }, { "jewellery_defense", "defences" }, { "jewellery_elemental" ,"elemental_damage" }, { "critical" }, } -local function getCatalystScalar(catalystId, tags, quality) +local function getCatalystScalar(catalystId, mod, quality) + local tags = mod.modTags + local affixType = mod.type if not catalystId or type(catalystId) ~= "number" or not catalystTags[catalystId] or not tags or type(tags) ~= "table" or #tags == 0 then return 1 end @@ -38,6 +42,9 @@ local function getCatalystScalar(catalystId, tags, quality) for _, curTag in ipairs(tags) do tagLookup[curTag] = true; end + if affixType == "Prefix" or affixType == "Suffix" then -- Sinistral/Dextral + tagLookup[affixType:lower()] = true + end -- Find if any of the catalyst's tags match the provided tags for _, catalystTag in ipairs(catalystTags[catalystId]) do @@ -732,7 +739,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) foundImplicit = true gameModeStage = "IMPLICIT" end - local catalystScalar = getCatalystScalar(self.catalyst, modLine.modTags, self.catalystQuality) + local catalystScalar = getCatalystScalar(self.catalyst, modLine, self.catalystQuality) local rangedLine = itemLib.applyRange(line, 1, catalystScalar) local modList, extra = modLib.parseMod(rangedLine) if (not modList or extra) and self.rawLines[l+1] then @@ -1275,7 +1282,7 @@ function ItemClass:Craft() 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) + local rangeScalar = getCatalystScalar(self.catalyst, mod, self.catalystQuality) for i, line in ipairs(mod) do line = itemLib.applyRange(line, affix.range or 0.5, rangeScalar) local order = mod.statOrder[i] @@ -1703,7 +1710,7 @@ function ItemClass:BuildModList() -- Check if line actually has a range if modLine.line:find("%((%-?%d+%.?%d*)%-(%-?%d+%.?%d*)%)") then local strippedModeLine = modLine.line:gsub("\n"," ") - local catalystScalar = getCatalystScalar(self.catalyst, modLine.modTags, self.catalystQuality) + local catalystScalar = getCatalystScalar(self.catalyst, modLine, self.catalystQuality) -- Put the modified value into the string local line = itemLib.applyRange(strippedModeLine, modLine.range, catalystScalar) -- Check if we can parse it before adding the mods diff --git a/src/Classes/ItemsTab.lua b/src/Classes/ItemsTab.lua index 3825af2d33..5ed9db4862 100644 --- a/src/Classes/ItemsTab.lua +++ b/src/Classes/ItemsTab.lua @@ -37,11 +37,13 @@ local influenceInfo = itemLib.influenceInfo.all local catalystQualityFormat = { "^x7F7F7FQuality (Attack Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Speed Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", + "^x7F7F7FQuality (Suffix Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Life and Mana Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Caster Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Attribute Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Physical and Chaos Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Resistance Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", + "^x7F7F7FQuality (Prefix Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Defense Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Elemental Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", "^x7F7F7FQuality (Critical Modifiers): "..colorCodes.MAGIC.."+%d%% (augmented)", @@ -589,8 +591,8 @@ holding Shift will put it in the second.]]) return (self.controls.displayItemCatalyst:IsShown() or self.controls.displayItemCatalystQualityEdit:IsShown()) and 28 or 0 end}) self.controls.displayItemCatalyst = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionCatalyst,"TOPRIGHT"}, {0, 0, 250, 20}, - {"Catalyst","Abrasive (Attack)","Accelerating (Speed)","Fertile (Life & Mana)","Imbued (Caster)","Intrinsic (Attribute)","Noxious (Physical & Chaos Damage)", - "Prismatic (Resistance)","Tempering (Defense)","Turbulent (Elemental)","Unstable (Critical)"}, + {"Catalyst","Abrasive (Attack)","Accelerating (Speed)","Dextral (Suffix)","Fertile (Life & Mana)","Imbued (Caster)","Intrinsic (Attribute)","Noxious (Physical & Chaos Damage)", + "Prismatic (Resistance)","Sinistral (Prefix)","Tempering (Defense)","Turbulent (Elemental)","Unstable (Critical)"}, function(index, value) self.displayItem.catalyst = index - 1 if not self.displayItem.catalystQuality then