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

Материал из SiberiaWiki
Нет описания правки
Нет описания правки
Строка 65: Строка 65:
     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
     if skillsData[skillName]["type"] == "hard" then
     local skill_type = skillsData[skillName]["type"]
    colored_skill = "<span style=\"color: #911f27\">" .. skillName .. "</span>"
     table.insert(skillsList[skill_type], colored_skill)
    elseif skillsData[skillName]["type"] == "medium" then
    colored_skill = "<span style=\"color: #a35709\">" .. skillName .. "</span>"
    elseif skillsData[skillName]["type"] == "easy" then
    colored_skill = "<span style=\"color: #2f5d42\">" .. skillName .. "</span>"
    else
    colored_skill = skillName
    end
     table.insert(skillsList, colored_skill)
     end
     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
table.sort(skillsList)
   
     return table.concat(skillsList, ", ")
    -- Возвращаем отсортированный список в виде строки
     return table.concat(sortedList, ", ")  
   
 
end
end


return p
return p

Версия от 13:00, 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], colored_skill)
    	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 table.concat(sortedList, ", ") 
    

end

return p