Latest revision |
Your text |
Line 2: |
Line 2: |
| local p = {} | | local p = {} |
|
| |
|
| local Utils = require('Module:Utils')
| | -- Grabs args from the parent frame |
| | | -- Trims and parses the args into a table, then returns the table |
| -- Main entry point for the Module | | function norm() |
| function p.main(frame)
| | local origArgs = mw.getCurrentFrame():getParent().args |
| local test = ''
| | local args = {} |
| | | |
| -- get args from the Template
| | for k, v in pairs( origArgs ) do |
| local args = Utils.normaliseArgs(frame)
| | v = mw.text.trim( tostring( v ) ) |
| | | if v ~= '' then |
| return p.renderTable(args.item, args.tag, args.table, args.group)
| | args[k] = v |
| end
| |
| | |
| | |
| function p.renderTable(item, tag, craftTable, group) | |
| -- load list of recipes
| |
| local completeList = require("Module:CraftingRecipes")
| |
| local recipeList = completeList.recipes
| |
| local ingredientsList = completeList.ingredients
| |
| local productsList = completeList.products
| |
| local tableList = completeList.tables
| |
|
| |
| -- initialize a table to store recipes
| |
| local recipes = {}
| |
| local products = {}
| |
| local ingredients = {}
| |
|
| |
| -- load CraftingParser
| |
| local parser = require("Module:CraftingParser")
| |
| | |
| -- priority: item > tag > table > group
| |
| if item ~= nil then
| |
| local itemProducts | |
| | |
| -- HACK Attempt to handle issue with tool recipes
| |
| if productsList[item] and #productsList[item] == 1 and productsList[item][1] == '' then
| |
| itemProducts = {item}
| |
| elseif productsList[item] then | |
| itemProducts = productsList[item]
| |
| end | |
| | |
| if itemProducts ~= nil then
| |
| for _, itemProduct in pairs(itemProducts) do
| |
| -- HACK: Skill books don't show us as a product of research pages, only the skill name.
| |
| if string.sub(item, string.len(item) - 9) == 'Skill Book' then
| |
| if (itemProduct ~= '' and recipeList[itemProduct .. ' Skill Book'] ~= nil) then
| |
| table.insert(products, recipeList[itemProduct .. ' Skill Book'])
| |
| end | |
| elseif (itemProduct ~= '' and recipeList[itemProduct] ~= nil) then
| |
| table.insert(products, recipeList[itemProduct])
| |
| end | | end |
| end
| |
| end | | end |
| | |
| | return args |
| | end |
|
| |
|
| local itemIngredients | | -- Main entry point for the Module |
| | function p.main() |
| | local test = '' |
| | |
| | -- get args from the Template |
| | local args = norm() |
| | |
| | -- assign variables for item, table, and group |
| | local item = args.item |
| | local table = args.table |
| | local group = args.group |
|
| |
|
| -- HACK Attempt to handle issue with tool recipes | | -- load list of recipes |
| if ingredientsList[item] and #ingredientsList[item] == 1 and ingredientsList[item][1] == '' then | | local completeList = require( "Module:CraftingRecipes" ) |
| itemIngredients = {item}
| | local recipeList = completeList.recipes |
| elseif ingredientsList[item] then
| | local ingredientsList = completeList.ingredients |
| itemIngredients = ingredientsList[item]
| | local productsList = completeList.products |
| end
| | local tableList = completeList.tables |
| | | |
| if itemIngredients ~= nil then
| | -- initialize a table to store recipes |
| for _, itemIngredient in pairs(itemIngredients) do
| | local recipes = {} |
| if itemIngredient ~= '' then
| | local products = {} |
| if recipeList[itemIngredient] ~= nil then
| | local ingredients = {} |
| table.insert(ingredients, recipeList[itemIngredient])
| | |
| -- HACK: Skill books don't show us as a product of research pages, only the skill name.
| | -- load CraftingParser |
| elseif recipeList[itemIngredient .. ' Skill Book'] ~= nil then
| | local parser = require( "Module:CraftingParser" ) |
| table.insert(ingredients, recipeList[itemIngredient .. ' Skill Book']) | | |
| end
| | -- priority: item > table > group |
| | if item ~= nil then |
| | if productsList[item] ~= nil then |
| | local built = 1 |
| | for num = 1, #productsList[item] do |
| | if (productsList[item][num] ~= '' and recipeList[productsList[item][num]] ~= nil) then |
| | products[built] = recipeList[productsList[item][num]] |
| | built = built + 1 |
| | end |
| | end |
| | end |
| | |
| | if ingredientsList[item] ~= nil then |
| | local built = 1 |
| | for num = 1, #ingredientsList[item] do |
| | if (ingredientsList[item][num] ~= '' and recipeList[ingredientsList[item][num]] ~= nil) then |
| | ingredients[built] = recipeList[ingredientsList[item][num]] |
| | built = built + 1 |
| | end |
| | end |
| | end |
| | |
| | return parser.formattedItem( products, ingredients, item ) |
| | |
| | elseif table ~= nil then |
| | for num = 1, #tableList[table] do |
| | recipes[num] = recipeList[tableList[table][num]] |
| end | | end |
| end
| |
| end
| |
| return parser.formattedItem(products, ingredients, item)
| |
|
| |
|
| elseif tag ~= nil then
| | return parser.formattedTable( recipes, table ) |
| itemIngredients = {}
| |
|
| |
| -- Tags do not appear in the 'products' list, so have to process manually
| |
| for recipeName, recipe in pairs(recipeList) do
| |
| local foundIngredient = false
| |
| for _, variant in pairs(recipe.variants) do
| |
| for _, ingredient in pairs(variant.ingredients) do
| |
| if ingredient[1] == 'TAG' and ingredient[2] == tag then
| |
| foundIngredient = true
| |
| end
| |
| end
| |
| end
| |
| if foundIngredient then
| |
| table.insert(itemIngredients, recipeName) | |
| end
| |
| end
| |
|
| |
|
| if itemIngredients ~= nil then | | else |
| for _, itemIngredient in pairs(itemIngredients) do
| | return 'Invalid use of parameters, please see [[Template:GetRecipes]].' |
| if itemIngredient ~= '' then | |
| if recipeList[itemIngredient] ~= nil then
| |
| table.insert(ingredients, recipeList[itemIngredient])
| |
| end
| |
| end
| |
| end
| |
| end | | end |
| return parser.formattedItem(products, ingredients, tag)
| |
|
| |
| elseif craftTable ~= nil then
| |
|
| |
| if tableList[craftTable] == nil then
| |
| return 'This object is not a crafting table and cannot craft any objects.'
| |
| end
| |
|
| |
| for _, tbl in pairs(tableList[craftTable]) do
| |
| table.insert(recipes, recipeList[tbl])
| |
| end
| |
|
| |
| return parser.formattedTable(recipes, craftTable)
| |
|
| |
| else
| |
| return 'Invalid use of parameters, please see [[Template:GetRecipes]].'
| |
| end
| |
| end | | end |
|
| |
|
| return p | | return p |