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

Материал из SiberiaWiki
Нет описания правки
Нет описания правки
 
(не показано 25 промежуточных версий этого же участника)
Строка 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
Строка 12: Строка 14:
         return nil, "Ошибка декодирования JSON: " .. result
         return nil, "Ошибка декодирования JSON: " .. result
     end
     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
end


Строка 29: Строка 43:
         return "Ошибка: " .. err
         return "Ошибка: " .. err
     end
     end
 
    local skillsData, err = p.decodeJson(skillsJson)
    if not skillsData then
        return "Ошибка: " .. err
    end
   
   
     -- Отладочный вывод для проверки загруженных данных
     -- Отладочный вывод для проверки загруженных данных
     local debugOutput = "Загруженные роли:<br>"
     local debugOutput = "<br>"
     for _, r in ipairs(rolesData) do
     for _, r in ipairs(rolesData) do
         debugOutput = debugOutput .. "<br>\"" .. r.name .. "\"".. roleName .. "<br>"
         debugOutput = debugOutput .. "<br>\"" .. r.name .. "\" не равна \"".. roleName .. "\"<br>"
     end
     end


Строка 48: Строка 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 value then
    if not hasKey(skillsData, skillName) then
            table.insert(skillsList, skillName)
    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
     end
     end
   
    return sortedList
   
end
-- Отдавание листа в виде перечисления через запятую
function p.SkillsListConcat(list)
return table.concat(list, ", ")
end


     return table.concat(skillsList, ", ")
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
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