@@ -2349,31 +2349,32 @@ function TreeTabClass:FindTimelessJewel()
23492349 end
23502350 curNodeId = " totalStat"
23512351 end
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
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+ }
23772378 end
23782379 elseif headerSize == 6 or headerSize == 8 then
23792380 for i , jewelData in ipairs (jewelDataTbl ) do
@@ -2401,74 +2402,18 @@ function TreeTabClass:FindTimelessJewel()
24012402 seedWeights [curSeed ] = seedWeights [curSeed ] + desiredNodes [curNodeId ].nodeWeight
24022403 end
24032404 end
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
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
24722417 end
24732418 elseif timelessData .jewelType .id == 4 then
24742419 -- Militant Faith [2000-10000]
@@ -2483,18 +2428,13 @@ function TreeTabClass:FindTimelessJewel()
24832428 result .label = " " .. result .label
24842429 end
24852430 end
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 )
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
24932437 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 "
24982438 end
24992439 end
25002440 result .label = result .label .. t_concat (sortedNodeArray )
0 commit comments