diff --git a/src/Classes/ImportTab.lua b/src/Classes/ImportTab.lua index 499b0969bc..804bb5e98d 100644 --- a/src/Classes/ImportTab.lua +++ b/src/Classes/ImportTab.lua @@ -840,7 +840,7 @@ function ImportTabClass:ImportItem(itemData, slotName) if itemData.ilvl > 0 then item.itemLevel = itemData.ilvl end - if item.base.weapon or item.base.armour or item.base.flask then + if item.base.weapon or item.base.armour or item.base.flask or item.base.tincture then item.quality = 0 end if itemData.properties then diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index ec31307d10..47c404ebc6 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -362,6 +362,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.baseLines = { } local importedLevelReq local flaskBuffLines + local tinctureBuffLines local deferJewelRadiusIndexAssignment local gameModeStage = "FINDIMPLICIT" local foundExplicit, foundImplicit @@ -370,6 +371,8 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) local line = self.rawLines[l] if flaskBuffLines and flaskBuffLines[line] then flaskBuffLines[line] = nil + elseif tinctureBuffLines and tinctureBuffLines[line] then + tinctureBuffLines[line] = nil elseif line == "--------" then self.checkSection = true elseif line == "Split" then @@ -702,6 +705,14 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) t_insert(self.buffModLines, { line = line, extra = extra, modList = modList or { } }) end end + if self.base.tincture and self.base.tincture.buff and not tinctureBuffLines then + tinctureBuffLines = { } + for _, line in ipairs(self.base.tincture.buff) do + tinctureBuffLines[line] = true + local modList, extra = modLib.parseMod(line) + t_insert(self.buffModLines, { line = line, extra = extra, modList = modList or { } }) + end + end end -- Base lines don't need mod parsing, skip it goto continue @@ -1470,10 +1481,18 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum) flaskData.chargesMax = self.base.flask.chargesMax + calcLocal(modList, "FlaskCharges", "BASE", 0) flaskData.chargesUsed = m_floor(self.base.flask.chargesUsed * (1 + calcLocal(modList, "FlaskChargesUsed", "INC", 0) / 100)) flaskData.gainMod = 1 + calcLocal(modList, "FlaskChargeRecovery", "INC", 0) / 100 - flaskData.effectInc = calcLocal(modList, "FlaskEffect", "INC", 0) + flaskData.effectInc = calcLocal(modList, "FlaskEffect", "INC", 0) + calcLocal(modList, "LocalEffect", "INC", 0) for _, value in ipairs(modList:List(nil, "FlaskData")) do flaskData[value.key] = value.value end + elseif self.base.tincture then + local tinctureData = self.tinctureData + tinctureData.manaBurn = self.base.tincture.manaBurn * (1 + calcLocal(modList, "TinctureManaBurnRate", "INC", 0) / 100) * (1 + calcLocal(modList, "TinctureManaBurnRate", "MORE", 0) / 100) + tinctureData.cooldown = self.base.tincture.cooldown / (1 + calcLocal(modList, "TinctureCooldownRecovery", "INC", 0) / 100) + tinctureData.effectInc = calcLocal(modList, "TinctureEffect", "INC", 0) + calcLocal(modList, "LocalEffect", "INC", 0) + for _, value in ipairs(modList:List(nil, "TinctureData")) do + tinctureData[value.key] = value.value + end elseif self.type == "Jewel" then if self.name:find("Grand Spectrum") then local spectrumMod = modLib.createMod("Multiplier:GrandSpectrum", "BASE", 1, self.name) @@ -1539,6 +1558,9 @@ function ItemClass:BuildModList() elseif self.base.flask then self.flaskData = { } self.buffModList = { } + elseif self.base.tincture then + self.tinctureData = { } + self.buffModList = { } elseif self.type == "Jewel" then self.jewelData = { } end diff --git a/src/Classes/ItemDBControl.lua b/src/Classes/ItemDBControl.lua index 4f606be20d..e0a4a35282 100644 --- a/src/Classes/ItemDBControl.lua +++ b/src/Classes/ItemDBControl.lua @@ -232,7 +232,7 @@ function ItemDBClass:ListBuilder() item.measuredPower = 0 for slotName, slot in pairs(self.itemsTab.slots) do if self.itemsTab:IsItemValidForSlot(item, slotName) and not slot.inactive and (not slot.weaponSet or slot.weaponSet == (self.itemsTab.activeItemSet.useSecondWeaponSet and 2 or 1)) then - local output = calcFunc(item.base.flask and { toggleFlask = item } or { repSlotName = slotName, repItem = item }, { nodeAlloc = true, requirementsGems = true }) + local output = calcFunc(item.base.flask and { toggleFlask = item } or item.base.tincture and { toggleTincture = item } or { repSlotName = slotName, repItem = item }, { nodeAlloc = true, requirementsGems = true }) local measuredPower = output.Minion and output.Minion[self.sortMode] or output[self.sortMode] or 0 if self.sortDetail.transform then measuredPower = self.sortDetail.transform(measuredPower) diff --git a/src/Classes/ItemsTab.lua b/src/Classes/ItemsTab.lua index 45397c6691..e5d031d9fb 100644 --- a/src/Classes/ItemsTab.lua +++ b/src/Classes/ItemsTab.lua @@ -3261,6 +3261,17 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) for _, modLine in pairs(item.buffModLines) do tooltip:AddLine(16, (modLine.extra and colorCodes.UNSUPPORTED or colorCodes.MAGIC) .. modLine.line) end + elseif base.tincture then + -- Tincture-specific info + local tinctureData = item.tinctureData + if item.quality > 0 then + tooltip:AddLine(16, s_format("^x7F7F7FQuality: "..colorCodes.MAGIC.."+%d%%", item.quality)) + end + tooltip:AddLine(16, s_format("^x7F7F7FInflicts Mana Burn every %s%.2f ^x7F7F7FSeconds", main:StatColor(tinctureData.manaBurn, base.tincture.manaBurn), tinctureData.manaBurn)) + tooltip:AddLine(16, s_format("^x7F7F7F%s%.2f ^x7F7F7FSecond Cooldown When Deactivated", main:StatColor(tinctureData.cooldown, base.tincture.cooldown), tinctureData.cooldown)) + for _, modLine in pairs(item.buffModLines) do + tooltip:AddLine(16, (modLine.extra and colorCodes.UNSUPPORTED or colorCodes.MAGIC) .. modLine.line) + end elseif item.type == "Jewel" then -- Jewel-specific info if item.limit then @@ -3592,6 +3603,45 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) header = "^7Activating this flask will give you:" end self.build:AddStatComparesToTooltip(tooltip, calcBase, output, header) + elseif base.tincture then + -- Special handling for tinctures + local stats = { } + local tinctureData = item.tinctureData + local modDB = self.build.calcsTab.mainEnv.modDB + local output = self.build.calcsTab.mainOutput + local effectInc = modDB:Sum("INC", { actor = "player" }, "TinctureEffect") + + if item.rarity == "MAGIC" then + effectInc = effectInc + modDB:Sum("INC", { actor = "player" }, "MagicTinctureEffect") + end + local effectMod = 1 + (tinctureData.effectInc + effectInc) / 100 + if effectMod ~= 1 then + t_insert(stats, s_format("^8Tincture effect modifier: ^7%+d%%", effectMod * 100 - 100)) + end + t_insert(stats, s_format("^8Mana Burn Inflicted Every Second: ^7%.2f", tinctureData.manaBurn * (1 + modDB:Sum("INC", { actor = "player" }, "TinctureManaBurnRate")/100) * (1 + modDB:Sum("MORE", { actor = "player" }, "TinctureManaBurnRate")/100))) + local TincturesNotInflictManaBurn = m_min(modDB:Sum("BASE", nil, "TincturesNotInflictManaBurn"), 100) + if TincturesNotInflictManaBurn ~= 0 then + t_insert(stats, s_format("^8Chance to not inflict Mana Burn: ^7%d%%", TincturesNotInflictManaBurn)) + end + t_insert(stats, s_format("^8Tincture Cooldown when deactivated: ^7%.2f^8 seconds", tinctureData.cooldown / (1 + modDB:Sum("INC", { actor = "player" }, "TinctureCooldownRecovery")/100))) + + if stats[1] then + tooltip:AddLine(14, "^7Effective tincture stats:") + for _, stat in ipairs(stats) do + tooltip:AddLine(14, stat) + end + end + local storedGlobalCacheDPSView = GlobalCache.useFullDPS + GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 + local output = calcFunc({ toggleTincture = item }, {}) + GlobalCache.useFullDPS = storedGlobalCacheDPSView + local header + if self.build.calcsTab.mainEnv.tinctures[item] then + header = "^7Deactivating this tincture will give you:" + else + header = "^7Activating this tincture will give you:" + end + self.build:AddStatComparesToTooltip(tooltip, calcBase, output, header) else self:UpdateSockets() -- Build sorted list of slots to compare with diff --git a/src/Data/Bases/tincture.lua b/src/Data/Bases/tincture.lua index 0f2dbb96b3..d95e67e0aa 100644 --- a/src/Data/Bases/tincture.lua +++ b/src/Data/Bases/tincture.lua @@ -1,68 +1,76 @@ --- This file is automatically generated, do not edit! +-- This file is currently manually edited, data will be wrong! -- Item data (c) Grinding Gear Games local itemBases = ... itemBases["Ironwood Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "Damaging Hits always Stun Enemies that are on Full Life", - implicitModTypes = { { "attack" }, }, + implicit = "Damaging Hits with Melee Weapons always Stun Enemies that are on Full Life", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Ashbark Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "All Damage can Ignite", - implicitModTypes = { { "elemental", "fire", "attack", "ailment" }, }, + implicit = "(20-30)% Chance to Ignite with Melee Weapons\n(80-100)% Increased Damage with Ignite From Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Fulgurite Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "All Damage can Shock", - implicitModTypes = { { "elemental", "lightning", "attack", "ailment" }, }, + implicit = "(20-30)% Chance to Shock with Melee Weapons\n(35-40)% Increased Effect of Shock from Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Poisonberry Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "All Damage can Poison", - implicitModTypes = { { "poison", "chaos", "attack", "ailment" }, }, + implicit = "(20-30)% Chance to Poison with Melee Weapons\n(80-100)% Increased Damage with Poison From Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Rosethorn Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "+25% to Critical Strike Chance against Enemies that are on Full Life", - implicitModTypes = { { "attack", "critical" }, }, + implicit = "(100-150)% Increased Critical Strike Chance with Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Oakbranch Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "Culling Strike", - implicitModTypes = { { "attack" }, }, + implicit = "Culling Strike with Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Borealwood Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "All Damage can Freeze", - implicitModTypes = { { "elemental", "cold", "attack", "ailment" }, }, + implicit = "(20-30)% Chance to Freeze with Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } itemBases["Blood Sap Tincture"] = { type = "Tincture", - hidden = true, tags = { tincture = true, default = true, }, - implicit = "Bleeding you inflict on non-Bleeding Enemies deals 30% more Damage", - implicitModTypes = { { "bleed", "physical", "attack", "ailment" }, }, + implicit = "(20-30)% Chance to Bleed with Melee Weapons\n(80-100)% Increased Damage with Bleed From Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, + req = { }, +} +itemBases["Prismatic Tincture"] = { + type = "Tincture", + tags = { tincture = true, default = true, }, + implicit = "(80-100)% Increased Elemental Damage with Melee Weapons", + implicitModTypes = { }, + tincture = { manaBurn = 0.6, cooldown = 7 }, req = { }, } diff --git a/src/Data/ModTincture.lua b/src/Data/ModTincture.lua index 3aeb849fcd..51df32d77d 100644 --- a/src/Data/ModTincture.lua +++ b/src/Data/ModTincture.lua @@ -1,124 +1,12 @@ --- This file is automatically generated, do not edit! +-- This file is currently manually edited, data will be wrong! -- Item data (c) Grinding Gear Games return { - ["TinctureApplyWitherStacks1"] = { type = "Prefix", affix = "Wilting", "Hits Inflict (2-3) Withered Debuffs for 2 seconds on Enemies that are on Full Life", statOrderKey = "9826", statOrder = { 9826 }, level = 45, group = "WeaponApplyWitherStacksOnHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureApplyWitherStacks2"] = { type = "Prefix", affix = "Drooping", "Hits Inflict (4-5) Withered Debuffs for 2 seconds on Enemies that are on Full Life", statOrderKey = "9826", statOrder = { 9826 }, level = 45, group = "WeaponApplyWitherStacksOnHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureApplyWitherStacks3"] = { type = "Prefix", affix = "Withering", "Hits Inflict (6-7) Withered Debuffs for 2 seconds on Enemies that are on Full Life", statOrderKey = "9826", statOrder = { 9826 }, level = 72, group = "WeaponApplyWitherStacksOnHit", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureStealPowerChargesOnHit"] = { type = "Suffix", affix = "of Enervation", "Hits Steal Power Charges", statOrderKey = "9856", statOrder = { 9856 }, level = 1, group = "WeaponStealPowerChargesOnHit", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "power_charge", "attack" }, }, - ["TinctureStealFrenzyChargesOnHit"] = { type = "Suffix", affix = "of Poaching", "Hits Steal Frenzy Charges", statOrderKey = "9855", statOrder = { 9855 }, level = 1, group = "WeaponStealFrenzyChargesOnHit", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "frenzy_charge", "attack" }, }, - ["TinctureStealEnduranceChargesOnHit"] = { type = "Suffix", affix = "of Sabotage", "Hits Steal Endurance Charges", statOrderKey = "9854", statOrder = { 9854 }, level = 1, group = "WeaponStealEnduranceChargesOnHit", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "endurance_charge", "attack" }, }, - ["TinctureDamageVsLowLifeEnemies1"] = { type = "Prefix", affix = "Subduing", "(30-40)% increased Damage against Enemies that are on Low Life", statOrderKey = "9866", statOrder = { 9866 }, level = 1, group = "WeaponDamageVsLowLifeEnemies", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "damage", "attack" }, }, - ["TinctureDamageVsLowLifeEnemies2"] = { type = "Prefix", affix = "Overpowering", "(50-60)% increased Damage against Enemies that are on Low Life", statOrderKey = "9866", statOrder = { 9866 }, level = 1, group = "WeaponDamageVsLowLifeEnemies", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "damage", "attack" }, }, - ["TinctureDamageVsLowLifeEnemies3"] = { type = "Prefix", affix = "Conquering", "(75-90)% increased Damage against Enemies that are on Low Life", statOrderKey = "9866", statOrder = { 9866 }, level = 60, group = "WeaponDamageVsLowLifeEnemies", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "damage", "attack" }, }, - ["TinctureGainRareModOnKillingBlowFor60SecondsChance1"] = { type = "Suffix", affix = "of Pursuit", "Killing Blows against Rare Monsters have a (9-12)% chance", "to grant one of their Modifiers for 60 seconds", statOrderKey = "9834,9834.1", statOrder = { 9834, 9834.1 }, level = 70, group = "WeaponGainRareModOnKillingBlowFor60SecondsChance", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureGainRareModOnKillingBlowFor60SecondsChance2"] = { type = "Suffix", affix = "of the Chase", "Killing Blows against Rare Monsters have a (13-18)% chance", "to grant one of their Modifiers for 60 seconds", statOrderKey = "9834,9834.1", statOrder = { 9834, 9834.1 }, level = 70, group = "WeaponGainRareModOnKillingBlowFor60SecondsChance", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureGainRareModOnKillingBlowFor60SecondsChance3"] = { type = "Suffix", affix = "of the Hunt", "Killing Blows against Rare Monsters have a (20-30)% chance", "to grant one of their Modifiers for 60 seconds", statOrderKey = "9834,9834.1", statOrder = { 9834, 9834.1 }, level = 81, group = "WeaponGainRareModOnKillingBlowFor60SecondsChance", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureFireExplodeChance1"] = { type = "Suffix", affix = "of Kindling", "Killing Blows have a (8-12)% chance for Enemies to Explode, dealing a tenth of their maximum Life as Fire Damage", statOrderKey = "9832", statOrder = { 9832 }, level = 70, group = "WeaponFireExplodeChance", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureFireExplodeChance2"] = { type = "Suffix", affix = "of Firewood", "Killing Blows have a (13-16)% chance for Enemies to Explode, dealing a tenth of their maximum Life as Fire Damage", statOrderKey = "9832", statOrder = { 9832 }, level = 70, group = "WeaponFireExplodeChance", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureFireExplodeChance3"] = { type = "Suffix", affix = "of Tinder", "Killing Blows have a (17-25)% chance for Enemies to Explode, dealing a tenth of their maximum Life as Fire Damage", statOrderKey = "9832", statOrder = { 9832 }, level = 81, group = "WeaponFireExplodeChance", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureInstantLeechVsLowLife1"] = { type = "Suffix", affix = "of the Lamprey", "(8-12)% of Leech is Instant against Low Life Enemies", statOrderKey = "9836", statOrder = { 9836 }, level = 70, group = "WeaponInstantLeechVsLowLife", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureInstantLeechVsLowLife2"] = { type = "Suffix", affix = "of the Leech", "(13-16)% of Leech is Instant against Low Life Enemies", statOrderKey = "9836", statOrder = { 9836 }, level = 70, group = "WeaponInstantLeechVsLowLife", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureInstantLeechVsLowLife3"] = { type = "Suffix", affix = "of the Bloodsucker", "(17-25)% of Leech is Instant against Low Life Enemies", statOrderKey = "9836", statOrder = { 9836 }, level = 81, group = "WeaponInstantLeechVsLowLife", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureShatterOnKill1"] = { type = "Suffix", affix = "of the Tundra", "Killing Blows have (26-35)% chance to Shatter Enemies as though Frozen", statOrderKey = "9852", statOrder = { 9852 }, level = 45, group = "WeaponShatterOnKill", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureShatterOnKill2"] = { type = "Suffix", affix = "of the Snow Forest", "Killing Blows have (36-45)% chance to Shatter Enemies as though Frozen", statOrderKey = "9852", statOrder = { 9852 }, level = 45, group = "WeaponShatterOnKill", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureShatterOnKill3"] = { type = "Suffix", affix = "of the Alpine Wood", "Killing Blows have (46-60)% chance to Shatter Enemies as though Frozen", statOrderKey = "9852", statOrder = { 9852 }, level = 72, group = "WeaponShatterOnKill", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack" }, }, - ["TinctureCriticalStrikeMultiplierVsFullLife1"] = { type = "Suffix", affix = "of Rage", "+(50-80)% to Critical Strike Multiplier against Enemies that are on Full Life", statOrderKey = "9864", statOrder = { 9864 }, level = 45, group = "WeaponCriticalStrikeMultiplierVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "critical" }, }, - ["TinctureCriticalStrikeMultiplierVsFullLife2"] = { type = "Suffix", affix = "of Fury", "+(81-105)% to Critical Strike Multiplier against Enemies that are on Full Life", statOrderKey = "9864", statOrder = { 9864 }, level = 45, group = "WeaponCriticalStrikeMultiplierVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "critical" }, }, - ["TinctureCriticalStrikeMultiplierVsFullLife3"] = { type = "Suffix", affix = "of Ferocity", "+(106-140)% to Critical Strike Multiplier against Enemies that are on Full Life", statOrderKey = "9864", statOrder = { 9864 }, level = 72, group = "WeaponCriticalStrikeMultiplierVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "critical" }, }, - ["TinctureOnslaughtOnKill1"] = { type = "Suffix", affix = "of the Hare", "(6-9)% chance to gain Onslaught for 10 seconds on Killing Blow", statOrderKey = "9869", statOrder = { 9869 }, level = 1, group = "WeaponOnslaughtOnKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "speed" }, }, - ["TinctureOnslaughtOnKill2"] = { type = "Suffix", affix = "of the Rabbit", "(10-15)% chance to gain Onslaught for 10 seconds on Killing Blow", statOrderKey = "9869", statOrder = { 9869 }, level = 1, group = "WeaponOnslaughtOnKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "speed" }, }, - ["TinctureOnslaughtOnKill3"] = { type = "Suffix", affix = "of the Fox", "(16-25)% chance to gain Onslaught for 10 seconds on Killing Blow", statOrderKey = "9869", statOrder = { 9869 }, level = 60, group = "WeaponOnslaughtOnKill", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "attack", "speed" }, }, - ["TinctureCoverInAshVsFullLife1"] = { type = "Prefix", affix = "Ashfall", "Cover Enemies in Ash on Hit for (4-5) seconds against Enemies that are on Full Life", statOrderKey = "9862", statOrder = { 9862 }, level = 45, group = "WeaponCoverInAshVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureCoverInAshVsFullLife2"] = { type = "Prefix", affix = "Ember", "Cover Enemies in Ash on Hit for (6-7) seconds against Enemies that are on Full Life", statOrderKey = "9862", statOrder = { 9862 }, level = 45, group = "WeaponCoverInAshVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureCoverInAshVsFullLife3"] = { type = "Prefix", affix = "Cindered", "Cover Enemies in Ash on Hit for (8-12) seconds against Enemies that are on Full Life", statOrderKey = "9862", statOrder = { 9862 }, level = 72, group = "WeaponCoverInAshVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "fire", "attack" }, }, - ["TinctureCoverInFrostVsFullLife1"] = { type = "Prefix", affix = "Frostfall", "Cover Enemies in Frost on Hit for (4-5) seconds against Enemies that are on Full Life", statOrderKey = "9863", statOrder = { 9863 }, level = 45, group = "WeaponCoverInFrostVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "cold", "attack" }, }, - ["TinctureCoverInFrostVsFullLife2"] = { type = "Prefix", affix = "Snowdrift", "Cover Enemies in Frost on Hit for (6-7) seconds against Enemies that are on Full Life", statOrderKey = "9863", statOrder = { 9863 }, level = 45, group = "WeaponCoverInFrostVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "cold", "attack" }, }, - ["TinctureCoverInFrostVsFullLife3"] = { type = "Prefix", affix = "Blizzard", "Cover Enemies in Frost on Hit for (8-12) seconds against Enemies that are on Full Life", statOrderKey = "9863", statOrder = { 9863 }, level = 72, group = "WeaponCoverInFrostVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental", "cold", "attack" }, }, - ["TinctureCrushOnHitVsFullLife1"] = { type = "Prefix", affix = "Crushing", "Crush Enemies for (4-5) seconds when you Hit them while they are on Full Life", statOrderKey = "9865", statOrder = { 9865 }, level = 45, group = "WeaponCrushOnHitVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureCrushOnHitVsFullLife2"] = { type = "Prefix", affix = "Smashing", "Crush Enemies for (6-7) seconds when you Hit them while they are on Full Life", statOrderKey = "9865", statOrder = { 9865 }, level = 45, group = "WeaponCrushOnHitVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureCrushOnHitVsFullLife3"] = { type = "Prefix", affix = "Pulverising", "Crush Enemies for (8-12) seconds when you Hit them while they are on Full Life", statOrderKey = "9865", statOrder = { 9865 }, level = 72, group = "WeaponCrushOnHitVsFullLife", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureOverwhelm1"] = { type = "Prefix", affix = "Overwhelming", "Overwhelm (9-12)% of Physical Damage Reduction", statOrderKey = "9842", statOrder = { 9842 }, level = 1, group = "WeaponOverwhelm", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureOverwhelm2"] = { type = "Prefix", affix = "Battering", "Overwhelm (13-16)% of Physical Damage Reduction", statOrderKey = "9842", statOrder = { 9842 }, level = 1, group = "WeaponOverwhelm", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureOverwhelm3"] = { type = "Prefix", affix = "Pummeling", "Overwhelm (17-25)% of Physical Damage Reduction", statOrderKey = "9842", statOrder = { 9842 }, level = 60, group = "WeaponOverwhelm", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "physical", "attack" }, }, - ["TinctureFirePen1"] = { type = "Prefix", affix = "Searing", "Damage Penetrates (4-5)% Fire Resistance", statOrderKey = "9848", statOrder = { 9848 }, level = 1, group = "FirePenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["TinctureFirePen2"] = { type = "Prefix", affix = "Sizzling", "Damage Penetrates (6-8)% Fire Resistance", statOrderKey = "9848", statOrder = { 9848 }, level = 1, group = "FirePenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["TinctureFirePen3"] = { type = "Prefix", affix = "Blistering", "Damage Penetrates (9-12)% Fire Resistance", statOrderKey = "9848", statOrder = { 9848 }, level = 60, group = "FirePenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["TinctureColdPen1"] = { type = "Prefix", affix = "Frosted", "Damage Penetrates (4-5)% Cold Resistance", statOrderKey = "9847", statOrder = { 9847 }, level = 1, group = "ColdPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["TinctureColdPen2"] = { type = "Prefix", affix = "Chilled", "Damage Penetrates (6-8)% Cold Resistance", statOrderKey = "9847", statOrder = { 9847 }, level = 1, group = "ColdPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["TinctureColdPen3"] = { type = "Prefix", affix = "Icy", "Damage Penetrates (9-12)% Cold Resistance", statOrderKey = "9847", statOrder = { 9847 }, level = 60, group = "ColdPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["TinctureLightningPen1"] = { type = "Prefix", affix = "Snapping", "Damage Penetrates (4-5)% Lightning Resistance", statOrderKey = "9849", statOrder = { 9849 }, level = 1, group = "LightningPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["TinctureLightningPen2"] = { type = "Prefix", affix = "Crackling", "Damage Penetrates (6-8)% Lightning Resistance", statOrderKey = "9849", statOrder = { 9849 }, level = 1, group = "LightningPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["TinctureLightningPen3"] = { type = "Prefix", affix = "Sparking", "Damage Penetrates (9-12)% Lightning Resistance", statOrderKey = "9849", statOrder = { 9849 }, level = 60, group = "LightningPenetrationWeapon", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["TinctureChaosPen1"] = { type = "Prefix", affix = "Profane", "Damage Penetrates (4-5)% Chaos Resistance", statOrderKey = "9846", statOrder = { 9846 }, level = 1, group = "WeaponChaosPenetration", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureChaosPen2"] = { type = "Prefix", affix = "Tainted", "Damage Penetrates (6-8)% Chaos Resistance", statOrderKey = "9846", statOrder = { 9846 }, level = 1, group = "WeaponChaosPenetration", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureChaosPen3"] = { type = "Prefix", affix = "Debased", "Damage Penetrates (9-12)% Chaos Resistance", statOrderKey = "9846", statOrder = { 9846 }, level = 60, group = "WeaponChaosPenetration", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "chaos", "attack" }, }, - ["TinctureRageOnHitVsRareUnique1"] = { type = "Prefix", affix = "Angry", "(5-10)% chance to gain 1 Rage when you Hit a Rare or Unique Enemy", statOrderKey = "9835", statOrder = { 9835 }, level = 70, group = "WeaponRageOnHitVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRageOnHitVsRareUnique2"] = { type = "Prefix", affix = "Outraged", "(11-15)% chance to gain 1 Rage when you Hit a Rare or Unique Enemy", statOrderKey = "9835", statOrder = { 9835 }, level = 70, group = "WeaponRageOnHitVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRageOnHitVsRareUnique3"] = { type = "Prefix", affix = "Apoplectic", "(16-20)% chance to gain 1 Rage when you Hit a Rare or Unique Enemy", statOrderKey = "9835", statOrder = { 9835 }, level = 81, group = "WeaponRageOnHitVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureDamagePerSpellCast1"] = { type = "Prefix", affix = "Infused", "(10-12)% increased Damage for each Non-Instant Spell you've Cast in the past 8 seconds", statOrderKey = "9867", statOrder = { 9867 }, level = 45, group = "WeaponDamagePerSpellCast8Seconds", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureDamagePerSpellCast2"] = { type = "Prefix", affix = "Ensorcelled", "(13-15)% increased Damage for each Non-Instant Spell you've Cast in the past 8 seconds", statOrderKey = "9867", statOrder = { 9867 }, level = 45, group = "WeaponDamagePerSpellCast8Seconds", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureDamagePerSpellCast3"] = { type = "Prefix", affix = "Overloaded", "(16-18)% increased Damage for each Non-Instant Spell you've Cast in the past 8 seconds", statOrderKey = "9867", statOrder = { 9867 }, level = 72, group = "WeaponDamagePerSpellCast8Seconds", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePhasingOnKill1"] = { type = "Suffix", affix = "of Phasing", "(10-20)% chance to gain Phasing for 4 seconds on Kill", statOrderKey = "9843", statOrder = { 9843 }, level = 1, group = "PhasingOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePhasingOnKill2"] = { type = "Suffix", affix = "of Stealth", "(21-30)% chance to gain Phasing for 4 seconds on Kill", statOrderKey = "9843", statOrder = { 9843 }, level = 1, group = "PhasingOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePhasingOnKill3"] = { type = "Suffix", affix = "of Shadows", "(31-40)% chance to gain Phasing for 4 seconds on Kill", statOrderKey = "9843", statOrder = { 9843 }, level = 60, group = "PhasingOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureOverkillLeech1"] = { type = "Suffix", affix = "of Cannibalism", "(9-13)% of Overkill Damage is Leeched as Life", statOrderKey = "9837", statOrder = { 9837 }, level = 1, group = "LifeLeechOnWeaponOverkillDamage", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureOverkillLeech2"] = { type = "Suffix", affix = "of Sacrifice", "(14-18)% of Overkill Damage is Leeched as Life", statOrderKey = "9837", statOrder = { 9837 }, level = 1, group = "LifeLeechOnWeaponOverkillDamage", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureOverkillLeech3"] = { type = "Suffix", affix = "of Gorging", "(19-25)% of Overkill Damage is Leeched as Life", statOrderKey = "9837", statOrder = { 9837 }, level = 60, group = "LifeLeechOnWeaponOverkillDamage", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAoEOnKill1"] = { type = "Suffix", affix = "of Cleaving", "(9-13)% increased Area of Effect if you've Killed Recently", statOrderKey = "9853", statOrder = { 9853 }, level = 1, group = "WeaponAreaOfEffectIfKilledRecently", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAoEOnKill2"] = { type = "Suffix", affix = "of Slaughter", "(14-18)% increased Area of Effect if you've Killed Recently", statOrderKey = "9853", statOrder = { 9853 }, level = 1, group = "WeaponAreaOfEffectIfKilledRecently", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAoEOnKill3"] = { type = "Suffix", affix = "of Massacre", "(19-25)% increased Area of Effect if you've Killed Recently", statOrderKey = "9853", statOrder = { 9853 }, level = 60, group = "WeaponAreaOfEffectIfKilledRecently", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshBleed1"] = { type = "Prefix", affix = "Needling", "(9-13)% chance to refresh Bleeding Duration on Hit", statOrderKey = "9850", statOrder = { 9850 }, level = 70, group = "RefreshBleedDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshBleed2"] = { type = "Prefix", affix = "Skewering", "(14-18)% chance to refresh Bleeding Duration on Hit", statOrderKey = "9850", statOrder = { 9850 }, level = 70, group = "RefreshBleedDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshBleed3"] = { type = "Prefix", affix = "Lacerating", "(19-25)% chance to refresh Bleeding Duration on Hit", statOrderKey = "9850", statOrder = { 9850 }, level = 81, group = "RefreshBleedDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshIgnite1"] = { type = "Prefix", affix = "Singeing", "(9-13)% chance to refresh Ignite Duration on Hit", statOrderKey = "9851", statOrder = { 9851 }, level = 70, group = "RefreshIgniteDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshIgnite2"] = { type = "Prefix", affix = "Charring", "(14-18)% chance to refresh Ignite Duration on Hit", statOrderKey = "9851", statOrder = { 9851 }, level = 70, group = "RefreshIgniteDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRefreshIgnite3"] = { type = "Prefix", affix = "Roasting", "(19-25)% chance to refresh Ignite Duration on Hit", statOrderKey = "9851", statOrder = { 9851 }, level = 81, group = "RefreshIgniteDurationOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaOnKill1"] = { type = "Suffix", affix = "of Recycling", "Gain (10-20) Mana per Enemy Killed", statOrderKey = "9828", statOrder = { 9828 }, level = 1, group = "ManaGainedOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaOnKill2"] = { type = "Suffix", affix = "of Draining", "Gain (21-30) Mana per Enemy Killed", statOrderKey = "9828", statOrder = { 9828 }, level = 1, group = "ManaGainedOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaOnKill3"] = { type = "Suffix", affix = "of Siphoning", "Gain (31-40) Mana per Enemy Killed", statOrderKey = "9828", statOrder = { 9828 }, level = 60, group = "ManaGainedOnWeaponKill", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureWeaponRange1"] = { type = "Suffix", affix = "of Reach", "+(0.1-0.2) metres to Melee Strike Range", statOrderKey = "9840", statOrder = { 9840 }, level = 1, group = "WeaponRange", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureWeaponRange2"] = { type = "Suffix", affix = "of Skies", "+(0.3-0.4) metres to Melee Strike Range", statOrderKey = "9840", statOrder = { 9840 }, level = 1, group = "WeaponRange", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureWeaponRange3"] = { type = "Suffix", affix = "of Worlds", "+(0.5-0.6) metres to Melee Strike Range", statOrderKey = "9840", statOrder = { 9840 }, level = 60, group = "WeaponRange", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAttackSpeedOnBlock1"] = { type = "Suffix", affix = "of Riposting", "(9-13)% increased Attack Speed if you have Blocked Recently", statOrderKey = "9860", statOrder = { 9860 }, level = 45, group = "WeaponAttackSpeedIfBlockedRecently", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAttackSpeedOnBlock2"] = { type = "Suffix", affix = "of Momentum", "(14-18)% increased Attack Speed if you have Blocked Recently", statOrderKey = "9860", statOrder = { 9860 }, level = 45, group = "WeaponAttackSpeedIfBlockedRecently", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAttackSpeedOnBlock3"] = { type = "Suffix", affix = "of Retribution", "(19-25)% increased Attack Speed if you have Blocked Recently", statOrderKey = "9860", statOrder = { 9860 }, level = 72, group = "WeaponAttackSpeedIfBlockedRecently", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAdditionalProjectilesWhenHit1"] = { type = "Suffix", affix = "of Rain", "Weapon Attacks fire an additional Projectile if you've been Hit Recently", statOrderKey = "9841", statOrder = { 9841 }, level = 81, group = "AdditionalWeaponProjectilesIfHitRecently", weightKey = { "tincture", "default", }, weightVal = { 20, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAdditionalProjectilesWhenHit2"] = { type = "Suffix", affix = "of Hail", "Weapon Attacks fire 2 additional Projectiles if you've been Hit Recently", statOrderKey = "9841", statOrder = { 9841 }, level = 83, group = "AdditionalWeaponProjectilesIfHitRecently", weightKey = { "tincture", "default", }, weightVal = { 10, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePoisonDamageVsNonPoisoned1"] = { type = "Prefix", affix = "Potent", "Poisons you inflict on non-Poisoned Enemies deal (50-100)% increased Damage", statOrderKey = "9859", statOrder = { 9859 }, level = 45, group = "WeaponPoisonDamagevsNonPoisonedEnemies", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePoisonDamageVsNonPoisoned2"] = { type = "Prefix", affix = "Virulent", "Poisons you inflict on non-Poisoned Enemies deal (101-200)% increased Damage", statOrderKey = "9859", statOrder = { 9859 }, level = 45, group = "WeaponPoisonDamagevsNonPoisonedEnemies", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TincturePoisonDamageVsNonPoisoned3"] = { type = "Prefix", affix = "Pestilent", "Poisons you inflict on non-Poisoned Enemies deal (201-300)% increased Damage", statOrderKey = "9859", statOrder = { 9859 }, level = 72, group = "WeaponPoisonDamagevsNonPoisonedEnemies", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureConsecratedGroundVsRareUnique1"] = { type = "Prefix", affix = "Holy", "(3-5)% chance to create Consecrated Ground when you Hit a Rare or Unique Enemy, lasting 8 seconds", statOrderKey = "9830", statOrder = { 9830 }, level = 45, group = "ConsecratedGroundVsRareUniqueOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureConsecratedGroundVsRareUnique2"] = { type = "Prefix", affix = "Pious", "(6-8)% chance to create Consecrated Ground when you Hit a Rare or Unique Enemy, lasting 8 seconds", statOrderKey = "9830", statOrder = { 9830 }, level = 45, group = "ConsecratedGroundVsRareUniqueOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureConsecratedGroundVsRareUnique3"] = { type = "Prefix", affix = "Consecrated", "(9-11)% chance to create Consecrated Ground when you Hit a Rare or Unique Enemy, lasting 8 seconds", statOrderKey = "9830", statOrder = { 9830 }, level = 72, group = "ConsecratedGroundVsRareUniqueOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRarity1"] = { type = "Suffix", affix = "of Plunder", "(10-20)% increased Rarity of Items Dropped by Slain Enemies", statOrderKey = "9827", statOrder = { 9827 }, level = 1, group = "ItemRarityFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRarity2"] = { type = "Suffix", affix = "of Raiding", "(21-30)% increased Rarity of Items Dropped by Slain Enemies", statOrderKey = "9827", statOrder = { 9827 }, level = 1, group = "ItemRarityFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRarity3"] = { type = "Suffix", affix = "of Archaeology", "(31-40)% increased Rarity of Items Dropped by Slain Enemies", statOrderKey = "9827", statOrder = { 9827 }, level = 60, group = "ItemRarityFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureFlaskChargesGained1"] = { type = "Suffix", affix = "of Restocking", "(10-20)% increased Flask Charges gained from Kills", statOrderKey = "9833", statOrder = { 9833 }, level = 1, group = "FlaskChargesFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureFlaskChargesGained2"] = { type = "Suffix", affix = "of Replenishing", "(21-30)% increased Flask Charges gained from Kills", statOrderKey = "9833", statOrder = { 9833 }, level = 1, group = "FlaskChargesFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureFlaskChargesGained3"] = { type = "Suffix", affix = "of Pouring", "(31-40)% increased Flask Charges gained from Kills", statOrderKey = "9833", statOrder = { 9833 }, level = 60, group = "FlaskChargesFromWeaponKills", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureLifeOnRareUniqueKill1"] = { type = "Suffix", affix = "of Victory", "Recover (5-10)% of Life on Killing a Rare or Unique Enemy", statOrderKey = "9845", statOrder = { 9845 }, level = 1, group = "LifeOnWeaponKillVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureLifeOnRareUniqueKill2"] = { type = "Suffix", affix = "of Conquest", "Recover (11-15)% of Life on Killing a Rare or Unique Enemy", statOrderKey = "9845", statOrder = { 9845 }, level = 1, group = "LifeOnWeaponKillVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureLifeOnRareUniqueKill3"] = { type = "Suffix", affix = "of Triumph", "Recover (16-20)% of Life on Killing a Rare or Unique Enemy", statOrderKey = "9845", statOrder = { 9845 }, level = 60, group = "LifeOnWeaponKillVsRareUnique", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaRegenOnShock1"] = { type = "Suffix", affix = "of Charge", "(31-40)% increased Mana Regeneration Rate if you have Shocked an Enemy Recently", statOrderKey = "9838", statOrder = { 9838 }, level = 1, group = "ManaRegenerationOnWeaponShock", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaRegenOnShock2"] = { type = "Suffix", affix = "of Voltage", "(41-50)% increased Mana Regeneration Rate if you have Shocked an Enemy Recently", statOrderKey = "9838", statOrder = { 9838 }, level = 1, group = "ManaRegenerationOnWeaponShock", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureManaRegenOnShock3"] = { type = "Suffix", affix = "of Dynamism", "(51-70)% increased Mana Regeneration Rate if you have Shocked an Enemy Recently", statOrderKey = "9838", statOrder = { 9838 }, level = 60, group = "ManaRegenerationOnWeaponShock", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureMinimumChill1"] = { type = "Prefix", affix = "Frigid", "Chills from your Hits always reduce Action Speed by at least (10-12)%", statOrderKey = "9861", statOrder = { 9861 }, level = 70, group = "WeaponMinimumChill", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureMinimumChill2"] = { type = "Prefix", affix = "Subzero", "Chills from your Hits always reduce Action Speed by at least (13-15)%", statOrderKey = "9861", statOrder = { 9861 }, level = 81, group = "WeaponMinimumChill", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureAlwaysHitOnLowLife"] = { type = "Suffix", affix = "of Desperation", "Your hits can't be Evaded while you are on Low Life", statOrderKey = "9868", statOrder = { 9868 }, level = 81, group = "WeaponHitsCannotBeEvadedOnLowLife", weightKey = { "tincture", "default", }, weightVal = { 20, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureTerrainChain1"] = { type = "Suffix", affix = "of Glancing", "Projectiles have (11-15)% chance to be able to Chain when colliding with terrain", statOrderKey = "9870", statOrder = { 9870 }, level = 70, group = "WeaponProjectilesChainFromTerrain", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureTerrainChain2"] = { type = "Suffix", affix = "of Rebounding", "Projectiles have (16-20)% chance to be able to Chain when colliding with terrain", statOrderKey = "9870", statOrder = { 9870 }, level = 70, group = "WeaponProjectilesChainFromTerrain", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureTerrainChain3"] = { type = "Suffix", affix = "of Ricochet", "Projectiles have (21-30)% chance to be able to Chain when colliding with terrain", statOrderKey = "9870", statOrder = { 9870 }, level = 81, group = "WeaponProjectilesChainFromTerrain", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureGraspingVineOnHit1"] = { type = "Prefix", affix = "Grasping", "(6-8)% chance to inflict a Grasping Vine on Hit", statOrderKey = "9829", statOrder = { 9829 }, level = 70, group = "GraspingVineOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureGraspingVineOnHit2"] = { type = "Prefix", affix = "Clutching", "(9-11)% chance to inflict a Grasping Vine on Hit", statOrderKey = "9829", statOrder = { 9829 }, level = 70, group = "GraspingVineOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureGraspingVineOnHit3"] = { type = "Prefix", affix = "Ensnaring", "(12-14)% chance to inflict a Grasping Vine on Hit", statOrderKey = "9829", statOrder = { 9829 }, level = 81, group = "GraspingVineOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRandomCurseOnHit1"] = { type = "Prefix", affix = "Hexing", "(6-8)% chance to Curse Enemies with a random Hex on Hit", statOrderKey = "9844", statOrder = { 9844 }, level = 45, group = "RandomCurseOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRandomCurseOnHit2"] = { type = "Prefix", affix = "Profane", "(9-11)% chance to Curse Enemies with a random Hex on Hit", statOrderKey = "9844", statOrder = { 9844 }, level = 45, group = "RandomCurseOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureRandomCurseOnHit3"] = { type = "Prefix", affix = "Vile", "(12-14)% chance to Curse Enemies with a random Hex on Hit", statOrderKey = "9844", statOrder = { 9844 }, level = 72, group = "RandomCurseOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureSplash1"] = { type = "Prefix", affix = "Rippling", "Melee Strike Skills deal Splash Damage to surrounding targets, with (35-50)% reduced Area of Effect", statOrderKey = "9839", statOrder = { 9839 }, level = 70, group = "MeleeSplashOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureSplash2"] = { type = "Prefix", affix = "Echoing", "Melee Strike Skills deal Splash Damage to surrounding targets, with (20-34)% reduced Area of Effect", statOrderKey = "9839", statOrder = { 9839 }, level = 70, group = "MeleeSplashOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureSplash3"] = { type = "Prefix", affix = "Resonating", "Melee Strike Skills deal Splash Damage to surrounding targets, with (0-19)% reduced Area of Effect", statOrderKey = "9839", statOrder = { 9839 }, level = 81, group = "MeleeSplashOnWeaponHit", weightKey = { "tincture", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureBlockChanceOnStun1"] = { type = "Suffix", affix = "of Staggering", "+(6-9)% Chance to Block Attack Damage if you've Stunned an Enemy Recently", statOrderKey = "5179", statOrder = { 5179 }, level = 45, group = "BlockChanceIfStunnedEnemyRecently", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureBlockChanceOnStun2"] = { type = "Suffix", affix = "of Slamming", "+(10-12)% Chance to Block Attack Damage if you've Stunned an Enemy Recently", statOrderKey = "5179", statOrder = { 5179 }, level = 45, group = "BlockChanceIfStunnedEnemyRecently", weightKey = { "tincture", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, - ["TinctureBlockChanceOnStun3"] = { type = "Suffix", affix = "of Pummelling", "+(13-15)% Chance to Block Attack Damage if you've Stunned an Enemy Recently", statOrderKey = "5179", statOrder = { 5179 }, level = 72, group = "BlockChanceIfStunnedEnemyRecently", weightKey = { "tincture", "default", }, weightVal = { 250, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { }, }, + ["TinctureEffect1"] = { type = "Prefix", affix = "Horticultural", "20% increased effect", statOrderKey = "726", statOrder = { 726 }, level = 80, group = "TinctureEffect1", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture" }, }, + ["TinctureEffectIncreasedManaBurn1"] = { type = "Prefix", affix = "Potent", "64% Increased Mana Burn Rate", "35% increased effect", statOrderKey = "801,802", statOrder = { 801,802 }, level = 80, group = "TinctureEffectIncreasedManaBurn1", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture" }, }, + ["TinctureBuffAttackSpeedWhileHealing1"] = { type = "Suffix", affix = "of skill", "(15-17)% increased Melee Weapon Attack Speed", statOrderKey = "810", statOrder = { 810 }, level = 82, group = "TinctureBuffAttackSpeedWhileHealing1", weightKey = { "tincture", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture", "attack", "speed" }, }, + ["TinctureBuffCriticalMultiplierWhileHealing1"] = { type = "Suffix", affix = "of Ire", "+(20-25)% to Melee Weapon Critical Strike Multiplier", statOrderKey = "840", statOrder = { 840 }, level = 82, group = "TinctureBuffCriticalMultiplierWhileHealing1", weightKey = { "tincture", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture", "critical" }, }, + ["TinctureBuffElementalPenWhileHealing1"] = { type = "Suffix", affix = "of Empowering", "Melee Weapon Damage Penetrates +(10-15)% of Enemy Elemental Resistances", statOrderKey = "841", statOrder = { 841 }, level = 82, group = "TinctureBuffElementalPenWhileHealing", weightKey = { "tincture", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture", "elemental" }, }, + ["TinctureBuffLifeGainOnKillWhileHealing1"] = { type = "Suffix", affix = "of Victory", "Gain (10-20) Life Per Enemy Killed with Melee Weapons", statOrderKey = "842", statOrder = { 842 }, level = 82, group = "TinctureBuffLifeGainOnKillWhileHealing", weightKey = { "tincture", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture", "life" }, }, + ["TinctureBuffManaGainOnKillWhileHealing1"] = { type = "Suffix", affix = "of Consumption", "Gain (5-10) Mana Per Enemy Killed with Melee Weapons", statOrderKey = "843", statOrder = { 843 }, level = 82, group = "TinctureBuffManaGainOnKillWhileHealing", weightKey = { "tincture", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { }, weightMultiplierVal = { }, modTags = { "tincture", "mana" }, }, } \ No newline at end of file diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 9955a34829..526f614dc4 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1492,11 +1492,77 @@ function calcs.perform(env, skipEHP) end end end + + local effectInc = modDB:Sum("INC", {actor = "player"}, "TinctureEffect") + local effectIncMagic = modDB:Sum("INC", {actor = "player"}, "MagicTinctureEffect") + local tinctureLimit = modDB:Sum("BASE", nil, "TinctureLimit") + + -- tincture breakdown + if breakdown then + output.TinctureEffect = effectInc + output.TinctureLimit = tinctureLimit + end + + + local function mergeTinctures(tinctures) + local tinctureBuffs = { } + local tinctureConditions = {} + local tinctureBuffsPerBase = {} + + local function calcTinctureMods(item, baseName, buffModList, modList) + local tinctureEffectInc = effectInc + item.tinctureData.effectInc + if item.rarity == "MAGIC" then + tinctureEffectInc = tinctureEffectInc + effectIncMagic + end + local effectMod = 1 + (tinctureEffectInc) / 100 + + -- same deal as flasks, go look at the comment there + if buffModList[1] then + local srcList = new("ModList") + srcList:ScaleAddList(buffModList, effectMod) + mergeBuff(srcList, tinctureBuffs, baseName) + mergeBuff(srcList, tinctureBuffsPerBase[item.baseName], baseName) + end + + if modList[1] then + local srcList = new("ModList") + srcList:ScaleAddList(modList, effectMod) + local key + if item.rarity == "UNIQUE" then + key = item.title + else + key = "" + for _, mod in ipairs(modList) do + key = key .. modLib.formatModParams(mod) .. "&" + end + end + mergeBuff(srcList, tinctureBuffs, key) + mergeBuff(srcList, tinctureBuffsPerBase[item.baseName], key) + end + end + for item in pairs(tinctures) do + if tinctureLimit <= 0 then + break + end + tinctureLimit = tinctureLimit - 1 + tinctureBuffsPerBase[item.baseName] = tinctureBuffsPerBase[item.baseName] or {} + tinctureConditions["UsingTincture"] = true + tinctureConditions["Using"..item.baseName:gsub("%s+", "")] = true + calcTinctureMods(item, item.baseName, item.buffModList, item.modList) + end + for tinctureCond, status in pairs(tinctureConditions) do + modDB.conditions[tinctureCond] = status + end + for _, buffModList in pairs(tinctureBuffs) do + modDB:AddList(buffModList) + end + end if env.mode_combat then -- This needs to be done in 2 steps to account for effects affecting life recovery from flasks -- For example Sorrow of the Divine and buffs (like flask recovery watchers eye) mergeFlasks(env.flasks, false, true) + mergeTinctures(env.tinctures) -- Merge keystones again to catch any that were added by flasks mergeKeystones(env) diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index fdf2ef2f64..b3750d2c57 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -1632,6 +1632,14 @@ return { { label = "Charges/s", { format = "{2:output:ManaFlaskChargeGen}", { label = "Mana Flask Charges/s", modName = "ManaFlaskChargesGenerated", modType = "BASE"}, { label = "Generic Flask Charges/s", modName = { "FlaskChargesGenerated", "FlaskChargesGeneratedPerEmptyFlask" }, modType = "BASE" }}, }, +} }, { defaultCollapsed = true, label = "Tinctures", data = { + extra = "+{0:output:TinctureEffect}%, {0:output:TinctureLimit}", + { label = "Inc. Effect", { format = "{0:mod:1}%", { modName = "TinctureEffect", modType = "INC", actor = "player"}, }, }, + { label = "Tincture Limit", { format = "{0:mod:1}", { modName = "TinctureLimit", modType = "BASE"}, }, }, + { label = "ManaBurn inc Rate", { format = "{0:mod:1}%", { modName = "TinctureManaBurnRate", modType = "INC", actor = "player"}, }, }, + { label = "ManaBurn more Rate", { format = "{0:mod:1}%", { modName = "TinctureManaBurnRate", modType = "MORE", actor = "player"}, }, }, + { label = "% Not Inflict ManaBurn", { format = "{0:mod:1}%", { modName = "TincturesNotInflictManaBurn", modType = "BASE" }, }, }, + { label = "Cooldown Recovery", { format = "{0:mod:1}%", { modName = "TinctureCooldownRecovery", modType = "INC", actor = "player"}, }, }, } } } }, { 1, "Rage", 3, colorCodes.RAGE, {{ defaultCollapsed = true, label = "Rage", data = { diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index 253dd54606..5319b55e33 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -227,12 +227,13 @@ function wipeEnv(env, accelerate) -- 1) Jewels and Jewel-Radius related node modifications -- 2) Player items -- 3) Granted Skill from items (e.g., Curse on Hit rings) - -- 4) Flasks + -- 4) Flasks and Tinctures wipeTable(env.radiusJewelList) wipeTable(env.extraRadiusNodeList) wipeTable(env.player.itemList) wipeTable(env.grantedSkillsItems) wipeTable(env.flasks) + wipeTable(env.tinctures) -- Special / Unique Items that have their own ModDB() if env.aegisModList then @@ -400,6 +401,7 @@ function calcs.initEnv(build, mode, override, specEnv) env.explodeSources = { } env.itemWarnings = { } env.flasks = { } + env.tinctures = { } -- tree based env.grantedPassives = { } @@ -508,6 +510,9 @@ function calcs.initEnv(build, mode, override, specEnv) modDB:NewMod("PerAfflictionAilmentDamage", "BASE", 8, "Base") modDB:NewMod("PerAfflictionNonDamageEffect", "BASE", 8, "Base") modDB:NewMod("PerAbsorptionElementalEnergyShieldRecoup", "BASE", 12, "Base") + modDB:NewMod("TinctureLimit", "BASE", 1, "Base") + modDB:NewMod("ManaDegenPercent", "BASE", 1, "Base", { type = "Multiplier", var = "ManaBurnStacks" }) + modDB:NewMod("LifeDegenPercent", "BASE", 1, "Base", { type = "Multiplier", var = "WeepingWoundsStacks" }) -- Add bandit mods if env.configInput.bandit == "Alira" then @@ -822,6 +827,11 @@ function calcs.initEnv(build, mode, override, specEnv) end end item = nil + elseif item and item.type == "Tincture" then + if slot.active then + env.tinctures[item] = true + end + item = nil end local scale = 1 if item and item.type == "Jewel" and item.base.subType == "Abyss" and slot.parentSlot then @@ -1023,7 +1033,7 @@ function calcs.initEnv(build, mode, override, specEnv) if item.classRestriction then env.itemModDB.conditions[item.title:gsub(" ", "")] = item.classRestriction end - if item.type ~= "Jewel" and item.type ~= "Flask" then + if item.type ~= "Jewel" and item.type ~= "Flask" and item.type ~= "Tincture" then -- Update item counts local key if item.rarity == "UNIQUE" or item.rarity == "RELIC" then @@ -1097,6 +1107,13 @@ function calcs.initEnv(build, mode, override, specEnv) env.flasks[override.toggleFlask] = true end end + if override.toggleTincture then + if env.tinctures[override.toggleTincture] then + env.tinctures[override.toggleTincture] = nil + else + env.tinctures[override.toggleTincture] = true + end + end end -- Merge env.itemModDB with env.ModDB diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index cb65184e63..a5e3dc91c8 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -942,6 +942,13 @@ Huge sets the radius to 11. { var = "conditionUsingFlask", type = "check", label = "Do you have a Flask active?", ifCond = "UsingFlask", tooltip = "This is automatically enabled if you have a flask active,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:UsingFlask", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, + { var = "conditionUsingTincture", type = "check", label = "Do you have a Tincture active?", ifCond = "UsingTincture", tooltip = "This is automatically enabled if you have a tincture active,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + modList:NewMod("Condition:UsingTincture", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "multiplierManaBurnStacks", type = "count", label = "Mana Burn Stacks:", tooltip = "Mana Burn Applies a 1% of mana degen per stack\nThis also applies Weeping Wounds if the Keystone is Allocated", apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:ManaBurnStacks", "BASE", val, "Config", { type = "Condition", var = "Combat" }, { type = "Condition", var = "WeepingWoundsInsteadOfManaBurn", neg = true}) + modList:NewMod("Multiplier:WeepingWoundsStacks", "BASE", val, "Config", { type = "Condition", var = "Combat" }, { type = "Condition", var = "WeepingWoundsInsteadOfManaBurn"}) + end }, { var = "conditionHaveTotem", type = "check", label = "Do you have a Totem summoned?", ifCond = "HaveTotem", tooltip = "You will automatically be considered to have a Totem if your main skill is a Totem,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:HaveTotem", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 8f01ec003b..640b979f8c 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -638,6 +638,8 @@ local modNameList = { ["damage with ignite"] = { "Damage", keywordFlags = KeywordFlag.Ignite }, ["damage with ignites"] = { "Damage", keywordFlags = KeywordFlag.Ignite }, ["damage with ignites inflicted"] = { "Damage", keywordFlags = KeywordFlag.Ignite }, + ["damage with bleed"] = { "Damage", keywordFlags = KeywordFlag.Bleed }, + ["damage with poison"] = { "Damage", keywordFlags = KeywordFlag.Poison }, ["incinerate damage for each stage"] = { "Damage", tagList = { { type = "Multiplier", var = "IncinerateStage" }, { type = "SkillName", skillName = "Incinerate" } } }, ["physical damage over time multiplier"] = "PhysicalDotMultiplier", ["fire damage over time multiplier"] = "FireDotMultiplier", @@ -721,6 +723,7 @@ local modNameList = { ["to cause bleeding on hit"] = "BleedChance", ["to inflict bleeding"] = "BleedChance", ["to inflict bleeding on hit"] = "BleedChance", + ["to bleed"] = "BleedChance", ["bleed duration"] = { "EnemyBleedDuration" }, ["bleeding duration"] = { "EnemyBleedDuration" }, ["bleed duration on you"] = "SelfBleedDuration", @@ -748,9 +751,10 @@ local modNameList = { ["to apply cold exposure on hit"] = "ColdExposureChance", ["to inflict lightning exposure on hit"] = "LightningExposureChance", ["to apply lightning exposure on hit"] = "LightningExposureChance", - -- Flask modifiers - ["effect"] = "FlaskEffect", + -- Flask and Tincture modifiers + ["effect"] = "LocalEffect", ["effect of flasks"] = "FlaskEffect", + ["effect of tinctures"] = "TinctureEffect", ["amount recovered"] = "FlaskRecovery", ["life recovered"] = "FlaskRecovery", ["life recovery from flasks used"] = "FlaskLifeRecovery", @@ -774,6 +778,8 @@ local modNameList = { ["flask charges gained"] = "FlaskChargesGained", ["charge recovery"] = "FlaskChargeRecovery", ["for flasks you use to not consume charges"] = "FlaskChanceNotConsumeCharges", + ["for tinctures to not inflict mana burn"] = "TincturesNotInflictManaBurn", + ["mana burn rate"] = "TinctureManaBurnRate", ["impales you inflict last"] = "ImpaleStacksMax", -- Buffs ["adrenaline"] = "Condition:Adrenaline", @@ -834,6 +840,9 @@ local modFlagList = { ["with unarmed melee attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee) }, ["to unarmed attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Hit) }, ["to unarmed melee hits"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee, ModFlag.Hit) }, + ["with melee weapons"] = { flags = ModFlag.WeaponMelee }, + ["from melee weapons"] = { flags = ModFlag.WeaponMelee }, + ["melee weapon"] = { flags = ModFlag.WeaponMelee }, ["with one handed weapons"] = { flags = bor(ModFlag.Weapon1H, ModFlag.Hit) }, ["with one handed melee weapons"] = { flags = bor(ModFlag.Weapon1H, ModFlag.WeaponMelee, ModFlag.Hit) }, ["with two handed weapons"] = { flags = bor(ModFlag.Weapon2H, ModFlag.Hit) }, @@ -1540,6 +1549,8 @@ local modTagList = { ["if you've used a life flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingLifeFlask" } }, ["if you've used a mana flask in the past 10 seconds"] = { tag = { type = "Condition", var = "UsingManaFlask" } }, ["during effect of any life or mana flask"] = { tag = { type = "Condition", varList = { "UsingManaFlask", "UsingLifeFlask" } } }, + ["while you have an active tincture"] = { tag = { type = "Condition", var = "UsingTincture" } }, + ["while you have a tincture active"] = { tag = { type = "Condition", var = "UsingTincture" } }, ["while on consecrated ground"] = { tag = { type = "Condition", var = "OnConsecratedGround" } }, ["while on caustic ground"] = { tag = { type = "Condition", var = "OnCausticGround" } }, ["when you create consecrated ground"] = { }, @@ -4237,6 +4248,7 @@ local specialModList = { ["knockback direction is reversed"] = { mod("EnemyKnockbackDistance", "MORE", -200) }, -- Culling ["culling strike"] = { mod("CullPercent", "MAX", 10, { type = "GlobalEffect", effectType = "Global", unscalable = true }) }, + ["culling strike with melee weapons"] = { mod("CullPercent", "MAX", 10, nil, ModFlag.WeaponMelee, { type = "GlobalEffect", effectType = "Global", unscalable = true }) }, ["culling strike during f?l?a?s?k? ?effect"] = { mod("CullPercent", "MAX", 10, { type = "Condition", var = "UsingFlask" }, { type = "GlobalEffect", effectType = "Global", unscalable = true }) }, ["hits with this weapon have culling strike against bleeding enemies"] = { mod("CullPercent", "MAX", 10, { type = "ActorCondition", actor = "enemy", var = "Bleeding" }) }, ["you have culling strike against cursed enemies"] = { mod("CullPercent", "MAX", 10, { type = "ActorCondition", actor = "enemy", var = "Cursed" }) }, @@ -4378,6 +4390,14 @@ local specialModList = { ["while a pinnacle atlas boss is in your presence, flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("FlaskEffect", "INC", num, { type = "ActorCondition", actor = "enemy", var = "PinnacleBoss" }, { type = "ActorCondition", actor = "player"}) } end, ["magic utility flasks applied to you have (%d+)%% increased effect"] = function(num) return { mod("MagicUtilityFlaskEffect", "INC", num, { type = "ActorCondition", actor = "player"}) } end, ["flasks applied to you have (%d+)%% reduced effect"] = function(num) return { mod("FlaskEffect", "INC", -num, { type = "ActorCondition", actor = "player"}) } end, + ["tinctures applied to you have (%d+)%% increased effect"] = function(num) return { mod("TinctureEffect", "INC", num, { type = "ActorCondition", actor = "player"}) } end, + ["tinctures applied to you have (%d+)%% increased effect if you've used a life flask recently"] = function(num) return { mod("TinctureEffect", "INC", num, { type = "ActorCondition", actor = "player"}, { type = "Condition", var = "UsingLifeFlask" }) } end, + ["tinctures have (%d+)%% increased effect while at or above (%d+) stacks of mana burn"] = function(num, _, threshold) return { mod("TinctureEffect", "INC", num, { type = "MultiplierThreshold", varList = {"ManaBurnStacks", "WeepingWoundsStacks"}, threshold = tonumber(threshold) }) } end, + ["tinctures applied to you have (%d+)%% reduced mana burn rate"] = function(num) return { mod("TinctureManaBurnRate", "INC", -num, { type = "ActorCondition", actor = "player"}) } end, + ["tinctures applied to you have (%d+)%% less mana burn rate"] = function(num) return { mod("TinctureManaBurnRate", "MORE", -num, { type = "ActorCondition", actor = "player"}) } end, + ["tinctures inflict weeping wounds instead of mana burn"] = { flag("Condition:WeepingWoundsInsteadOfManaBurn"), }, + ["you can have an additional tincture active"] = { mod("TinctureLimit", "BASE", 1), }, + ["(%d+)%% increased tincture cooldown recovery rate"] = function(num) return { mod("TinctureCooldownRecovery", "INC", num) } end, ["adds (%d+) passive skills"] = function(num) return { mod("JewelData", "LIST", { key = "clusterJewelNodeCount", value = num }) } end, ["1 added passive skill is a jewel socket"] = { mod("JewelData", "LIST", { key = "clusterJewelSocketCount", value = 1 }) }, ["(%d+) added passive skills are jewel sockets"] = function(num) return { mod("JewelData", "LIST", { key = "clusterJewelSocketCount", value = num }) } end,