Minecraft Wiki
Advertisement

--- Модуль для отображения жидкостей в ёмкостях для механизмов из модов в Minecraft Wiki.


local p = {}

--- Создание слота function p.slot(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 aliases = mw.loadData('Модуль:Инвентарный слот/Псевдонимы')

--- Проверка и замена всех фреймов на псевдонимы

   local frames = {}

for frame in mw.text.gsplit( args[1], '%s*;%s*' ) do

local frameParts = p.getParts( frame, args["мод"] ) local id = frameParts.name

       -- if frameParts.mod then

-- id = frameParts.mod .. ':' .. id -- end

       --- Загрузка списка псевдонимов к модам
       local modAliases
       if frameParts.mod then
           if mw.title.new('Модуль:ИнвСпрайт/' .. frameParts.mod).exists then
               modAliases = mw.loadData('Модуль:ИнвСпрайт/' .. frameParts.mod)["настройки"]["модпсевдонимы"]
               if modAliases and mw.title.new('Модуль:' .. modAliases).exists then
                   modAliases = mw.loadData('Модуль:' .. modAliases)
               end
           end
       end
       local alias = nil

if frameParts.mod then

           if modAliases and modAliases[id] then
           --- псевдонимы следует прописывать в модуле в формате ['имя'] = '[титл]:имя[доп. текст]',  титл и доп.текст необязательно указывать
               local title = mw.ustring.match ( modAliases[id], '^%[([^%]]+)%]' )
               if title then
                   local aaa = mw.ustring.match ( modAliases[id], '^%^%+%](.+)$' )
                   if aaa then
                       alias = '[' .. title .. ']' .. frameParts.mod .. ':' .. aaa
                   else
                       alias = '[' .. title .. ']' .. frameParts.mod .. ':' .. frameParts.name
                   end
               else 
                   alias = frameParts.mod .. ':' .. modAliases[id]
               end
           end

elseif aliases and aliases[id] then alias = aliases[id] end

if alias then table.insert( frames, p.expandAlias( frameParts, alias ) ) else table.insert( frames, frame ) end end

   args[1] = table.concat( frames, ';' )
   --- Проверка и замена всех фреймов на псевдонимы (конец)

--- Построение спрайта

-- Параметры local sprite local ids = mw.loadData(Модуль:ИнвСпрайт)["IDы"] local modIds = {} local back_modIds = {} local animated = mw.ustring.find(args[1], ';') local pageName = mw.title.getCurrentTitle().text local imgClass = args["классизобр"] local imgStyle = args["стильизобр"] local numStyle = args["стильцифр"]

local body = mw.html.create('span'):css{['vertical-align'] = args["выравн"]}

if animated then body:addClass('animated') end

if args["класс"] then body:addClass(args["класс"]) end if args["стиль"] then body:cssText(args["стиль"]) end

if (args["умолчание"] or ) ~= then body:css('background-image', 'url(https://static.wikia.nocookie.net/minecraft_ru_gamepedia/images/&format=original)') end

   if args["фон"] then
       body:cssText(args["фон"])
   else
       body:cssText('background-color:#8b8b8b;')
   end
   --- Добавление картинки ёмкости с делениями
   local y
   y = math.floor(11*args["объём"])
   if y<0 then 
       y=0
   end
   if y>110 then
       y=110
   end
   body:wikitext('Container transparent')
   --- <div style="z-index:-10; position:absolute; top:Ошибка выражения: - не хватает операндаpx; left:0px; width:36px; height:114px; overflow:hidden">
   local im
   im = body:tag('span'):cssText('display: block;z-index:10; position:absolute; top:' .. 112-y .. 'px; left:0px; width:36px; height:' .. y+2 .. 'px; overflow:hidden')

--- Обработка фреймов local first = true for frame in mw.text.gsplit(args[1], '%s*;%s*') do local item if frame ~= or frame == and animated then item = body:tag('span'):addClass('invslot-item') if imgClass then item:addClass(imgClass) end if imgStyle then item:cssText(imgStyle) end end

if frame == then (item or body):tag('br') else local category local parts = p.getParts(frame, args["мод"]) local title = parts.title or mw.text.trim(args["назв"] or ) local mod = parts.mod

           local name = parts.name

local num = parts.num local description = parts.text

           --- Добавляем к доп тексту название мода

local img, idData, en_name if mod then local modData = modIds[mod] if not modData and mw.title.new('Модуль:ИнвСпрайт/' .. mod).exists then local modDataModule = mw.loadData('Модуль:ИнвСпрайт/' .. mod) local idListOverride = modDataModule['настройки']['списокID'] if idListOverride then modData = mw.loadData('Модуль:' .. idListOverride)['IDы'] else modData = modDataModule['IDы'] end modIds[mod] = modData end if modData and modData[name] then idData = modData[name]

                   en_name = idData["en"]

else img = name .. ' (' .. mod .. ')' end elseif ids[name] then idData = ids[name] else img = name end

local link = args["ссылка"] or if link == then if mod then link = mod .. '/' .. name else link = mw.ustring.gsub(name, '^Повреждённ[ыао][йяе] ', ) end elseif mw.ustring.lower(link) == 'нет' then link = nil end if link == pageName then link = nil end

local formattedTitle local plainTitle if title == then plainTitle = name elseif mw.ustring.lower(title) ~= 'нет' then plainTitle = mw.ustring.gsub(mw.ustring.gsub(title, '\\\\', '\'), '\\&', '&')

local formatPattern = '&[0-9a-fk-or]' if mw.ustring.match(plainTitle, formatPattern) then formattedTitle = title plainTitle = mw.ustring.gsub(plainTitle, formatPattern, ) end

if plainTitle == then plainTitle = name else plainTitle = mw.ustring.gsub(mw.ustring.gsub(plainTitle, '\', '\\'), '&', '&') end elseif link then if img then formattedTitle = else plainTitle = end end

if mod and mod == 'GregTech' and idData and idData["страница"] and mw.title.new('Модуль:GregTechProc/Материалы/' .. idData["страница"]).exists then local mat_info = mw.loadData('Модуль:GregTechProc/Материалы/' .. idData["страница"]) if mat_info then local formula = mat_info["Формула"] local melt = mat_info["Плавление"] local boil = mat_info["Испарение"] if not description then description = end description = description .. '/&7Формула: &e' .. formula .. '/&6t° плавления: ' .. melt .. 'K/&ct° испарения: ' .. boil .. 'K' end end

item:attr{ ['data-minetip-title'] = formattedTitle, ['data-minetip-text'] = description, ['data-modinfo-text'] = mod,

               ['data-minetip-lowtitle'] = en_name

}


if img then -- & is re-escaped because mw.html treats attributes -- as plain text, but MediaWiki doesn't local escapedTitle = ( plainTitle or ):gsub( '&', '&' ) item:addClass('invslot-item-image') :wikitext('', escapedTitle, '') :css('width', scale * 32 .. 'px') :css('height', scale * 32 .. 'px') else if not sprite then sprite = require(Модуль:Спрайт).sprite end local image if mod then image = (args["таблспрайтов"] or mod or "Inv") .. 'CSS.png' end if link then item:wikitext('[[', link, '|') end

local image, spriteCat; if not mod then image, spriteCat = sprite{ ["масштаб"] = scale, ["данныеID"] = idData, ["назв"] = plainTitle, ["изобр"] = image, ["данные"] = 'ИнвСпрайт' } else image, spriteCat = sprite{ ["масштаб"] = scale, ["данныеID"] = idData, ["назв"] = plainTitle, ["изобр"] = image, ["данные"] = 'ИнвСпрайт/' .. mod } end item:node(image) category = spriteCat end

if num and num > 1 and num < 1000 then if img and link then item:wikitext('') end local number = item :tag('span') :addClass('invslot-stacksize') :attr{title = plainTitle} :wikitext(num) if numStyle then number:cssText(numStyle) end if img and link then item:wikitext('') end end

if idData and link then item:wikitext(']]') end

item:wikitext(category) end

if first then if animated and item then item:addClass('active') end first = false end end

return tostring( body ) end

function p.expandAlias( frameParts, alias ) -- If the frame has no parts, we can just return the alias as-is --[[if not frameParts.title and not frameParts.mod and not frameParts.num and not frameParts.text then return alias end--]]

local expandedFrames = {} for aliasFrame in mw.text.gsplit(alias, '%s*;%s*') do local aliasParts = p.getParts(aliasFrame) aliasParts.title = frameParts.title or aliasParts.title or aliasParts.mod = frameParts.mod or aliasParts.mod or 'Minecraft' aliasParts.num = frameParts.num or aliasParts.num or aliasParts.text = frameParts.text or aliasParts.text or

table.insert(expandedFrames, mw.ustring.format( '[%s]%s:%s,%s[%s]', aliasParts.title, aliasParts.mod, aliasParts.name, aliasParts.num, aliasParts.text )) end

return table.concat(expandedFrames, ';') end


function p.getParts(frame, mod)


Функция получает название предмета в формате "[титл]мод:имя[доп.текст],число"


parts.title = титл, название предмета при наведении


parts.mod = мод


parts.name = имя


parts.text = текст, дополнительный текст при наведении на предмет


parts.num = число

local parts = {} parts.title = mw.ustring.match(frame, '^%[%s*([^%]]+)%s*%]')

   local modPattern
   if mw.ustring.match(frame, '^%[.*%]([a-zA-Zа-яА-Я0-9ёЁé _%-\']+):') then
   modPattern = '^%[.*%]([a-zA-Zа-яА-Я0-9ёЁé _%-\']+):'
   else
   modPattern = '^([a-zA-Zа-яА-Я0-9ёЁé _%-\']+):'
   end

parts.mod = mw.text.trim(mw.ustring.match(frame, modPattern) or mod or ) ---- Получаем название мода

local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1} if parts.mod == or vanilla[mw.ustring.lower(parts.mod)] then parts.mod = nil else if p.modAliases[parts.mod] then parts.mod = p.modAliases[parts.mod]

       end
       parts.mod = mw.ustring.gsub(parts.mod,'_',' ')
   end

local _, nameStartV = mw.ustring.find( frame, '^%^%*%]' ) local nameStart = ( ({mw.ustring.find( frame, modPattern )})[2] or nameStartV or 0 ) + 1 if nameStart - 1 == #frame then nameStart = 1 end parts.name = mw.text.trim( mw.ustring.sub( frame, nameStart, ( mw.ustring.find( frame, '[,%[]', nameStart ) or 0 ) - 1 ) )

parts.num = math.floor(mw.ustring.match(frame, ',%s*(%d+)') or 0) if parts.num == 0 then parts.num = nil end

parts.text = mw.ustring.match(frame, '%[%s*([^%]]+)%s*%]$')

return parts end

return p

Advertisement