模块

模块:装备

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献2025年10月17日 (五) 15:15的版本 (创建页面,内容为“local p = {} local equipmentData = mw.loadData("模块:装备/data") -- 获取稀有度对应的图标 local function getRarityIcon(rarity) local rarityMap = { ["蓝"] = "蓝", ["紫"] = "紫", ["金"] = "金", ["红"] = "红" } return rarityMap[rarity] or "蓝" end -- 获取类型对应的图标颜色 local function getTypeIconColor(rarity) return rarity or "蓝" end -- 生成装备卡片 local function genera…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

此模块的文档可以在模块:装备/doc创建

local p = {}
local equipmentData = mw.loadData("模块:装备/data")

-- 获取稀有度对应的图标
local function getRarityIcon(rarity)
    local rarityMap = {
        ["蓝"] = "蓝",
        ["紫"] = "紫",
        ["金"] = "金",
        ["红"] = "红"
    }
    return rarityMap[rarity] or "蓝"
end

-- 获取类型对应的图标颜色
local function getTypeIconColor(rarity)
    return rarity or "蓝"
end

-- 生成装备卡片
local function generateEquipmentCard(name, level, data)
    level = tonumber(level) or 1
    local base = data.base
    local levelData = data[level]
    
    if not levelData then
        return "错误:等级数据不存在"
    end
    
    local rarity = base.rarity
    local art = base.art
    
    local card = mw.html.create('div')
        :css('position', 'relative')
        :css('display', 'inline-block')
        :css('width', '150px')
        :css('height', '230px')
        :wikitext('[[File:bg_equipment_rarity_' .. rarity .. '.png|150px|link=]]')
    
    card:tag('div')
        :css('position', 'absolute')
        :css('top', '43px')
        :css('left', '13px')
        :wikitext('[[File:' .. art .. '|124px|link=]]')
    
    card:tag('div')
        :css('position', 'absolute')
        :css('bottom', '5px')
        :css('left', '5px')
        :css('width', '140px')
        :css('height', '35px')
        :css('background-color', 'rgba(0,0,0,0.5)')
        :css('border-radius', '0px 0px 8px 8px')
    
    card:tag('div')
        :css('position', 'absolute')
        :css('bottom', '10px')
        :css('left', '20px')
        :wikitext('[[File:icon_star_rating_' .. level .. '.png|link=]]')
    
    card:tag('div')
        :css('position', 'absolute')
        :css('top', '0px')
        :css('left', '0px')
        :wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
    
    return tostring(card)
end

-- 生成装备详情弹窗
local function generateEquipmentPopup(name, level, data)
    level = tonumber(level) or 1
    local base = data.base
    local levelData = data[level]
    
    if not levelData then
        return "错误:等级数据不存在"
    end
    
    local rarity = base.rarity
    local art = base.art
    local equipType = base.type
    local valueType = base.value_type
    local value = levelData.value
    local desc = levelData.desc_global
    
    -- 值类型的中文名称
    local valueTypeNameMap = {
        ["atk"] = "攻击力",
        ["def"] = "防御力",
        ["hp"] = "生命值"
    }
    local valueTypeName = valueTypeNameMap[valueType] or "攻击力"
    
    local popup = mw.html.create('div')
        :css('position', 'relative')
        :css('display', 'inline-block')
        :css('width', '368px')
        :css('height', '335px')
        :css('background-color', '#343434')
        :css('border-radius', '9px')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '0px')
        :css('left', '0px')
        :wikitext('[[File:bg_collection_rarity_' .. rarity .. '.png|link=]]')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '40px')
        :css('left', '128px')
        :wikitext('[[File:' .. art .. '|124px|link=]]')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '167px')
        :css('left', '0px')
        :css('width', '368px')
        :css('height', '35px')
        :css('background-color', 'rgba(0,0,0,0.5)')
        :css('border-radius', '0px 0px 8px 8px')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '173px')
        :css('left', '128px')
        :wikitext('[[File:icon_star_rating_' .. level .. '.png|link=]]')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '205px')
        :css('left', '5px')
        :css('color', 'white')
        :wikitext('[[File:icon_equip_weapon_' .. rarity .. '.png|25px|link=]]')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '209px')
        :css('left', '33px')
        :css('color', 'white')
        :wikitext(name)
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '235px')
        :css('left', '9px')
        :css('width', '350px')
        :css('height', '35px')
        :css('background-color', 'rgba(255,255,255,0.3)')
        :css('border-radius', '2px')
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '242px')
        :css('left', '14px')
        :css('color', 'white')
        :wikitext(valueTypeName)
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '242px')
        :css('right', '14px')
        :css('color', 'white')
        :wikitext(value)
    
    popup:tag('div')
        :css('position', 'absolute')
        :css('top', '277px')
        :css('left', '10px')
        :css('color', 'white')
        :css('font-size', '14px')
        :wikitext(desc)
    
    return tostring(popup)
end

-- 主函数:根据参数决定显示卡片还是弹窗
function p.show(frame)
    local args = frame.args
    if not args[1] or args[1] == "" then
        args = frame:getParent().args
    end
    
    local name = args[1] or args["name"] or ""
    local level = tonumber(args[2] or args["level"] or "1")
    local mode = args["mode"] or "card" -- card 或 popup
    
    if name == "" then
        return "错误:请提供装备名称"
    end
    
    local data = equipmentData[name]
    if not data then
        return "错误:装备「" .. name .. "」不存在"
    end
    
    if mode == "popup" then
        return generateEquipmentPopup(name, level, data)
    else
        return generateEquipmentCard(name, level, data)
    end
end

return p