ATTENTION! The process of updating WiKi to version Eco 10.x has begun. Those wishing to participate can find out more Information on our ECO Contribution Wiki Discord.
From April 26 to May 12, errors may occur in the Wiki, as we will be carrying out a major update to the information processing modules.

Module:RecipeTable: Difference between revisions

From Eco - English Wiki
[unchecked revision][unchecked revision]
No edit summary
No edit summary
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

Revision as of 07:12, 31 January 2021

Documentation

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