@DeletedUser40376207 (discusión | contribs.) Sin resumen de edición |
Sin resumen de edición |
||
(No se muestran 36 ediciones intermedias de 4 usuarios) | |||
Línea 1: | Línea 1: | ||
local p = {} |
local p = {} |
||
+ | |||
+ | local i18n = { |
||
+ | colored = 'Colored', |
||
+ | coloredDyes = { |
||
+ | 'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Yellow Dye', 'Lime Dye', |
||
+ | 'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye', |
||
+ | 'Blue Dye', 'Brown Dye', 'Green Dye', |
||
+ | 'Red Dye', 'Black Dye', |
||
+ | }, |
||
+ | categoryIngredientUsage = 'Categoría:Receta usando $1', |
||
+ | categoryRecipeType = 'Categoría:Receta de $1', |
||
+ | categoryUpcoming = 'Categoría:Próximamante', |
||
+ | itemBlockOfQuartz = 'Bloque de cuarzo', |
||
+ | itemBrownMushroom = 'Brown Mushroom', |
||
+ | itemCharcoal = 'Charcoal', |
||
+ | itemCoal = 'Carbón', |
||
+ | itemColoredDye = 'Colored Dye', |
||
+ | itemDye = 'Tinte', |
||
+ | itemMushroom = 'Champiñón', |
||
+ | itemQuartzBlock = 'Bloque de cuarzo', |
||
+ | itemRedMushroom = 'Red Mushroom', |
||
+ | itemStone = 'Piedra', |
||
+ | itemWhiteDye = 'Tinte blanco', |
||
+ | moduleArgs = [[Módulo:ProcessArgs]], |
||
+ | moduleRecipe = [[Módulo:Recipe table]], |
||
+ | moduleSlot = [[Módulo:Inventory slot]], |
||
+ | stoneVariants = { 'Piedra', 'Andesita', 'Granito', 'Diorita' }, |
||
+ | type = 'Fabricación', |
||
+ | variantPages = { |
||
+ | 'Andesite', 'Banner', 'Bed', 'Diorite', 'Firework Star', 'Granite', |
||
+ | 'Pressure Plate', 'Sand', 'Sandstone', 'Shield', 'Slab', 'Stained Glass Pane', |
||
+ | 'Stained Glass', 'Stairs', 'Stone Bricks', 'Wood Planks', 'Wood', 'Wool', |
||
+ | }, |
||
+ | } |
||
+ | 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 = 'Nombre !! ' |
||
− | f:callParserFunction( '#dplvar:set', 'craftingname', '1' ) |
||
− | end |
||
− | if args.showdescription == '1' then |
||
− | description = ' !! class="unsortable" | Descripción' |
||
− | 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 .. ' Receta de [[fabricación]]' .. 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( '^Cualquier tipo de ' ) then |
||
− | table.insert( links, 'Cualquier tipo <br>de [[' .. link .. parts.name:sub( 18 ) .. ']]' ) |
||
− | else |
||
− | table.insert( links, '[[' .. link .. parts.name .. ']]' ) |
||
− | end |
||
− | names[parts.mod .. ':' .. parts.name] = 1 |
||
− | end |
||
− | end |
||
− | |||
− | nameCell = table.concat( links, ' o<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 = ' o' |
||
− | 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( '^Cualquier tipo de ' ) then |
||
− | table.insert( ingredientsCell, 'Cualquier tipo <br>de [[' .. link .. name:sub( 18 ) .. ']]' .. 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 |
||
-- ◼◼◼ ◼◼◼ |
-- ◼◼◼ ◼◼◼ |
||
− | -- ◼◼◼ |
+ | -- ◼◼◼ O ◼◼◼ |
-- ◼◼◼ ◼◼◻ |
-- ◼◼◼ ◼◼◻ |
||
− | + | 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 |
||
-- ◻◻◻ ◻◻◻ |
-- ◻◻◻ ◻◻◻ |
||
− | -- ◼◼◼ |
+ | -- ◼◼◼ O ◼◼◼ |
-- ◼◼◼ ◼◼◻ |
-- ◼◼◼ ◼◼◻ |
||
− | + | 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 |
||
-- ◻◻◻ ◻◻◻ |
-- ◻◻◻ ◻◻◻ |
||
− | -- ◼◼◻ |
+ | -- ◼◼◻ O ◼◼◻ |
-- ◻◼◻ ◻◻◻ |
-- ◻◼◻ ◻◻◻ |
||
− | + | args.B3 = args[3] |
|
end |
end |
||
else |
else |
||
Línea 210: | Línea 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 ) .. ']]' |
||
− | 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, '[[Category:Próximamente]]' ) |
||
− | + | if |
|
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemDye or |
||
− | |||
+ | name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemDye or |
||
− | if args.type then |
||
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or |
||
− | table.insert( categories, '[[Category:Receta de ' .. args.type .. ']]' ) |
||
+ | name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemColoredDye |
||
− | end |
||
− | + | then |
|
− | if |
+ | if not name:find( i18n.colored ) then |
+ | categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemWhiteDye ) .. ']]' |
||
− | for k, v in ipairs( ingredientKeys ) do |
||
− | + | cI = cI + 1 |
|
+ | usedNames[i18n.itemWhiteDye] = true |
||
− | if not v:find( ':' ) then |
||
− | if v == 'Cualquier tipo de tinte' or v == 'Any Colored Dye' then |
||
− | local dyes = { |
||
− | 'Tinte naranja', 'Tinte magenta', 'Tinte azul claro', 'Tinte amarillo', |
||
− | 'Tinte verde lima', 'Tinte rosa', 'Tinte gris', 'Tinte gris claro', 'Tinte cian', 'Tinte morado', |
||
− | 'Lapislázuli', 'Semillas de cacao', 'Tinte verde', 'Tinte rojo', 'Saco de tinta' |
||
− | } |
||
− | if v == 'Cualquier tipo de tinte' then |
||
− | table.insert( dyes, 1, 'Polvo de hueso' ) |
||
end |
end |
||
− | for _, dye in |
+ | for _, dye in pairs( 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 == slot.i18n.prefixes.matching .. ' ' .. i18n.itemStone |
||
+ | 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== 'Any Mushroom' or v == 'Red Mushroom' or v == 'Brown Mushroom' then v = 'Mushroom' |
||
+ | name == slot.i18n.prefixes.any .. ' ' .. i18n.itemMushroom or |
||
− | elseif v == 'Red Sand' then v = 'Sand' |
||
+ | name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemMushroom or |
||
− | elseif v == 'Charcoal' then v = 'Coal' |
||
+ | name == i18n.itemRedMushroom or |
||
− | elseif v:find( ' tronco$' ) then v = 'Tronco' |
||
+ | name == i18n.itemBrownMushroom |
||
− | elseif v:find( ' madera$' ) then v = 'Madera' |
||
− | + | then name = i18n.itemMushroom |
|
− | elseif |
+ | elseif name == i18n.itemCharcoal then name = i18n.itemCoal |
− | elseif |
+ | elseif name:find( ' ' .. i18n.itemQuartzBlock .. '$' ) then name = i18n.itemBlockOfQuartz |
+ | else |
||
− | elseif v:find( ' lana$' ) then v = 'Lana' |
||
+ | for _, variant in pairs( i18n.variantPages ) do |
||
− | elseif v:find( ' arenisca$' ) then v = 'Arenisca' |
||
− | + | if name:find( ' ' .. variant .. '$' ) then |
|
+ | name = variant |
||
− | elseif v:find( 'Losa$' ) then v = 'Losa' |
||
+ | break |
||
− | elseif v:find( ' Pressure Plate$' ) then v = 'Pressure Plate' |
||
+ | end |
||
− | elseif v:find( ' Firework Star$' ) then v = 'Firework Star' |
||
+ | end |
||
− | elseif v:find( ' ladrillos de piedra$' ) then v = 'Ladrillos de piedra' |
||
+ | |||
− | elseif v:find( ' bloque de cuarzo$' ) then v = 'Bloque de cuarzo' |
||
+ | -- Remove prefixes |
||
− | elseif v:find( ' pilar de cuarzo$' ) then v = 'Bloque de cuarzo' |
||
+ | for _, prefix in pairs( slot.i18n.prefixes ) do |
||
− | elseif v:find( ' Andesita$' ) then v = 'Andesita' |
||
− | + | if name:find( '^' .. prefix .. ' ' ) then |
|
− | + | name = name:gsub( '^' .. prefix .. ' ', '' ) |
|
+ | break |
||
+ | end |
||
+ | end |
||
end |
end |
||
+ | if not usedNames[name] then |
||
− | table.insert( categories, '[[Category:Receta que usa ' .. 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 |
Revisión del 16:30 26 feb 2021
This module implements {{Fabricación}}
.
Parent arguments are automatically merged with directly passed arguments (the latter overwriting the former).
Dependencies
[Ver | Editar | Purgar]La documentación arriba es transcluída desde Módulo:Fabricación/doc.
local p = {}
local i18n = {
colored = 'Colored',
coloredDyes = {
'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Yellow Dye', 'Lime Dye',
'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
'Blue Dye', 'Brown Dye', 'Green Dye',
'Red Dye', 'Black Dye',
},
categoryIngredientUsage = 'Categoría:Receta usando $1',
categoryRecipeType = 'Categoría:Receta de $1',
categoryUpcoming = 'Categoría:Próximamante',
itemBlockOfQuartz = 'Bloque de cuarzo',
itemBrownMushroom = 'Brown Mushroom',
itemCharcoal = 'Charcoal',
itemCoal = 'Carbón',
itemColoredDye = 'Colored Dye',
itemDye = 'Tinte',
itemMushroom = 'Champiñón',
itemQuartzBlock = 'Bloque de cuarzo',
itemRedMushroom = 'Red Mushroom',
itemStone = 'Piedra',
itemWhiteDye = 'Tinte blanco',
moduleArgs = [[Módulo:ProcessArgs]],
moduleRecipe = [[Módulo:Recipe table]],
moduleSlot = [[Módulo:Inventory slot]],
stoneVariants = { 'Piedra', 'Andesita', 'Granito', 'Diorita' },
type = 'Fabricación',
variantPages = {
'Andesite', 'Banner', 'Bed', 'Diorite', 'Firework Star', 'Granite',
'Pressure Plate', 'Sand', 'Sandstone', 'Shield', 'Slab', 'Stained Glass Pane',
'Stained Glass', 'Stairs', 'Stone Bricks', 'Wood Planks', 'Wood', 'Wool',
},
}
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
-- ◼◼◼ ◼◼◼
-- ◼◼◼ O ◼◼◼
-- ◼◼◼ ◼◼◻
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
-- ◻◻◻ ◻◻◻
-- ◼◼◼ O ◼◼◼
-- ◼◼◼ ◼◼◻
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
-- ◻◻◻ ◻◻◻
-- ◼◼◻ O ◼◼◻
-- ◻◼◻ ◻◻◻
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 ) .. ']]'
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 == slot.i18n.prefixes.matching .. ' ' .. i18n.itemDye or
name == slot.i18n.prefixes.any .. ' ' .. i18n.itemColoredDye or
name == slot.i18n.prefixes.matching .. ' ' .. i18n.itemColoredDye
then
if not name:find( i18n.colored ) then
categories[cI] = '[[' .. i18n.categoryIngredientUsage:gsub( '%$1', i18n.itemWhiteDye ) .. ']]'
cI = cI + 1
usedNames[i18n.itemWhiteDye] = true
end
for _, dye in pairs( 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 == slot.i18n.prefixes.matching .. ' ' .. i18n.itemStone
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 == slot.i18n.prefixes.matching .. ' ' .. i18n.itemMushroom 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
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