Модуль:Entity Sprite: различия между версиями

мНет описания правки
Нет описания правки
Строка 4: Строка 4:
local function loadData(filePath)
local function loadData(filePath)
     local page = mw.title.new(filePath)
     local page = mw.title.new(filePath)
    if not page then
     local content = page and page:getContent()
        return nil
     return content and mw.text.jsonDecode(content) or nil
    end
     local content = page:getContent()
     if not content then
        return nil
    end
    return mw.text.jsonDecode(content)
end
end


Строка 30: Строка 24:
end
end


-- Функция для генерации шаблона repeat
-- Генерация шаблона repeat
local function generateRepeatTemplate(data)
local function generateRepeatTemplate(data)
     local spriteGroups = {}
     local spriteGroups = {}


    -- Группировка спрайтов по параметрам
     for _, entry in ipairs(data) do
     for _, entry in ipairs(data) do
         if entry.Sprite and entry.EntityStorageVisuals then
         if entry.Sprite and entry.EntityStorageVisuals then
Строка 43: Строка 36:
     end
     end


    -- Формирование шаблона
     local result = {}
     local result = {}
     for _, ids in pairs(spriteGroups) do
     for _, ids in pairs(spriteGroups) do
         if #ids > 1 then -- Только если есть повторяющиеся спрайты
         if #ids > 1 then
             local idLinks = {}
             local idLinks = {}
             for _, id in ipairs(ids) do
             for _, id in ipairs(ids) do
Строка 59: Строка 51:
end
end


-- Функция генерации текста для одного элемента JSON с выбором параметра
-- Генерация текста для элемента JSON
local function generateTemplate(entry, param)
local function generateTemplate(entry, param)
     if not entry.id or not entry.Sprite or not entry.Sprite.sprite then
     if not entry.id or not entry.Sprite or not entry.Sprite.sprite then
Строка 65: Строка 57:
     end
     end


    local result = ""
    -- Проверка выбранного параметра
     if param == "image" then
     if param == "image" then
         result = result .. mw.getCurrentFrame():preprocess("{{Entity Sprite/Imege|" .. entry.id .. "|" .. entry.Sprite.sprite .. "}}")
         return mw.getCurrentFrame():preprocess("{{Entity Sprite/Imege|" .. entry.id .. "|" .. entry.Sprite.sprite .. "}}")
     elseif param == "license" then
     elseif param == "license" then
         result = result .. mw.getCurrentFrame():preprocess("{{Entity Sprite/License|" .. entry.id .. "|" .. entry.Sprite.sprite .. "}}")
         return mw.getCurrentFrame():preprocess("{{Entity Sprite/License|" .. entry.id .. "|" .. entry.Sprite.sprite .. "}}")
     end
     end


     return result
     return nil
end
end


-- Основная функция модуля
-- Основная функция модуля
function p.main(frame)
function p.main(frame)
     local param = frame.args[1]
     local param = frame.args[1]
 
    -- Проверка на допустимость параметра
     if param ~= "image" and param ~= "license" and param ~= "repeat" then
     if param ~= "image" and param ~= "license" and param ~= "repeat" then
         return 'Ошибка: Неверный параметр. Используйте "image", "license" или "repeat".'
         return 'Ошибка: Неверный параметр. Используйте "image", "license" или "repeat".'
     end
     end


    -- Загрузка данных из JSON-файла
     local data = loadData('User:IanComradeBot/prototypes/entity sprite.json')
     local data = loadData('User:IanComradeBot/prototypes/entity sprite.json')
     if not data or type(data) ~= 'table' then
     if not data or type(data) ~= 'table' then
Строка 92: Строка 78:
     end
     end


    -- Генерация результата
     if param == "repeat" then
     if param == "repeat" then
         return generateRepeatTemplate(data)
         return generateRepeatTemplate(data)