Модуль:Сетка
Материал из Playzone Minecraft Wiki
Для документации этого модуля может быть создана страница Модуль:Сетка/doc
local p = {} -- Отдельная ячейка function p.cell(f) local args = f.args or f if f == mw.getCurrentFrame() and args[1] == nil then args = f:getParent().args end args[1] = mw.text.trim( args[1] or '' ) local animated = args[1]:find( ';' ) local pageName = mw.title.getCurrentTitle().subpageText local class = args['класс'] local align = args['выравн'] local background = args['фон'] local border = args['граница'] local default = args['умолчание'] local defaultCSS = args['умолчаниеCSS'] local mods = {} if args['моды'] then for mod in mw.text.gsplit(args['моды'], '%s*;%s*') do table.insert(mods, mod) end end local title = args['назв'] local link = args['ссылка'] local result = {'<span class="grid ' .. (class or '')} table.insert(result, '"') if align or background or border then table.insert(result, 'style="') if align then table.insert(result, 'vertical-align: ' .. align .. ';') end if background then table.insert(result, 'background-color: ' .. background .. ';') end if border then table.insert(result, 'outline: 2px solid ' .. border .. ';') end table.insert(result, '"') end table.insert(result, '>') if class ~= 'hidden' then table.insert(result, '<span class="border"><span> </span></span>') end if default then table.insert(result, '<span class="default-image">[[Файл:Grid ' .. default .. '.png|link=]]</span>') end if defaultCSS then table.insert(result, '<span class="default-image">' .. defaultCSS .. '</span>') end -- Начало кода Сетка/Ячейка if animated then table.insert(result, '<span class="animated" style="overflow:hidden;display:block;width:32px">') end local b = false for frame in mw.text.gsplit(args[1], '%s*;%s*') do local num, mod, name if frame:find(',') then local fullname fullname, num = frame:match('([^,]+),(%d+)') if fullname:find(':') then name, mod = fullname:match('([^:]+):m(%d+)') mod = mods[tonumber(mod)] else name = fullname mod = nil end else num = nil if frame:find(':') then name, mod = frame:match('([^:]+):m(%d+)') mod = mods[tonumber(mod)] else name = frame mod = nil end end if b then table.insert(result, '<span class="image active">') b = false else table.insert(result, '<span class="image">') end -- Начало кода Сетка/Спрайт table.insert(result, '<span class="gridsprite" ') if title then if mw.ustring.lower(title) ~= 'нет' then table.insert(result, 'title="' .. title .. '"') end else if frame ~= '' then if mw.ustring.lower(link or '') == 'нет' then table.insert(result, 'title="' .. name .. '"') end end end table.insert(result, '>') if frame ~= '' then table.insert(result, '[[Файл:Grid ') if mod then table.insert(result, name .. ' (' .. mod .. ')') else table.insert(result, name) end table.insert(result, '.png|32px|link=') if not title then if link then if mw.ustring.lower(link) ~= 'нет' then if mod then table.insert(result, mod .. '/' .. link) else table.insert(result, link) end end else if mod then table.insert(result, mod .. '/' .. name) else table.insert(result, name) end end end table.insert(result, ']]') if tonumber(num) then num = tonumber(num) if (num > 1) and (num < 1000) then table.insert(result, '<span class="number" ') if title then if mw.ustring.lower(title) ~= 'нет' then table.insert(result, 'title="' .. title .. '"') end else if frame ~= '' then if mw.ustring.lower(link or '') == 'нет' then table.insert(result, 'title="' .. name .. '"') end end end table.insert(result, '>') if title then table.insert(result, tostring(num)) else if link then if mw.ustring.lower(link) == 'нет' then table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>') else table.insert(result, '[[') if mod then table.insert(result, mod .. '/' .. name) else table.insert(result, name) end table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]') end else table.insert(result, '[[') if mod then table.insert(result, mod .. '/' .. name) else table.insert(result, name) end table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]') end end table.insert(result, '</span>') end end else table.insert(result, '[[Файл:Grid layout Empty.png|32px|link=]]') end table.insert(result, '</span>') table.insert(result, '</span>') -- Конец кода Сетка/Спрайт end if animated then table.insert(result, '</span>') end -- Конец кода Сетка/Ячейка table.insert(result, '</span>') return table.concat(result) end --- Варианты сеток; прописаны в модуле для избежания многочисленных вызовов {{#invoke:}} на одну сетку -- Верстак function p.craftingTable( f ) local args = f.args or f if f == mw.getCurrentFrame() and f.args["Выход"] == nil then args = f:getParent().args end local arrow = 'Arrow (small)' local shapeless = '' if args["Стрелка"] or '' ~= '' then arrow = args["Стрелка"] end if args["бесформенный"] or '' ~= '' then shapeless = '<span title="Этот рецепт — бесформенный; ресурсы могут располагаться в сетке верстака в любом порядке.">[[Файл:Grid layout Shapeless.png|link=]]</span>' elseif args["фиксированный"] or '' ~= '' then local notFixed = '' if args["нефиксировано"] or '' ~= '' then notFixed = ', кроме ' .. args["нефиксировано"] end shapeless = '<span title="Этот рецепт — фиксированный, его ингредиенты не могут быть перемещены или зеркально отражены' .. notFixed .. '.">[[Файл:Grid layout Fixed.png|link=]]</span>' end local html = { '{| class="grid-Crafting_Table" cellpadding="0" cellspacing="0"', '| ' .. p.cell{ args.A1, ["моды"] = args["Моды"], ["ссылка"] = args["A1Ссылка"], ["назв"] = args["A1Назв"] }, '| ' .. p.cell{ args.B1, ["моды"] = args["Моды"], ["ссылка"] = args["B1Ссылка"], ["назв"] = args["B1Назв"] }, '| ' .. p.cell{ args.C1, ["моды"] = args["Моды"], ["ссылка"] = args["C1Ссылка"], ["назв"] = args["C1Назв"] }, '| rowspan="2" class="arrow" | [[Файл:Grid layout ' .. arrow .. '.png|link=]]', '| rowspan="3" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' }, '|-', '| ' .. p.cell{ args.A2, ["моды"] = args["Моды"], ["ссылка"] = args["A2Ссылка"], ["назв"] = args["A2Назв"] }, '| ' .. p.cell{ args.B2, ["моды"] = args["Моды"], ["ссылка"] = args["B2Ссылка"], ["назв"] = args["B2Назв"] }, '| ' .. p.cell{ args.C2, ["моды"] = args["Моды"], ["ссылка"] = args["C2Ссылка"], ["назв"] = args["C2Назв"] }, '|-', '| ' .. p.cell{ args.A3, ["моды"] = args["Моды"], ["ссылка"] = args["A3Ссылка"], ["назв"] = args["A3Назв"] }, '| ' .. p.cell{ args.B3, ["моды"] = args["Моды"], ["ссылка"] = args["B3Ссылка"], ["назв"] = args["B3Назв"] }, '| ' .. p.cell{ args.C3, ["моды"] = args["Моды"], ["ссылка"] = args["C3Ссылка"], ["назв"] = args["C3Назв"] }, '| class="shapeless" | ' .. shapeless, '|}' } return table.concat( html, '\n' ); end -- Печка function p.furnace(f) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end args = require( 'Module:ProcessArgs' ).norm( args ) local progress = 'Furnace Progress' local burning = ' (in-active)' local smelting = burning local fuelUsage = 'Fire' if args["Прогресс"] then progress = args["Прогресс"] .. ' Progress' if args["ТМод"] then progress = progress .. ' (' .. args["ТМод"] .. ')' end end if args["Ресурс"] and args["Топливо"] then burning = '' if args["Выход"] then smelting = '' end end if args["Расход"] then fuelUsage = args["Расход"] if args["ТМод"] then fuelUsage = fuelUsage .. ' (' .. args["ТМод"] .. ')' end end local html = { '{| class="grid-Furnace" cellpadding="0" cellspacing="0"', '| ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] }, '| rowspan="3" class="arrow" | [[Файл:Grid layout ' .. progress .. smelting .. '.png|link=]]', '| rowspan="3" class="output" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' }, '|-', '| [[Файл:Grid layout ' .. fuelUsage .. burning .. '.png|link=]]', '|-', '| ' .. p.cell{ args["Топливо"], ["моды"] = args["Моды"], ["ссылка"] = args["ТСсылка"], ["назв"] = args["ТНазв"] }, '|}' } return table.concat( html, '\n' ); end -- Варочная стойка function p.brewingStand( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end args = require( 'Module:ProcessArgs' ).norm( args ) local inactive = ' (In-active)' if args["Ресурс"] and ( args["Выход1"] or args["Выход2"] or args["Выход3"] ) then inactive = '' end local html = { '<div class="grid-Brewing_Stand">', '{| cellpadding="0" cellspacing="0"', '| class="bubbles" | [[Файл:Grid layout Brewing Bubbles.gif|link=]]', '| class="input" | ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] }, '| [[Файл:Grid layout Brewing Arrow' .. inactive .. '.png|link=]]', '|-', '| class="output1" | ' .. p.cell{ args["Выход1"], ["моды"] = args["Моды"], ["ссылка"] = args["В1Ссылка"], ["назв"] = args["В1Назв"], ["умолчание"] = 'layout Brewing Empty' }, '| class="output2" | ' .. p.cell{ args["Выход2"], ["моды"] = args["Моды"], ["ссылка"] = args["В2Ссылка"], ["назв"] = args["В2Назв"], ["умолчание"] = 'layout Brewing Empty' }, '| class="output3" | ' .. p.cell{ args["Выход3"], ["моды"] = args["Моды"], ["ссылка"] = args["В3Ссылка"], ["назв"] = args["В3Назв"], ["умолчание"] = 'layout Brewing Empty' }, '|-', '| class="paths" colspan="3" | [[Файл:Grid layout Brewing Paths.png|link=]]', '|}', '</div>' } return table.concat( html, '\n' ); end return p