Модуль:Песочница/Pok
Для документации этого модуля может быть создана страница Модуль:Песочница/Pok/doc
local p = {}
-- Функция для загрузки данных исследований из JSON-файла
local function loadResearchData()
return mw.text.jsonDecode(mw.title.new("User:IanComradeBot/Песочница.json"):getContent())
end
-- Функция для поиска исследований по дисциплине
local function findResearchByDiscipline(dataCache, discipline)
local results = {}
for _, research in ipairs(dataCache) do
if research.technology and research.technology.discipline == discipline then
table.insert(results, research.technology)
end
end
return results
end
-- Таблица для перевода названий дисциплин
local disciplineMapping = {
Arsenal = "Арсенал",
Industrial = "Промышленность",
Experimental = "Экспериментальное",
CivilianServices = "Обслуживание персонала"
}
-- Таблица для цветов по уровням
local tierColors = {
[1] = "#54d554",
[2] = "#ed9000",
[3] = "#d72a2a"
}
-- Универсальная функция для генерации списков
local function generateTemplate(list, templateType)
if not list or #list == 0 then
return ""
end
local result = "<ul>"
for _, entry in ipairs(list) do
if entry and entry ~= "" then
if templateType == "prerequisite" then
result = result .. '<li>{{#invoke:Entity Lookup|createimagetooltip|Файл:'
.. entry .. '.png|' .. entry
.. '|Мета=32x32px,link=}} '
.. entry .. '</li>'
elseif templateType == "unlock" then
result = result .. '<li>{{#invoke:Entity Lookup|createimagetooltip|Файл:'
.. entry .. '.png|' .. entry
.. '|Мета=32x32px,link=}} {{#invoke:Entity Lookup|getname|'
.. entry .. '}}</li>'
end
end
end
result = result .. "</ul>"
return result
end
function p.main(frame)
-- Подключение CSS
local cssLink = frame:extensionTag('templatestyles', '', {
src = 'Шаблон:Research/styles.css'
})
local dataCache = loadResearchData()
local discipline = frame.args[1] or ""
if discipline and discipline ~= "" then
local out = cssLink .. '<div class="research-group">'
-- Получаем список исследований по дисциплине
local researches = findResearchByDiscipline(dataCache, discipline)
if #researches == 0 then
out = out .. '<div style="color:red;">Нет исследований для дисциплины "' .. discipline .. '"</div>'
end
for _, tech in ipairs(researches) do
local disciplineName = disciplineMapping[tech.discipline] or "Неизвестная дисциплина"
local tierColor = tierColors[tech.tier] or "#FFFFFF"
local iconPath = tech.icon and tech.icon.sprite or nil
-- Генерация строк prerequisites и unlocks
local prerequisitesStr = generateTemplate(tech.technologyPrerequisites, "prerequisite")
local unlocksStr = generateTemplate(tech.recipeUnlocks, "unlock")
-- Формируем вывод с использованием шаблона
out = out .. mw.getCurrentFrame():preprocess(
'{{Prototypes/Механика/Исследование' ..
'|id=' .. tech.id ..
'|icon=' .. iconPath ..
'|name=' .. tech.name ..
'|discipline=' .. tech.discipline ..
'|tier=' .. tech.tier ..
'|tierColor=' .. tierColor ..
'|disciplineName=' .. disciplineName ..
'|cost=' .. tech.cost ..
'|prerequisites=' .. prerequisitesStr ..
'|unlocks=' .. unlocksStr ..
'}}'
)
end
out = out .. '</div>'
return out
else
return cssLink .. '<div style="color:red;">Дисциплина "' .. discipline .. '" не найдена.</div>'
end
end
return p