Модуль:Prototypes/Механика/Доступ: различия между версиями

Материал из Space Station 14 Вики
мНет описания правки
мНет описания правки
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
-- Загрузка данных
local accessData = mw.loadData("Модуль:IanComradeBot/prototypes/AccessReader/access.json/data")
local p = {}
local p = {}


Строка 5: Строка 8:
     ["Command"] = "Командование",
     ["Command"] = "Командование",
     ["Captain"] = "Капитан",
     ["Captain"] = "Капитан",
     ["Head of Personnel"] = "Глава персонала",
     ["HeadOfPersonnel"] = "Глава персонала",
     ["Cryogenics"] = "Криогеника",
     ["Cryogenics"] = "Криогеника",
     ["Head of Security"] = "Глава службы безопасности",
     ["HeadOfSecurity"] = "Глава службы безопасности",
     ["Security"] = "Служба безопасности",
     ["Security"] = "Служба безопасности",
     ["Armory"] = "Оружейная",
     ["Armory"] = "Оружейная",
     ["Brig"] = "Бриг",
     ["Brig"] = "Бриг",
     ["Detective"] = "Детектив",
     ["Detective"] = "Детектив",
     ["Chief Engineer"] = "Старший инженер",
     ["ChiefEngineer"] = "Старший инженер",
     ["Engineering"] = "Инженерный",
     ["Engineering"] = "Инженерный",
     ["Atmospherics"] = "Атмосферный",
     ["Atmospherics"] = "Атмосферный",
     ["Research Director"] = "Научный руководитель",
     ["ResearchDirector"] = "Научный руководитель",
     ["Research"] = "Научный",
     ["Research"] = "Научный",
     ["Chief Medical Officer"] = "Главный врач",
     ["ChiefMedicalOfficer"] = "Главный врач",
     ["Medical"] = "Медицинский",
     ["Medical"] = "Медицинский",
     ["Chemistry"] = "Химия",
     ["Chemistry"] = "Химия",
Строка 34: Строка 37:
     ["Maintenance"] = "Техобслуживание",
     ["Maintenance"] = "Техобслуживание",
     ["External"] = "Внешний",
     ["External"] = "Внешний",
     ["Nuclear Operative"] = "Ядерный оперативник",
     ["NuclearOperative"] = "Ядерный оперативник",
     ["Syndicate Agent"] = "Агент Синдиката",
     ["SyndicateAgent"] = "Агент Синдиката",
     ["Central Command"] = "Центральное командование",
     ["CentralCommand"] = "Центральное командование",
     ["Wizard"] = "Волшебник"
     ["Wizard"] = "Волшебник",
    ["AllAccess"] = "Полный доступ"
}
}


-- Основная функция модуля
-- Основная функция модуля
function p.main(frame)
function p.main(frame)
     local id = frame.args[1]
     local param1 = frame.args[1]
   
    -- Режим перевода
    if param1 == "translate" then
        local key = frame.args[2]
        if not key then
            return "Ошибка: отсутствует ключ для перевода"
        end
        return translations[key] or key
    end
 
    local id = param1
     if not id then
     if not id then
         return "Нет данных для обработки"
         return "Нет данных для обработки"
     end
     end
      
      
    -- Загрузка данные доступа
    local accessData = mw.title.new("User:IanComradeBot/prototypes/AccessReader/access.json"):getContent()
     if not accessData then
     if not accessData then
         return "Ошибка: не удалось загрузить данные доступа"
         return "Ошибка: не удалось загрузить данные доступа"
     end
     end
      
      
     local success, jsonData = pcall(mw.text.jsonDecode, accessData)
     local success, jsonData = pcall(function() return accessData end)
     if not success or type(jsonData) ~= "table" then
     if not success or type(jsonData) ~= "table" then
         return "Ошибка: некорректный формат данных доступа"
         return "Ошибка: некорректный формат данных доступа"
     end
     end
   
 
     for _, item in ipairs(jsonData) do
     for _, item in ipairs(jsonData) do
         if item.id == id and item.AccessReader and item.AccessReader.access then
         if item.id == id and item.AccessReader then
             local result = {}
             local result = {}
             for _, accessList in ipairs(item.AccessReader.access) do
             -- Если присутствует accessGroups, обрабатываем их
                for _, access in ipairs(accessList) do
            if item.AccessReader.accessGroups then
                    table.insert(result, translations[access] or access)
                for _, group in ipairs(item.AccessReader.accessGroups) do
                    for _, access in ipairs(group) do
                        table.insert(result, translations[access] or access)
                    end
                end
            -- Если accessGroups отсутствует, используем access
            elseif item.AccessReader.access then
                for _, accessList in ipairs(item.AccessReader.access) do
                    for _, access in ipairs(accessList) do
                        table.insert(result, translations[access] or access)
                    end
                 end
                 end
             end
             end
             return table.concat(result, ", ") .. "."
             if #result > 0 then
                return table.concat(result, ", ")
            end
         end
         end
     end
     end
      
      
     return "Ошибка: ID не найден в данных доступа"
     return ""
end
end


return p
return p

Текущая версия от 02:52, 18 февраля 2025

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

-- Загрузка данных
local accessData = mw.loadData("Модуль:IanComradeBot/prototypes/AccessReader/access.json/data")

local p = {}

-- Таблица для перевода слов
local translations = {
    ["Command"] = "Командование",
    ["Captain"] = "Капитан",
    ["HeadOfPersonnel"] = "Глава персонала",
    ["Cryogenics"] = "Криогеника",
    ["HeadOfSecurity"] = "Глава службы безопасности",
    ["Security"] = "Служба безопасности",
    ["Armory"] = "Оружейная",
    ["Brig"] = "Бриг",
    ["Detective"] = "Детектив",
    ["ChiefEngineer"] = "Старший инженер",
    ["Engineering"] = "Инженерный",
    ["Atmospherics"] = "Атмосферный",
    ["ResearchDirector"] = "Научный руководитель",
    ["Research"] = "Научный",
    ["ChiefMedicalOfficer"] = "Главный врач",
    ["Medical"] = "Медицинский",
    ["Chemistry"] = "Химия",
    ["Paramedic"] = "Парамедик",
    ["Quartermaster"] = "Квартирмейстер",
    ["Cargo"] = "Снабжение",
    ["Salvage"] = "Утилизаторский",
    ["Bar"] = "Бар",
    ["Kitchen"] = "Кухня",
    ["Hydroponics"] = "Гидропоника",
    ["Service"] = "Сервис",
    ["Janitor"] = "Уборщик",
    ["Theatre"] = "Театр",
    ["Chapel"] = "Церковь",
    ["Lawyer"] = "Юридический",
    ["Maintenance"] = "Техобслуживание",
    ["External"] = "Внешний",
    ["NuclearOperative"] = "Ядерный оперативник",
    ["SyndicateAgent"] = "Агент Синдиката",
    ["CentralCommand"] = "Центральное командование",
    ["Wizard"] = "Волшебник",
    ["AllAccess"] = "Полный доступ"
}

-- Основная функция модуля
function p.main(frame)
    local param1 = frame.args[1]
    
    -- Режим перевода
    if param1 == "translate" then
        local key = frame.args[2]
        if not key then
            return "Ошибка: отсутствует ключ для перевода"
        end
        return translations[key] or key
    end

    local id = param1
    if not id then
        return "Нет данных для обработки"
    end
    
    if not accessData then
        return "Ошибка: не удалось загрузить данные доступа"
    end
    
    local success, jsonData = pcall(function() return accessData end)
    if not success or type(jsonData) ~= "table" then
        return "Ошибка: некорректный формат данных доступа"
    end

    for _, item in ipairs(jsonData) do
        if item.id == id and item.AccessReader then
            local result = {}
            -- Если присутствует accessGroups, обрабатываем их
            if item.AccessReader.accessGroups then
                for _, group in ipairs(item.AccessReader.accessGroups) do
                    for _, access in ipairs(group) do
                        table.insert(result, translations[access] or access)
                    end
                end
            -- Если accessGroups отсутствует, используем access
            elseif item.AccessReader.access then
                for _, accessList in ipairs(item.AccessReader.access) do
                    for _, access in ipairs(accessList) do
                        table.insert(result, translations[access] or access)
                    end
                end
            end
            if #result > 0 then
                return table.concat(result, ", ")
            end
        end
    end
    
    return ""
end

return p