URim (обсуждение | вклад) (Исправлен перевод жиж) |
URim (обсуждение | вклад) (Добавил гибкость модуля, чтобы работало с несколькими типами рецептов) |
||
| Строка 60: | Строка 60: | ||
end | end | ||
-- | -- Основная функция для генерации таблицы с рецептами | ||
p.fillRecipeTable = function(frame) | p.fillRecipeTable = function(frame) | ||
local args = frame.args | |||
local recipeType = args.recipeType or "microwaveRecipes" -- Тип рецептов по умолчанию | |||
local templateName = args.template or "RecipeRow" -- Шаблон по умолчанию | |||
local out = "" | local out = "" | ||
| Строка 67: | Строка 71: | ||
local recipes = loadRecipes() | local recipes = loadRecipes() | ||
if not recipes or not recipes | if not recipes or not recipes[recipeType] then | ||
return "Ошибка: данные о рецептах не загружены." | return "Ошибка: данные о рецептах не загружены или тип рецептов не найден." | ||
end | end | ||
for _, recipe in pairs(recipes | -- Перебираем все рецепты выбранного типа | ||
for _, recipe in pairs(recipes[recipeType]) do | |||
-- Переводим результат | -- Переводим результат | ||
local result = translateID(frame, recipe.result) or "Нет результата" | local result = translateID(frame, recipe.result) or "Нет результата" | ||
| Строка 102: | Строка 107: | ||
-- Генерация строки таблицы с использованием шаблона | -- Генерация строки таблицы с использованием шаблона | ||
out = out .. frame:expandTemplate{ title = | out = out .. frame:expandTemplate{ title = templateName, args = templateArgs } | ||
end | end | ||
Версия от 12:21, 8 марта 2025
Для документации этого модуля может быть создана страница Модуль:TableOfRecipes/doc
local p = {}
-- Кэш для хранения данных о рецептах
local recipeCache = nil
-- Кэш для хранения данных о химических веществах
local chemCache = nil
-- Функция для загрузки данных о рецептах из JSON-файла
local function loadRecipes()
if recipeCache then
return recipeCache
end
local success, data = pcall(function()
return mw.text.jsonDecode(mw.title.new("User:CapybaraBot/mealrecipes_prototypes.json"):getContent())
end)
if success then
recipeCache = data
return data
else
mw.log("Ошибка при загрузке JSON (mealrecipes_prototypes.json): " .. data)
return {}
end
end
-- Функция для загрузки данных о химических веществах из JSON-файла
local function loadChemPrototypes()
if chemCache then
return chemCache
end
local success, data = pcall(function()
return mw.text.jsonDecode(mw.title.new("User:CapybaraBot/chem_prototypes.json"):getContent())
end)
if success then
chemCache = data
return data
else
mw.log("Ошибка при загрузке JSON (chem_prototypes.json): " .. data)
return {}
end
end
-- Функция для перевода ID с использованием Module:Entity Lookup (для твердых веществ)
local function translateID(frame, id)
return frame:callParserFunction{ name = '#invoke', args = { 'Entity_Lookup', 'getname', id } }
end
-- Функция для перевода реагента (жидкого вещества) из chem_prototypes.json
local function translateReagent(reagentId)
local chemData = loadChemPrototypes()
if chemData[reagentId] and chemData[reagentId].name then
return chemData[reagentId].name
else
return reagentId -- Если перевод не найден, возвращаем исходный ID
end
end
-- Основная функция для генерации таблицы с рецептами
p.fillRecipeTable = function(frame)
local args = frame.args
local recipeType = args.recipeType or "microwaveRecipes" -- Тип рецептов по умолчанию
local templateName = args.template or "RecipeRow" -- Шаблон по умолчанию
local out = ""
-- Загрузка данных о рецептах
local recipes = loadRecipes()
if not recipes or not recipes[recipeType] then
return "Ошибка: данные о рецептах не загружены или тип рецептов не найден."
end
-- Перебираем все рецепты выбранного типа
for _, recipe in pairs(recipes[recipeType]) do
-- Переводим результат
local result = translateID(frame, recipe.result) or "Нет результата"
-- Формируем список ингредиентов (solids)
local solidsList = {}
if recipe.solids and type(recipe.solids) == "table" then
for solidId, amount in pairs(recipe.solids) do
local ingredientName = translateID(frame, solidId)
table.insert(solidsList, string.format("%s (%d)", ingredientName, amount))
end
end
-- Формируем список реагентов (reagents)
local reagentsList = {}
if recipe.reagents and type(recipe.reagents) == "table" then
for reagentId, amount in pairs(recipe.reagents) do
local reagentName = translateReagent(reagentId) -- Используем новую функцию для перевода
table.insert(reagentsList, string.format("%s (%d)", reagentName, amount))
end
end
-- Формируем аргументы для шаблона
local templateArgs = {
result = result, -- Результат становится названием строки
solids = table.concat(solidsList, ", ") or "Нет ингредиентов",
reagents = table.concat(reagentsList, ", ") or "Нет реагентов",
time = recipe.time or "Нет данных"
}
-- Генерация строки таблицы с использованием шаблона
out = out .. frame:expandTemplate{ title = templateName, args = templateArgs }
end
return out
end
return p