bugfix20250107.1
全站通知:

模块:图标

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

此模块的文档可以在模块:图标/doc创建

local p = {}

-- 通用函数:处理道具图标样式
local function icon_style(itemName, itemFile, itemQuality, size, imgSize)
	local qualityColor = {
		["私服"] = "#F78653",
		["传说"] = "#F85555",
		["完美"] = "#FFC555",
		["卓越"] = "#F285FF",
		["精致"] = "#60A3F7",
		["初始"] = "#ECECEC",
	}

	local html = mw.html.create()
	local borderColor = qualityColor[itemQuality]
	local iconHTML = html
		:tag('span'):addClass('items-icon')
		:tag('span'):addClass('items-icon-img radius10'):cssText("border-color:"..borderColor):wikitext("[[file:"..
			itemFile.."|"..imgSize.."|class=radius10|link=]]"):done()
		:tag('span'):addClass('items-icon-text'):cssText("font-size:"..size):wikitext(itemName):done()
		:done()
	return tostring(iconHTML)
end


function p.main(frame)
	local itemType = frame.args["类型"]
	local itemName = frame.args[1]
	local roleName = frame.args["role"]
	local size = frame.args["size"]
	local imgSize = frame.args["imgSize"]
	local itemIcon = ""

	local itemFunctions = {
		["时装"] = p["角色时装"],
		["外观"] = p["武器外观"],
		["礼物"] = p["礼物"],
		["喷漆"] = p["喷漆"],
		["基板"] = p["基板"],
		["封装"] = p["封装"],
		["勋章"] = p["勋章"],
		["表情"] = p["表情"],
		["语音"] = p["语音"],
		["气泡"] = p["聊天气泡"],
		["头套"] = p["头套"],
		["卡牌"] = p["生化卡牌"],
		[""] = p["功能道具"],
	}

	if itemFunctions[itemType] then
		itemIcon = itemFunctions[itemType](itemName, size, imgSize, roleName)
	else
		itemIcon = p["其它"](frame.args[1], frame.args["file"], frame.args["quality"], size, imgSize)
	end
	return itemIcon
end

p["角色时装"] = function (itemName, size, imgSize, roleName)
	local data = mw.loadData("模块:角色/SkinData")

	if roleName and roleName ~= "" then
		-- 只检查指定角色下的时装
		local roleData = data[roleName]
		if roleData then
			local roleSkin = roleData[itemName]
			if roleSkin then
				return icon_style(
					"角色时装:"..itemName,
					"角色时装图鉴_"..roleSkin['id']..".png",
					roleSkin['稀有度'],
					size,
					imgSize
				)
			end
		end
	else
		-- 未指定角色时,需要遍历所有角色
		for _, roleData in pairs(data) do
			local roleSkin = roleData[itemName]
			if roleSkin then
				return icon_style(
					"角色时装:"..itemName,
					"角色时装图鉴_"..roleSkin['id']..".png",
					roleSkin['稀有度'],
					size,
					imgSize
				)
			end
		end
	end

	return "时装名称错误或无数据"
end


local function splitKey(key)
	local parts = {}
	for part in key:gmatch("[^-]+") do
		table.insert(parts, part)
	end
	return parts
end

p["武器外观"] = function (itemName, size, imgSize)
	local skinData = mw.loadData("模块:武器/SkinData")
    local otherSkinData = mw.loadData("模块:武器/OtherSkinData")
    
    local skinList = {}
	for k, v in pairs(skinData or {}) do
		skinList[k] = v
	end
	for k, v in pairs(otherSkinData or {}) do
		skinList[k] = v
	end

	local weaponSkinParts = mw.text.split(itemName, "-")
	local weaponName = weaponSkinParts[1]
	local skinName = weaponSkinParts[2]
	local weaponData = skinList[weaponName]
		assert(weaponData, "武器名称错误: "..(weaponName or "未知"))
	local skinData = weaponData[skinName]
		assert(skinData, "外观名称错误: "..(skinName or "未知"))

	local weaponSkinIcon = icon_style("武器外观:"..weaponName.."-"..skinName,
		"武器外观图鉴_"..skinData['id']..".png",
		skinData['稀有度'],
		size,
		imgSize)
	return weaponSkinIcon
end


p["礼物"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:角色礼物/Data")
	for _, gift in pairs(data) do
		if itemName == gift.name then
			local giftIcon = icon_style(gift.name, gift.file, gift.quality, size, imgSize)
			return giftIcon
		end
	end
	return "礼物名称错误或无数据"
end


p["喷漆"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/DecalData")
	for _, decal in pairs(data) do
		if decal.name == itemName then
			local decalIcon = icon_style("喷漆:"..decal.name, decal.file, decal.quality, size, imgSize)
			return decalIcon
		end
	end
	return "喷漆名称错误或无数据"
end


p["基板"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/IDCardData")
	for _, idCard in pairs(data) do
		if idCard.name == itemName then
			local idCardIcon = icon_style("基板:"..idCard.name, idCard.file, idCard.quality, size, imgSize)
			return idCardIcon
		end
	end
	return "基板名称错误或无数据"
end


p["封装"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/FrameData")
	for _, frame in pairs(data) do
		if frame.name == itemName then
			local frameIcon = icon_style("封装:"..frame.name, frame.file, frame.quality, size, imgSize)
			return frameIcon
		end
	end
	return "封装名称错误或无数据"
end


p["勋章"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/BadgeData")
	for _, badge in pairs(data) do
		if badge.name == itemName then
			local badgeIcon = icon_style("勋章:"..badge.name, badge.file, badge.quality, size, imgSize)
			return badgeIcon
		end
	end
	return "勋章名称错误或无数据"
end


p["表情"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:角色表情/Data")
	for _, emote in pairs(data) do
		if emote.name == itemName then
			local emoteIcon = icon_style("表情:"..emote.name, emote.file, emote.quality, size, imgSize)
			return emoteIcon
		end
	end
	return "表情名称错误或无数据"
end


p["语音"] = function (itemName, size, imgSize)
	local voiceFile = "图标-"..itemName.."语音.png"
	local voiceIcon = icon_style(itemName.."语音", voiceFile, "精致", size, imgSize)
	return voiceIcon
end


p["聊天气泡"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/ChatBubblesData")
	for _, chatBubble in pairs(data) do
		if chatBubble.name == itemName then
			local chatBubbleIcon = icon_style("聊天气泡:"..chatBubble.name, chatBubble.file, chatBubble.quality, size, imgSize)
			return chatBubbleIcon
		end
	end
	return "气泡名称错误或无数据"
end


p["头套"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/MascotHeadData")
	for _, mascotHead in pairs(data) do
		if mascotHead.name == itemName then
			local mascotHeadIcon = icon_style("头套:"..mascotHead.name, mascotHead.file, mascotHead.quality, size, imgSize)
			return mascotHeadIcon
		end
	end
	return "头套名称错误或无数据"
end


p["生化卡牌"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:生化卡牌/Data")
	for _, card in pairs(data) do
		if card.name == itemName then
			local cardIcon = icon_style("卡牌:"..card.name, card.file, card.quality, size, imgSize)
			return cardIcon
		end
	end
	return "卡牌名称错误或无数据"
end

p["功能道具"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:功能道具/Data")
	for _, items in pairs(data) do
		if items.name == itemName then
			local itemsIcon = icon_style(items.name, items.file, items.quality, size, imgSize)
			return itemsIcon
		end
	end
	return "道具名称错误或无数据"
end


p["其它"] = function (Name, File, Quality, size, imgSize)
	local itemIcon = icon_style(Name, File, Quality, size, imgSize)
	return itemIcon
end

return p