bugfix20250107.1

全站通知:

模块:图标

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

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

local p = {}

local strinova = require("模块:卡拉彼丘")
local qualityName = strinova.qualityNumToName
local qualityToColor = strinova.qualityToColor
local qualityColor = strinova.qualityNameToColor
local format = string.format

-- 通用函数:处理道具图标样式
local function icon_style(itemName, itemFile, itemQuality, size, imgSize)
	local html = mw.html.create()
	local borderColor = qualityColor[itemQuality] or qualityToColor[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


-- 通用函数:数据查找
local function find_item_in_data(data, itemName)
    for _, item in pairs(data) do
        if item.name == itemName then
            return item
        end
    end
    return nil
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["生化卡牌"],
		["互动"] = 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


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")
	local item = find_item_in_data(data, itemName)
	if item then
        local itemIcon = icon_style("礼物:"..item.name, item.file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


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


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


p["封装"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/FrameData")
	local item = find_item_in_data(data, itemName)
	if item then
        local itemIcon = icon_style("封装:"..item.name, item.file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


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


p["表情"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:角色表情/Data")
	local item = find_item_in_data(data, itemName)
	if item then
        local itemIcon = icon_style("表情:"..item.name, item.file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["语音"] = function (itemName, size, imgSize)
	local id = {
		['米雪儿·李'] = 22101001,
		['米雪儿'] = 22101001,
		['信'] = 22108001,
		['心夏'] = 22124001,
		['伊薇特'] = 22131001,
		['芙拉薇娅'] = 22115001,
		['忧雾'] = 22121001,
		['蕾欧娜'] = 22123001,
		['千代'] = 22125001,
		['明'] = 22132001,
		['拉薇'] = 22128001,
		['梅瑞狄斯'] = 22133001,
		['令'] = 22109001,
		['香奈美'] = 22137001,
		['艾卡'] = 22119001,
		['珐格兰丝'] = 22120001,
		['玛拉'] = 22122001,
		['奥黛丽·格罗夫'] = 22105001,
		['奥黛丽'] = 22105001,
		['玛德蕾娜·利里'] = 22107001,
		['玛德蕾娜'] = 22107001,
		['绯莎'] = 22112001,
		['星绘'] = 22146001,
		['白墨'] = 22110001,
		['加拉蒂亚·利里'] = 22205001,
		['加拉蒂亚'] = 22205001,
	}
	local voiceID = id[itemName]
	local voiceFile = format('道具图标_%d.png', voiceID)
	local voiceIcon = icon_style(itemName.."语音", voiceFile, "精致", size, imgSize)
	return voiceIcon
end


p["超弦体动作"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/RoleActionData")
	local item = find_item_in_data(data, itemName)
	if item then
		local file = format('超弦体动作图标_%d.png', item.id)
        local itemIcon = icon_style("超弦体动作:"..item.name, file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["聊天气泡"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/ChatBubblesData")
	local items = find_item_in_data(data, itemName)
	if item then
		local file = format('聊天气泡_%d.png', item.id)
        local itemIcon = icon_style("聊天气泡:"..item.name, file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["头套"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:玩家装饰/MascotHeadData")
	local item = find_item_in_data(data, itemName)
	if item then
		local file = format('头套_%d.png', item.id)
        local itemIcon = icon_style("头套:"..item.name, file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["生化卡牌"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:生化卡牌/Data")
	local item = find_item_in_data(data, itemName)
	if item then
		local file = format('生化卡牌_%d.png', item.cardid)
        local itemIcon = icon_style("卡牌:"..item.name, file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["互动道具"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:功能道具/InteractivePropsData")
	local item = find_item_in_data(data, itemName)
	if item then
        local itemIcon = icon_style("互动道具:"..item.name, item.file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


p["功能道具"] = function (itemName, size, imgSize)
	local data = mw.loadData("模块:功能道具/Data")
	local item = find_item_in_data(data, itemName)
	if item then
        local itemIcon = icon_style(item.name, item.file, item.quality, size, imgSize)
        return itemIcon
    else
        return "名称错误或无数据"
    end
end


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

return p