模块:EquipmentInfoList

来自70DNF
AdminAPT留言 | 贡献2025年12月17日 (三) 06:19的版本 (创建页面,内容为“-- 模块:EventShopCounter -- 功能:统计活动商店数据中各阶段的物品数量 local p = {} -- 模块对外接口表 function p.countItems(frame) local args = frame.args local dataText = args.data or '' -- 初始化计数器 local counters = { ["金色阶段"] = 0, ["紫色阶段"] = 0, ["灰色阶段"] = 0, ["无限库存区"] = 0, ["其他"] = 0 } local currentStage = "其他"…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

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

-- 模块:EventShopCounter
-- 功能:统计活动商店数据中各阶段的物品数量
local p = {} -- 模块对外接口表

function p.countItems(frame)
    local args = frame.args
    local dataText = args.data or ''
    
    -- 初始化计数器
    local counters = {
        ["金色阶段"] = 0,
        ["紫色阶段"] = 0,
        ["灰色阶段"] = 0,
        ["无限库存区"] = 0,
        ["其他"] = 0
    }
    local currentStage = "其他"
    
    -- 按行解析数据
    for line in dataText:gmatch("[^\r\n]+") do
        local parts = {}
        for part in line:gmatch("([^;]*);;") do
            table.insert(parts, part)
        end
        
        if #parts >= 2 then
            local control = parts[1]
            local content = parts[2]
            
            -- 判断是否为阶段标题行(以“X”开头且内容包含“阶段”或“区”)
            if control == 'X' and (content:find("阶段") or content:find("区")) then
                currentStage = content
            -- 判断是否为普通物品行(以“0”或“1”开头)
            elseif control == '0' or control == '1' then
                if counters[currentStage] then
                    counters[currentStage] = counters[currentStage] + 1
                else
                    counters["其他"] = counters["其他"] + 1
                end
            end
        end
    end
    
    -- 生成结果文本
    local result = "'''各阶段物品数量统计:'''<br/>"
    for stage, count in pairs(counters) do
        result = result .. string.format("* %s: %d 个<br/>", stage, count)
    end
    return result
end

return p -- 必须返回模块接口