Изменения

Модуль:Инвентарный слот

2173 байта добавлено, 08:11, 16 октября 2018
м
Нет описания правки
-------------------------------------------------------------------
--- Модуль для отображения инвентарных слотов в Hilarious Minecraft Wiki.
-------------------------------------------------------------------
local p = {}
 
-- Список приставок к названиям, обрабатываемых другими модулями.
-- Так будет легче, например, убирать их из целей ссылок.
'Повреждённый', 'Повреждённая', 'Повреждённое', 'Повреждённые' -- использование Ё обязательно
}
 
p.modAliases = mw.loadData("Модуль:Модификации")
--- Создание слота
-- Первый аргумент
args[1] = mw.text.trim(args[1] or '')
--- Псевдонимы -- Вы можете закомментировать следующую строку, если не используете псевдонимыоригинальной игры
local aliases = mw.loadData('Модуль:Инвентарный слот/Псевдонимы')
local modAliases = args["модпсевдонимы"] or '' if modAliases ~= '' then modAliases = mw.loadData('Модуль:' .. modAliases) else modAliases = nil end if aliases or modAliases then 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, ';' )
end
args[1] = table.concat( frames, ';' )
--- Построение спрайта
local ids = mw.loadData([[Модуль:ИнвСпрайт/ID]])["IDы"]
local modIds = {}
local animated = mw.ustring.find(args[1]:find( , ';' )
local pageName = mw.title.getCurrentTitle().text
local imgClass = args["классизобр"]
local description = parts.text
local img, idData, en_name
if mod then
local modData = modIds[mod]
if modData and modData[name] then
idData = modData[name]
en_name = idData["en"]
else
img = name .. ' (' .. mod .. ')'
img = name
end
  local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}
local link = args["ссылка"] or ''
if link == '' then
link = mod .. '/' .. name
else
link = mw.ustring.gsub(name, '^Повреждённ[ыао][йяе] ', '')nil
end
elseif mw.ustring.lower(link) == 'нет' then
plainTitle = name
elseif mw.ustring.lower(title) ~= 'нет' then
plainTitle = title:mw.ustring.gsub(mw.ustring.gsub( title, '\\\\', '\' ):gsub( , '\\&', '&' )
local formatPattern = '&[0-9a-fk-or]'
if plainTitle:mw.ustring.match( plainTitle, formatPattern ) then
formattedTitle = title
plainTitle = plainTitle:mw.ustring.gsub( plainTitle, formatPattern, '' )
end
plainTitle = name
else
plainTitle = plainTitle: mw.ustring.gsub(mw.ustring.gsub( plainTitle, '\', '\\' ):gsub( , '&', '&' )
end
elseif link then
item:attr{
['data-minetip-title'] = formattedTitle,
['data-minetip-text'] = description, ['data-modinfo-text'] = mod, ['data-minetip-lowtitle'] = en_name
}
}
end
 
item:node(image)
category = spriteCat
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 = {}
aliasParts.text = frameParts.text or aliasParts.text or ''
table.insert( expandedFrames, stringmw.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 = frame:mw.ustring.match( frame, '^%[%s*([^%]]+)%s*%]' ) parts.mod = mw.text.trim( frame:match( '([^:%]]+):' ) or mod or '' )
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 link = nil
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 = ( frame:({mw.ustring.find( ':' frame, modPattern )}) [2] or frame:find( '%]' ) 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)
end
parts.text = frame:mw.ustring.match( frame, '%[%s*([^%]]+)%s*%]$' )
return parts
end
return p
1136
правок