Sem resumo de edição |
Sem resumo de edição |
||
(31 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
local p = {} |
local p = {} |
||
+ | |||
+ | local i18n = { |
||
+ | colored = 'Colorido', |
||
+ | coloredDyes = { |
||
+ | 'Corante laranja', 'Corante magenta', 'Corante azul-claro', 'Corante amarelo', 'Corante verde-limão', |
||
+ | 'Corante rosa', 'Corante cinza', 'Corante cinza-claro', 'Corante ciano', 'Corante roxo', |
||
+ | 'Corante azul', 'Corante marrom', 'Corante verde', 'Corante vermelho', 'Corante preto', |
||
+ | }, |
||
+ | categoryIngredientUsage = 'Categoria:Receita usando $1', |
||
+ | categoryRecipeType = 'Categoria:Receita de $1', |
||
+ | categoryUpcoming = 'Categoria:Em breve', |
||
+ | itemBlockOfQuartz = 'Bloco de quartzo', |
||
+ | itemBoneMeal = 'Farinha de osso', |
||
+ | itemBrownMushroom = 'Cogumelo marrom', |
||
+ | itemCharcoal = 'Carvão vegetal', |
||
+ | itemCoal = 'Carvão', |
||
+ | itemColoredDye = 'Corante colorido', |
||
+ | itemDye = 'Corante', |
||
+ | itemMushroom = 'Cogumelo', |
||
+ | itemQuartzBlock = 'Bloco de quartzo', |
||
+ | itemRedMushroom = 'Cogumelo vermelho', |
||
+ | itemStone = 'Pedra', |
||
+ | moduleArgs = [[Módulo:ProcessArgs]], |
||
+ | moduleRecipe = [[Módulo:Recipe table]], |
||
+ | moduleSlot = [[Módulo:Inventory slot]], |
||
+ | stoneVariants = { 'Pedra', 'Andesito', 'Granito', 'Diorito' }, |
||
+ | type = 'Fabricação', |
||
+ | variantPages = { |
||
+ | 'Andesito', 'Estandarte', 'Cama', 'Diorito', 'Estrela de fogo de artifício', 'Granito', |
||
+ | 'Placa de pressão', 'Areia', 'Arenito', 'Escudo', 'Laje', 'Vidraça tingida', |
||
+ | 'Vidro tingido', 'Escadas', 'Tijolos de pedra', 'Tábuas', 'Madeira', 'Lã', 'Concreto', |
||
+ | 'Cimento', 'Azulejo', |
||
+ | }, |
||
+ | } |
||
+ | p.i18n = i18n |
||
+ | |||
+ | local slot = require( i18n.moduleSlot ) |
||
+ | local recipeTable = require( i18n.moduleRecipe ).table |
||
+ | local cArgVals = { 'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3' } |
||
+ | p.cArgVals = cArgVals |
||
+ | |||
function p.table( f ) |
function p.table( f ) |
||
local args = f |
local args = f |
||
if f == mw.getCurrentFrame() then |
if f == mw.getCurrentFrame() then |
||
− | args = require( |
+ | args = require( i18n.moduleArgs ).merge( true ) |
else |
else |
||
f = mw.getCurrentFrame() |
f = mw.getCurrentFrame() |
||
− | end |
||
− | local grid = require( 'Módulo:Grid' ) |
||
− | |||
− | -- Start table when appropriate |
||
− | local multirow = f:callParserFunction( '#dplvar', 'multirow' ) |
||
− | if multirow ~= '1' then |
||
− | multirow = nil |
||
− | end |
||
− | local head = args.head or '' |
||
− | if multirow then |
||
− | head = '' |
||
− | elseif head ~= '' then |
||
− | multirow = 1 |
||
− | f:callParserFunction( '#dplvar:set', 'multirow', '1' ) |
||
− | else |
||
− | head = 1 |
||
− | end |
||
− | |||
− | -- End table when appropriate |
||
− | local foot = args.foot or '' |
||
− | if multirow then |
||
− | if foot ~= '' then |
||
− | multirow = nil |
||
− | f:callParserFunction( '#dplvar:set', 'multirow', '0' ) |
||
− | end |
||
− | else |
||
− | foot = 1 |
||
− | end |
||
− | |||
− | local header = '' |
||
− | if head ~= '' then |
||
− | local name = '' |
||
− | local description = '' |
||
− | if args.showname == '1' or multirow and args.showname ~= '0' then |
||
− | name = 'Nome !! ' |
||
− | f:callParserFunction( '#dplvar:set', 'craftingname', '1' ) |
||
− | end |
||
− | if args.showdescription == '1' then |
||
− | description = ' !! class="unsortable" | Descrição' |
||
− | f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' ) |
||
− | end |
||
− | local class = args.class or '' |
||
− | local recipeClass = '' |
||
− | if multirow then |
||
− | class = 'sortable collapsible ' .. class |
||
− | recipeClass = 'class="unsortable collapse-button" |' |
||
− | end |
||
− | header = table.concat( { |
||
− | ' {| class="wikitable ' .. class .. '"', |
||
− | '! ' .. name .. 'Ingredientes !! ' .. recipeClass .. ' Receita de [[criação]] ' .. description, |
||
− | '|-' |
||
− | }, '\n' ) |
||
− | end |
||
− | |||
− | -- Name cell |
||
− | local nameCell |
||
− | if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then |
||
− | if args.name or '' ~= '' then |
||
− | nameCell = args.name |
||
− | else |
||
− | local names = {} |
||
− | local links = {} |
||
− | for v in mw.text.gsplit( args.Output or '', '%s*;%s*' ) do |
||
− | parts = grid.getParts( v, args.Mod ) |
||
− | parts.mod = parts.mod or '' |
||
− | if not names[parts.mod .. ':' .. parts.name] then |
||
− | local link = '' |
||
− | if parts.mod ~= '' then |
||
− | link = 'Mods/' .. parts.mod .. '/' .. parts.name .. '|' |
||
− | end |
||
− | |||
− | if parts.name:find( '^Qualquer ' ) then |
||
− | table.insert( links, 'Qualquer [[' .. link .. parts.name:sub( 9 ) .. ']]' ) |
||
− | else |
||
− | table.insert( links, '[[' .. link .. parts.name .. ']]' ) |
||
− | end |
||
− | names[parts.mod .. ':' .. parts.name] = 1 |
||
− | end |
||
− | end |
||
− | |||
− | nameCell = table.concat( links, ' ou<br>' ) |
||
− | end |
||
− | end |
||
− | |||
− | if nameCell and args.upcoming then |
||
− | nameCell = nameCell .. '<br>([[' .. args.upcoming .. ']])' |
||
− | end |
||
− | |||
− | -- Create ingredient list |
||
− | local ingredients = {} |
||
− | local ingredientKeys = {} |
||
− | local animatedIngredients = {} |
||
− | local animatedKeys = {} |
||
− | for k, v in pairs( args ) do |
||
− | v = mw.text.trim( v ) |
||
− | if v ~= '' and tostring( k ):find( '^%u?%d%d?$' ) then |
||
− | if v:find( ';' ) then |
||
− | table.insert( animatedKeys, v ) |
||
− | else |
||
− | local parts = grid.getParts( v, args.Mod ) |
||
− | parts.mod = parts.mod or '' |
||
− | local fullName = parts.mod .. ':' .. parts.name |
||
− | if not ingredients[fullName] then |
||
− | table.insert( ingredientKeys, fullName ) |
||
− | ingredients[fullName] = { mod = parts.mod, name = parts.name } |
||
− | end |
||
− | end |
||
− | end |
||
− | end |
||
− | for k, v in ipairs( animatedKeys ) do |
||
− | local frames = mw.text.split( v, '%s*;%s*' ) |
||
− | local length = #frames |
||
− | for k2, v2 in ipairs( frames ) do |
||
− | local parts = grid.getParts( v2, args.Mod ) |
||
− | parts.mod = parts.mod or '' |
||
− | local fullName = parts.mod .. ':' .. parts.name |
||
− | if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then |
||
− | table.insert( ingredientKeys, fullName ) |
||
− | animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length } |
||
− | end |
||
− | end |
||
− | end |
||
− | |||
− | -- Ingredients cell |
||
− | local ingredientsCell |
||
− | if args.ingredients or '' ~= '' then |
||
− | ingredientsCell = args.ingredients |
||
− | else |
||
− | ingredientsCell = {} |
||
− | for k, v in ipairs( ingredientKeys ) do |
||
− | local link = '' |
||
− | local separator = ' +' |
||
− | if k == #ingredientKeys then |
||
− | separator = '' |
||
− | elseif animatedIngredients[v] and not animatedIngredients[v].final then |
||
− | separator = ' ou' |
||
− | end |
||
− | local mod = ( ingredients[v] or animatedIngredients[v] ).mod |
||
− | local name = ( ingredients[v] or animatedIngredients[v] ).name |
||
− | if mod ~= '' then |
||
− | link = 'Mods/'.. mod .. '/' .. name .. '|' |
||
− | end |
||
− | |||
− | if name:find( '^Qualquer ' ) then |
||
− | table.insert( ingredientsCell, 'Qualquer [[' .. link .. name:sub( 9 ) .. ']]' .. separator ) |
||
− | else |
||
− | table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator ) |
||
− | end |
||
− | end |
||
− | |||
− | ingredientsCell = table.concat( ingredientsCell, '<br>\n' ) |
||
end |
end |
||
-- Automatic shapeless positioning |
-- Automatic shapeless positioning |
||
− | local newArgs = {} |
||
if args[1] then |
if args[1] then |
||
− | + | args.shapeless = 1 |
|
if args[7] then |
if args[7] then |
||
− | + | args.A1 = args[1] |
|
− | + | args.B1 = args[2] |
|
− | + | args.C1 = args[3] |
|
− | + | args.A2 = args[4] |
|
− | + | args.B2 = args[5] |
|
− | + | args.C2 = args[6] |
|
if args[8] then |
if args[8] then |
||
-- ◼◼◼ ◼◼◼ |
-- ◼◼◼ ◼◼◼ |
||
-- ◼◼◼ OR ◼◼◼ |
-- ◼◼◼ OR ◼◼◼ |
||
-- ◼◼◼ ◼◼◻ |
-- ◼◼◼ ◼◼◻ |
||
− | + | args.A3 = args[7] |
|
− | + | args.B3 = args[8] |
|
− | + | args.C3 = args[9] |
|
+ | if args[9] then |
||
+ | local identical = true |
||
+ | for i = 1, 8 do |
||
+ | if args[i] ~= args[i + 1] then |
||
+ | identical = false |
||
+ | break |
||
+ | end |
||
+ | end |
||
+ | if identical then |
||
+ | args.shapeless = nil |
||
+ | end |
||
+ | end |
||
else |
else |
||
-- ◼◼◼ |
-- ◼◼◼ |
||
-- ◼◼◼ |
-- ◼◼◼ |
||
-- ◻◼◻ |
-- ◻◼◻ |
||
− | + | args.B3 = args[7] |
|
end |
end |
||
elseif args[2] then |
elseif args[2] then |
||
− | + | args.A2 = args[1] |
|
− | + | args.B2 = args[2] |
|
if args[5] then |
if args[5] then |
||
-- ◻◻◻ ◻◻◻ |
-- ◻◻◻ ◻◻◻ |
||
-- ◼◼◼ OR ◼◼◼ |
-- ◼◼◼ OR ◼◼◼ |
||
-- ◼◼◼ ◼◼◻ |
-- ◼◼◼ ◼◼◻ |
||
− | + | args.C2 = args[3] |
|
− | + | args.A3 = args[4] |
|
− | + | args.B3 = args[5] |
|
− | + | args.C3 = args[6] |
|
elseif args[4] then |
elseif args[4] then |
||
-- ◻◻◻ |
-- ◻◻◻ |
||
-- ◼◼◻ |
-- ◼◼◻ |
||
-- ◼◼◻ |
-- ◼◼◻ |
||
− | + | args.A3 = args[3] |
|
− | + | args.B3 = args[4] |
|
else |
else |
||
-- ◻◻◻ ◻◻◻ |
-- ◻◻◻ ◻◻◻ |
||
-- ◼◼◻ OR ◼◼◻ |
-- ◼◼◻ OR ◼◼◻ |
||
-- ◻◼◻ ◻◻◻ |
-- ◻◼◻ ◻◻◻ |
||
− | + | args.B3 = args[3] |
|
end |
end |
||
else |
else |
||
Linha 210: | Linha 111: | ||
-- ◻◼◻ |
-- ◻◼◻ |
||
-- ◻◻◻ |
-- ◻◻◻ |
||
− | + | args.B2 = args[1] |
|
+ | args.shapeless = nil |
||
+ | end |
||
+ | |||
+ | for i = 1, 9 do |
||
+ | args[i] = nil |
||
end |
end |
||
− | else |
||
− | newArgs.A1 = args.A1 |
||
− | newArgs.B1 = args.B1 |
||
− | newArgs.C1 = args.C1 |
||
− | newArgs.A2 = args.A2 |
||
− | newArgs.B2 = args.B2 |
||
− | newArgs.C2 = args.C2 |
||
− | newArgs.A3 = args.A3 |
||
− | newArgs.B3 = args.B3 |
||
− | newArgs.C3 = args.C3 |
||
end |
end |
||
− | -- |
+ | -- Create recipe table, and list of ingredients |
+ | local out, ingredientSets = recipeTable( args, { |
||
− | newArgs.Mod = args.Mod |
||
+ | uiFunc = 'craftingTable', |
||
− | newArgs.Output = args.Output |
||
+ | type = i18n.type, |
||
− | newArgs.Otitle = args.Otitle |
||
+ | ingredientArgs = cArgVals, |
||
+ | outputArgs = { 'Output' }, |
||
+ | } ) |
||
+ | local title = mw.title.getCurrentTitle() |
||
− | -- Recipe cell |
||
+ | if args.nocat == '1' or title.namespace ~= 0 or title.isSubpage then |
||
− | local recipeCell = grid.craftingTable( newArgs ) |
||
+ | return out |
||
− | |||
− | local row = { ingredientsCell, recipeCell } |
||
− | if nameCell then |
||
− | table.insert( row, 1, nameCell ) |
||
end |
end |
||
− | if ( args.description or '' ) ~= '' and f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then |
||
− | table.insert( row, args.description ) |
||
− | end |
||
− | row = table.concat( row, '\n|\n' ) |
||
+ | local categories = {} |
||
− | if nameCell then |
||
+ | local cI = 1 |
||
− | row = '!\n' .. row |
||
+ | if args.upcoming then |
||
− | else |
||
+ | categories[cI] = '[[' .. i18n.categoryUpcoming .. ']]' |
||
− | row = '|\n' .. row |
||
+ | cI = cI + 1 |
||
end |
end |
||
+ | if args.type then |
||
− | local footer = '' |
||
+ | categories[cI] = '[[' .. i18n.categoryRecipeType:gsub( '%$1', args.type:lower() ) .. ']]' |
||
− | if foot ~= '' then |
||
− | + | cI = cI + 1 |
|
− | f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' ) |
||
end |
end |
||
+ | if args.ignoreusage ~= '1' then |
||
− | -- Create ingredient categories for DPL |
||
+ | -- Create ingredient categories for DPL |
||
− | local title = mw.title.getCurrentTitle() |
||
− | + | local usedNames = {} |
|
+ | for _, ingredientSet in pairs( ingredientSets ) do |
||
− | if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage then |
||
+ | for _, ingredient in pairs( ingredientSet ) do |
||
− | categories = {} |
||
+ | local name = ingredient.name |
||
− | |||
+ | if not ingredient.mod and not usedNames[name] and name ~= title.text then |
||
− | if args.upcoming then |
||
+ | -- List each dye individually as they have their own pages |
||
− | table.insert( categories, '[[Categoria:Em breve]]' ) |
||
− | + | if |
|
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or |
||
− | |||
+ | name == i18n.itemDye .. ' ' .. slot.i18n.suffixes.matching or |
||
− | if args.type then |
||
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or |
||
− | table.insert( categories, '[[Categoria:Receita de ' .. args.type .. ']]' ) |
||
+ | name == i18n.itemColoredDye .. ' '.. slot.i18n.suffixes.matching |
||
− | end |
||
− | + | then |
|
− | if |
+ | if not name:find( i18n.colored ) then |
+ | categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemBoneMeal ) .. ']]' |
||
− | for k, v in ipairs( ingredientKeys ) do |
||
− | + | cI = cI + 1 |
|
+ | usedNames[i18n.itemBoneMeal] = true |
||
− | if not v:find( ':' ) then |
||
+ | end |
||
− | if v == 'Qualquer Corante' then |
||
− | + | ||
+ | for _, dye in ipairs( i18n.coloredDyes ) do |
||
− | 'Corante Laranja', 'Corante Magenta', 'Corante Azul Claro', 'Amarelo do Dente-de-Leão', 'Corante Verde Limão', |
||
+ | categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', dye ) .. ']]' |
||
− | 'Corante Rosa', 'Corante Cinza', 'Corante Cinza Claro', 'Corante Ciano', 'Corante Lilás', |
||
+ | cI = cI + 1 |
||
− | 'Lápis-Lazúli', 'Sementes de Cacau', 'Verde do Cacto', 'Vermelho da Rosa', 'Saco de Tinta' |
||
− | + | usedNames[dye] = true |
|
+ | end |
||
− | table.insert( categories, '[[Categoria:Receita usando ' .. dye .. ']]' ) |
||
+ | -- List stone variants individually as they have their own pages |
||
+ | elseif |
||
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemStone or |
||
+ | name == i18n.itemStone .. ' ' .. slot.i18n.suffixes.matching |
||
+ | then |
||
+ | for _, stone in pairs( i18n.stoneVariants ) do |
||
+ | categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', stone ) .. ']]' |
||
+ | cI = cI + 1 |
||
+ | usedNames[stone] = true |
||
end |
end |
||
else |
else |
||
− | + | -- Merge item variants which use a single page |
|
+ | if |
||
− | elseif v == 'Cogumelo Vermelho' or v == 'Cogumelo Marrom' then v = 'Cogumelo' |
||
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or |
||
− | elseif v == 'Areia Vermelha' then v = 'Areia' |
||
+ | name == i18n.itemMushroom .. ' ' .. slot.i18n.suffixes.matching or |
||
− | elseif v == 'Carvão Vegetal' then v = 'Carvão' |
||
+ | name == i18n.itemRedMushroom or |
||
− | elseif v:find( ' Madeira$' ) then v = 'Madeira' |
||
+ | name == i18n.itemBrownMushroom |
||
− | elseif v:find( ' Tábuas$' ) then v = 'Tábuas de Madeira' |
||
+ | then name = i18n.itemMushroom |
||
− | elseif v:find( ' Vidro Tingido$' ) then v = 'Vidro Tingido' |
||
− | elseif |
+ | elseif name == i18n.itemCharcoal then name = i18n.itemCoal |
− | elseif |
+ | elseif name:find( ' ' .. i18n.itemQuartzBlock .. '$' ) then name = i18n.itemBlockOfQuartz |
+ | else |
||
− | elseif v:find( ' Arenito$' ) then v = 'Arenito' |
||
+ | for _, variant in pairs( i18n.variantPages ) do |
||
− | elseif v:find( ' Escadas$' ) then v = 'Escadas' |
||
− | + | if name:find( '^' .. variant .. ' ' ) then |
|
+ | name = variant |
||
− | elseif v:find( ' Placa de Pressão$' ) then v = 'Placa de Pressãoe' |
||
+ | break |
||
− | elseif v:find( ' Estrela de Fogos de Artifício$' ) then v = 'Estrela de Fogos de Artifício' |
||
+ | end |
||
− | elseif v:find( ' Tijolos de Pedra$' ) then v = 'Tijolos de Pedra' |
||
+ | end |
||
− | elseif v:find( ' Bloco de Quartzo$' ) then v = 'Bloco de Quartzo' |
||
+ | |||
− | elseif v:find( ' Andesito$' ) then v = 'Andesito' |
||
+ | -- Remove prefixes |
||
− | elseif v:find( ' Diorito$' ) then v = 'Diorito' |
||
+ | for _, prefix in pairs( slot.i18n.prefixes ) do |
||
− | elseif v:find( ' Granito$' ) then v = 'Granito' |
||
+ | if name:find( '^' .. prefix .. ' ' ) then |
||
+ | name = name:gsub( '^' .. prefix .. ' ', '' ) |
||
+ | break |
||
+ | end |
||
+ | end |
||
+ | -- Remove suffixes |
||
+ | for _, suffix in pairs( slot.i18n.suffixes ) do |
||
+ | if name:find( ' ' .. suffix .. '$' ) then |
||
+ | name = name:gsub( suffix .. '$', '' ) |
||
+ | break |
||
+ | end |
||
+ | end |
||
end |
end |
||
+ | if not usedNames[name] then |
||
− | table.insert( categories, '[[Categoria:Receita usando ' .. v .. ']]' ) |
||
+ | categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]' |
||
+ | cI = cI + 1 |
||
+ | usedNames[name] = true |
||
+ | end |
||
end |
end |
||
end |
end |
||
end |
end |
||
end |
end |
||
− | |||
− | categories = table.concat( categories, '' ) |
||
end |
end |
||
+ | return out, table.concat( categories, '' ) |
||
− | if args.debug == '1' then |
||
− | return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>' |
||
− | else |
||
− | return header .. '\n' .. row .. '\n|-\n' .. footer .. categories |
||
− | end |
||
end |
end |
||
+ | |||
return p |
return p |
Edição atual tal como às 22h14min de 5 de setembro de 2020
Este módulo implementa {{Fabricação}}
.
Argumentos pais são automaticamente mesclados com argumentos diretamente passados (o último substituindo o anterior).
Dependências
Veja também
[ver | editar | histórico | purgar]A documentação acima é transcluída de Módulo:Crafting/doc.
local p = {}
local i18n = {
colored = 'Colorido',
coloredDyes = {
'Corante laranja', 'Corante magenta', 'Corante azul-claro', 'Corante amarelo', 'Corante verde-limão',
'Corante rosa', 'Corante cinza', 'Corante cinza-claro', 'Corante ciano', 'Corante roxo',
'Corante azul', 'Corante marrom', 'Corante verde', 'Corante vermelho', 'Corante preto',
},
categoryIngredientUsage = 'Categoria:Receita usando $1',
categoryRecipeType = 'Categoria:Receita de $1',
categoryUpcoming = 'Categoria:Em breve',
itemBlockOfQuartz = 'Bloco de quartzo',
itemBoneMeal = 'Farinha de osso',
itemBrownMushroom = 'Cogumelo marrom',
itemCharcoal = 'Carvão vegetal',
itemCoal = 'Carvão',
itemColoredDye = 'Corante colorido',
itemDye = 'Corante',
itemMushroom = 'Cogumelo',
itemQuartzBlock = 'Bloco de quartzo',
itemRedMushroom = 'Cogumelo vermelho',
itemStone = 'Pedra',
moduleArgs = [[Módulo:ProcessArgs]],
moduleRecipe = [[Módulo:Recipe table]],
moduleSlot = [[Módulo:Inventory slot]],
stoneVariants = { 'Pedra', 'Andesito', 'Granito', 'Diorito' },
type = 'Fabricação',
variantPages = {
'Andesito', 'Estandarte', 'Cama', 'Diorito', 'Estrela de fogo de artifício', 'Granito',
'Placa de pressão', 'Areia', 'Arenito', 'Escudo', 'Laje', 'Vidraça tingida',
'Vidro tingido', 'Escadas', 'Tijolos de pedra', 'Tábuas', 'Madeira', 'Lã', 'Concreto',
'Cimento', 'Azulejo',
},
}
p.i18n = i18n
local slot = require( i18n.moduleSlot )
local recipeTable = require( i18n.moduleRecipe ).table
local cArgVals = { 'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3' }
p.cArgVals = cArgVals
function p.table( f )
local args = f
if f == mw.getCurrentFrame() then
args = require( i18n.moduleArgs ).merge( true )
else
f = mw.getCurrentFrame()
end
-- Automatic shapeless positioning
if args[1] then
args.shapeless = 1
if args[7] then
args.A1 = args[1]
args.B1 = args[2]
args.C1 = args[3]
args.A2 = args[4]
args.B2 = args[5]
args.C2 = args[6]
if args[8] then
-- ◼◼◼ ◼◼◼
-- ◼◼◼ OR ◼◼◼
-- ◼◼◼ ◼◼◻
args.A3 = args[7]
args.B3 = args[8]
args.C3 = args[9]
if args[9] then
local identical = true
for i = 1, 8 do
if args[i] ~= args[i + 1] then
identical = false
break
end
end
if identical then
args.shapeless = nil
end
end
else
-- ◼◼◼
-- ◼◼◼
-- ◻◼◻
args.B3 = args[7]
end
elseif args[2] then
args.A2 = args[1]
args.B2 = args[2]
if args[5] then
-- ◻◻◻ ◻◻◻
-- ◼◼◼ OR ◼◼◼
-- ◼◼◼ ◼◼◻
args.C2 = args[3]
args.A3 = args[4]
args.B3 = args[5]
args.C3 = args[6]
elseif args[4] then
-- ◻◻◻
-- ◼◼◻
-- ◼◼◻
args.A3 = args[3]
args.B3 = args[4]
else
-- ◻◻◻ ◻◻◻
-- ◼◼◻ OR ◼◼◻
-- ◻◼◻ ◻◻◻
args.B3 = args[3]
end
else
-- ◻◻◻
-- ◻◼◻
-- ◻◻◻
args.B2 = args[1]
args.shapeless = nil
end
for i = 1, 9 do
args[i] = nil
end
end
-- Create recipe table, and list of ingredients
local out, ingredientSets = recipeTable( args, {
uiFunc = 'craftingTable',
type = i18n.type,
ingredientArgs = cArgVals,
outputArgs = { 'Output' },
} )
local title = mw.title.getCurrentTitle()
if args.nocat == '1' or title.namespace ~= 0 or title.isSubpage then
return out
end
local categories = {}
local cI = 1
if args.upcoming then
categories[cI] = '[[' .. i18n.categoryUpcoming .. ']]'
cI = cI + 1
end
if args.type then
categories[cI] = '[[' .. i18n.categoryRecipeType:gsub( '%$1', args.type:lower() ) .. ']]'
cI = cI + 1
end
if args.ignoreusage ~= '1' then
-- Create ingredient categories for DPL
local usedNames = {}
for _, ingredientSet in pairs( ingredientSets ) do
for _, ingredient in pairs( ingredientSet ) do
local name = ingredient.name
if not ingredient.mod and not usedNames[name] and name ~= title.text then
-- List each dye individually as they have their own pages
if
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or
name == i18n.itemDye .. ' ' .. slot.i18n.suffixes.matching or
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or
name == i18n.itemColoredDye .. ' '.. slot.i18n.suffixes.matching
then
if not name:find( i18n.colored ) then
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemBoneMeal ) .. ']]'
cI = cI + 1
usedNames[i18n.itemBoneMeal] = true
end
for _, dye in ipairs( i18n.coloredDyes ) do
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', dye ) .. ']]'
cI = cI + 1
usedNames[dye] = true
end
-- List stone variants individually as they have their own pages
elseif
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemStone or
name == i18n.itemStone .. ' ' .. slot.i18n.suffixes.matching
then
for _, stone in pairs( i18n.stoneVariants ) do
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', stone ) .. ']]'
cI = cI + 1
usedNames[stone] = true
end
else
-- Merge item variants which use a single page
if
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or
name == i18n.itemMushroom .. ' ' .. slot.i18n.suffixes.matching or
name == i18n.itemRedMushroom or
name == i18n.itemBrownMushroom
then name = i18n.itemMushroom
elseif name == i18n.itemCharcoal then name = i18n.itemCoal
elseif name:find( ' ' .. i18n.itemQuartzBlock .. '$' ) then name = i18n.itemBlockOfQuartz
else
for _, variant in pairs( i18n.variantPages ) do
if name:find( '^' .. variant .. ' ' ) then
name = variant
break
end
end
-- Remove prefixes
for _, prefix in pairs( slot.i18n.prefixes ) do
if name:find( '^' .. prefix .. ' ' ) then
name = name:gsub( '^' .. prefix .. ' ', '' )
break
end
end
-- Remove suffixes
for _, suffix in pairs( slot.i18n.suffixes ) do
if name:find( ' ' .. suffix .. '$' ) then
name = name:gsub( suffix .. '$', '' )
break
end
end
end
if not usedNames[name] then
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', name ) .. ']]'
cI = cI + 1
usedNames[name] = true
end
end
end
end
end
end
return out, table.concat( categories, '' )
end
return p