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

Материал из Space Station 14 Вики
мНет описания правки
Нет описания правки
Строка 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 return nil end
     if not page then
        return nil
    end
     local content = page:getContent()
     local content = page:getContent()
     if not content then return nil end
     if not content then
        return nil
    end
     return mw.text.jsonDecode(content)
     return mw.text.jsonDecode(content)
end
end


-- Функция генерации текста для одного элемента JSON
-- Функция генерации текста для одного элемента JSON
local function generateTemplate(entry, frame)
local function generateTemplate(entry)
     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
         return nil
         return nil
     end
     end
      
      
     -- Используем preprocess, чтобы активировать шаблон для имени
     local result = ""
     local nameTemplate = frame:preprocess(string.format("{{#invoke:Entity Lookup|getname|%s}}", entry.id))
 
   
     result = result .. mw.getCurrentFrame():preprocess("{{Entity Sprite|entry.id|entry.Sprite.sprite}}")
    -- Генерируем строку шаблона с минимизированными тегами
 
    return string.format(
     return result
        [[
<div class="e-s_i">%s</div><div class="e-s_s">Id = %s<br>Путь = Resources/Textures/%s<br></div><div class="copy-icon">📋</div><br>
]],
        nameTemplate, entry.id, entry.Sprite.sprite
     )
end
end


Строка 36: Строка 35:
     end
     end
      
      
     -- Используем конкатенацию без временного хранения всех данных в массиве
     -- Создание результата
     local result = ""
     local result = {}
    local append = function(s) result = result .. s end
 
    -- Проходим по всем элементам и генерируем строки
     for _, entry in ipairs(data) do
     for _, entry in ipairs(data) do
         local template = generateTemplate(entry, frame)
         local template = generateTemplate(entry)
         if template then
         if template then
             append(template) -- Генерируем и добавляем строку
             table.insert(result, template)
         end
         end
     end
     end
      
      
     return result -- Возвращаем сгенерированный результат
    -- Возврат собранного результата
     return table.concat(result)
end
end


return p
return p

Версия от 19:32, 20 января 2025

Для документации этого модуля может быть создана страница Модуль:Entity Sprite/doc

local p = {}

-- Загрузка данных
local function loadData(filePath)
    local page = mw.title.new(filePath)
    if not page then
        return nil
    end
    local content = page:getContent()
    if not content then
        return nil
    end
    return mw.text.jsonDecode(content)
end

-- Функция генерации текста для одного элемента JSON
local function generateTemplate(entry)
    if not entry.id or not entry.Sprite or not entry.Sprite.sprite then
        return nil
    end
    
    local result = ""

    result = result .. mw.getCurrentFrame():preprocess("{{Entity Sprite|entry.id|entry.Sprite.sprite}}")

    return result
end

-- Основная функция модуля
function p.main(frame)
    -- Загрузка данных из JSON-файла
    local data = loadData('User:IanComradeBot/prototypes/entity sprite.json')
    if not data or type(data) ~= 'table' then
        return 'Ошибка: Невозможно загрузить данные из JSON.'
    end
    
    -- Создание результата
    local result = {}
    for _, entry in ipairs(data) do
        local template = generateTemplate(entry)
        if template then
            table.insert(result, template)
        end
    end
    
    -- Возврат собранного результата
    return table.concat(result)
end

return p