来自勇者斗恶龙X WIKI_DQX日服PC中文版图鉴 DQX攻略大全

此模块的文档可以在模块:任务Y/doc创建

local p = {}
local getArgs = require('Module:Arguments').getArgs
local smw = require('Module:Util').smw
local color = require('Module:Base').color
local item_link = require('Module:Base').item_link_1X

local frame


-----------------------------------------------------------------------------
-- 入口函数
-----------------------------------------------------------------------------

-- 任务信息页
function p.quest_info(pageframe)
    frame = pageframe
    return _quest_info(getArgs(pageframe))
end


-----------------------------------------------------------------------------
-- 任务信息页
-----------------------------------------------------------------------------

function _quest_info(args)
    local html = mw.html.create()
    local html_table = html:tag('table'):addClass('wikitable')
    local temp_text, temp_table, temp_num

    if args['任务编号'] ~= nil and args['任务编号'] ~= '' and args['任务编号'] ~= '999' then
        temp_text = args['任务编号']
    else
        temp_text = '限期'
		args['任务编号'] = '999'
    end
    html_table:tag('tr'):tag('th'):wikitext('任务编号'):done()
                        :tag('td'):wikitext(temp_text):done()

    if args['任务名称'] ~= nil and args['任务名称'] ~= '' then
        temp_text = args['任务名称']
    else
        temp_text = '未知'
    end
    html_table:tag('tr'):tag('th'):cssText('width:80px'):wikitext('任务名称'):done()
                        :tag('td'):wikitext(temp_text):done()

    if args['日文名称'] ~= nil and args['日文名称'] ~= '' then
        temp_text = args['日文名称']
    else
        temp_text = '待补充'
    end
    html_table:tag('tr'):tag('th'):cssText('width:80px'):wikitext('日文名称'):done()
                        :tag('td'):wikitext(temp_text):done()

    -- 任务分类
    temp_text = ''
    if args['任务分类'] ~= nil and args['任务分类'] ~= '' then
        if args['任务子分类'] ~= nil and args['任务子分类'] ~= '' then
            temp_text = '[[' .. args['任务分类'] .. ']] - [[' .. args['任务子分类'] .. ']]'
        else
            temp_text = '[[' .. args['任务分类'] .. ']]'
        end
    else
        temp_text = '未知'
    end
    html_table:tag('tr'):tag('th'):wikitext('任务分类'):done()
                        :tag('td'):wikitext(temp_text):done()
    args['任务分类综合'] = temp_text


    -- 前置条件
    if args['前置条件'] ~= nil and args['前置条件'] ~= '' then
        temp_text = args['前置条件']
        html_table:tag('tr'):tag('th'):wikitext('前置条件'):done()
                            :tag('td'):wikitext(temp_text):done()
    end

    -- 等级限制
    if args['等级需求'] ~= nil and args['等级需求'] ~= '' then
        if args['职业限制'] ~= nil and args['职业限制'] ~= '' then
            temp_text = args['职业限制'] .. ' Lv' .. args['等级需求'] .. ' 以上'
        else
            temp_text = 'Lv'..args['等级需求']..' 以上'
        end
        html_table:tag('tr'):tag('th'):wikitext('等级需求'):done()
                            :tag('td'):wikitext(temp_text):done()
    end

    -- 职人限制
    if args['职人限制'] ~= nil and args['职人限制'] ~= '' then
        if args['职人等级限制'] ~= nil and args['职人等级限制'] ~= '' then
            temp_text = args['职人限制'] .. ' Lv' .. args['职人等级限制'] .. ' 以上'
        else
            temp_text = args['职人限制'] .. ' Lv1 以上'
        end
        html_table:tag('tr'):tag('th'):wikitext('职人需求'):done()
                            :tag('td'):wikitext(temp_text):done()
    end

    -- 起始地图
    temp_table = {}
    if args['起始地图'] ~= nil and args['起始地图'] ~= '' then
        temp_table[#temp_table+1] = '[[' .. args['起始地图'] .. ']]'
    end
    if args['起始地图说明'] ~= nil and args['起始地图说明'] ~= '' then
        temp_table[#temp_table+1] = args['起始地图说明']
    end
    if args['位置'] ~= nil and args['位置'] ~= '' then
        temp_table[#temp_table+1] = args['位置']
    end
    if args['位置说明'] ~= nil and args['位置说明'] ~= '' then
        temp_table[#temp_table+1] = args['位置说明']
    end
    temp_text = table.concat(temp_table, ' ')
    args['起始地图综合'] = temp_text

    -- 起始NPC
    if args['起始任务NPC'] ~= nil and args['起始任务NPC'] ~= '' then
        temp_text = args['起始任务NPC']
    else
        temp_text = '未知'
    end
    args['起始NPC'] = temp_text

    -- 初次经验
    if args['基础经验'] ~= nil and args['基础经验'] ~= '' then
        temp_num = tonumber(args['基础经验'])
    else
        temp_num = 0
    end

    if temp_num > 0 then
        temp_text = temp_num..'经验/'..math.ceil(temp_num/500)..'特训点'
    else
        temp_text = '无'
    end   
    args['初次报酬经验'] = temp_text

    -- 初次声望
    if args['初次报酬声望'] ~= nil and args['初次报酬声望'] ~= '' then
        if tostring(args['初次报酬声望']) == '0' then
            temp_text = '无'
        else
            temp_text = args['初次报酬声望']
        end
    else
        temp_text = '无'
    end
    args['初次报酬声望'] = temp_text

    -- 初次报酬
    temp_table = {}
    if args['初次报酬经验'] ~= nil and args['初次报酬经验'] ~= '无' and args['初次报酬经验'] ~= '' then
        temp_table[#temp_table+1] = args['初次报酬经验']
    end
    if args['初次报酬声望'] ~= nil and args['初次报酬声望'] ~= '无' and args['初次报酬声望'] ~= '' then
        temp_table[#temp_table+1] = args['初次报酬声望']..'声望'
    end
    if args['初次报酬其他'] ~= nil and args['初次报酬其他'] ~= '' then
        temp_table[#temp_table+1] = args['初次报酬其他']
    end
    if args['初次报酬道具'] ~= nil and args['初次报酬道具'] ~= '' then
        for _, item_str in ipairs(mw.text.split(args['初次报酬道具'], ',')) do
            item = mw.text.split(item_str, '*')
            if #item == 1 then -- 没填写数量的情况下赋予一个数量值
                item[2] = 1
            end
            temp_table[#temp_table+1] = item_link(item[1], 'no-bg', 14)..'×'..item[2]
        end
    end
    temp_text = table.concat(temp_table, '<br>')
    if temp_text == '' then
        temp_text = '无'
    end
    html_table:tag('tr'):tag('th'):wikitext('初次报酬'):done()
                        :tag('td'):wikitext(temp_text):done()
    args['初次报酬整合'] = temp_text

    -- 重玩经验
    if temp_num > 0 and args['重玩经验'] ~= nil and args['重玩经验'] ~= '' then
        temp_text = tonumber(args['重玩经验'])..'经验/'..math.ceil(tonumber(args['重玩经验'])/500)..'特训点'
    else
        temp_text = '无'
    end   
    args['重玩报酬经验'] = temp_text

    -- 重玩声望
    if args['重玩报酬声望'] ~= nil and args['重玩报酬声望'] ~= '' then
        if tostring(args['重玩报酬声望']) == '0' then
            temp_text = '无'
        else
            temp_text = args['重玩报酬声望']
        end
    else
        temp_text = '无'
    end
    args['重玩报酬声望'] = temp_text

    -- 重玩报酬
    temp_table = {}
    if args['重玩报酬经验'] ~= nil and args['重玩报酬经验'] ~= '无' and args['重玩报酬经验'] ~= '' then
        temp_table[#temp_table+1] = args['重玩报酬经验']
    end
    if args['重玩报酬声望'] ~= nil and args['重玩报酬声望'] ~= '无' and args['重玩报酬声望'] ~= '' then
        temp_table[#temp_table+1] = args['重玩报酬声望']..'声望'
    end
    if args['重玩报酬其他'] ~= nil and args['重玩报酬其他'] ~= '' then
        temp_table[#temp_table+1] = args['重玩报酬其他']
    end
    if args['重玩报酬道具'] ~= nil and args['重玩报酬道具'] ~= '' then
        for _, item_str in ipairs(mw.text.split(args['重玩报酬道具'], ',')) do
            item = mw.text.split(item_str, '*')
            if #item == 1 then -- 没填写数量的情况下赋予一个数量值
                item[2] = 1
            end
            temp_table[#temp_table+1] = item_link(item[1], 'no-bg', 14)..'×'..item[2]
        end
    end
    temp_text = table.concat(temp_table, '<br>')
    if temp_text == '' then
        temp_text = '无'
    end
    html_table:tag('tr'):tag('th'):wikitext('重玩报酬'):done()
                        :tag('td'):wikitext(temp_text):done()
    args['重玩报酬整合'] = temp_text
 
    -- 任务内容
    if args['任务内容'] ~= nil and args['任务内容'] ~= '' then
        temp_text = args['起始地图综合']..' - '..args['起始NPC'].."<br>"..args['任务内容']
    else
        temp_text = args['起始地图综合']..' - '..args['起始NPC'].."<br>"..'无相关资料'
    end
    args['任务内容整合'] = temp_text
    html_table:tag('tr'):tag('th'):wikitext('任务内容'):done()
                        :tag('td'):cssText('text-align: left;padding: 3px 10px;'):wikitext(temp_text):done()


    if args['任务对话'] ~= nil and args['任务对话'] ~= '' then
        temp_text = args['任务对话'] 
    else
        temp_text = '待补充' 
    end       
    html_table:tag('tr'):tag('th'):wikitext('任务对话'):done()
                        :tag('td'):cssText('text-align: left;padding: 3px 10px;'):wikitext(temp_text):done()

    
    -- 添加分类
    html:wikitext('[[分类:支线任务]]')
    -- 存储smw数据
    _set_quest_info(args)

    return tostring(html)
end

-----------------------------------------------------------------------------
-- 存储怪物数据
-----------------------------------------------------------------------------

function _set_quest_info(args)
    -- 怪物数据并不需要都写入smw
    save_headers = {'任务编号', '任务名称', '日文名称', '任务分类', '任务子分类', '任务分类综合', '起始地图', '起始地图说明', '位置', '位置说明', '起始地图综合', '前置条件', '起始任务NPC',
                    '等级需求', '职业限制', '职人限制', '职人等级限制', '初次报酬声望',  '重玩报酬声望'}
    save_args = {}

    for _, header in ipairs(save_headers) do
        save_args[header] = args[header]
    end

    save_args['初次报酬'] = args['初次报酬整合']
    save_args['重玩报酬'] = args['重玩报酬整合']

    if args['基础经验'] ~= nil and args['基础经验'] ~= '' then
        save_args['初次经验'] = tonumber(args['基础经验'])
    else
        save_args['初次经验'] = 0
    end
    save_args['初次特训点'] = math.ceil(save_args['初次经验']/500)
    save_args['重玩经验'] = tonumber(args['重玩经验'])
    if args['重玩经验'] ~= nil and args['重玩经验'] ~= '' then
        save_args['重玩特训点'] = math.ceil(save_args['重玩经验']/500)
    else
        save_args['重玩特训点'] = math.ceil(save_args['初次经验']/2/500)
    end
    save_args['任务内容'] = args['任务内容整合']

    -- 存入smw数据
    smw.set(save_args, frame)

    -- 道具报酬单独处理
    if args['初次报酬道具'] ~= nil and args['初次报酬道具'] ~= '' then
        for _, item_str in ipairs(mw.text.split(args['初次报酬道具'], ',')) do
            item = mw.text.split(item_str, '*')
            if #item == 1 then -- 没填写数量的情况下赋予一个数量值
                item[2] = 1
            end
            smw.set({['报酬道具'] = item[1]..';'..item[2]..';'..'初次'}, frame)
        end
    end
    if args['重玩报酬道具'] ~= nil and args['重玩报酬道具'] ~= '' then
        for _, item_str in ipairs(mw.text.split(args['重玩报酬道具'], ',')) do
            item = mw.text.split(item_str, '*')
            if #item == 1 then -- 没填写数量的情况下赋予一个数量值
                item[2] = 1
            end
            smw.set({['报酬道具'] = item[1]..';'..item[2]..';'..'重玩'}, frame)
        end
    end

end

return p