16,985
edits
(Remove getSmithingTable, replaced by getSmithingTable in Module:Skills/Artisan) Tag: Reverted |
(Revert recent changes) Tags: Manual revert Reverted |
||
Line 343: | Line 343: | ||
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 | ||