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:GetRecipes (https://wiki.play.eco/en/Module:GetRecipes)
-- Module:RecipeTable (https://wiki.play.eco/en/Module:RecipeTable)
local p = {}
local p = {}


-- Grabs args from the parent frame
-- Header for the wikitable
-- Trims and parses the args into a table, then returns the table
function header( args )
function norm()
     local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'
     local origArgs = mw.getCurrentFrame():getParent().args
 
     local args = {}
    -- Show or hide the Crafting Station column
      
     if args[1] == '1' then
    for k, v in pairs( origArgs ) do
        headerStr = headerStr .. '! Crafting Station !'
        v = mw.text.trim( tostring( v ) )
     end
        if v ~= '' then
-- Item, Level Needed, Materials, Crafting Time, Labour Cost and XP Gained Specialty
            args[k] = v
    headerStr = headerStr .. '! colspan=\"4\" | Item !! colspan=\"4\" | Materials !! Level Needed !! Crafting Time <br>(mins) !! Labour Cost || XP Gained !!\n'
        end
    return headerStr
end
 
function imagedisp( name )
    local str = ''
    local image
 
    if name then
        name = string.gsub(name, '.skillbook', 'skillbook')
     end
     end
      
 
     return args
     -- Manual override for image file
     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


-- Main entry point for the Module
function skillreqcell( args )
function p.main()
     local str = ''
     -- get args from the Template
str = str .. '| ' .. imagedisp(args[1])
    local args = norm()
str = str .. '<br> Level ' .. args[2] .. ' \n'
   
return str
    -- assign variables for item, table, and group
end
    local item = args.item
    local table = args.table
    local group = args.group


    -- load list of recipes
function groupedskillcell( args )
    local completeList = require( "Module:CraftingRecipes" )
     local str = ''
     local recipeList = completeList.recipes
str = str .. '| ' .. imagedisp(args[1])
    local ingredientsList = completeList.ingredients
if args[2] ~= nil then
local productsList = completeList.products
str = str .. ' <br> ' .. imagedisp(args[2])
    local tableList = completeList.tables
end
   
return str
    -- initialize a table to store recipes
end
    local recipes = {}
 
local products = {}
-- Create a wikitable of recipes
local ingredients = {}
function p.main( recipes )
   
     local rows = ''
    -- load CraftingParser
     local parser = require( "Module:CraftingParser" )
     -- priority: item > table > group
     -- Get each row
     if item ~= nil then
     for i = 1, #recipes do
rows = rows .. recipes[i].defaultVariant .. '\n'
end
--[[
-- 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 = {{'',''}}
if productsList[item] ~= nil then
--loop through variants to select default variant ingredients
for num = 1, #productsList do
for k, v in pairs(recipes[i].variants) do
if (productsList[item][num] ~= '' and recipeList[productsList[item][num]] ~= nil) then
return tostring(k)
products[num] = recipeList[productsList[item][num]]
--given pairs doesn't guarantee order, check that product matches default variant
end
--if k == recipes[i].defaultVariant then
end
--ingredients = v.ingredients
--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
local rowspanCount = 0
--accomodate both variants and multiple ingredients
if ingredientsList[item] ~= nil then
if ingrednum > 4 then
for num = 1, #ingredientsList do
rowspanCount = rowspanCount + 2
if (ingredientsList[item][num] ~= '' and recipeList[ingredientsList[item][num]] ~= nil) then
end
ingredients[num] = recipeList[ingredientsList[item][num]]
--suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
end
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
if rowspanCount > 0 then
rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
if(#recipes > 1) then
rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
else
rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
end
end
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
          
          
      return parser.formattedItem( products, ingredients, item )
-- Add the products columns
       
local prodnum = #products
    --elseif table ~= nil then
for a = 1, prodnum do
        --for num = 1, #tableList[table] do
if prodnum == 1 then
            --recipes[num] = recipeList[tableList[table][num]]
row = row .. rowspanProducts .. ' colspan=\"4\" '
        --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


        --return parser.formattedTable( recipes, table )
-- Add the Skill needed column
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


     else
--Show variants in table if only 1 recipe in list
        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:18, 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:RecipeTable (https://wiki.play.eco/en/Module:RecipeTable)
local p = {}

-- Header for the wikitable
function header( args )
    local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'

    -- Show or hide the Crafting Station column
    if args[1] == '1' then
        headerStr = headerStr .. '! Crafting Station !'
    end
	-- Item, Level Needed, Materials, Crafting Time, Labour Cost and XP Gained Specialty
     headerStr = headerStr .. '! colspan=\"4\" | Item !! colspan=\"4\" | Materials !! Level Needed !! Crafting Time <br>(mins) !! Labour Cost || XP Gained !!\n'
    return headerStr
end

function imagedisp( name )
    local str = ''
    local image

    if name then
        name = string.gsub(name, '.skillbook', 'skillbook')
    end

    -- Manual override for image file
    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

function skillreqcell( args )
    local str = ''
	str = str .. '| ' .. imagedisp(args[1])
	str = str .. '<br> Level ' .. args[2] .. ' \n'
	return str
end

function groupedskillcell( args )
    local str = ''
	str = str .. '| ' .. imagedisp(args[1])
	if args[2] ~= nil then
		str = str .. ' <br> ' .. imagedisp(args[2])
	end
	return str
end

-- Create a wikitable of recipes
function p.main( recipes )
    local rows = ''
	
    -- Get each row
    for i = 1, #recipes do
		rows = rows .. recipes[i].defaultVariant .. '\n'
	end
	--[[
	-- 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
		for k, v in pairs(recipes[i].variants) do
			return tostring(k)
			--given pairs doesn't guarantee order, check that product matches default variant
			--if k == recipes[i].defaultVariant then
				--ingredients = v.ingredients
				--products = v.products		
			--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
		local rowspanCount = 0

		--accomodate both variants and multiple ingredients
		
		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
		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
			local prodnum = #products
			for a = 1, prodnum do
				if prodnum == 1 then
					row = row .. rowspanProducts .. ' colspan=\"4\" '
				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	
			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
		
	end
			
    -- Return the full wikitable
	return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n'
	]]--
end

return p