Minecraft Wiki
mNessun oggetto della modifica
mNessun oggetto della modifica
Riga 55: Riga 55:
 
header = table.concat( {
 
header = table.concat( {
 
' {| class="wikitable ' .. class .. '"',
 
' {| class="wikitable ' .. class .. '"',
'! ' .. name .. 'Ingredienti !! ' .. recipeClass .. 'Ricetta di [[fabbricazione]]' .. description,
+
'! ' .. name .. 'Ingredients !! ' .. recipeClass .. ' [[Crafting]] recipe' .. description,
 
'|-'
 
'|-'
 
}, '\n' )
 
}, '\n' )
Riga 74: Riga 74:
 
local link = ''
 
local link = ''
 
if parts.mod ~= '' then
 
if parts.mod ~= '' then
link = 'Mod/' .. parts.mod .. '/' .. parts.name .. '|'
+
link = 'Mods/' .. parts.mod .. '/' .. parts.name .. '|'
 
end
 
end
 
 
if parts.name:find( '^Qualsiasi ' ) then
+
if parts.name:find( '^Any ' ) then
table.insert( links, 'Qualsiasi [[' .. link .. parts.name:sub( 4 ) .. ']]' )
+
table.insert( links, 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' )
 
else
 
else
 
table.insert( links, '[[' .. link .. parts.name .. ']]' )
 
table.insert( links, '[[' .. link .. parts.name .. ']]' )
Riga 146: Riga 146:
 
local name = ( ingredients[v] or animatedIngredients[v] ).name
 
local name = ( ingredients[v] or animatedIngredients[v] ).name
 
if mod ~= '' then
 
if mod ~= '' then
link = 'Mod/'.. mod .. '/' .. name .. '|'
+
link = 'Mods/'.. mod .. '/' .. name .. '|'
 
end
 
end
 
 
if name:find( '^Qualsiasi ' ) then
+
if name:find( '^Any ' ) then
table.insert( ingredientsCell, 'Qualsiasi [[' .. link .. name:sub( 5 ) .. ']]' .. separator )
+
table.insert( ingredientsCell, 'Any [[' .. link .. name:sub( 5 ) .. ']]' .. separator )
 
else
 
else
 
table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator )
 
table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator )
Riga 261: Riga 261:
 
if args.upcoming then
 
if args.upcoming then
 
table.insert( categories, '[[Categoria:In arrivo]]' )
 
table.insert( categories, '[[Categoria:In arrivo]]' )
  +
end
  +
  +
if args.type then
 
table.insert( categories, '[[Categoria:' .. args.type .. ' recipe]]' )
 
end
 
end
 
 
Riga 267: Riga 271:
 
v = v:sub( 2 )
 
v = v:sub( 2 )
 
if not v:find( ':' ) then
 
if not v:find( ':' ) then
if v == 'Pistone appiccicoso' then v = 'Pistone'
+
if v == 'Any Dye' then
  +
for _, dye in ipairs( {
elseif v == 'Fungo rosso' or v == 'Fungo marrone' then v = 'Fungo'
 
  +
'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Dandelion Yellow', 'Lime Dye',
elseif v == 'Sabbia rossa' then v = 'Sabbia'
 
  +
'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
elseif v == 'Carbonella' then v = 'Carbone'
 
elseif v:find( ' Legno$' ) then v = 'Legno'
+
'Lapis Lazuli', 'Cocoa Beans', 'Cactus Green', 'Rose Red', 'Ink Sac'
 
} ) do
elseif v:find( ' Assi$' ) then v = 'Assi'
 
  +
table.insert( categories, '[[Categoria:Ricetta che usa ' .. dye .. ']]' )
elseif v:find( ' Vetro$' ) then v = 'Vetro'
 
  +
end
elseif v:find( ' Pannello di vetro$' ) then v = 'Pannello di vetro'
 
  +
else
elseif v:find( ' Lana$' ) then v = 'Lana'
 
elseif v:find( ' Arenaria$' ) then v = 'Arenaria'
+
if v == 'Sticky Piston' then v = 'Piston'
elseif v:find( ' Scalini$' ) then v = 'Scalini'
+
elseif v == 'Red Mushroom' or v == 'Brown Mushroom' then v = 'Mushroom'
elseif v:find( ' Lastra$' ) then v = 'Lastra'
+
elseif v == 'Red Sand' then v = 'Sand'
elseif v:find( ' Pedana a pressione$' ) then v = 'Pedana a pressione'
+
elseif v == 'Charcoal' then v = 'Coal'
elseif v:find( ' Tulipano$' ) then v = 'Tulipano'
+
elseif v:find( ' Wood$' ) then v = 'Wood'
elseif v:find( ' Stella pirotecnica$' ) then v = 'Stella pirotecnica'
+
elseif v:find( ' Wood Planks$' ) then v = 'Wood Planks'
elseif v:find( ' Pietra concia$' ) then v = 'Pietra concia'
+
elseif v:find( ' Stained Glass$' ) then v = 'Stained Glass'
elseif v:find( ' Blocco di quarzo$' ) then v = 'Blocco di quarzo'
+
elseif v:find( ' Stained Glass Pane$' ) then v = 'Stained Glass Pane'
elseif v:find( ' Andesite$' ) then v = 'Andesite'
+
elseif v:find( ' Wool$' ) then v = 'Wool'
elseif v:find( ' Diorite$' ) then v = 'Diorite'
+
elseif v:find( ' Sandstone$' ) then v = 'Sandstone'
elseif v:find( ' Granite$' ) then v = 'Granite'
+
elseif v:find( ' Stairs$' ) then v = 'Stairs'
 
elseif v:find( ' Slab$' ) then v = 'Slab'
  +
elseif v:find( ' Pressure Plate$' ) then v = 'Pressure Plate'
  +
elseif v:find( ' Firework Star$' ) then v = 'Firework Star'
 
elseif v:find( ' Stone Bricks$' ) then v = 'Stone Bricks'
 
elseif v:find( ' Quartz Block$' ) then v = 'Block of Quartz'
 
elseif v:find( ' Andesite$' ) then v = 'Andesite'
 
elseif v:find( ' Diorite$' ) then v = 'Diorite'
 
elseif v:find( ' Granite$' ) then v = 'Granite'
  +
end
  +
  +
table.insert( categories, '[[Categoria:Ricetta che usa ' .. v .. ']]' )
 
end
 
end
 
table.insert( categories, '[[Categoria:Ricetta che usa ' .. v .. ']]' )
 
 
end
 
end
 
end
 
end

Versione delle 15:52, 1 lug 2014

La documentazione per questo modulo può essere creata in Modulo:Fabbricazione/doc

local p = {}
function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = require( 'Modulo:ProcessArgs' ).merge()
	else
		f = mw.getCurrentFrame()
	end
	local grid = require( 'Modulo: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 = 'Name !! '
			f:callParserFunction( '#dplvar:set', 'craftingname', '1' )
		end
		if args.showdescription == '1' then
			description = ' !! class="unsortable" | Description'
			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 .. 'Ingredients !! ' .. recipeClass .. ' [[Crafting]] recipe' .. 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( '^Any ' ) then
						table.insert( links, 'Any [[' .. link .. parts.name:sub( 4 ) .. ']]' )
					else
						table.insert( links, '[[' .. link .. parts.name .. ']]' )
					end
					names[parts.mod .. ':' .. parts.name] = 1
				end
			end
			
			nameCell = table.concat( links, '&nbsp;or<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 = '&nbsp;+'
			if k == #ingredientKeys then
				separator = ''
			elseif animatedIngredients[v] and not animatedIngredients[v].final then
				separator = '&nbsp;or'
			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( '^Any ' ) then
				table.insert( ingredientsCell, 'Any [[' .. link .. name:sub( 5 ) .. ']]' .. separator )
			else
				table.insert( ingredientsCell, '[[' .. link .. name .. ']]' .. separator )
			end
		end
		
		ingredientsCell = table.concat( ingredientsCell, '<br>\n' )
	end
	
	-- Automatic shapeless positioning
	local newArgs = {}
	if args[1] then
		newArgs.shapeless = 1
		if args[7] then
			newArgs.A1 = args[1]
			newArgs.B1 = args[2]
			newArgs.C1 = args[3]
			newArgs.A2 = args[4]
			newArgs.B2 = args[5]
			newArgs.C2 = args[6]
			if args[8] then
				-- ◼◼◼      ◼◼◼
				-- ◼◼◼  OR  ◼◼◼
				-- ◼◼◼      ◼◼◻
				newArgs.A3 = args[7]
				newArgs.B3 = args[8]
				newArgs.C3 = args[9]
			else
				-- ◼◼◼
				-- ◼◼◼
				-- ◻◼◻
				newArgs.B3 = args[7]
			end
		elseif args[2] then
			newArgs.A2 = args[1]
			newArgs.B2 = args[2]
			if args[5] then
				-- ◻◻◻      ◻◻◻
				-- ◼◼◼  OR  ◼◼◼
				-- ◼◼◼      ◼◼◻
				newArgs.C2 = args[3]
				newArgs.A3 = args[4]
				newArgs.B3 = args[5]
				newArgs.C3 = args[6]
			elseif args[4] then
				-- ◻◻◻
				-- ◼◼◻
				-- ◼◼◻
				newArgs.A3 = args[3]
				newArgs.B3 = args[4]
			else
				-- ◻◻◻      ◻◻◻
				-- ◼◼◻  OR  ◼◼◻
				-- ◻◼◻      ◻◻◻
				newArgs.B3 = args[3]
			end
		else
			-- ◻◻◻
			-- ◻◼◻
			-- ◻◻◻
			newArgs.B2 = args[1]
		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
	
	-- Any other args we want to pass along
	newArgs.Mod = args.Mod
	newArgs.Output = args.Output
	newArgs.Otitle = args.Otitle
	
	-- Recipe cell
	local recipeCell = grid.craftingTable( newArgs )
	
	local row = { ingredientsCell, recipeCell }
	if nameCell then
		table.insert( row, 1, nameCell )
	end
	if ( args.description or '' ) ~= '' and f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then
		table.insert( row, args.description )
	end
	row = table.concat( row, '\n|\n' )
	
	if nameCell then
		row = '!\n' .. row
	else
		row = '|\n' .. row
	end
	
	local footer = ''
	if foot ~= '' then
		footer = '|}'
		f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )
	end
	
	-- Create ingredient categories for DPL
	local title = mw.title.getCurrentTitle()
	local categories = ''
	if args.nocat ~= '1' and title.namespace == 0 and not title.isSubpage then
		categories = {}
		
		if args.upcoming then
			table.insert( categories, '[[Categoria:In arrivo]]' )
		end
		
		if args.type then
			table.insert( categories, '[[Categoria:' .. args.type .. ' recipe]]' )
		end
		
		if args.ignoreusage ~= '1' then
			for k, v in ipairs( ingredientKeys ) do
				v = v:sub( 2 )
				if not v:find( ':' ) then
					if v == 'Any Dye' then
						for _, dye in ipairs( {
							'Orange Dye', 'Magenta Dye', 'Light Blue Dye', 'Dandelion Yellow', 'Lime Dye',
							'Pink Dye', 'Gray Dye', 'Light Gray Dye', 'Cyan Dye', 'Purple Dye',
							'Lapis Lazuli', 'Cocoa Beans', 'Cactus Green', 'Rose Red', 'Ink Sac'
						} ) do
							table.insert( categories, '[[Categoria:Ricetta che usa ' .. dye .. ']]' )
						end
					else
						if v == 'Sticky Piston' then v = 'Piston'
						elseif v == 'Red Mushroom' or v == 'Brown Mushroom' then v = 'Mushroom'
						elseif v == 'Red Sand' then v = 'Sand'
						elseif v == 'Charcoal' then v = 'Coal'
						elseif v:find( ' Wood$' ) then v = 'Wood'
						elseif v:find( ' Wood Planks$' ) then v = 'Wood Planks'
						elseif v:find( ' Stained Glass$' ) then v = 'Stained Glass'
						elseif v:find( ' Stained Glass Pane$' ) then v = 'Stained Glass Pane'
						elseif v:find( ' Wool$' ) then v = 'Wool'
						elseif v:find( ' Sandstone$' ) then v = 'Sandstone'
						elseif v:find( ' Stairs$' ) then v = 'Stairs'
						elseif v:find( ' Slab$' ) then v = 'Slab'
						elseif v:find( ' Pressure Plate$' ) then v = 'Pressure Plate'
						elseif v:find( ' Firework Star$' ) then v = 'Firework Star'
						elseif v:find( ' Stone Bricks$' ) then v = 'Stone Bricks'
						elseif v:find( ' Quartz Block$' ) then v = 'Block of Quartz'
						elseif v:find( ' Andesite$' ) then v = 'Andesite'
						elseif v:find( ' Diorite$' ) then v = 'Diorite'
						elseif v:find( ' Granite$' ) then v = 'Granite'
						end
						
						table.insert( categories, '[[Categoria:Ricetta che usa ' .. v .. ']]' )
					end
				end
			end
		end
		
		categories = table.concat( categories, '' )
	end
	
	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
return p