|
|
Line 347: |
Line 347: |
| return table.concat(returnPart, '\r\n') | | return table.concat(returnPart, '\r\n') |
| end | | end |
| end
| |
|
| |
| -- Accepts 1 parameter, being either:
| |
| -- 'Bars', for which a table of all bars is generated, or
| |
| -- A bar or tier name, which if valid generates a table of all smithing recipes using that bar/tier
| |
| function p.getSmithingTable(frame)
| |
| local tableType = frame.args ~= nil and frame.args[1] or frame
| |
|
| |
| -- Has a valid category been passed (by name)?
| |
| local category = GameData.getEntityByName(SkillData.Smithing.categories, tableType)
| |
| if category == nil then
| |
| return Shared.printError('Invalid Smithing category: "' .. tableType .. '"')
| |
| end
| |
|
| |
| -- Build a list of recipes to be included, and a list of bars while we're at it
| |
| -- The bar list will be used later for value/bar calculations
| |
| local recipeList, barIDList = {}, {}
| |
| for i, recipe in ipairs(SkillData.Smithing.recipes) do
| |
| if recipe.categoryID == category.id then
| |
| local recipeItem = Items.getItemByID(recipe.productID)
| |
| if recipeItem ~= nil then
| |
| table.insert(recipeList, { id = i, level = recipe.level, itemName = recipeItem.name, itemValue = recipeItem.sellsFor, expIcon = Icons.getExpansionIcon(recipeItem.id) })
| |
| end
| |
| elseif recipe.categoryID == 'melvorD:Bars' then
| |
| barIDList[recipe.productID] = true
| |
| end
| |
| end
| |
|
| |
| -- Generate output table
| |
| local resultPart = {}
| |
| table.insert(resultPart, '{|class="wikitable sortable stickyHeader"')
| |
| table.insert(resultPart, '\r\n|-class="headerRow-0"')
| |
| table.insert(resultPart, '\r\n!Item!!Name!!'..Icons.Icon({'Smithing', type='skill', notext=true})..' Level!!XP!!Value!!Ingredients')
| |
| --Adding value/bar for things other than smelting
| |
| if category.id ~= 'melvorD:Bars' then
| |
| table.insert(resultPart, '!!Value/Bar')
| |
| end
| |
|
| |
| table.sort(recipeList, function(a, b)
| |
| if a.level ~= b.level then
| |
| return a.level < b.level
| |
| else
| |
| return a.itemName < b.itemName
| |
| end
| |
| end)
| |
|
| |
| for i, recipeDef in ipairs(recipeList) do
| |
| local recipe = SkillData.Smithing.recipes[recipeDef.id]
| |
| local totalValue = recipe.baseQuantity * recipeDef.itemValue
| |
| -- Determine the bar quantity & build the recipe cost string
| |
| local barQty, costString = 0, {}
| |
| for j, itemCost in ipairs(recipe.itemCosts) do
| |
| local costItem = Items.getItemByID(itemCost.id)
| |
| if costItem ~= nil then
| |
| table.insert(costString, Icons.Icon({costItem.name, type='item', qty=itemCost.quantity, notext=true}))
| |
| end
| |
| if barIDList[itemCost.id] then
| |
| barQty = barQty + itemCost.quantity
| |
| end
| |
| end
| |
|
| |
| table.insert(resultPart, '\r\n|-')
| |
| table.insert(resultPart, '\r\n| ' .. Icons.Icon({recipeDef.itemName, type='item', size=50, notext=true}))
| |
| table.insert(resultPart, '\r\n| ')
| |
| table.insert(resultPart, recipeDef.expIcon)
| |
| if recipe.baseQuantity > 1 then
| |
| table.insert(resultPart, recipe.baseQuantity .. 'x ')
| |
| end
| |
| table.insert(resultPart, Icons.Icon({recipeDef.itemName, type='item', noicon=true}))
| |
| table.insert(resultPart, '\r\n|data-sort-value="' .. recipe.level .. '"| ' .. Icons._SkillReq('Smithing', recipe.level))
| |
| table.insert(resultPart, '\r\n|data-sort-value="' .. recipe.baseExperience .. '"| ' .. Shared.formatnum(recipe.baseExperience))
| |
| table.insert(resultPart, '\r\n|data-sort-value="' .. totalValue .. '"| ' .. Icons.GP(recipeDef.itemValue))
| |
| if recipe.baseQuantity > 1 then
| |
| table.insert(resultPart, ' (x' .. recipe.baseQuantity .. ')')
| |
| end
| |
| table.insert(resultPart, '\r\n| ' .. table.concat(costString, ', '))
| |
| if category.id ~= 'melvorD:Bars' then
| |
| local barVal, barValTxt = 0, 'N/A'
| |
| if barQty > 0 then
| |
| barVal = totalValue / barQty
| |
| barValTxt = Icons.GP(Shared.round(barVal, 1, 1))
| |
| end
| |
| table.insert(resultPart, '\r\n|data-sort-value="' .. barVal .. '"| ' .. barValTxt)
| |
| end
| |
| end
| |
| table.insert(resultPart, '\r\n|}')
| |
|
| |
| return table.concat(resultPart)
| |
| end | | end |
|
| |
|