|
|
(23 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
| -- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable
| |
| local p = {} | | local p = {} |
|
| |
|
| local Utils = require("Module:Utils") | | local Utils = require('Module:Utils') |
| local L = require("Module:Localization") | | local IconUtils = require('Module:IconUtils') |
| | local L = require('Module:Localization') |
|
| |
|
| -- Header for the wikitable | | -- Main entry point for the Module |
| function header(args)
| | function p.main(frame) |
| local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'
| | -- get args from the Template |
| | | local args = Utils.normaliseArgs(frame) |
| -- Show or hide the Crafting Station column
| | local text = '' |
| if args[1] == '1' then
| | |
| headerStr = headerStr .. '! ' .. L.t('Crafting Station') .. ' !'
| | return text |
| 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'
| |
| return headerStr
| |
| end
| |
| | |
| function imagedisp(name, nameEN, style, borderColour)
| |
| local borderImageClass = ''
| |
| local icon
| |
| if borderColour == 'green' then
| |
| borderImageClass = ' borderGreen'
| |
| elseif borderColour == 'yellow' then
| |
| borderImageClass = ' borderYellow'
| |
| end
| |
| | |
| local iconBG
| |
| if style == 'tag' then
| |
| iconBG = 'iconGrey'
| |
| 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 .. ']]'
| |
| end
| |
| | |
| function stationcell(args)
| |
| local str = ''
| |
| str = str .. '| ' .. imagedisp(args[1], args[2])
| |
| return str
| |
| end
| |
| | |
| function itemcell(args)
| |
| local str = ''
| |
| str = str .. '| ' .. imagedisp(args[1], args[3])
| |
| str = str .. '<br>x' .. args[2] .. '\n'
| |
| return str
| |
| end
| |
| | |
| function ingredientcell(args)
| |
| local str = ''
| |
| local borderColour
| |
| if args[4] == 'False' then
| |
| borderColour = 'green'
| |
| 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
| |
| | |
| function skillreqcell(args)
| |
| local str = ''
| |
| str = str .. '| ' .. imagedisp(args[1], args[3], 'skill')
| |
| str = str .. '<br> ' .. L.t('Level') .. ' ' .. args[2] .. ' \n'
| |
| return str
| |
| 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
| |
| function p.main(recipes) | |
| local rows = ''
| |
| | |
| -- Get each row
| |
| for i = 1, #recipes do
| |
| -- 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
| |
| -- HACK skill books default Recipe does not have Skill Book
| |
| local def = ''
| |
| if string.sub(k, string.len(k) - 9) == "Skill Book" then
| |
| def = string.sub(k, 1, string.len(k) - 11)
| |
| else
| |
| def = k
| |
| end
| |
|
| |
| --given pairs doesn't guarantee order, check that product matches default variant
| |
| if def == 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][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>' .. 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
| |
| | |
| -- Return the full wikitable
| |
| return header({ recipes[1].dispCraftStn }) .. rows .. '|-\n|}\n' | |
| end | | end |
|
| |
|
| return p | | return p |
This module provides the back end functionality of the Template:Infobox_Item.
If the template is passed an Infobox will be made using details from the following Modules:
Original Infobox (now known as Infobox_Item) created by Pradoxzon was then edited by Nesphit and TreeNuts0. Fyre (FishAus) and Scotty (ZeelNightwolf) further edited the Infobox_Item. They then duplicated and used as a base for Infobox_Skill, Infobox_Plant, and Infobox_Animal.
local p = {}
local Utils = require('Module:Utils')
local IconUtils = require('Module:IconUtils')
local L = require('Module:Localization')
-- Main entry point for the Module
function p.main(frame)
-- get args from the Template
local args = Utils.normaliseArgs(frame)
local text = ''
return text
end
return p