Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

La documentation pour ce module peut être créée à Module:Fabrication/doc

local p = {}

local i18n = {
	moduleArgs = [[Module:ProcessArgs]],
	moduleRecipe = [[Module:Tableau de recette]],
	moduleSlot = [[Module:Case inventaire]],
	moduleAliases = [[Module:Case inventaire/Alias]],
	type = 'Fabrication'
}
p.i18n = i18n

local slot = require( i18n.moduleSlot )
local recipeTable = require( i18n.moduleRecipe ).table
local aliases = require( i18n.moduleAliases)
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, outputSets = recipeTable( args, {
		uiFunc = 'craftingTable',
		type = i18n.type,
		ingredientArgs = cArgVals,
		outputArgs = { 'résultat' },
	} )
	
	local title = mw.title.getCurrentTitle()
	if args.ignorerutilisation or args.nocat == '1' or title.namespace ~= 0 or title.isSubpage then
		return out
	end
	
	-- SMW/Bucket
	-- Json contains the full frames, the other SMW properties/Bucket fields are just item names.
	local db_json = {
		["type"] = args.type,
		["shapeless"] = args.shapeless,
		["fixed"] = args.fixed,
		["notfixed"] = args.notfixed,
		["description"] = mw.text.unstrip(args.description or ''), --Remove ref tags
		["nom"] = args.nom,
		["ingredients"] = args['ingrédients'],
		["nocat"] = args.nocat,
		["A1"] = args.A1,
		["A2"] = args.A2,
		["A3"] = args.A3,
		["B1"] = args.B1,
		["B2"] = args.B2,
		["B3"] = args.B3,
		["C1"] = args.C1,
		["C2"] = args.C2,
		["C3"] = args.C3,
		["résultat"] = args['résultat'],
		["group"] = args.group
	}
	
	-- Flatten the item sets into a simple list
	local function makeNameList(itemSets)
		local retTable = {}
		local inputRetTable = {}
		local usedNames = {}
		for _, itemSet in pairs(itemSets) do
			for _, item in pairs(itemSet) do
				--local name = item.mod .. ":" .. item.name     -- use instead of just item.name if mods are covered
				if not usedNames[item.name] then
					table.insert(retTable, item.name)
					table.insert(inputRetTable, item.name)
					usedNames[item.name] = true
					
					if aliases[item.name] then
						for _, aliasEntry in ipairs(aliases[item.name])	do
							if not usedNames[aliasEntry] then
								table.insert(retTable, (aliasEntry.name or aliasEntry)) -- Sometimes the alias entry is a table, so try and grab its name from within the table with a fallback to just the entry.
								usedNames[aliasEntry] = true
							end
						end
					end
				end
			end
		end
		return retTable, inputRetTable
	end
	
	local output_names, original_output_names = makeNameList(outputSets)
	local ingredient_names, original_ingredient_names = makeNameList(ingredientSets)
	local group_names = {}
	if args.group then
		for name in string.gmatch(args.group, "[^,]+") do
			table.insert(group_names, mw.text.trim(name))
		end
	end
	
	local json = mw.text.jsonEncode(db_json)
	
	bucket('crafting_recipe').put{
		json = json,
		ingredient = ingredient_names,
		output = output_names,
		type = args.type
	}
	
	return out
end

return p