Этот модуль реализует {{обжиг}}.
Зависимости
Смотрите также
local p = {} function p.table( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args else f = mw.getCurrentFrame() end local getParts = require( 'Модуль:Инвентарный слот' ).getParts -- Начинать таблицу при необходимости local multirow = f:callParserFunction( '#dplvar', 'multirow' ) if multirow ~= '1' then multirow = nil end local head = args["глава"] or '0' if tonumber(head) then head = tonumber(head) else error("Параметр «глава» не является числом.") end if multirow then head = 0 elseif head ~= 0 then multirow = 1 f:callParserFunction( '#dplvar:set', 'multirow', '1' ) else head = 1 end -- Заканчивать таблицу при необходимости local foot = args["подвал"] or '' if multirow then if foot ~= '' then multirow = nil f:callParserFunction( '#dplvar:set', 'multirow', '0' ) end else foot = 1 end local mod = args["Мод"] if not mod and args["Прогресс"] then if args['Прогресс']:find('gt4') then mod = 'GregTech 4' elseif args['Прогресс']:find('gt') then mod = 'GregTech' elseif args['Прогресс']:find('ic2') then mod = 'IndustrialCraft 2' end end args["Мод"] = mod -- Сборка заголовка таблицы local header = '' if head ~= 0 then local name = '' local description = '' if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then name = '!! Результат' f:callParserFunction( '#dplvar:set', 'resultname', '1' ) end if args["показатьописание"] == '1' then description = ' !! class="unsortable" | Описание' f:callParserFunction( '#dplvar:set', 'smeltingdescription', '1' ) end local class = args["класс"] or '' if multirow then class = 'sortable collapsible ' .. class recipeClass = 'class="unsortable" |' else recipeClass = '' end if args["Прогресс"] then process = ' Процесс' else process = ' [[Плавка|Процесс]]' end local table_head if head >= 2 then table_head = '|-' else table_head = ' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Процесс"' end if head ~= 3 then header = table.concat( { table_head, '! ' .. 'Ингредиенты !! ' .. recipeClass .. process .. name .. description, '|-'}, '\n' ) end end -- Конвертор аргументов args["Ресурс1"] = args["Ресурс1"] or args["Ресурс"] or args[1] args["Ресурс2"] = args["Ресурс2"] or args["Топливо"] or args["топливо"] args["Выход1"] = args["Выход1"] or args["Выход"] or args[2] args["РесурсЖ1"] = args["РесурсЖ1"] or args["РесурсЖ"] args["ВыходЖ1"] = args["ВыходЖ1"] or args["ВыходЖ"] local input = {} n = 1 while args['Ресурс' .. n] do table.insert( input , mw.text.trim( args['Ресурс' .. n] )) n = n + 1 end n = 1 while args['РесурсЖ' .. n] do table.insert( input , mw.text.trim( args['РесурсЖ' .. n] )) n = n + 1 end local output = {} n = 1 while args['Выход' .. n] do table.insert( output , mw.text.trim( args['Выход' .. n] )) n = n + 1 end n = 1 while args['ВыходЖ' .. n] do table.insert( output , mw.text.trim( args['ВыходЖ' .. n] )) n = n + 1 end -- Ячейка с ингредиентами local ingredientsCell if args["ингредиенты"] or '' ~= '' then ingredientsCell = args["ингредиенты"] else ingredientsCell = {} local ingredients = {} local separator = '' for k, v in ipairs ( input ) do if k > 1 and next( ingredients ) then separator = ' +<br>\n' end for item in mw.text.gsplit( v, '%s*;%s*' ) do local parts = getParts( item, mod ) if parts.name ~= '' and not ingredients[parts.name] and ( k >= 1 and ( v ~= args['Топливо'] )) then local link = '' if separator == '' and next( ingredients ) then separator = ' или<br>\n' end if parts.mod then link = parts.mod .. '/' .. parts.name .. '|' end if parts.name:find( '^Люб' ) then if parts.mod then link = parts.mod .. '/' .. mw.ustring.gsub( mw.ustring.sub( parts.name, 7 ), "^%l", mw.ustring.upper ) .. '|' end table.insert( ingredientsCell, separator .. mw.ustring.sub( parts.name, 0, 6 ) .. '[[' .. link .. mw.ustring.sub( parts.name, 6 ) .. ']]' ) else table.insert( ingredientsCell, separator .. '[[' .. link .. parts.name .. ']]' ) end separator = '' ingredients[parts.name] = 1 end end end ingredientsCell = table.concat( ingredientsCell ) end -- Ячейка с рецептом local recipeCell = require( 'Модуль:Обработка' ).interface( args ) -- Ячейка с продуктами local nameCell if args["название"] or '' ~= '' then nameCell = args["название"] elseif f:callParserFunction( '#dplvar', 'resultname' ) == '1' then nameCell = {} local names = {} for k, v in ipairs ( output ) do local separator = '' if k > 1 and next( names ) then separator = ' +<br>\n' end for item in mw.text.gsplit( v, '%s*;%s*' ) do local parts = getParts( item, mod ) if parts.name ~= '' and not names[parts.name] and ( k >= 1 ) then local link = '' if separator == '' and next( names ) then separator = ' или<br>\n' end if parts.mod then link = parts.mod .. '/' .. parts.name .. '|' end if parts.name:find( '^Люб' ) then if parts.mod then link = parts.mod .. '/' .. mw.ustring.gsub( mw.ustring.sub( parts.name, 7 ), "^%l", mw.ustring.upper ) .. '|' end table.insert( nameCell, separator .. mw.ustring.sub( parts.name, 0, 6 ) .. '[[' .. link .. mw.ustring.sub( parts.name, 6 ) .. ']]' ) else table.insert( nameCell, separator .. '[[' .. link .. parts.name .. ']]' ) end separator = '' names[parts.name] = 1 end end end nameCell = table.concat( nameCell ) end if nameCell and args["запланированное"] then nameCell = nameCell .. '<br>([[' .. args["запланированное"] .. ']])' end -- Сборка строки таблицы с интерфейсом local row = { '\n|' .. ingredientsCell, recipeCell } if nameCell then table.insert( row, nameCell ) end if f:callParserFunction( '#dplvar', 'smeltingdescription' ) == '1' then table.insert( row, args["описание"] or '' ) end row = table.concat( row, '\n|' ) .. '\n|-' -- Закрытие таблицы local footer = '' if foot ~= '' then footer = '\n|}' f:callParserFunction( '#dplvar:set', 'resultname', '0', 'smeltingdescription', '0' ) end local title = mw.title.getCurrentTitle() local category = '' if args["запланированное"] and args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then category = '[[Категория:Запланированные материалы]]' end return header .. row .. footer .. category end return p