bugfix20250107.1
全站通知:

模块:成就印迹

来自卡拉彼丘WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:成就印迹/doc创建

local p = {}

local achievementData = mw.loadData("Module:成就印迹/AchievementData")
local roleAchievementData = mw.loadData("Module:成就印迹/RoleAchievementData")

------成就页面
p["成就页面"] = function (frame)
	local achievementType = frame.args[1]
	local achievementLevel = tonumber(frame.args[2])
	local tempList = {}

	for key, achievement in pairs(achievementData) do
		if achievementType == achievement.type and achievementLevel == achievement.level then
			table.insert(tempList, { key = key, data = achievement })
		end
	end

	table.sort(tempList, function (a, b)
		return a.key < b.key
	end)

	local resultList = {}
	for _, item in ipairs(tempList) do
		local achievement = item.data
		local html = achievement.file.."|'''<big>"..achievement.name.."</big>'''<br /><small>"
			..achievement.desc.."</small><br /><br />'''获得方式:'''"..achievement.get
		table.insert(resultList, tostring(html))
	end
	local result = table.concat(resultList, "\n")
	return frame:preprocess('\n<gallery mode="packed">\n'..result..'\n</gallery>')
end

p["成就页面光辉事迹"] = function (frame)
	local resultList = {}
	for key, achievement in pairs(achievementData) do
		if achievement.type == "光辉事迹" then
			local html = achievement.file.."|'''<big>"..achievement.name.."</big>'''<br /><small>"
				..achievement.desc.."</small><br /><br />'''获得方式:'''"..achievement.get
			table.insert(resultList, tostring(html))
		end
	end
	local result = table.concat(resultList, "\n")
	return frame:preprocess('<gallery mode="packed">\n'..result..'\n</gallery>')
end



------印迹页面、角色印迹模板
function p.main(frame)
	local roleAchievement = frame.args[1]
	local achievementLevel = tonumber(frame.args[2])
	local tempList = {}

	for key, achievement in pairs(roleAchievementData) do
		if roleAchievement == achievement.role and achievementLevel == achievement.level then
			table.insert(tempList, { key = key, data = achievement })
		end
	end

	table.sort(tempList, function (a, b)
		return a.key < b.key
	end)

	local resultList = {}
	for _, item in ipairs(tempList) do
		local AchievementData = item.data
		local html = AchievementData.file.."|'''<big>"..AchievementData.name.."</big>'''<br /><small>"
			..AchievementData.desc.."</small><br /><br />'''获得方式:'''"..AchievementData.get
		table.insert(resultList, tostring(html))
	end
	local result = table.concat(resultList, "\n")
	return frame:preprocess('\n<gallery mode="packed">\n'..result..'\n</gallery>')
end

------勋章页面印迹勋章部分
function p.main2(frame)
	local roleAchievement = frame.args[1]
	local groupedAchievements = {}

	-- 遍历数据,将同一角色的印迹按组分类,并存储每组的最高等级
	for key, achievement in pairs(roleAchievementData) do
		if roleAchievement == achievement.role then
			-- 获取组的基础ID,通过截取key的前几位实现(例如: 33500014 -> 3350001)
			local baseKey = string.sub(key, 1, 7)
			groupedAchievements[baseKey] = groupedAchievements[baseKey] or {}

			-- 比较并存储每组中的最高等级印迹
			if not groupedAchievements[baseKey].maxLevel or achievement.level > groupedAchievements[baseKey].maxLevel then
				groupedAchievements[baseKey].maxLevel = achievement.level
				groupedAchievements[baseKey].data = achievement
			end
		end
	end

	-- 生成最终输出结果
	local resultList = {}
	for _, groupData in pairs(groupedAchievements) do
		local achievement = groupData.data
		local html = achievement.file.."|'''<big>"..achievement.name.."</big>'''"
		table.insert(resultList, tostring(html))
	end

	local result = table.concat(resultList, "\n")
	return frame:preprocess('\n<gallery mode="packed">\n'..result..'\n</gallery>')
end

return p