模块

模块:事件

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献2025年10月18日 (六) 12:34的版本

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

local p = {}
local eventData = mw.loadData('模块:事件/data')

function p.main(frame)
    local output = {}
    
    -- 遍历所有事件
    for eventName, eventInfo in pairs(eventData) do
        table.insert(output, p.renderEvent(eventName, eventInfo))
    end
    
    return table.concat(output, '\n')
end

function p.renderEvent(eventName, eventInfo)
    local html = mw.html.create('div')
        :addClass('event-container')
        :attr('data-event-id', eventInfo.id)
    
    -- 背景层
    html:tag('div'):addClass('event-background')
    
    -- 图片
    html:tag('div')
        :addClass('event-image')
        :wikitext(string.format('[[File:cc_%s.png|link=]]', eventInfo.id))
    
    -- 标题背景
    html:tag('div'):addClass('event-title-bg')
    
    -- 标题
    html:tag('div')
        :addClass('event-title')
        :wikitext(eventName)
    
    -- 选项容器
    local optionsContainer = html:tag('div'):addClass('event-options')
    
    -- 渲染选项
    for i, optionText in ipairs(eventInfo.option) do
        local optionDiv = optionsContainer:tag('div')
            :addClass('event-option')
            :attr('data-option-index', i)
            :wikitext(optionText)
        
        -- 效果显示区域(默认隐藏)
        local effectDiv = optionsContainer:tag('div')
            :addClass('event-effect')
            :attr('data-effect-index', i)
            :cssText('display:none;')
        
        -- 处理效果文本
        local effectText = eventInfo.effect[i]
        if effectText then
            -- 处理{{文本|橙|120}}这样的模板
            effectText = frame:preprocess(effectText)
            effectDiv:wikitext(effectText)
        end
    end
    
    return tostring(html)
end

-- 单独显示某个事件
function p.show(frame)
    local eventName = frame.args[1]
    if not eventName or not eventData[eventName] then
        return '错误:未找到指定的事件'
    end
    
    return p.renderEvent(eventName, eventData[eventName])
end

return p