Модуль:Инвентарная иконка
Внешний вид
Для документации этого модуля может быть создана страница Модуль:Инвентарная иконка/doc
local p = {}
local tryLoadData = require([[Модуль:Специальные утилиты]]).tryLoadData
function splitExtension(name)
if name:match('%.gif$') or name:match('%.png$') then
-- расширения англоязычные, представляют собой ASCII-символы,
-- поэтому обычные match и sub безопасны
return name:sub(0, -5), name:sub(-3)
elseif name:match('%.webp$') then
return name:sub(0, -6), 'webp'
else
return name, nil
end
end
function p.icon(f)
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
-- Параметры
local name = mw.text.trim(args[1] or '')
local link = mw.text.trim(args["ссылка"] or '')
local title = mw.text.trim(args["назв"] or '')
local mod = mw.text.trim(args["мод"] or '')
-- Полное название файла
local extension
name, extension = splitExtension(name)
local icon, category
if mod == '' then
-- Ванильная иконка
-- Ищем файл из общего хранилища
-- Попытка найти англоназвание в псевдонимах
local aliases = mw.loadData([[Модуль:Инвентарный слот/Псевдонимы]])
local alias = aliases[name]
local englishName
if alias and not alias[1] then
if type(alias.commons) == "string" then
-- переданное шаблону расширение имеет приоритет над тем,
-- что задано в псевдонимах
local enExtension
englishName, enExtension = splitExtension(alias.commons)
extension = extension or enExtension
elseif alias.commons ~= false then
englishName = alias.english
end
end
-- Если англоназвания в псевдонимах нет, ищем в отдельном модуле
if not englishName then
local englishNames = mw.loadData([[Модуль:Инвентарный слот/Англоязычные названия]])
englishName = englishNames[name]
end
if englishName then
icon = table.concat{
'[[Файл:Invicon ', englishName, '.', extension or 'png',
'|32x32px|class=pixel-image|link=', link, '|', title, ']]'
}
else
-- Ищем в таблице спрайтов
local spriteData = mw.loadData([[Модуль:ИнвСпрайт]])
local idData = spriteData["IDы"][name]
if idData then
icon, category = require([[Модуль:Спрайт]]).sprite{
["данныеID"] = idData, ["ссылка"] = link, ["назв"] = title,
["данные"] = "ИнвСпрайт"
}
else
-- Ванильный локальный Grid-файл
icon = table.concat{
'[[Файл:Grid ', name, '.', extension or 'png',
'|32x32px|class=pixel-image|link=', link, '|', title, ']]'
}
end
end
else
-- Иконка из модификации
-- Разбор сокращений
local mods = mw.loadData([[Модуль:Модификации]])
mod = mods[mod] or mod
-- Загрузка таблицы спрайтов
local spriteData = tryLoadData("Модуль:ИнвСпрайт/" .. mod)
-- Находим данные о спрайте
local idData
if spriteData then
local idsOverride = spriteData["настройки"]["списокID"]
idsOverride = idsOverride and tryLoadData("Модуль:" .. idsOverride)
local ids = (idsOverride or spriteData)["IDы"]
if ids then
idData = ids[name]
end
end
if idData then
icon, category = require([[Модуль:Спрайт]]).sprite{
["данныеID"] = idData, ["ссылка"] = link, ["назв"] = title,
["данные"] = "ИнвСпрайт/" .. mod
}
else
-- Локальный Grid-файл
icon = table.concat{
'[[Файл:Grid ', name, ' (', mod, ').', extension or 'png',
'|32x32px|class=pixel-image|link=', link, '|', title, ']]'
}
end
end
return icon, category
end
return p