|
|
Line 1: |
Line 1: |
| -- Module:RecipeTable (https://wiki.play.eco/en/Module:RecipeTable) | | -- Module:GetRecipes (https://wiki.play.eco/en/Module:GetRecipes) |
| local p = {} | | local p = {} |
|
| |
|
| -- Header for the wikitable | | -- Grabs args from the parent frame |
| function header( args ) | | -- Trims and parses the args into a table, then returns the table |
| local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n' | | function norm() |
| | | local origArgs = mw.getCurrentFrame():getParent().args |
| -- Show or hide the Crafting Station column | | local args = {} |
| if args[1] == '1' then
| | |
| headerStr = headerStr .. '! Crafting Station !'
| | for k, v in pairs( origArgs ) do |
| end | | v = mw.text.trim( tostring( v ) ) |
| -- Item, Level Needed, Materials, Crafting Time, Labour Cost and XP Gained Specialty
| | if v ~= '' then |
| headerStr = headerStr .. '! colspan=\"4\" | Item !! colspan=\"4\" | Materials !! Level Needed !! Crafting Time <br>(mins) !! Labour Cost || XP Gained !!\n'
| | args[k] = v |
| return headerStr
| | end |
| end
| |
| | |
| function imagedisp( name )
| |
| local str = ''
| |
| local image
| |
| | |
| if name then
| |
| name = string.gsub(name, '.skillbook', 'skillbook') | |
| end | | end |
| | | |
| -- Manual override for image file | | return args |
| if name then | |
| image = string.gsub(name, ' ', '') .. '_Icon.png'
| |
| else
| |
| image = 'NoImage.png'
| |
| end
| |
| str = str .. '<div class="iconContainer" style="width:64px; height:64px"><div class="iconStack">[[File:' .. image .. '|frameless|class=iconRecipe|link=' .. name ..']]</div><div class="iconBorder" style=\"position:absolute;\"></div></div>\n[[' .. name .. ']]'
| |
| return str
| |
| end
| |
| | |
| function stationcell( args )
| |
| local str = ''
| |
| str = str .. '| ' .. imagedisp(args[1])
| |
| return str
| |
| end
| |
| | |
| | |
| function itemcell( args )
| |
| local str = ''
| |
| str = str .. '| ' .. imagedisp(args[1])
| |
| str = str .. '<br>x' .. args[2] .. '\n'
| |
| return str
| |
| end | | end |
|
| |
|
| function skillreqcell( args ) | | -- Main entry point for the Module |
| local str = '' | | function p.main() |
| str = str .. '| ' .. imagedisp(args[1])
| | -- get args from the Template |
| str = str .. '<br> Level ' .. args[2] .. ' \n'
| | local args = norm() |
| return str
| | |
| end
| | -- assign variables for item, table, and group |
| | local item = args.item |
| | local table = args.table |
| | local group = args.group |
|
| |
|
| function groupedskillcell( args )
| | -- load list of recipes |
| local str = '' | | local completeList = require( "Module:CraftingRecipes" ) |
| str = str .. '| ' .. imagedisp(args[1])
| | local recipeList = completeList.recipes |
| if args[2] ~= nil then | | local ingredientsList = completeList.ingredients |
| str = str .. ' <br> ' .. imagedisp(args[2])
| | local productsList = completeList.products |
| end | | local tableList = completeList.tables |
| return str | | |
| end
| | -- initialize a table to store recipes |
| | | local recipes = {} |
| -- Create a wikitable of recipes | | local products = {} |
| function p.main( recipes )
| | local ingredients = {} |
| local rows = '' | | |
| | -- load CraftingParser |
| | local parser = require( "Module:CraftingParser" ) |
| | | |
| -- Get each row | | -- priority: item > table > group |
| for i = 1, #recipes do | | if item ~= nil then |
| | |
| -- get information from the current recipe for building
| |
| local checkImage = recipes[i].checkImage
| |
| local craftStn = recipes[i].craftStn
| |
| local skillNeeds = recipes[i].skillNeeds
| |
| --use last variant as this is always the default variant
| |
| local numberOfVariants = recipes[i].numberOfVariants
| |
| local products = {{'',''}}
| |
| local ingredients = {{'',''}}
| |
| | | |
| --loop through variants to select default variant ingredients | | if productsList[item] ~= nil then |
| for k, v in pairs(recipes[i].variants) do
| | for num = 1, #productsList do |
| return tostring(k) | | if (productsList[item][num] ~= '' and recipeList[productsList[item][num]] ~= nil) then |
| --given pairs doesn't guarantee order, check that product matches default variant
| | products[num] = recipeList[productsList[item][num]] |
| --if k == recipes[i].defaultVariant then
| | end |
| --ingredients = v.ingredients
| | end |
| --products = v.products | |
| --end | |
| end | | end |
| local baseCraftTime = recipes[i].baseCraftTime
| |
| local baseLaborCost = recipes[i].baseLaborCost
| |
| local baseXPGain = recipes[i].baseXPGain
| |
|
| |
| -- determine the size needed for products to display correctly
| |
| local ingrednum = #ingredients
| |
| local rowspan = '|'
| |
| local rowspanProducts = '|'
| |
| | | |
| --Code to incorporate rowspan for ingrediants and variants here | | if ingredientsList[item] ~= nil then |
| local rowspanCount = 0
| | for num = 1, #ingredientsList do |
| | | if (ingredientsList[item][num] ~= '' and recipeList[ingredientsList[item][num]] ~= nil) then |
| --accomodate both variants and multiple ingredients
| | ingredients[num] = recipeList[ingredientsList[item][num]] |
|
| | end |
| if ingrednum > 4 then
| |
| rowspanCount = rowspanCount + 2 | |
| end
| |
| --suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
| |
| if(#recipes == 1) then --only add variant rowspans if there is one recipe (i.e. variants will be displayed)
| |
| if tonumber(recipes[i].numberOfVariants) > 1 then
| |
| rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants)
| |
| rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" ' | |
| end | | end |
| end | | end |
| if rowspanCount > 0 then
| |
| rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
| |
| if(#recipes > 1) then
| |
| rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
| |
| else
| |
| rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
| |
| end
| |
| end
| |
|
| |
| -- String to return
| |
| local row = '|-\n'
| |
|
| |
| -- Add new row if products or ingredients are passed in with at least 1 item
| |
| if (products[1] and ingredients[1]) then
| |
|
| |
| -- Show or hide the Crafting Station column
| |
| if recipes[i].dispCraftStn == '1' then
| |
| row = row .. rowspan .. stationcell({craftStn[1]}) .. '\n'
| |
| end
| |
| | | |
| -- Add the products columns
| | return parser.formattedItem( products, ingredients, item ) |
| local prodnum = #products
| | |
| for a = 1, prodnum do
| | --elseif table ~= nil then |
| if prodnum == 1 then
| | --for num = 1, #tableList[table] do |
| row = row .. rowspanProducts .. ' colspan=\"4\" '
| | --recipes[num] = recipeList[tableList[table][num]] |
| end
| | --end |
| if ((prodnum == 2) or (prodnum == 3 and a == 2)) then
| |
| row = row .. rowspanProducts .. ' colspan=\"2\" '
| |
| end
| |
| row = row .. itemcell({products[a][1], products[a][2]})
| |
| end
| |
|
| |
| -- Add the FIRST row of Ingredients column
| |
| local numing = ingrednum
| |
| if ingrednum > 4 then
| |
| numing = 4
| |
| end
| |
| for b = 1, numing do
| |
| if (ingrednum == 1) then
| |
| row = row .. '| colspan=\"4\" '
| |
| end
| |
| if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then
| |
| row = row .. '| colspan=\"2\" '
| |
| end
| |
| row = row .. itemcell({ingredients[b][2], ingredients[b][3]})
| |
| end
| |
|
| |
|
| -- Add the Skill needed column
| | --return parser.formattedTable( recipes, table ) |
| if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
| |
| row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2]})
| |
| else
| |
| row = row .. rowspan
| |
| if ingrednum > 4 then
| |
| row = row .. '|'
| |
| end
| |
| row = row .. ' \'\'None\'\' \n'
| |
| end
| |
|
| |
| -- Add the Crafting time column
| |
| row = row .. rowspan
| |
| if rowspanCount > 1 then
| |
| row = row .. '|'
| |
| end
| |
| if baseCraftTime then
| |
| row = row .. baseCraftTime .. '\n'
| |
| else
| |
|
| |
| row = row .. rowspan .. ' \'\'missing\'\' \n'
| |
| end
| |
|
| |
| -- Add the Labour time column
| |
| row = row .. rowspan
| |
| if rowspanCount > 1 then
| |
| row = row .. '|'
| |
| end
| |
| if baseLaborCost then
| |
| row = row .. baseLaborCost .. '\n'
| |
| else
| |
|
| |
| row = row .. rowspan .. ' \'\'missing\'\' \n'
| |
| end
| |
|
| |
| -- Add the XP gain column
| |
| row = row .. rowspan
| |
| if rowspanCount > 1 then
| |
| row = row .. '|'
| |
| end
| |
| if baseXPGain then
| |
| row = row .. baseXPGain .. '\n'
| |
| else
| |
|
| |
| row = row .. rowspan .. ' \'\'missing\'\' \n'
| |
| end
| |
|
| |
| -- Add the SECOND row of ingredients to ingredients column if applicable
| |
| if ingrednum > 4 then
| |
| row = row .. '|-\n'
| |
| for b = 5, ingrednum do
| |
| if (ingrednum == 5) then
| |
| row = row .. '| colspan=\"4\" '
| |
| end
| |
| if ((ingrednum == 6) or (ingrednum == 7 and b == 6)) then
| |
| row = row .. '| colspan=\"2\" '
| |
| end
| |
| row = row .. itemcell({ingredients[b][2], ingredients[b][3]})
| |
| end
| |
| end
| |
|
| |
| rows = rows .. row
| |
| end
| |
|
| |
|
| --Show variants in table if only 1 recipe in list
| | else |
|
| | return 'Invalid use of parameters, please see [[Template:GetRecipes]].' |
| end
| | end |
|
| |
| -- Return the full wikitable | |
| return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n'
| |
| end | | end |
|
| |
|
| return p | | return p |
This module is a part of the Template:GetRecipes, and is used to generate a wikitable of recipes. It returns a wikitable as a string. The wikitable contains all of the recipes that were passed into the module.
If the template is passed, this module is used with the following Modules:
-- Module:GetRecipes (https://wiki.play.eco/en/Module:GetRecipes)
local p = {}
-- Grabs args from the parent frame
-- Trims and parses the args into a table, then returns the table
function norm()
local origArgs = mw.getCurrentFrame():getParent().args
local args = {}
for k, v in pairs( origArgs ) do
v = mw.text.trim( tostring( v ) )
if v ~= '' then
args[k] = v
end
end
return args
end
-- Main entry point for the Module
function p.main()
-- 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
-- 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 > table > group
if item ~= nil then
if productsList[item] ~= nil then
for num = 1, #productsList do
if (productsList[item][num] ~= '' and recipeList[productsList[item][num]] ~= nil) then
products[num] = recipeList[productsList[item][num]]
end
end
end
if ingredientsList[item] ~= nil then
for num = 1, #ingredientsList do
if (ingredientsList[item][num] ~= '' and recipeList[ingredientsList[item][num]] ~= nil) then
ingredients[num] = recipeList[ingredientsList[item][num]]
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
--return parser.formattedTable( recipes, table )
else
return 'Invalid use of parameters, please see [[Template:GetRecipes]].'
end
end
return p