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
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
 
     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'
     -- Item, Level Needed, Materials, Related Specialty
     headerStr = headerStr .. '! colspan=\"4\" | Item !! Level Needed !! colspan=\"4\" | Materials !! Crafting Time <br>(Mins) !! style="width: 100px" | Related <br> Specialty\n'
 
     return headerStr
     return headerStr
end
end


function imagedisp(name, nameEN, style, borderColour)
function imagedisp( name )
     local borderImageClass = ''
     local str = ''
     local icon
     local image
     if borderColour == 'green' then
    -- Manual override for image file
        borderImageClass = ' borderGreen'
     if name then
    elseif borderColour == 'yellow' then
        image = string.gsub(name, ' ', '') .. '_Icon.png'
        borderImageClass = ' borderYellow'
else
    end
image = 'NoImage.png'
end
str = str .. '[[File:' .. image .. '|frameless|50px|link=' .. name .. ']] <br> [[' .. name .. ']]'
return str
end


    local iconBG
function stationcell( args )
    if style == 'tag' then
  local str = ''
        iconBG = 'iconGrey'
str = str .. '| ' .. imagedisp(args[1])
        icon = L.tag(name) .. 'Tag'
return str
        name = L.t('%s Tag'):format(name)
    elseif style == 'skill' then
        iconBG = 'iconBrightBlue'
        icon = nameEN
    end
 
    if not icon then
        icon = name
    end
 
    return Utils.build_icon(icon, name, 'iconRecipe', iconBG, borderImageClass, true) .. '\n[[' .. name .. ']]'
end
end


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


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


function ingredientcell(args)
function skillreqcell( args )
     local str = ''
     local str = ''
    local borderColour
str = str .. '| ' .. imagedisp(args[1])
    if args[4] == 'False' then
str = str .. '<br> Level ' .. args[2] .. ' \n'
        borderColour = 'green'
return str
    elseif args[4] == 'True' then
        borderColour = 'yellow'
    end
    if args[1] == 'TAG' then
        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 groupedskillcell( args )
     local str = ''
     local str = ''
    str = str .. '| ' .. imagedisp(args[1], args[3], 'skill')
str = str .. '| ' .. imagedisp(args[1])
    str = str .. '<br> ' .. L.t('Level') .. ' ' .. args[2] .. ' \n'
if args[2] ~= nil then
    return str
str = str .. ' <br> ' .. imagedisp(args[2])
end
return str
end
end
-- Does this even exist anymore?
--function groupedskillcell( args )
--    local str = ''
-- str = str .. '| ' .. imagedisp(args[1],args[3])
-- if args[2] ~= nil then
-- str = str .. ' <br> ' .. imagedisp(args[2])
-- end
-- return str
--end


-- Create a wikitable of recipes
-- Create a wikitable of recipes
function p.main(recipes)
function p.main( recipes )
     local rows = ''
     local rows = ''
    --Not relevant for v0.9
    -- find number of times each Affect by Skill occurs
    --local prevSkill = recipes[1].efficiencySkills[1]
    --local skillIndex = {}
    --local prevSkillnum = 0
--local count = 0
    --for num = 1, #recipes do
--if prevSkill ~= recipes[num].efficiencySkills[1] then
--skillIndex[#skillIndex + 1] = prevSkillnum + count
--prevSkillnum = 1
--if #recipes[num].ingredients > 4 then
--count = 1
--else
--count = 0
--end
--prevSkill = recipes[num].efficiencySkills[1]
--else
--prevSkillnum = prevSkillnum + 1
--if #recipes[num].ingredients > 4 then
--count = count + 1
--end
--end
    --end
    --skillIndex[#skillIndex + 1] = prevSkillnum + count
     -- Get each row
     -- Get each row
    local j = 0
    local k = 1
     for i = 1, #recipes do
     for i = 1, #recipes do
        -- get information from the current recipe for building
     
        local checkImage = recipes[i].checkImage
-- get information from the current recipe for building
        local craftStn = recipes[i].craftStn
local checkImage = recipes[i].checkImage
        local skillNeeds = recipes[i].skillNeeds
local craftStn = recipes[i].craftStn
        --use last variant as this is always the default variant
local skillNeeds = recipes[i].skillNeeds
        local numberOfVariants = recipes[i].numberOfVariants
--use last variant as this is always the default variant
        local products = {}
local numberOfVariants = recipes[i].numberOfVariants
        local ingredients = {}
 
--loop through variants to select default variant details
        --loop through variants to select default variant ingredients
--FOR STILL NOT WORKING - ingredients and products are being set to NULL
if numberOfVariants == 1 then
for k, variants in pairs(recipes[i].variants) do --AS IT IS A FOR LOOP, WILL ALWAYS SET FINAL VALUE WHICH IS ALSO DEFAULT VARIANT
            ingredients = recipes[i].variants[1].ingredients
--if variants.products[k][1] == recipes[i].defaultVariant then
            products = recipes[i].variants[1].products
if FALSE == recipes[i].defaultVariant then
        else
local ingredients = variants.ingredients
        --loop through variants to select default variant ingredients
local products = variants.products --THIS MAY PRODUCE ODD RESULTS, NEED TO CHECK
            for k, v in pairs(recipes[i].variants) do       
else
                --given pairs doesn't guarantee order, check that product matches default variant
--TEST CODE
                if k == recipes[i].defaultVariant then
local products = {{'DEFAULT PRODUCT NOT FOUND','1'}}
                    ingredients = v.ingredients
local ingredients = {{'DEFAULT INGREDIENT TEST','1'}}
                    products = v.products
end
                end
local products = {{'DEFAULT PRODUCT NOT FOUND','1'}}
            end
local ingredients = {{'DEFAULT INGREDIENT TEST','1'}}
        end
end
        local baseCraftTime = recipes[i].baseCraftTime
        local baseLaborCost = recipes[i].baseLaborCost
--local recipeVariants = recipes[i].variants
        local baseXPGain = recipes[i].baseXPGain
--local products = recipeVariants[numberOfVariants].products
 
--local ingredients = recipeVariants[numberOfVariants].ingredients
        -- determine the size needed for products to display correctly
--TEST CODE
        local ingrednum = #ingredients
--local products = {{'Acorn Powder','1'}}
        local rowspan = '|'
--local ingredients = {{'Acorn','1'}}
        local rowspanProducts = '|'
 
local baseCraftTime = recipes[i].baseCraftTime
        --Code to incorporate rowspan for ingrediants and variants here
        local rowspanCount = 0
--yet to be put into table output
 
local baseLaborCost = recipes[i].baseLaborCost
        --accomodate both variants and multiple ingredients
local baseXPGain = recipes[i].baseXPGain
 
        if ingrednum > 4 then
-- determine the size needed for products to display correctly
            rowspanCount = rowspanCount + 2
local ingrednum = #ingredients
        end
local rowspan = '|'
        --suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
        if (#recipes == 1) then
if ingrednum > 4 then
            --only add variant rowspans if there is one recipe (i.e. variants will be displayed)
rowspan = '| rowspan=\"2\" '
            if tonumber(recipes[i].numberOfVariants) > 1 then
end
                rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants)
                rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
-- String to return
            end
local row = '|-\n'
        end
        if rowspanCount > 0 then
-- Add new row if products or ingredients are passed in with at least 1 item
            rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
if (products[1] and ingredients[1]) then
            if (#recipes > 1) then
     
                rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
-- Show or hide the Crafting Station column
            else
if recipes[i].dispCraftStn == 1 then
                rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
row = row .. rowspan .. stationcell({craftStn[1]}) .. '\n'
            end
end
         end
          
 
-- Add the products columns
        -- String to return
local prodnum = #products
        local row = '|-\n'
for a = 1, prodnum do
 
if prodnum == 1 then
        -- Add new row if products or ingredients are passed in with at least 1 item
row = row .. rowspan .. ' colspan=\"4\" '
        if (products[1] and ingredients[1]) then
end
 
if ((prodnum == 2) or (prodnum == 3 and a == 2)) then
            local station = craftStn[1]
row = row .. rowspan .. ' colspan=\"2\" '
 
end
            -- Show or hide the Crafting Station column
row = row .. itemcell({products[a][1], products[a][2]})
            if recipes[i].dispCraftStn == '1' then
end
                row = row .. rowspan .. stationcell({ station[1], station[2] }) .. '\n'
            end
-- Add the Skill needed column
 
if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
            -- Add the products columns
row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2]})
            local prodnum = #products
else
            for a = 1, prodnum do
row = row .. rowspan
                if prodnum == 1 then
if ingrednum > 4 then
                    row = row .. rowspanProducts .. ' colspan=\"4\" '
row = row .. '|'
                end
end
                if ((prodnum == 2) or (prodnum == 3 and a == 2)) then
row = row .. ' \'\'None\'\' \n'
                    row = row .. rowspanProducts .. ' colspan=\"2\" '
end
                end
                row = row .. itemcell({ products[a][1], products[a][2], products[a][3] })
-- Add the FIRST row of Ingredients column
                if (tonumber(numberOfVariants) > 1) then
local numing = ingrednum
                    row = row .. '<i>' .. L.t('Has Variants') .. '</i> \n'
if ingrednum > 4 then  
                end
numing = 4
            end
end
 
for b = 1, numing do
            -- Add the FIRST row of Ingredients column
if (ingrednum == 1) then
            local numing = ingrednum
row = row .. '| colspan=\"4\" '
            if ingrednum > 4 then
end
                numing = 4
if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then
            end
row = row .. '| colspan=\"2\" '
            for b = 1, numing do
end
                if (ingrednum == 1) then
row = row .. itemcell({ingredients[b][1], ingredients[b][2]})
                    row = row .. '| colspan=\"4\" '
end
                end
                if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then
-- Add the Crafting time column
                    row = row .. '| colspan=\"2\" '
row = row .. rowspan
                end
if ingrednum > 4 then
                row = row .. ingredientcell(ingredients[b])
row = row .. '|'
            end
end
 
if baseCraftTime then
            -- Add the Skill needed column
row = row .. baseCraftTime .. '\n'
            if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
else
                row = row .. rowspan .. skillreqcell({ skillNeeds[1][1], skillNeeds[1][2], skillNeeds[1][3] })
            else
row = row .. rowspan .. ' \'\'missing\'\' \n'
                row = row .. rowspan
end
                if ingrednum > 4 then
                    row = row .. '|'
-- not in v0.9
                end
-- Add the Affect by Skills column IF new skill grouping
                row = row .. ' \'\'' .. L.t('None') .. '\'\' \n'
--if j == 0 and (recipes[i].efficiencySkills[1] ~= nil and recipes[i].efficiencySkills[1] ~= 'nil') then
            end
--row = row .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. groupedskillcell({recipes[i].efficiencySkills[1], recipes[i].speedSkills}) .. '\n'
 
--elseif (recipes[i].efficiencySkills[1] == nil or recipes[i].efficiencySkills[1] == 'nil'then
            -- Add the Crafting time column
--row = row .. '| \n'
            row = row .. rowspan
--end
            if rowspanCount > 1 then
--j = j + 1
                row = row .. '|'
--if #ingredients > 4 then
            end
--j = j + 1
            if baseCraftTime then
--end
                row = row .. baseCraftTime .. '\n'
--if j == skillIndex[k] then
            else
--k = k + 1
 
--j = 0
                row = row .. rowspan .. ' \'\'' .. L.t('Missing') .. '\'\' \n'
--end
            end
 
-- Add the SECOND row of ingredients to ingredients column if applicable
            -- Add the Labour time column
if ingrednum > 4 then
            row = row .. rowspan
row = row .. '|-\n'
            if rowspanCount > 1 then
for b = 5, ingrednum do
                row = row .. '|'
if (ingrednum == 5) then
            end
row = row .. '| colspan=\"4\" '
            if baseLaborCost then
end
                row = row .. baseLaborCost .. '\n'
if ((ingrednum == 6) or (ingrednum == 7 and b == 6)) then
            else
row = row .. '| colspan=\"2\" '
 
end
                row = row .. rowspan .. ' \'\'' .. L.t('Missing') .. '\'\' \n'
row = row .. itemcell({ingredients[b][1], ingredients[b][2]})
            end
end
 
end
            -- Add the XP gain column
            row = row .. rowspan
rows = rows .. row
            if rowspanCount > 1 then
end
                row = row .. '|'
end
            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
 
     -- 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: