模块

装备:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
创建页面,内容为“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…”
 
律Rhyme留言 | 贡献
无编辑摘要
第1行: 第1行:
local p = {}
local p = {}
local equipmentData = mw.loadData("模块:装备/data")
local equipment_data = mw.loadData("模块:装备/data")


-- 获取稀有度对应的图标
-- 获取装备星级图标
local function getRarityIcon(rarity)
local function getStarIcon(star)
     local rarityMap = {
     return "[[File:icon_star_rating_" .. star .. ".png|link=]]"
        ["蓝"] = "蓝",
        ["紫"] = "紫",
        [""] = "金",
        ["红"] = "红"
    }
    return rarityMap[rarity] or "蓝"
end
end


-- 获取类型对应的图标颜色
-- 生成装备卡片HTML
local function getTypeIconColor(rarity)
local function generateEquipmentCard(name, star)
    return rarity or "蓝"
     local equip = equipment_data[name]
end
     if not equip then
 
        return "装备不存在: " .. name
-- 生成装备卡片
     end
local function generateEquipmentCard(name, level, data)
     level = tonumber(level) or 1
     local base = data.base
     local levelData = data[level]
      
      
     if not levelData then
     local base = equip.base
        return "错误:等级数据不存在"
     local level = equip[star] or equip[1]
     end
      
      
     local rarity = base.rarity
     local html = mw.html.create('div')
    local art = base.art
        :addClass('equipment-card')
        :attr('data-name', name)
        :attr('data-star', star)
        :css({
            position = 'relative',
            display = 'inline-block',
            width = '150px',
            height = '230px',
            cursor = 'pointer'
        })
      
      
     local card = mw.html.create('div')
     -- 背景
         :css('position', 'relative')
    html:tag('div')
        :css('display', 'inline-block')
         :css({position = 'absolute', top = '0px', left = '0px'})
        :css('width', '150px')
         :wikitext('[[File:bg_equipment_rarity_' .. base.rarity .. '.png|150px|link=]]')
        :css('height', '230px')
         :wikitext('[[File:bg_equipment_rarity_' .. rarity .. '.png|150px|link=]]')
      
      
     card:tag('div')
     -- 装备图片
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '43px')
         :css({position = 'absolute', top = '43px', left = '13px'})
        :css('left', '13px')
         :wikitext('[[File:' .. base.art .. '|124px|link=]]')
         :wikitext('[[File:' .. art .. '|124px|link=]]')
      
      
     card:tag('div')
     -- 底部暗色遮罩
         :css('position', 'absolute')
    html:tag('div')
        :css('bottom', '5px')
         :css({
        :css('left', '5px')
            position = 'absolute',
        :css('width', '140px')
            bottom = '5px',
        :css('height', '35px')
            left = '5px',
        :css('background-color', 'rgba(0,0,0,0.5)')
            width = '140px',
        :css('border-radius', '0px 0px 8px 8px')
            height = '35px',
            ['background-color'] = 'rgba(0,0,0,0.5)',
            ['border-radius'] = '0px 0px 8px 8px'
        })
      
      
     card:tag('div')
     -- 星级
         :css('position', 'absolute')
    html:tag('div')
        :css('bottom', '10px')
         :css({position = 'absolute', bottom = '10px', left = '20px'})
        :css('left', '20px')
         :wikitext(getStarIcon(star))
         :wikitext('[[File:icon_star_rating_' .. level .. '.png|link=]]')
      
      
     card:tag('div')
     -- 顶层蒙版
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '0px')
         :css({position = 'absolute', top = '0px', left = '0px'})
        :css('left', '0px')
         :wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
         :wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
      
      
     return tostring(card)
     return tostring(html)
end
end


-- 生成装备详情弹窗
-- 生成装备弹窗HTML
local function generateEquipmentPopup(name, level, data)
local function generateEquipmentModal(name, star)
    level = tonumber(level) or 1
     local equip = equipment_data[name]
     local base = data.base
     if not equip then
    local levelData = data[level]
         return ""
   
     if not levelData then
         return "错误:等级数据不存在"
     end
     end
      
      
     local rarity = base.rarity
     local base = equip.base
    local art = base.art
     local level = equip[star] or equip[1]
    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')
     local html = mw.html.create('div')
         :css('position', 'relative')
         :addClass('equipment-modal')
         :css('display', 'inline-block')
         :css({
        :css('width', '368px')
            position = 'relative',
        :css('height', '335px')
            display = 'inline-block',
        :css('background-color', '#343434')
            width = '368px',
        :css('border-radius', '9px')
            height = '335px',
            ['background-color'] = '#343434',
            ['border-radius'] = '9px'
        })
      
      
     popup:tag('div')
     -- 背景
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '0px')
         :css({position = 'absolute', top = '0px', left = '0px'})
        :css('left', '0px')
         :wikitext('[[File:bg_collection_rarity_' .. base.rarity .. '.png|link=]]')
         :wikitext('[[File:bg_collection_rarity_' .. rarity .. '.png|link=]]')
      
      
     popup:tag('div')
     -- 装备图片
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '40px')
         :css({position = 'absolute', top = '40px', left = '128px'})
        :css('left', '128px')
         :wikitext('[[File:' .. base.art .. '|124px|link=]]')
         :wikitext('[[File:' .. art .. '|124px|link=]]')
      
      
     popup:tag('div')
     -- 分隔线遮罩
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '167px')
         :css({
        :css('left', '0px')
            position = 'absolute',
        :css('width', '368px')
            top = '167px',
        :css('height', '35px')
            left = '0px',
        :css('background-color', 'rgba(0,0,0,0.5)')
            width = '368px',
        :css('border-radius', '0px 0px 8px 8px')
            height = '35px',
            ['background-color'] = 'rgba(0,0,0,0.5)',
            ['border-radius'] = '0px 0px 8px 8px'
        })
      
      
     popup:tag('div')
     -- 星级
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '173px')
         :css({position = 'absolute', top = '173px', left = '128px'})
        :css('left', '128px')
         :wikitext(getStarIcon(star))
         :wikitext('[[File:icon_star_rating_' .. level .. '.png|link=]]')
      
      
     popup:tag('div')
     -- 装备类型图标
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '205px')
         :css({position = 'absolute', top = '205px', left = '5px', color = 'white'})
        :css('left', '5px')
         :wikitext('[[File:icon_equip_' .. base.type .. '_' .. base.rarity .. '.png|25px|link=]]')
        :css('color', 'white')
         :wikitext('[[File:icon_equip_weapon_' .. rarity .. '.png|25px|link=]]')
      
      
     popup:tag('div')
     -- 装备名称
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '209px')
         :css({position = 'absolute', top = '209px', left = '33px', color = 'white'})
        :css('left', '33px')
        :css('color', 'white')
         :wikitext(name)
         :wikitext(name)
      
      
     popup:tag('div')
     -- 属性背景
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '235px')
         :css({
        :css('left', '9px')
            position = 'absolute',
        :css('width', '350px')
            top = '235px',
        :css('height', '35px')
            left = '9px',
        :css('background-color', 'rgba(255,255,255,0.3)')
            width = '350px',
        :css('border-radius', '2px')
            height = '35px',
            ['background-color'] = 'rgba(255,255,255,0.3)',
            ['border-radius'] = '2px'
        })
      
      
     popup:tag('div')
     -- 属性类型
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '242px')
         :css({position = 'absolute', top = '242px', left = '14px', color = 'white'})
        :css('left', '14px')
         :wikitext(base.value_type)
        :css('color', 'white')
         :wikitext(valueTypeName)
      
      
     popup:tag('div')
     -- 属性值
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '242px')
         :css({position = 'absolute', top = '242px', right = '14px', color = 'white'})
        :css('right', '14px')
         :wikitext(level.value)
        :css('color', 'white')
         :wikitext(value)
      
      
     popup:tag('div')
     -- 描述
         :css('position', 'absolute')
    html:tag('div')
        :css('top', '277px')
         :css({position = 'absolute', top = '277px', left = '10px', color = 'white'})
        :css('left', '10px')
         :wikitext(level.desc_global)
        :css('color', 'white')
        :css('font-size', '14px')
         :wikitext(desc)
      
      
     return tostring(popup)
     return tostring(html)
end
end


-- 主函数:根据参数决定显示卡片还是弹窗
-- 主函数
function p.show(frame)
function p.show(frame)
     local args = frame.args
     local args = frame:getParent().args
    if not args[1] or args[1] == "" then
     local name = args[1] or args.name or ""
        args = frame:getParent().args
     local star = tonumber(args[2] or args.star or 1)
    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
     if name == "" then
         return "错误:请提供装备名称"
         return "错误: 未指定装备名称"
     end
     end
      
      
     local data = equipmentData[name]
     local card = generateEquipmentCard(name, star)
     if not data then
     local modal = generateEquipmentModal(name, star)
        return "错误:装备「" .. name .. "」不存在"
    end
      
      
     if mode == "popup" then
     return card .. '<div class="equipment-modal-container" style="display:none;">' .. modal .. '</div>'
        return generateEquipmentPopup(name, level, data)
    else
        return generateEquipmentCard(name, level, data)
    end
end
end


return p
return p

2025年10月17日 (五) 15:20的版本

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

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

-- 获取装备星级图标
local function getStarIcon(star)
    return "[[File:icon_star_rating_" .. star .. ".png|link=]]"
end

-- 生成装备卡片HTML
local function generateEquipmentCard(name, star)
    local equip = equipment_data[name]
    if not equip then
        return "装备不存在: " .. name
    end
    
    local base = equip.base
    local level = equip[star] or equip[1]
    
    local html = mw.html.create('div')
        :addClass('equipment-card')
        :attr('data-name', name)
        :attr('data-star', star)
        :css({
            position = 'relative',
            display = 'inline-block',
            width = '150px',
            height = '230px',
            cursor = 'pointer'
        })
    
    -- 背景
    html:tag('div')
        :css({position = 'absolute', top = '0px', left = '0px'})
        :wikitext('[[File:bg_equipment_rarity_' .. base.rarity .. '.png|150px|link=]]')
    
    -- 装备图片
    html:tag('div')
        :css({position = 'absolute', top = '43px', left = '13px'})
        :wikitext('[[File:' .. base.art .. '|124px|link=]]')
    
    -- 底部暗色遮罩
    html:tag('div')
        :css({
            position = 'absolute',
            bottom = '5px',
            left = '5px',
            width = '140px',
            height = '35px',
            ['background-color'] = 'rgba(0,0,0,0.5)',
            ['border-radius'] = '0px 0px 8px 8px'
        })
    
    -- 星级
    html:tag('div')
        :css({position = 'absolute', bottom = '10px', left = '20px'})
        :wikitext(getStarIcon(star))
    
    -- 顶层蒙版
    html:tag('div')
        :css({position = 'absolute', top = '0px', left = '0px'})
        :wikitext('[[File:equipment_顶层蒙版.png|150px|link=]]')
    
    return tostring(html)
end

-- 生成装备弹窗HTML
local function generateEquipmentModal(name, star)
    local equip = equipment_data[name]
    if not equip then
        return ""
    end
    
    local base = equip.base
    local level = equip[star] or equip[1]
    
    local html = mw.html.create('div')
        :addClass('equipment-modal')
        :css({
            position = 'relative',
            display = 'inline-block',
            width = '368px',
            height = '335px',
            ['background-color'] = '#343434',
            ['border-radius'] = '9px'
        })
    
    -- 背景
    html:tag('div')
        :css({position = 'absolute', top = '0px', left = '0px'})
        :wikitext('[[File:bg_collection_rarity_' .. base.rarity .. '.png|link=]]')
    
    -- 装备图片
    html:tag('div')
        :css({position = 'absolute', top = '40px', left = '128px'})
        :wikitext('[[File:' .. base.art .. '|124px|link=]]')
    
    -- 分隔线遮罩
    html:tag('div')
        :css({
            position = 'absolute',
            top = '167px',
            left = '0px',
            width = '368px',
            height = '35px',
            ['background-color'] = 'rgba(0,0,0,0.5)',
            ['border-radius'] = '0px 0px 8px 8px'
        })
    
    -- 星级
    html:tag('div')
        :css({position = 'absolute', top = '173px', left = '128px'})
        :wikitext(getStarIcon(star))
    
    -- 装备类型图标
    html:tag('div')
        :css({position = 'absolute', top = '205px', left = '5px', color = 'white'})
        :wikitext('[[File:icon_equip_' .. base.type .. '_' .. base.rarity .. '.png|25px|link=]]')
    
    -- 装备名称
    html:tag('div')
        :css({position = 'absolute', top = '209px', left = '33px', color = 'white'})
        :wikitext(name)
    
    -- 属性背景
    html:tag('div')
        :css({
            position = 'absolute',
            top = '235px',
            left = '9px',
            width = '350px',
            height = '35px',
            ['background-color'] = 'rgba(255,255,255,0.3)',
            ['border-radius'] = '2px'
        })
    
    -- 属性类型
    html:tag('div')
        :css({position = 'absolute', top = '242px', left = '14px', color = 'white'})
        :wikitext(base.value_type)
    
    -- 属性值
    html:tag('div')
        :css({position = 'absolute', top = '242px', right = '14px', color = 'white'})
        :wikitext(level.value)
    
    -- 描述
    html:tag('div')
        :css({position = 'absolute', top = '277px', left = '10px', color = 'white'})
        :wikitext(level.desc_global)
    
    return tostring(html)
end

-- 主函数
function p.show(frame)
    local args = frame:getParent().args
    local name = args[1] or args.name or ""
    local star = tonumber(args[2] or args.star or 1)
    
    if name == "" then
        return "错误: 未指定装备名称"
    end
    
    local card = generateEquipmentCard(name, star)
    local modal = generateEquipmentModal(name, star)
    
    return card .. '<div class="equipment-modal-container" style="display:none;">' .. modal .. '</div>'
end

return p