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

Материал из SiberiaWiki
Нет описания правки
Нет описания правки
 
(не показано 10 промежуточных версий этого же участника)
Строка 90: Строка 90:
     end
     end
      
      
    -- Возвращаем отсортированный список в виде строки
     return sortedList
     return sortedList
      
      
Строка 98: Строка 97:
-- Отдавание листа в виде перечисления через запятую
-- Отдавание листа в виде перечисления через запятую
function p.SkillsListConcat(list)
function p.SkillsListConcat(list)
return table.concat(listist, ", ")  
return table.concat(list, ", ")  
end
end


function p.getSkillsListConcat(list)
function p.getHoweredSkills(frame)
local row = p.getSkillsList(frame)
local list = p.getSkillsList(frame)
    local skills = {}
local skillsData, err = p.decodeJson(skillsJson)
     for token in inputString:gmatch("[^,%s]+") do
     if not skillsData then
        table.insert(result, token)
        return "Ошибка: " .. err
     end
     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