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 |
| local iconBG
| | str = str .. '[[File:' .. image .. '|frameless|50px|link=' .. name .. ']] <br> [[' .. name .. ']]' |
| if style == 'tag' then
| | return str |
| iconBG = 'iconGrey'
| | end |
| icon = L.tag(name) .. 'Tag'
| |
| 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 .. ']]'
| | function stationcell( args ) |
| | local str = '' |
| | str = str .. '| ' .. imagedisp(args[1]) |
| | return str |
| 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 = '' |
| | |
| | -- 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 products = recipes[i].products |
| local numberOfVariants = recipes[i].numberOfVariants
| | local skillNeeds = recipes[i].skillNeeds |
| local products = {}
| | local ingredients = recipes[i].ingredients |
| local ingredients = {}
| | local ctime = recipes[i].ctime |
| | | |
| --loop through variants to select default variant ingredients
| | -- determine the size needed for products to display correctly |
| if numberOfVariants == 1 then
| | local ingrednum = #ingredients |
| ingredients = recipes[i].variants[1].ingredients
| | local rowspan = '|' |
| products = recipes[i].variants[1].products
| | |
| else
| | if ingrednum > 4 then |
| --loop through variants to select default variant ingredients
| | rowspan = '| rowspan=\"2\" ' |
| for k, v in pairs(recipes[i].variants) do
| | end |
| --given pairs doesn't guarantee order, check that product matches default variant
| | |
| if k == recipes[i].defaultVariant then
| | -- String to return |
| ingredients = v.ingredients
| | local row = '|-\n' |
| products = v.products
| | |
| end
| | -- Add new row if products or ingredients are passed in with at least 1 item |
| end
| | if (products[1] and ingredients[1]) then |
| end
| | |
| local baseCraftTime = recipes[i].baseCraftTime
| | -- Show or hide the Crafting Station column |
| local baseLaborCost = recipes[i].baseLaborCost
| | if recipes[i].dispCraftStn == 1 then |
| local baseXPGain = recipes[i].baseXPGain
| | row = row .. rowspan .. stationcell({craftStn[1]}) .. '\n' |
| | | end |
| -- determine the size needed for products to display correctly
| | |
| local ingrednum = #ingredients
| | -- Add the products columns |
| local rowspan = '|'
| | local prodnum = #products |
| local rowspanProducts = '|'
| | for a = 1, prodnum do |
| | | if prodnum == 1 then |
| --Code to incorporate rowspan for ingrediants and variants here
| | row = row .. rowspan .. ' colspan=\"4\" ' |
| local rowspanCount = 0
| | end |
| | | if ((prodnum == 2) or (prodnum == 3 and a == 2)) then |
| --accomodate both variants and multiple ingredients
| | row = row .. rowspan .. ' colspan=\"2\" ' |
| | | end |
| if ingrednum > 4 then
| | row = row .. itemcell({products[a][1], products[a][2]}) |
| rowspanCount = rowspanCount + 2
| | end |
| end
| | |
| --suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant.
| | -- Add the Skill needed column |
| if (#recipes == 1) then
| | if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then |
| --only add variant rowspans if there is one recipe (i.e. variants will be displayed)
| | row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2]}) |
| if tonumber(recipes[i].numberOfVariants) > 1 then
| | else |
| rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants)
| | row = row .. rowspan |
| rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
| | if ingrednum > 4 then |
| end
| | row = row .. '|' |
| end
| | end |
| if rowspanCount > 0 then
| | row = row .. ' \'\'None\'\' \n' |
| rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
| | end |
| if (#recipes > 1) then
| | |
| rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
| | -- Add the FIRST row of Ingredients column |
| else
| | local numing = ingrednum |
| rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" '
| | if ingrednum > 4 then |
| end
| | numing = 4 |
| end
| | end |
| | | for b = 1, numing do |
| -- String to return
| | if (ingrednum == 1) then |
| local row = '|-\n'
| | row = row .. '| colspan=\"4\" ' |
| | | end |
| -- Add new row if products or ingredients are passed in with at least 1 item
| | if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then |
| if (products[1] and ingredients[1]) then
| | row = row .. '| colspan=\"2\" ' |
| | | end |
| local station = craftStn[1]
| | row = row .. itemcell({ingredients[b][1], ingredients[b][2]}) |
| | | end |
| -- Show or hide the Crafting Station column
| | |
| if recipes[i].dispCraftStn == '1' then
| | -- Add the Crafting time column |
| row = row .. rowspan .. stationcell({ station[1], station[2] }) .. '\n'
| | row = row .. rowspan |
| end
| | if ingrednum > 4 then |
| | | row = row .. '|' |
| -- Add the products columns
| | end |
| local prodnum = #products
| | if ctime then |
| for a = 1, prodnum do
| | row = row .. ctime .. '\n' |
| if prodnum == 1 then
| | else |
| row = row .. rowspanProducts .. ' colspan=\"4\" '
| | |
| end
| | row = row .. rowspan .. ' \'\'missing\'\' \n' |
| if ((prodnum == 2) or (prodnum == 3 and a == 2)) then
| | end |
| row = row .. rowspanProducts .. ' colspan=\"2\" '
| | |
| end
| | -- Add the Affect by Skills column IF new skill grouping |
| row = row .. itemcell({ products[a][1], products[a][2], products[a][3] })
| | if j == 0 and (recipes[i].efficiencySkills[1] ~= nil and recipes[i].efficiencySkills[1] ~= 'nil') then |
| if (tonumber(numberOfVariants) > 1) then
| | row = row .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. groupedskillcell({recipes[i].efficiencySkills[1], recipes[i].speedSkills}) .. '\n' |
| row = row .. '<i>' .. L.t('Has Variants') .. '</i> \n'
| | elseif (recipes[i].efficiencySkills[1] == nil or recipes[i].efficiencySkills[1] == 'nil') then |
| end
| | row = row .. '| \n' |
| end
| | end |
| | | j = j + 1 |
| -- Add the FIRST row of Ingredients column
| | if #ingredients > 4 then |
| local numing = ingrednum
| | j = j + 1 |
| if ingrednum > 4 then
| | end |
| numing = 4
| | if j == skillIndex[k] then |
| end
| | k = k + 1 |
| for b = 1, numing do
| | j = 0 |
| if (ingrednum == 1) then
| | end |
| row = row .. '| colspan=\"4\" '
| | |
| end
| | -- Add the SECOND row of ingredients to ingredients column if applicable |
| if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then
| | if ingrednum > 4 then |
| row = row .. '| colspan=\"2\" '
| | row = row .. '|-\n' |
| end
| | for b = 5, ingrednum do |
| row = row .. ingredientcell(ingredients[b])
| | if (ingrednum == 5) then |
| end
| | row = row .. '| colspan=\"4\" ' |
| | | end |
| -- Add the Skill needed column
| | if ((ingrednum == 6) or (ingrednum == 7 and b == 6)) then |
| if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then
| | row = row .. '| colspan=\"2\" ' |
| row = row .. rowspan .. skillreqcell({ skillNeeds[1][1], skillNeeds[1][2], skillNeeds[1][3] })
| | end |
| else
| | row = row .. itemcell({ingredients[b][1], ingredients[b][2]}) |
| row = row .. rowspan
| | end |
| if ingrednum > 4 then
| | end |
| row = row .. '|'
| | |
| end
| | rows = rows .. row |
| row = row .. ' \'\'' .. L.t('None') .. '\'\' \n'
| | end |
| end
| | 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
| |
| | |
| -- 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 |