@@ -2349,32 +2349,31 @@ function TreeTabClass:FindTimelessJewel()
23492349 end
23502350 curNodeId = " totalStat"
23512351 end
2352- end
2353- end
2354- local seedWeights = { }
2355- local seedMultiplier = timelessData .jewelType .id == 5 and 20 or 1 -- Elegant Hubris
2356- for curSeed = data .timelessJewelSeedMin [timelessData .jewelType .id ] * seedMultiplier , data .timelessJewelSeedMax [timelessData .jewelType .id ] * seedMultiplier , seedMultiplier do
2357- seedWeights [curSeed ] = 0
2358- resultNodes [curSeed ] = { }
2359- for targetNode in pairs (targetNodes ) do
2360- local jewelDataTbl = data .readLUT (curSeed , targetNode , timelessData .jewelType .id )
2361- if not next (jewelDataTbl ) then
2362- ConPrintf (" Missing LUT: " .. timelessData .jewelType .label )
2363- else
2364- local curNode = nil
2365- local curNodeId = nil
2366- if (timelessData .jewelType .id == 4 and isValueInTable (protectedNodes , treeData .nodes [targetNode ].dn )) then -- protected
2367- if jewelDataTbl [1 ] >= data .timelessJewelAdditions then -- protected node is a replacement, invalidate seed
2368- resultNodes [curSeed ] = nil
2369- break
2370- end
2371- if not desiredNodes [" totalStat" ] then -- only add if user has not entered their own Devotion to the table
2372- desiredNodes [" totalStat" ] = {
2373- nodeWeight = 0.1 , -- keeps total score low to let desired stats decide sort
2374- nodeWeight2 = 0 ,
2375- displayName = " Devotion" ,
2376- desiredIdx = desiredIdx + 1
2377- }
2352+ if jewelDataTbl [1 ] >= data .timelessJewelAdditions and not isValueInTable (protectedNodes , treeData .nodes [targetNode ].dn ) then -- replace
2353+ curNode = legionNodes [jewelDataTbl [1 ] + 1 - data .timelessJewelAdditions ]
2354+ curNodeId = curNode and legionNodes [jewelDataTbl [1 ] + 1 - data .timelessJewelAdditions ].id or nil
2355+ else -- add
2356+ curNode = legionAdditions [jewelDataTbl [1 ] + 1 ]
2357+ curNodeId = curNode and legionAdditions [jewelDataTbl [1 ] + 1 ].id or nil
2358+ end
2359+ if desiredNodes [" totalStat" ] and reverseTotalModIDs [curNodeId ] then
2360+ curNodeId = " totalStat"
2361+ end
2362+ if timelessData .jewelType .id == 1 then
2363+ local headerSize = # jewelDataTbl
2364+ if headerSize == 2 or headerSize == 3 then
2365+ if desiredNodes [curNodeId ] then
2366+ resultNodes [curSeed ][curNodeId ] = resultNodes [curSeed ][curNodeId ] or { targetNodeNames = { }, totalWeight = 0 }
2367+ local statMod1 = curNode .stats [curNode .sortedStats [1 ]]
2368+ local weight = desiredNodes [curNodeId ].nodeWeight * jewelDataTbl [statMod1 .index + 1 ]
2369+ local statMod2 = curNode .stats [curNode .sortedStats [2 ]]
2370+ if statMod2 then
2371+ weight = weight + desiredNodes [curNodeId ].nodeWeight2 * jewelDataTbl [statMod2 .index + 1 ]
2372+ end
2373+ t_insert (resultNodes [curSeed ][curNodeId ], targetNode )
2374+ t_insert (resultNodes [curSeed ][curNodeId ].targetNodeNames , treeData .nodes [targetNode ].name )
2375+ resultNodes [curSeed ][curNodeId ].totalWeight = resultNodes [curSeed ][curNodeId ].totalWeight + weight
2376+ seedWeights [curSeed ] = seedWeights [curSeed ] + weight
23782377 end
23792378 elseif headerSize == 6 or headerSize == 8 then
23802379 for i , jewelData in ipairs (jewelDataTbl ) do
@@ -2402,18 +2401,74 @@ function TreeTabClass:FindTimelessJewel()
24022401 seedWeights [curSeed ] = seedWeights [curSeed ] + desiredNodes [curNodeId ].nodeWeight
24032402 end
24042403 end
2405- if resultNodes [curSeed ] and desiredNodes [" totalStat" ] then
2406- resultNodes [curSeed ][" totalStat" ] = resultNodes [curSeed ][" totalStat" ] or { targetNodeNames = { }, totalWeight = 0 }
2407- if timelessData .jewelType .id == 4 then -- Militant Faith
2408- local addedWeight = desiredNodes [" totalStat" ].nodeWeight * (5 * targetSmallNodes .otherSmalls + 10 * targetSmallNodes .attributeSmalls )
2409- addedWeight = addedWeight + resultNodes [curSeed ][" totalStat" ].totalWeight * 4
2410- resultNodes [curSeed ][" totalStat" ].totalWeight = resultNodes [curSeed ][" totalStat" ].totalWeight + addedWeight
2411- seedWeights [curSeed ] = seedWeights [curSeed ] + addedWeight
2412- else
2413- local addedWeight = desiredNodes [" totalStat" ].nodeWeight * (4 * targetSmallNodes .otherSmalls + 2 * targetSmallNodes .attributeSmalls )
2414- addedWeight = addedWeight + resultNodes [curSeed ][" totalStat" ].totalWeight * 19
2415- resultNodes [curSeed ][" totalStat" ].totalWeight = resultNodes [curSeed ][" totalStat" ].totalWeight + addedWeight
2416- seedWeights [curSeed ] = seedWeights [curSeed ] + addedWeight
2404+ end
2405+ if desiredNodes [" totalStat" ] then
2406+ resultNodes [curSeed ][" totalStat" ] = resultNodes [curSeed ][" totalStat" ] or { targetNodeNames = { }, totalWeight = 0 }
2407+ if timelessData .jewelType .id == 4 then -- Militant Faith
2408+ local addedWeight = desiredNodes [" totalStat" ].nodeWeight * (5 * targetSmallNodes .otherSmalls + 10 * targetSmallNodes .attributeSmalls )
2409+ addedWeight = addedWeight + resultNodes [curSeed ][" totalStat" ].totalWeight * 4
2410+ resultNodes [curSeed ][" totalStat" ].totalWeight = resultNodes [curSeed ][" totalStat" ].totalWeight + addedWeight
2411+ seedWeights [curSeed ] = seedWeights [curSeed ] + addedWeight
2412+ else
2413+ local addedWeight = desiredNodes [" totalStat" ].nodeWeight * (4 * targetSmallNodes .otherSmalls + 2 * targetSmallNodes .attributeSmalls )
2414+ addedWeight = addedWeight + resultNodes [curSeed ][" totalStat" ].totalWeight * 19
2415+ resultNodes [curSeed ][" totalStat" ].totalWeight = resultNodes [curSeed ][" totalStat" ].totalWeight + addedWeight
2416+ seedWeights [curSeed ] = seedWeights [curSeed ] + addedWeight
2417+ end
2418+ end
2419+ -- check minimum weights
2420+ for _ , val in ipairs (minimumWeights ) do
2421+ if (resultNodes [curSeed ][val .reqNode ] and resultNodes [curSeed ][val .reqNode ].totalWeight or 0 ) < val .weight then
2422+ resultNodes [curSeed ] = nil
2423+ break
2424+ end
2425+ end
2426+ end
2427+
2428+ return {
2429+ resultNodes = resultNodes ,
2430+ seedWeights = seedWeights ,
2431+ desiredNodes = desiredNodes ,
2432+ socketInfo = socketInfo
2433+ }
2434+ end
2435+
2436+ local function formatSearchValue (input )
2437+ local matchPattern1 = " 0"
2438+ local replacePattern1 = " "
2439+ local matchPattern2 = " .0 "
2440+ local replacePattern2 = " "
2441+ local matchPattern3 = " %."
2442+ local replacePattern3 = " 0."
2443+ local matchPattern4 = " %.([0-9])0"
2444+ local replacePattern4 = " .%1 "
2445+ return (" " .. s_format (" %006.2f" , input ))
2446+ :gsub (matchPattern1 , replacePattern1 ):gsub (matchPattern1 , replacePattern1 )
2447+ :gsub (matchPattern2 , replacePattern2 ):gsub (matchPattern2 , replacePattern2 )
2448+ :gsub (matchPattern3 , replacePattern3 )
2449+ :gsub (matchPattern4 , replacePattern4 )
2450+ end
2451+
2452+ local function formatResults (resultNodes , seedWeights , desiredNodes , socketInfo )
2453+ local results = { }
2454+ for seedMatch , seedData in pairs (resultNodes ) do
2455+ -- filter out the results so that only the ones that beat the total minimum weight parameter remain in search results
2456+ local passesMin = (not timelessData .totalMinimumWeight ) or (seedWeights [seedMatch ] >= timelessData .totalMinimumWeight )
2457+ if seedWeights [seedMatch ] > 0 and passesMin then
2458+ local labelPrefix = socketInfo and (socketInfo .label .. " | " ) or " "
2459+ local result = {
2460+ label = labelPrefix .. seedMatch .. " :" ,
2461+ seed = seedMatch ,
2462+ total = seedWeights [seedMatch ]
2463+ }
2464+ if socketInfo then
2465+ result .socketId = socketInfo .id
2466+ result .socketLabel = socketInfo .label
2467+ end
2468+ if timelessData .jewelType .id == 1 or timelessData .jewelType .id == 3 then
2469+ -- Glorious Vanity [100-8000], Brutal Restraint [500-8000]
2470+ if seedMatch < 1000 then
2471+ result .label = " " .. result .label
24172472 end
24182473 elseif timelessData .jewelType .id == 4 then
24192474 -- Militant Faith [2000-10000]
@@ -2428,13 +2483,18 @@ function TreeTabClass:FindTimelessJewel()
24282483 result .label = " " .. result .label
24292484 end
24302485 end
2431- if resultNodes [curSeed ] then
2432- -- check minimum weights
2433- for _ , val in ipairs (minimumWeights ) do
2434- if (resultNodes [curSeed ][val .reqNode ] and resultNodes [curSeed ][val .reqNode ].totalWeight or 0 ) < val .weight then
2435- resultNodes [curSeed ] = nil
2436- break
2486+ local sortedNodeArray = { }
2487+ for legionId , desiredNode in pairs (desiredNodes ) do
2488+ if seedData [legionId ] then
2489+ if desiredNode .desiredIdx == 8 then
2490+ sortedNodeArray [8 ] = " ..."
2491+ elseif desiredNode .desiredIdx < 8 then
2492+ sortedNodeArray [desiredNode .desiredIdx ] = formatSearchValue (seedData [legionId ].totalWeight )
24372493 end
2494+ result [legionId ] = result [legionId ] or { }
2495+ result [legionId ].targetNodeNames = seedData [legionId ].targetNodeNames
2496+ elseif desiredNode .desiredIdx < 8 then
2497+ sortedNodeArray [desiredNode .desiredIdx ] = " 0 "
24382498 end
24392499 end
24402500 result .label = result .label .. t_concat (sortedNodeArray )
0 commit comments