From e34ced857b5d0e2e75a62e38b1a8c5689f6da5d4 Mon Sep 17 00:00:00 2001 From: vaisest <4550061+vaisest@users.noreply.github.com> Date: Fri, 24 Jul 2026 21:06:00 +0300 Subject: [PATCH 1/3] Fix and add support for Triad Grip 3.29 --- src/Data/ModCache.lua | 15 +++++++-------- src/Data/Uniques/gloves.lua | 8 ++++---- src/Modules/CalcSetup.lua | 27 +++++++++++++++++++++++---- src/Modules/ModParser.lua | 11 +++++++++++ 4 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 387ab4f047..4f9040d9e5 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -10011,15 +10011,14 @@ c["Minions can hear the whispers for 5 seconds after they deal a Critical Strike c["Minions cannot be Blinded"]={nil,"cannot be Blinded "} c["Minions cannot be Blinded Minions have 15% chance to Blind Enemies on hit"]={nil,"cannot be Blinded Minions have 15% chance to Blind Enemies on hit "} c["Minions cannot be Killed, but die 6 seconds after being reduced to 1 Life"]={nil,"cannot be Killed, but die 6 seconds after being reduced to 1 Life "} -c["Minions convert 25% of Physical Damage to Chaos Damage per Socketed White Gem"]={nil,"convert 25% of Physical Damage to Chaos Damage per Socketed White Gem "} -c["Minions convert 25% of Physical Damage to Chaos Damage per Socketed White Gem Minions have 10% chance to Freeze, Shock and Ignite"]={nil,"convert 25% of Physical Damage to Chaos Damage per Socketed White Gem Minions have 10% chance to Freeze, Shock and Ignite "} -c["Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem"]={nil,"convert 25% of Physical Damage to Cold Damage per Socketed Green Gem "} -c["Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem Minions convert 25% of Physical Damage to Lightning Damage per Blue Socket"]={{[1]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Physical damage to cold damage per socketed green gem minions convert 25% of physicalDamageConvertToLightning",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Chaos Damage per Empty Socket"]={{[1]={[1]={type="Multiplier",var="EmptySocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToChaos",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Chaos Damage per White Socket"]={{[1]={[1]={type="Multiplier",var="WhiteSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToChaos",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Cold Damage per Green Socket"]={{[1]={[1]={type="Multiplier",var="GreenSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToCold",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem"]={{[1]={[1]={type="Multiplier",var="SocketedGreenGemsIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToCold",type="BASE",value=25}}}},nil} c["Minions convert 25% of Physical Damage to Fire Damage per Red Socket"]={{[1]={[1]={type="Multiplier",var="RedSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToFire",type="BASE",value=25}}}},nil} -c["Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem"]={nil,"convert 25% of Physical Damage to Fire Damage per Socketed Red Gem "} -c["Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem Minions convert 25% of Physical Damage to Cold Damage per Green Socket"]={{[1]={[1]={type="Multiplier",var="GreenSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Physical damage to fire damage per socketed red gem minions convert 25% of physicalDamageConvertToCold",type="BASE",value=25}}}},nil} -c["Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem"]={nil,"convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem "} -c["Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem Minions convert 25% of Physical Damage to Chaos Damage per White Socket"]={{[1]={[1]={type="Multiplier",var="WhiteSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Physical damage to lightning damage per socketed blue gem minions convert 25% of physicalDamageConvertToChaos",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem"]={{[1]={[1]={type="Multiplier",var="SocketedRedGemsIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToFire",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Lightning Damage per Blue Socket"]={{[1]={[1]={type="Multiplier",var="BlueSocketIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToLightning",type="BASE",value=25}}}},nil} +c["Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem"]={{[1]={[1]={type="Multiplier",var="SocketedBlueGemsIn{SlotName}"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToLightning",type="BASE",value=25}}}},nil} c["Minions convert 50% of Physical Damage to Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalDamageConvertToCold",type="BASE",value=50}}}},nil} c["Minions count as having the same number of"]={nil,"count as having the same number of "} c["Minions count as having the same number of Endurance, Frenzy and Power Charges as you"]={nil,"count as having the same number of Endurance, Frenzy and Power Charges as you "} diff --git a/src/Data/Uniques/gloves.lua b/src/Data/Uniques/gloves.lua index 47f3dde842..3a03ad52d3 100644 --- a/src/Data/Uniques/gloves.lua +++ b/src/Data/Uniques/gloves.lua @@ -841,13 +841,13 @@ Variant: Current Requires Level 32, 26 Str, 26 Int (80-120)% increased Armour and Energy Shield {variant:1}Minions convert 25% of Physical Damage to Fire Damage per Red Socket -{variant:2}Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem {variant:1}Minions convert 25% of Physical Damage to Cold Damage per Green Socket -{variant:2}Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem {variant:1}Minions convert 25% of Physical Damage to Lightning Damage per Blue Socket -{variant:2}Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem {variant:1}Minions convert 25% of Physical Damage to Chaos Damage per White Socket -{variant:2}Minions convert 25% of Physical Damage to Chaos Damage per Socketed White Gem +{variant:2}Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem +{variant:2}Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem +{variant:2}Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem +{variant:2}Minions convert 25% of Physical Damage to Chaos Damage per Empty Socket Minions have (5-10)% chance to Freeze, Shock and Ignite ]],[[ Volkuur's Guidance diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index 3a490ebccd..b0224d991f 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -1188,12 +1188,23 @@ function calcs.initEnv(build, mode, override, specEnv) local slotEmptySocketsCount = { R = 0, G = 0, B = 0, W = 0} local slotGemSocketsCount = 0 local socketedGems = 0 + local socketedColours = { R = 0, G = 0, B = 0, any = 0 } -- Loop through socket groups to calculate number of socketed gems for _, socketGroup in pairs(env.build.skillsTab.socketGroupList) do if (not socketGroup.source and socketGroup.enabled and socketGroup.slot and socketGroup.slot == slotName and socketGroup.gemList) then for _, gem in pairs(socketGroup.gemList) do if (gem.gemData and gem.enabled) then - socketedGems = socketedGems + 1 + socketedColours.any = socketedColours.any + 1 + local tags = gem.gemData.tags + if tags and tags.strength then + socketedColours.R = socketedColours.R + 1 + end + if tags and tags.dexterity then + socketedColours.G = socketedColours.G + 1 + end + if tags and tags.intelligence then + socketedColours.B = socketedColours.B + 1 + end end end end @@ -1203,18 +1214,26 @@ function calcs.initEnv(build, mode, override, specEnv) if socket.color == 'R' or socket.color == 'B' or socket.color == 'G' or socket.color == 'W' then slotGemSocketsCount = slotGemSocketsCount + 1 -- loop through sockets indexes that are greater than number of socketed gems - if i > socketedGems then + if i > socketedColours.any then slotEmptySocketsCount[socket.color] = slotEmptySocketsCount[socket.color] + 1 end end end - env.itemModDB.multipliers["SocketedGemsIn"..slotName] = (env.itemModDB.multipliers["SocketedGemsIn"..slotName] or 0) + math.min(slotGemSocketsCount, socketedGems) + local multipliers = { + SocketedGemsIn = socketedColours.any, + SocketedRedGemsIn = socketedColours.R, + SocketedGreenGemsIn = socketedColours.G, + SocketedBlueGemsIn = socketedColours.B, + } + for multiplier, count in pairs(multipliers) do + env.itemModDB.multipliers[multiplier .. slotName] = (env.itemModDB.multipliers[multiplier .. slotName] or 0) + math.min(slotGemSocketsCount, count) + end env.itemModDB.multipliers.EmptyRedSocketsInAnySlot = (env.itemModDB.multipliers.EmptyRedSocketsInAnySlot or 0) + slotEmptySocketsCount.R env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot = (env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot or 0) + slotEmptySocketsCount.G env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot = (env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot or 0) + slotEmptySocketsCount.B env.itemModDB.multipliers.EmptyWhiteSocketsInAnySlot = (env.itemModDB.multipliers.EmptyWhiteSocketsInAnySlot or 0) + slotEmptySocketsCount.W -- Warn if socketed gems over socket limit - if socketedGems > slotGemSocketsCount then + if socketedColours.any > slotGemSocketsCount then env.itemWarnings.socketLimitWarning = env.itemWarnings.socketLimitWarning or { } t_insert(env.itemWarnings.socketLimitWarning, slotName) end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 9b311b829f..7de5f040b0 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -1432,6 +1432,9 @@ local modTagList = { ["for each empty blue socket on any equipped item"] = { tag = { type = "Multiplier", var = "EmptyBlueSocketsInAnySlot" } }, ["for each empty white socket on any equipped item"] = { tag = { type = "Multiplier", var = "EmptyWhiteSocketsInAnySlot" } }, ["per socketed gem"] = { tag = { type = "Multiplier", var = "SocketedGemsIn{SlotName}"}}, + ["per socketed red gem"] = { tag = { type = "Multiplier", var = "SocketedRedGemsIn{SlotName}" } }, + ["per socketed green gem"] = { tag = { type = "Multiplier", var = "SocketedGreenGemsIn{SlotName}" } }, + ["per socketed blue gem"] = { tag = { type = "Multiplier", var = "SocketedBlueGemsIn{SlotName}" } }, ["for each impale on enemy"] = { tag = { type = "Multiplier", var = "ImpaleStacks", actor = "enemy" } }, ["per impale on enemy"] = { tag = { type = "Multiplier", var = "ImpaleStacks", actor = "enemy" } }, ["per grasping vine"] = { tag = { type = "Multiplier", var = "GraspingVinesCount" } }, @@ -4375,6 +4378,14 @@ local specialModList = { ["minions convert (%d+)%% of (.+) damage to (.+) damage per (.+) socket"] = function(num, _, source, target, socketColor) return { mod("MinionModifier", "LIST", { mod = mod(source:gsub("^%l", string.upper) .. "DamageConvertTo" .. target:gsub("^%l", string.upper), "BASE", num) }, { type = "Multiplier", var = socketColor:gsub("^%l", string.upper) .. "SocketIn{SlotName}" }) } end, + ["minions convert (%d+)%% of (.+) damage to (.+) damage per socketed (%a+) gem"] = function(num, _, source, target, colour) + if colour == "red" or colour == "green" or colour == "blue" then + local var = string.format("Socketed%sGemsIn{SlotName}", colour:gsub("^%l", string.upper)) + return { + mod("MinionModifier", "LIST", { mod = mod(source:gsub("^%l", string.upper) .. "DamageConvertTo" .. target:gsub("^%l", string.upper), "BASE", num) }, { type = "Multiplier", var = var }) + } + end + end, ["minions have a (%d+)%% chance to impale on hit with attacks"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("ImpaleChance", "BASE", num ) }) } end, ["minions from herald skills deal (%d+)%% more damage"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", num) }, { type = "SkillType", skillType = SkillType.Herald }) } end, ["minions have (%d+)%% increased movement speed for each herald affecting you"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", num, { type = "Multiplier", var = "Herald", actor = "parent" }) }) } end, From 8780e266b6daa6172f96c6e7552c89f170d9c79b Mon Sep 17 00:00:00 2001 From: vaisest <4550061+vaisest@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:12:00 +0300 Subject: [PATCH 2/3] Fix issues --- src/Export/Uniques/gloves.lua | 8 ++++---- src/Modules/CalcSetup.lua | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Export/Uniques/gloves.lua b/src/Export/Uniques/gloves.lua index 5fc84c40c1..f498d4fa5f 100644 --- a/src/Export/Uniques/gloves.lua +++ b/src/Export/Uniques/gloves.lua @@ -829,13 +829,13 @@ Variant: Current Requires Level 32, 26 Str, 26 Int LocalIncreasedArmourAndEnergyShieldUnique__16 {variant:1}MinionPhysicalToFirePerRedSocket -{variant:2}Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem {variant:1}MinionPhysicalToColdPerGreenSocket_ -{variant:2}Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem {variant:1}MinionPhysicalToLightningPerBlueSocket +{variant:1}MinionPhysicalToChaosPerWhiteSockett +{variant:2}Minions convert 25% of Physical Damage to Fire Damage per Socketed Red Gem +{variant:2}Minions convert 25% of Physical Damage to Cold Damage per Socketed Green Gem {variant:2}Minions convert 25% of Physical Damage to Lightning Damage per Socketed Blue Gem -{variant:1}MinionPhysicalToChaosPerWhiteSocket -{variant:2}Minions convert 25% of Physical Damage to Chaos Damage per Socketed White Gem +{variant:2}Minions convert 25% of Physical Damage to Chaos Damage per Empty Socket MinionChanceToFreezeShockIgnite ]],[[ Volkuur's Guidance diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index b0224d991f..85ab309cfc 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -1187,7 +1187,6 @@ function calcs.initEnv(build, mode, override, specEnv) -- Calculate socket counts local slotEmptySocketsCount = { R = 0, G = 0, B = 0, W = 0} local slotGemSocketsCount = 0 - local socketedGems = 0 local socketedColours = { R = 0, G = 0, B = 0, any = 0 } -- Loop through socket groups to calculate number of socketed gems for _, socketGroup in pairs(env.build.skillsTab.socketGroupList) do @@ -1225,9 +1224,14 @@ function calcs.initEnv(build, mode, override, specEnv) SocketedGreenGemsIn = socketedColours.G, SocketedBlueGemsIn = socketedColours.B, } + -- only the first #sockets gems contribute to multipliers + local availableSocketCounter = slotGemSocketsCount for multiplier, count in pairs(multipliers) do - env.itemModDB.multipliers[multiplier .. slotName] = (env.itemModDB.multipliers[multiplier .. slotName] or 0) + math.min(slotGemSocketsCount, count) + local filledSockets = math.min(availableSocketCounter, count) + env.itemModDB.multipliers[multiplier .. slotName] = filledSockets + availableSocketCounter = availableSocketCounter - filledSockets end + env.itemModDB.multipliers["EmptySocketIn" .. slotName] = math.min(slotGemSocketsCount, slotEmptySocketsCount.R + slotEmptySocketsCount.G + slotEmptySocketsCount.B + slotEmptySocketsCount.W) env.itemModDB.multipliers.EmptyRedSocketsInAnySlot = (env.itemModDB.multipliers.EmptyRedSocketsInAnySlot or 0) + slotEmptySocketsCount.R env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot = (env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot or 0) + slotEmptySocketsCount.G env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot = (env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot or 0) + slotEmptySocketsCount.B From e76938f6212494f84c4b8ce96012dde1ce37851c Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Sat, 25 Jul 2026 11:47:16 +1000 Subject: [PATCH 3/3] Move logic --- spec/System/TestItemMods_spec.lua | 12 ++++++++ src/Modules/CalcSetup.lua | 51 ++++++++++++++----------------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua index 1546d60804..d057aa8db3 100644 --- a/spec/System/TestItemMods_spec.lua +++ b/spec/System/TestItemMods_spec.lua @@ -67,6 +67,18 @@ describe("TetsItemMods", function() assert.are_not.equals(lightningResBefore, build.calcsTab.mainOutput.LightningResist) end) + it("caps socketed gem multipliers in gem order", function() + build.itemsTab:CreateDisplayItemFromRaw("Test Gloves\nIron Gauntlets\nSockets: R-R-R-R") + build.itemsTab:AddDisplayItem() + build.skillsTab:PasteSocketGroup("Slot: Gloves\nHeavy Strike 20/0 1\nHeavy Strike 20/0 1\nHeavy Strike 20/0 1\nHeavy Strike 20/0 1\nArc 20/0 1\n") + runCallback("OnFrame") + + local multipliers = build.calcsTab.mainEnv.itemModDB.multipliers + assert.are.equals(4, multipliers.SocketedGemsInGloves) + assert.are.equals(4, multipliers.SocketedRedGemsInGloves) + assert.are.equals(0, multipliers.SocketedBlueGemsInGloves) + end) + it("Doomsower vaal pact and extra phys as fire", function() build.itemsTab:CreateDisplayItemFromRaw([[Doomsower Lion Sword diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index 85ec344ba3..5cadb660de 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -1189,23 +1189,13 @@ function calcs.initEnv(build, mode, override, specEnv) -- Calculate socket counts local slotEmptySocketsCount = { R = 0, G = 0, B = 0, W = 0} local slotGemSocketsCount = 0 - local socketedColours = { R = 0, G = 0, B = 0, any = 0 } + local socketedGems = { } -- Loop through socket groups to calculate number of socketed gems - for _, socketGroup in pairs(env.build.skillsTab.socketGroupList) do + for _, socketGroup in ipairs(env.build.skillsTab.socketGroupList) do if (not socketGroup.source and socketGroup.enabled and socketGroup.slot and socketGroup.slot == slotName and socketGroup.gemList) then - for _, gem in pairs(socketGroup.gemList) do + for _, gem in ipairs(socketGroup.gemList) do if (gem.gemData and gem.enabled) then - socketedColours.any = socketedColours.any + 1 - local tags = gem.gemData.tags - if tags and tags.strength then - socketedColours.R = socketedColours.R + 1 - end - if tags and tags.dexterity then - socketedColours.G = socketedColours.G + 1 - end - if tags and tags.intelligence then - socketedColours.B = socketedColours.B + 1 - end + t_insert(socketedGems, gem) end end end @@ -1215,31 +1205,36 @@ function calcs.initEnv(build, mode, override, specEnv) if socket.color == 'R' or socket.color == 'B' or socket.color == 'G' or socket.color == 'W' then slotGemSocketsCount = slotGemSocketsCount + 1 -- loop through sockets indexes that are greater than number of socketed gems - if i > socketedColours.any then + if i > #socketedGems then slotEmptySocketsCount[socket.color] = slotEmptySocketsCount[socket.color] + 1 end end end - local multipliers = { - SocketedGemsIn = socketedColours.any, - SocketedRedGemsIn = socketedColours.R, - SocketedGreenGemsIn = socketedColours.G, - SocketedBlueGemsIn = socketedColours.B, - } - -- only the first #sockets gems contribute to multipliers - local availableSocketCounter = slotGemSocketsCount - for multiplier, count in pairs(multipliers) do - local filledSockets = math.min(availableSocketCounter, count) - env.itemModDB.multipliers[multiplier .. slotName] = filledSockets - availableSocketCounter = availableSocketCounter - filledSockets + local socketedColours = { R = 0, G = 0, B = 0 } + -- Only gems that fit in the item's sockets contribute to multipliers + for i = 1, math.min(slotGemSocketsCount, #socketedGems) do + local tags = socketedGems[i].gemData.tags + if tags and tags.strength then + socketedColours.R = socketedColours.R + 1 + end + if tags and tags.dexterity then + socketedColours.G = socketedColours.G + 1 + end + if tags and tags.intelligence then + socketedColours.B = socketedColours.B + 1 + end end + env.itemModDB.multipliers["SocketedGemsIn" .. slotName] = math.min(slotGemSocketsCount, #socketedGems) + env.itemModDB.multipliers["SocketedRedGemsIn" .. slotName] = socketedColours.R + env.itemModDB.multipliers["SocketedGreenGemsIn" .. slotName] = socketedColours.G + env.itemModDB.multipliers["SocketedBlueGemsIn" .. slotName] = socketedColours.B env.itemModDB.multipliers["EmptySocketIn" .. slotName] = math.min(slotGemSocketsCount, slotEmptySocketsCount.R + slotEmptySocketsCount.G + slotEmptySocketsCount.B + slotEmptySocketsCount.W) env.itemModDB.multipliers.EmptyRedSocketsInAnySlot = (env.itemModDB.multipliers.EmptyRedSocketsInAnySlot or 0) + slotEmptySocketsCount.R env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot = (env.itemModDB.multipliers.EmptyGreenSocketsInAnySlot or 0) + slotEmptySocketsCount.G env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot = (env.itemModDB.multipliers.EmptyBlueSocketsInAnySlot or 0) + slotEmptySocketsCount.B env.itemModDB.multipliers.EmptyWhiteSocketsInAnySlot = (env.itemModDB.multipliers.EmptyWhiteSocketsInAnySlot or 0) + slotEmptySocketsCount.W -- Warn if socketed gems over socket limit - if socketedColours.any > slotGemSocketsCount then + if #socketedGems > slotGemSocketsCount then env.itemWarnings.socketLimitWarning = env.itemWarnings.socketLimitWarning or { } t_insert(env.itemWarnings.socketLimitWarning, slotName) end