Модуль:Prototypes/Механика/Доступ: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
(не показано 9 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
-- Загрузка данных | |||
local accessData = mw.loadData("Модуль:IanComradeBot/prototypes/AccessReader/access.json/data") | |||
local p = {} | local p = {} | ||
Строка 5: | Строка 8: | ||
["Command"] = "Командование", | ["Command"] = "Командование", | ||
["Captain"] = "Капитан", | ["Captain"] = "Капитан", | ||
[" | ["HeadOfPersonnel"] = "Глава персонала", | ||
["Cryogenics"] = "Криогеника", | ["Cryogenics"] = "Криогеника", | ||
[" | ["HeadOfSecurity"] = "Глава службы безопасности", | ||
["Security"] = "Служба безопасности", | ["Security"] = "Служба безопасности", | ||
["Armory"] = "Оружейная", | ["Armory"] = "Оружейная", | ||
["Brig"] = "Бриг", | ["Brig"] = "Бриг", | ||
["Detective"] = "Детектив", | ["Detective"] = "Детектив", | ||
[" | ["ChiefEngineer"] = "Старший инженер", | ||
["Engineering"] = "Инженерный", | ["Engineering"] = "Инженерный", | ||
["Atmospherics"] = "Атмосферный", | ["Atmospherics"] = "Атмосферный", | ||
[" | ["ResearchDirector"] = "Научный руководитель", | ||
["Research"] = "Научный", | ["Research"] = "Научный", | ||
[" | ["ChiefMedicalOfficer"] = "Главный врач", | ||
["Medical"] = "Медицинский", | ["Medical"] = "Медицинский", | ||
["Chemistry"] = "Химия", | ["Chemistry"] = "Химия", | ||
Строка 34: | Строка 37: | ||
["Maintenance"] = "Техобслуживание", | ["Maintenance"] = "Техобслуживание", | ||
["External"] = "Внешний", | ["External"] = "Внешний", | ||
[" | ["NuclearOperative"] = "Ядерный оперативник", | ||
[" | ["SyndicateAgent"] = "Агент Синдиката", | ||
[" | ["CentralCommand"] = "Центральное командование", | ||
["Wizard"] = "Волшебник" | ["Wizard"] = "Волшебник", | ||
["AllAccess"] = "Полный доступ" | |||
} | } | ||
-- Основная функция модуля | -- Основная функция модуля | ||
function p.main(frame) | function p.main(frame) | ||
local | 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 | ||
if not accessData then | if not accessData then | ||
return "Ошибка: не удалось загрузить данные доступа" | return "Ошибка: не удалось загрузить данные доступа" | ||
end | end | ||
local success, jsonData = pcall( | 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 | if item.id == id and item.AccessReader then | ||
local result = {} | local result = {} | ||
for _, accessList in ipairs(item.AccessReader.access) do | -- Если присутствует 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 | ||
end | end | ||
return table.concat(result, ", ") | if #result > 0 then | ||
return table.concat(result, ", ") | |||
end | |||
end | end | ||
end | end | ||
return " | 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