模块:图标
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:图标/doc创建
local p = {}
local strinova = require("模块:卡拉彼丘")
local qualityToColor = strinova.qualityToColor
local qualityColor = strinova.qualityNameToColor
local format = string.format
-- ================= 辅助函数 =================
-- 通用函数:处理道具图标样式 HTML 生成
local function icon_style(itemName, itemFile, itemQuality, size, imgSize)
local html = mw.html.create()
local borderColor = qualityColor[itemQuality] or qualityToColor[itemQuality] or "#ECECEC"
local iconHTML = html
:tag('span'):addClass('items-icon')
:tag('span')
:addClass('items-icon-img radius10')
:css("border-color", borderColor)
:wikitext(format('[[file:%s|%s|class=radius10|link=]]', itemFile, imgSize))
:done()
:tag('span')
:addClass('items-icon-text')
:css("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
-- 通用处理逻辑:用于处理大部分结构相同的道具
-- dataPath: 数据模块路径
-- prefix: 显示名称的前缀 (例如 "礼物:")
-- filePattern: 文件名格式 (可选,如果数据中没有直接提供 file 字段)
-- idField: ID字段名 (可选,默认为 'id', 用于 filePattern)
local function generic_item_handler(itemName, size, imgSize, dataPath, prefix, filePattern, idField)
local data = mw.loadData(dataPath)
local item = find_item_in_data(data, itemName)
if item then
local fileName = item.file
-- 如果指定了文件名格式,则根据 ID 生成文件名
if filePattern then
local id = item[idField or 'id']
fileName = format(filePattern, id)
end
return icon_style(prefix..item.name, fileName, item.quality, size, imgSize)
else
return "名称错误或无数据"
end
end
-- ================= 主要逻辑 =================
function p.main(frame)
local args = frame.args
local itemType = args["类型"] or ""
local itemName = args[1] or ""
local roleName = args["role"]
local size = args["size"] or "12px" -- 提供默认值
local imgSize = args["imgSize"] or "20px" -- 提供默认值
local itemFunctions = {
["时装"] = p["角色时装"],
["外观"] = p["武器外观"],
["礼物"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:角色礼物/Data", "礼物:") end,
["喷漆"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/DecalData", "喷漆:") end,
["基板"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/IDCardData", "基板:") end,
["封装"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/FrameData", "封装:") end,
["勋章"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/BadgeData", "勋章:") end,
["表情"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:角色表情/Data", "表情:") end,
["语音"] = p["语音"],
["动作"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/RoleActionData", "超弦体动作:",
"超弦体动作图标_%d.png") end,
["气泡"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/ChatBubblesData", "聊天气泡:", "聊天气泡_%d.png") end,
["头套"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:玩家装饰/MascotHeadData", "头套:", "头套_%d.png") end,
["卡牌"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:生化卡牌/Data", "卡牌:", "生化卡牌_%d.png", "cardid") end,
["互动"] = function (n, s, i) return generic_item_handler(n, s, i, "模块:功能道具/InteractivePropsData", "互动道具:", "互动道具_%d.png") end,
[""] = function (n, s, i) return generic_item_handler(n, s, i, "模块:功能道具/Data", "") end, -- 功能道具
}
if itemFunctions[itemType] then
return itemFunctions[itemType](itemName, size, imgSize, roleName)
else
return p["其它"](itemName, args["file"], args["quality"], size, imgSize)
end
end
-- ================= 特殊处理函数 =================
p["角色时装"] = function (itemName, size, imgSize, roleName)
local data = mw.loadData("模块:角色/SkinData")
-- 定义内部查找函数
local function find_skin(rName)
local roleData = data[rName]
if roleData and roleData[itemName] then
local roleSkin = roleData[itemName]
return icon_style(
"角色时装:"..itemName,
"角色时装图鉴_"..roleSkin['id']..".png",
roleSkin['稀有度'],
size,
imgSize
)
end
return nil
end
if roleName and roleName ~= "" then
local result = find_skin(roleName)
if result then return result end
else
for rName, _ in pairs(data) do
local result = find_skin(rName)
if result then return result end
end
end
return "时装名称错误或无数据"
end
p["武器外观"] = function (itemName, size, imgSize)
local skinData = mw.loadData("模块:武器/SkinData")
local otherSkinData = mw.loadData("模块:武器/OtherSkinData")
-- 合并数据 (注意:loadData 返回的是只读表,不能直接合并,需在逻辑中处理)
-- 这里我们简化逻辑,先查 skinData,没找到再查 otherSkinData
local parts = mw.text.split(itemName, "-")
if #parts < 2 then return "格式错误 (应为 武器-皮肤)" end
local weaponName = parts[1]
local skinName = parts[2]
local function get_skin_info(database)
if database[weaponName] and database[weaponName][skinName] then
return database[weaponName][skinName]
end
return nil
end
local targetSkin = get_skin_info(skinData) or get_skin_info(otherSkinData)
if targetSkin then
return icon_style(
"武器外观:"..weaponName.."-"..skinName,
"武器外观图鉴_"..targetSkin['id']..".png",
targetSkin['稀有度'],
size,
imgSize
)
else
return "外观名称错误或无数据"
end
end
p["语音"] = function (itemName, size, imgSize)
-- 建议将此表移动到 mw.loadData 外部数据文件中,以便维护
local idMap = {
['米雪儿·李'] = 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 = idMap[itemName]
if voiceID then
local voiceFile = format('道具图标_%d.png', voiceID)
return icon_style(itemName.."语音", voiceFile, "精致", size, imgSize)
else
return "语音角色名称错误"
end
end
p["其它"] = function (Name, File, Quality, size, imgSize)
return icon_style(Name, File, Quality, size, imgSize)
end
return p

沪公网安备 31011002002714 号