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.

Editing Module:RecipeTable

From Eco - English Wiki

Your changes will be displayed to readers once an authorized user accepts them. (help)

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
-- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable
-- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable
local p = {}
local p = {}
local Utils = require("Module:Utils")
local L = require("Module:Localization")


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


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


function imagedisp(name, nameEN, style, borderColour)
function imagedisp( name,nameEN )
     local borderImageClass = ''
     local str = ''
    local icon
    if borderColour == 'green' then
        borderImageClass = ' borderGreen'
    elseif borderColour == 'yellow' then
        borderImageClass = ' borderYellow'
    end


    local iconBG
     if name then
     if style == 'tag' then
         name = string.gsub(name, '.skillbook', 'skillbook')
         iconBG = 'iconGrey'
        icon = L.tag(name) .. 'Tag'
        name = L.t('%s Tag'):format(name)
    elseif style == 'skill' then
        iconBG = 'iconBrightBlue'
        icon = nameEN
     end
     end


     if not icon then
    -- Manual override for image file
         icon = name
     if nameEN then
    end
         image = string.gsub(nameEN, ' ', '') .. '_Icon.png'
 
else
    return Utils.build_icon(icon, name, 'iconRecipe', iconBG, borderImageClass, true) .. '\n[[' .. name .. ']]'
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
end


function stationcell(args)
function stationcell( args )
    local str = ''
  local str = ''
    str = str .. '| ' .. imagedisp(args[1], args[2])
str = str .. '| ' .. imagedisp(args[1],args[2])
    return str
return str
end
end


function itemcell(args)
function itemcell( args )
    local str = ''
local str = ''
    str = str .. '| ' .. imagedisp(args[1], args[3])
str = str .. '| ' .. imagedisp(args[1],args[3])
    str = str .. '<br>x' .. args[2] .. '\n'
str = str .. '<br>x' .. args[2] .. '\n'
    return str
return str
end
end


function ingredientcell(args)
function ingredientcell( args )
    local str = ''
local str = ''
    local borderColour
str = str .. '| ' .. imagedisp(args[2],args[5])
    if args[4] == 'False' then
if args[1] == 'TAG' then
        borderColour = 'green'
-- Assumes str ends in ]]
    elseif args[4] == 'True' then
str = string.sub(str, 0,-3) .. 'Tag]]'
        borderColour = 'yellow'
end
    end
str = str .. '<br>x' .. args[3] .. '\n'
    if args[1] == 'TAG' then
return str
        style = 'tag'
    else
        style = nil
    end
    return str .. '| ' .. imagedisp(args[2], args[5], style, borderColour) .. '<br>x' .. args[3] .. '\n'
end
end


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


 
-- Does this even exist anymore?
-- Does this even exist anymore?
--function groupedskillcell( args )
--function groupedskillcell( args )
Line 92: Line 75:


-- Create a wikitable of recipes
-- Create a wikitable of recipes
function p.main(recipes)
function p.main( recipes )
     local rows = ''
     local rows = ''
     -- Get each row
     -- Get each row
     for i = 1, #recipes do
     for i = 1, #recipes do
        -- get information from the current recipe for building
-- get information from the current recipe for building
        local checkImage = recipes[i].checkImage
local checkImage = recipes[i].checkImage
        local craftStn = recipes[i].craftStn
local craftStn = recipes[i].craftStn
        local skillNeeds = recipes[i].skillNeeds
local skillNeeds = recipes[i].skillNeeds
        --use last variant as this is always the default variant
--use last variant as this is always the default variant
        local numberOfVariants = recipes[i].numberOfVariants
local numberOfVariants = recipes[i].numberOfVariants
        local products = {}
local products = {{'','',''}}
        local ingredients = {}
local ingredients = {{'',''}}
--loop through variants to select default variant ingredients
for k, v in pairs(recipes[i].variants) do
--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


        --loop through variants to select default variant ingredients
--accomodate both variants and multiple ingredients
if numberOfVariants == 1 then
            ingredients = recipes[i].variants[1].ingredients
if ingrednum > 4 then
            products = recipes[i].variants[1].products
rowspanCount = rowspanCount + 2
        else
end
        --loop through variants to select default variant ingredients
--suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
            for k, v in pairs(recipes[i].variants) do       
if(#recipes == 1) then --only add variant rowspans if there is one recipe (i.e. variants will be displayed)
                --given pairs doesn't guarantee order, check that product matches default variant
if tonumber(recipes[i].numberOfVariants) > 1 then
                if k == recipes[i].defaultVariant then
rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants)
                    ingredients = v.ingredients
rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
                    products = v.products
end
                end
end
            end
if rowspanCount > 0 then
        end
rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
        local baseCraftTime = recipes[i].baseCraftTime
if(#recipes > 1) then
        local baseLaborCost = recipes[i].baseLaborCost
rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
        local baseXPGain = recipes[i].baseXPGain
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][1],craftStn[1][2]}) .. '\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], products[a][3]})
if (tonumber(numberOfVariants) > 1) then
row = row .. '<i>Has Variants</i> \n'
end
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 .. ingredientcell(ingredients[b])
end


        -- determine the size needed for products to display correctly
-- Add the Skill needed column
        local ingrednum = #ingredients
if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
        local rowspan = '|'
row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2],skillNeeds[1][3]})
        local rowspanProducts = '|'
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 .. ingredientcell(ingredients[b])
end
end
rows = rows .. row
end


        --Code to incorporate rowspan for ingrediants and variants here
--Show variants in table if only 1 recipe in list
        local rowspanCount = 0
if (#recipes == 1 and tonumber(recipes[i].numberOfVariants) > 1) then
 
for k, v in pairs(recipes[i].variants) do
        --accomodate both variants and multiple ingredients
--start new row for variants
 
row = '|-\n'
        if ingrednum > 4 then
--Skip default variant
            rowspanCount = rowspanCount + 2
if v.products[1][1] ~= recipes[i].defaultVariant then
        end
local prodnum = #products
        --suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
for a = 1, prodnum do
        if (#recipes == 1) then
if prodnum == 1 then
            --only add variant rowspans if there is one recipe (i.e. variants will be displayed)
row = row .. rowspanProducts .. ' colspan=\"4\" '
            if tonumber(recipes[i].numberOfVariants) > 1 then
end
                rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants)
if ((prodnum == 2) or (prodnum == 3 and a == 2)) then
                rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
row = row .. rowspanProducts .. ' colspan=\"2\" '
            end
end
        end
row = row .. itemcell({v.products[a][1], v.products[a][2], v.products[a][3]})
        if rowspanCount > 0 then
end
            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
 
            local station = craftStn[1]
 
            -- Show or hide the Crafting Station column
            if recipes[i].dispCraftStn == '1' then
                row = row .. rowspan .. stationcell({ station[1], station[2] }) .. '\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], products[a][3] })
                if (tonumber(numberOfVariants) > 1) then
                    row = row .. '<i>' .. L.t('Has Variants') .. '</i> \n'
                end
            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 .. ingredientcell(ingredients[b])
            end
 
            -- Add the Skill needed column
            if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
                row = row .. rowspan .. skillreqcell({ skillNeeds[1][1], skillNeeds[1][2], skillNeeds[1][3] })
            else
                row = row .. rowspan
                if ingrednum > 4 then
                    row = row .. '|'
                end
                row = row .. ' \'\'' .. L.t('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 .. ' \'\'' .. L.t('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 .. ' \'\'' .. L.t('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 .. ' \'\'' .. L.t('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 .. ingredientcell(ingredients[b])
                end
            end
 
            rows = rows .. row
           
        end
 
        --Show variants in table if only 1 recipe in list
        if (#recipes == 1 and tonumber(recipes[i].numberOfVariants) > 1) then
            for k, v in pairs(recipes[i].variants) do
                --start new row for variants
                row = '|-\n'
                --Skip default variant
                if v.products[1][1] ~= recipes[i].defaultVariant then
                    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({ v.products[a][1], v.products[a][2], v.products[a][3] })
                    end
 
                    --will need to cycle ingrediants to fill out complete table
                    --row = row .. itemcell({v.products[1][1], v.products[1][2]})
                    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 .. ingredientcell(v.ingredients[b])
                    end
 
 
                end
                rows = rows .. row
            end
        end
    end


--will need to cycle ingrediants to fill out complete table
--row = row .. itemcell({v.products[1][1], v.products[1][2]})
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 .. ingredientcell(v.ingredients[b])
end
end
rows = rows .. row
end
end
end
     -- Return the full wikitable
     -- Return the full wikitable
    return header({ recipes[1].dispCraftStn }) .. rows .. '|-\n|}\n'
return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n'
end
 
function p.testrender()
  local crafting_recipes = require("Module:GetRecipes")
  return crafting_recipes.renderTable('Campfire', nil, nil, nil)
end
end


return p
return p
Please note that all contributions to Eco - English Wiki are considered to be released under the CC BY-NC-SA 4.0 (see Eco:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)

Template used on this page: