« Module:Crafting » : différence entre les versions

De WikiField
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Balise : Révoqué
m Révocation d’une modification réalisée par Admin (discussion) et restauration de la dernière version réalisée par Squirkiz
Balise : Révocation
 
Ligne 4 : Ligne 4 :
colored = 'coloré',
colored = 'coloré',
coloredDyes = {
coloredDyes = {
'Teinture orange', 'Teinture magenta', 'Teinture bleu clair', 'Teinture jaune', 'Teinture vert clair',
'Teinture blanche', 'Teinture orange', 'Teinture magenta', 'Teinture bleu clair', 'Jaune pissenlit', 'Teinture vert clair',
'Teinture rose', 'Teinture grise', 'Teinture gris clair', 'Teinture cyan', 'Teinture violette',
'Teinture rose', 'Teinture grise', 'Teinture gris clair', 'Teinture cyan', 'Teinture violette',
'Teinture bleue', 'Teinture marron', 'Teinture verte', 'Teinture rouge', 'Teinture noire',
'Lapis-lazuli', 'Teinture bleue', 'Fèves de cacao', 'Teinture marron', 'Vert de cactus', 'Rouge de rose', 'Poche d\'encre', 'Teinture noire',
},
},
categoryIngredientUsage = 'Catégorie:Recette utilisant $1',
categoryIngredientUsage = 'Category:Recipe using $1',
categoryRecipeType = 'Catégorie:Recette $1',
categoryRecipeType = 'Category:$1 recipe',
categoryUpcoming = 'Catégorie:Fonctionnalité à venir',
categoryUpcoming = 'Category:Upcoming',
itemBlockOfQuartz = 'Bloc de quartz',
itemBlockOfQuartz = 'Block of Quartz',
itemBrownMushroom = 'Champignon marron',
itemBrownMushroom = 'Brown Mushroom',
itemCharcoal = 'Charbon de bois',
itemCharcoal = 'Charcoal',
itemCoal = 'Charbon',
itemCoal = 'Coal',
itemColoredDye = 'Teinture colorée',
itemColoredDye = 'Colored Dye',
itemDye = 'Teinture',
itemDye = 'Dye',
itemMushroom = 'Champignon',
itemMushroom = 'Mushroom',
itemQuartzBlock = 'Bloc de quartz',
itemQuartzBlock = 'Quartz Block',
itemRedMushroom = 'Champignon rouge',
itemRedMushroom = 'Red Mushroom',
itemStone = 'Roche',
itemStone = 'Stone',
itemWhiteDye = 'Teinture blanche',
itemWhiteDye = 'White Dye',
moduleArgs = [[Module:ProcessArgs]],
moduleArgs = [[Module:ProcessArgs]],
moduleRecipe = [[Module:Tableau de recette]],
moduleRecipe = [[Module:Recipe table]],
moduleSlot = [[Module:Case inventaire]],
moduleSlot = [[Module:Inventory slot]],
stoneVariants = { 'Roche', 'Andésite', 'Granite', 'Diorite' },
stoneVariants = { 'Stone', 'Andesite', 'Granite', 'Diorite' },
type = 'Fabrication',
type = 'Crafting',
variantPages = {
variantPages = {
'Andésite', 'Bannière', 'Diorite', 'Étoile de feu d\'artifice', 'Granite', 'Lit',
'Andésite', 'Bannière', 'Diorite', 'Étoile de feu d\'artifice', 'Granite', 'Lit',
Ligne 124 : Ligne 124 :
type = i18n.type,
type = i18n.type,
ingredientArgs = cArgVals,
ingredientArgs = cArgVals,
outputArgs = { 'résultat' },
outputArgs = { 'Output' },
} )
} )
Ligne 134 : Ligne 134 :
local categories = {}
local categories = {}
local cI = 1
local cI = 1
if args.upcoming or args['à venir'] then
if args.upcoming then
categories[cI] = '[[' .. i18n.categoryUpcoming .. ']]'
categories[cI] = '[[' .. i18n.categoryUpcoming .. ']]'
cI = cI + 1
cI = cI + 1
Ligne 144 : Ligne 144 :
end
end
if args.ignorerutilisation ~= '1' then
if args.ignoreusage ~= '1' then
-- Create ingredient categories for DPL
-- Create ingredient categories for DPL
local usedNames = {}
local usedNames = {}

Dernière version du 11 décembre 2025 à 08:06

Erreur Lua : bad argument #1 to "get" (not a valid title). This module implements {{crafting}}.

Parent arguments are automatically merged with directly passed arguments (the latter overwriting the former).

Dependencies

See also


es:Módulo:Fabricación ru:Модуль:Крафт



local p = {}

local i18n = {
	colored = 'coloré',
	coloredDyes = {
		'Teinture blanche', 'Teinture orange', 'Teinture magenta', 'Teinture bleu clair', 'Jaune pissenlit', 'Teinture vert clair',
		'Teinture rose', 'Teinture grise', 'Teinture gris clair', 'Teinture cyan', 'Teinture violette',
		'Lapis-lazuli', 'Teinture bleue', 'Fèves de cacao', 'Teinture marron', 'Vert de cactus', 'Rouge de rose', 'Poche d\'encre', 'Teinture noire',
	},
	categoryIngredientUsage = 'Category:Recipe using $1',
	categoryRecipeType = 'Category:$1 recipe',
	categoryUpcoming = 'Category:Upcoming',
	itemBlockOfQuartz = 'Block of Quartz',
	itemBrownMushroom = 'Brown Mushroom',
	itemCharcoal = 'Charcoal',
	itemCoal = 'Coal',
	itemColoredDye = 'Colored Dye',
	itemDye = 'Dye',
	itemMushroom = 'Mushroom',
	itemQuartzBlock = 'Quartz Block',
	itemRedMushroom = 'Red Mushroom',
	itemStone = 'Stone',
	itemWhiteDye = 'White Dye',
	moduleArgs = [[Module:ProcessArgs]],
	moduleRecipe = [[Module:Recipe table]],
	moduleSlot = [[Module:Inventory slot]],
	stoneVariants = { 'Stone', 'Andesite', 'Granite', 'Diorite' },
	type = 'Crafting',
	variantPages = {
		'Andésite', 'Bannière', 'Diorite', 'Étoile de feu d\'artifice', 'Granite', 'Lit',
		'Plaque de pression', 'Sable', 'Grès', 'Bouclier', 'Dalle', 'Vitre teintée', 
		'Verre teinté', 'Escaliers', 'Pierre taillée', 'Planches', 'Bois', 'Laine',
	},
}
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 ) .. ']]'
		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