Модуль:Skills Lookup: различия между версиями
Материал из SiberiaWiki
M 9SCO (обсуждение | вклад) Нет описания правки |
M 9SCO (обсуждение | вклад) Нет описания правки |
||
(не показано 16 промежуточных версий этого же участника) | |||
Строка 3: | Строка 3: | ||
local skillsJson = mw.title.new("User:IanComradeBot/skills.json", "User"):getContent() | local skillsJson = mw.title.new("User:IanComradeBot/skills.json", "User"):getContent() | ||
local rolesToSkillsJson = mw.title.new("User:IanComradeBot/roles to skills.json", "User"):getContent() | local rolesToSkillsJson = mw.title.new("User:IanComradeBot/roles to skills.json", "User"):getContent() | ||
-- Функция для декодирования JSON-строки в таблицу Lua | -- Функция для декодирования JSON-строки в таблицу Lua | ||
Строка 65: | Строка 67: | ||
end | end | ||
local skillsList = {} | local skillsList = { | ||
["hard"] = {}, | |||
["medium"] = {}, | |||
["easy"] = {}, | |||
["base"] = {} | |||
} | |||
for skillName, value in pairs(role.skills) do | for skillName, value in pairs(role.skills) do | ||
if not hasKey(skillsData, skillName) then | if not hasKey(skillsData, skillName) then | ||
return "Навык не найден\n" .. skillName | return "Навык не найден\n" .. skillName | ||
elseif value then | elseif value then | ||
local skill_type = skillsData[skillName]["type"] | |||
table.insert(skillsList[skill_type], skillName) | |||
end | |||
end | |||
-- Сортируем элементы по уровню сложности | |||
local sortedList = {} | |||
for _, category in ipairs({"hard", "medium", "easy", "base"}) do | |||
for _, itemName in ipairs(skillsList[category]) do | |||
table.insert(sortedList, itemName) | |||
end | |||
end | end | ||
return sortedList | |||
end | end | ||
-- Отдавание листа в виде перечисления через запятую | |||
function p.SkillsListConcat(list) | |||
return table.concat(list, ", ") | |||
end | |||
function p.getHoweredSkills(frame) | |||
local list = p.getSkillsList(frame) | |||
local skillsData, err = p.decodeJson(skillsJson) | |||
if not skillsData then | |||
return "Ошибка: " .. err | |||
end | |||
result = {} | |||
for _, skill in ipairs(list) do | |||
skillData = skillsData[skill] | |||
imgs = "" | |||
for _, img in ipairs(skillData['img']) do | |||
imgs = imgs .. "[[file:".. img .. "]]" | |||
end | |||
row = "<span class=\"tooltip\" style=\"cursor:help;\"><span style=\"color:#EFEBD8\">''" .. skill.. "''</span>" .. | |||
"<span class=\"tooltiptext\" style=\"color:white;font-size:initial\">".. | |||
"<span style=\"display: block;text-align: center;\">".. imgs .. skill.. "</span>".. | |||
"<span style=\"display: block;text-align: left;line-height: 15px;font-size:85%;\"><br>"..skillData["desc"] .. "<br>".. | |||
"</span></span></span>" | |||
table.insert(result, row) | |||
end | |||
return p.SkillsListConcat(result) | |||
end | |||
return p | return p |
Текущая версия от 14:21, 24 июня 2024
Для документации этого модуля может быть создана страница Модуль:Skills Lookup/doc
local p = {}
local skillsJson = mw.title.new("User:IanComradeBot/skills.json", "User"):getContent()
local rolesToSkillsJson = mw.title.new("User:IanComradeBot/roles to skills.json", "User"):getContent()
-- Функция для декодирования JSON-строки в таблицу Lua
function p.decodeJson(jsonString)
local success, result = pcall(function() return mw.text.jsonDecode(jsonString) end)
if success then
return result
else
return nil, "Ошибка декодирования JSON: " .. result
end
end
local function hasKey(jsonData, key)
if type(jsonData) == "table" then
for k, _ in pairs(jsonData) do
if k == key then
return true
end
end
end
return false
end
-- Функция для получения списка навыков со значением true для указанной роли
function p.getSkillsList(frame)
local args = frame.args
local roleName = args[1]
if not skillsJson then
return "Ошибка: не удалось загрузить skills.json"
end
if not rolesToSkillsJson then
return "Ошибка: не удалось загрузить roles to skills.json"
end
local rolesData, err = p.decodeJson(rolesToSkillsJson)
if not rolesData then
return "Ошибка: " .. err
end
local skillsData, err = p.decodeJson(skillsJson)
if not skillsData then
return "Ошибка: " .. err
end
-- Отладочный вывод для проверки загруженных данных
local debugOutput = "<br>"
for _, r in ipairs(rolesData) do
debugOutput = debugOutput .. "<br>\"" .. r.name .. "\" не равна \"".. roleName .. "\"<br>"
end
local role
for _, r in ipairs(rolesData) do
if r.name == roleName then
role = r
break
end
end
if not role then
return "Роль не найдена\n" .. debugOutput
end
local skillsList = {
["hard"] = {},
["medium"] = {},
["easy"] = {},
["base"] = {}
}
for skillName, value in pairs(role.skills) do
if not hasKey(skillsData, skillName) then
return "Навык не найден\n" .. skillName
elseif value then
local skill_type = skillsData[skillName]["type"]
table.insert(skillsList[skill_type], skillName)
end
end
-- Сортируем элементы по уровню сложности
local sortedList = {}
for _, category in ipairs({"hard", "medium", "easy", "base"}) do
for _, itemName in ipairs(skillsList[category]) do
table.insert(sortedList, itemName)
end
end
return sortedList
end
-- Отдавание листа в виде перечисления через запятую
function p.SkillsListConcat(list)
return table.concat(list, ", ")
end
function p.getHoweredSkills(frame)
local list = p.getSkillsList(frame)
local skillsData, err = p.decodeJson(skillsJson)
if not skillsData then
return "Ошибка: " .. err
end
result = {}
for _, skill in ipairs(list) do
skillData = skillsData[skill]
imgs = ""
for _, img in ipairs(skillData['img']) do
imgs = imgs .. "[[file:".. img .. "]]"
end
row = "<span class=\"tooltip\" style=\"cursor:help;\"><span style=\"color:#EFEBD8\">''" .. skill.. "''</span>" ..
"<span class=\"tooltiptext\" style=\"color:white;font-size:initial\">"..
"<span style=\"display: block;text-align: center;\">".. imgs .. skill.. "</span>"..
"<span style=\"display: block;text-align: left;line-height: 15px;font-size:85%;\"><br>"..skillData["desc"] .. "<br>"..
"</span></span></span>"
table.insert(result, row)
end
return p.SkillsListConcat(result)
end
return p