Quest
来自蒙纳多研究本部
此模块的文档可以在模块:Quest/doc创建
local p = {} local post = require("Module:RequestHelper").post local getArgs = require("Module:Arguments").getArgs local html = require("Module:Html") local compress = html.compress local addlink = html.addlink -- local getArgs = require("Module:Arguments").getArgs local function itemName(data) local name = data.itemID.name if data.rankType > 0 then name = name .. data.rankType end return name end local function slot(data) if data.itemID.uni_flag == 0 then return "[" .. data.itemID.jwl_slot .. "]" end return "" end function p.template(frame, data) local questInfo = "" do -- 任务内容 local infoReport = #data.menu.info_report > 0 and [[<div class="light-box">]] .. data.menu.info_report .. [[</div>]] or "" local succ = {} for _, v in ipairs({"A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"}) do succ[v] = "" if data["type_succ_" .. v] == "KillEnemy" then succ[v] = mw.ustring.format( [[<div style="text-align: right;">%s 0/%s</div>]], addlink(data["cnd_succ_" .. v].name, "敌人"), data["num_succ_" .. v] ) elseif data["type_succ_" .. v] == "GetItem" then succ[v] = mw.ustring.format( [[<div style="text-align: right;">%s 0/%s</div>]], addlink(itemName(data["cnd_succ_" .. v]), "物品"), data["num_succ_" .. v] ) elseif data["type_succ_" .. v] == "TalkNpc" then succ[v] = data["cnd_succ_" .. v] and mw.ustring.format( [[<div style="text-align: right;">与 %s 对话</div>]], addlink(data["cnd_succ_" .. v].name, "NPC") ) or "" end end local questProg = {A = "", B = ""} for k, _ in pairs(questProg) do for i = 1, 3 do if #data.menu["info_succ_" .. k .. i] > 0 then questProg[k] = questProg[k] .. '<div class="light-box">' .. data.menu["info_succ_" .. k .. i] .. succ[k .. (i + 1)] .. "</div>" end end end if #data.menu.info_end_B > 0 then questInfo = mw.ustring.format( [[<ul class="tabs" data-tab> <li class="tab-title active">A</li> <li class="tab-title">B</li> </ul> <div class="tabs-content"> <div class="content active" id="prog-a"> <div class="light-box">%s</div> %s %s <div class="light-box">%s</div> </div> <div class="content" id="prog-b"> <div class="light-box">%s</div> %s %s <div class="light-box">%s</div> </div> </div>]], data.menu.info_prog .. succ.A1, questProg.A, infoReport, data.menu.info_end_A, data.menu.info_prog .. succ.B1, questProg.B, infoReport, data.menu.info_end_B ) else questInfo = mw.ustring.format( [[<div> <div class="light-box">%s</div> %s %s <div class="light-box">%s</div> </div>]], data.menu.info_prog .. succ.A1, questProg.A, infoReport, data.menu.info_end_A ) end end local reward_A = data.reward_A1 and mw.ustring.format( [[<div class="medium-6 columns"> <div class="light-box"> <div style="text-align: center">A</div> <hr /> <div style="padding: 0 8px">%s</div> <hr /> <div style="padding: 0 8px">%s</div> <hr /> <div style="padding: 0 8px">%s</div> </div> </div>]], data.reward_A1 and addlink(itemName(data.reward_A1), "物品") .. slot(data.reward_A1) or "------", data.reward_A2 and addlink(itemName(data.reward_A2), "物品") .. slot(data.reward_A2) or " ", data.reward_A3 and addlink(itemName(data.reward_A3), "物品") .. slot(data.reward_A3) or " " ) or "" local reward_B = data.reward_B1 and mw.ustring.format( [[<div class="medium-6 columns"> <div class="light-box"> <div style="text-align: center">B</div> <hr /> <div style="padding: 0 8px">%s</div> <hr /> <div style="padding: 0 8px">%s</div> <hr /> <div style="padding: 0 8px">%s</div> </div> </div>]], data.reward_B1 and addlink(itemName(data.reward_B1), "物品") .. slot(data.reward_B1) or "------", data.reward_B2 and addlink(itemName(data.reward_B2), "物品") .. slot(data.reward_B1) or " ", data.reward_B3 and addlink(itemName(data.reward_B3), "物品") .. slot(data.reward_B1) or " " ) or "" local otherCondition = "" if data.cnd_famous > 0 then otherCondition = otherCondition .. mw.ustring.format([[ <hr /><div style="text-align: center;">评价值 %s 以上</div> ]], data.cnd_famous) end if data.npcmeetID1 then otherCondition = otherCondition .. mw.ustring.format( [[ <hr /><div style="text-align: center;">牵绊图已登记 %s</div> ]], addlink(data.npcmeetID1.name, "NPC") ) end if data.npcmeetID2 then otherCondition = otherCondition .. mw.ustring.format( [[ <hr /><div style="text-align: center;">牵绊图已登记: %s</div> ]], addlink(data.npcmeetID2.name, "NPC") ) end if data.cnd_questID then otherCondition = otherCondition .. mw.ustring.format( [[ <hr /><div style="text-align: center;">前置任务: %s</div> ]], addlink( data.cnd_questID.title, "任务", data.cnd_questID.npc_id.rlt_lnd.mapID.name .. "/" .. data.cnd_questID.title ) ) end if data.flg_s > 0 then otherCondition = otherCondition .. mw.ustring.format([[<hr /><div style="text-align: center;">主线进度: %s</div>]], data.flg_s) end local npcName = "" if #data.npc_id.mob_name > 0 then npcName = data.npc_id.mob_name else npcName = addlink(data.npc_id.name, "NPC") end if data.npc_id.range_s ~= data.npc_id.range_e and npcName ~= "剧情任务" then npcName = npcName .. " " .. data.npc_id.range_s .. ":00 - " .. data.npc_id.range_e .. ":00" end local timeLimitQuest = "" if data.qst_genre == "限时任务" then timeLimitQuest = [[<div style="text-align: center;">限时任务</div><hr />]] end local wikitext = mw.ustring.format( [[ <div class="row"> <div class="large-6 columns"> <div class="quest-box"> <div class="dark-box"> %s <div class="content" > %s <div style="text-align: center;">%s</div> <hr /> <div style="text-align: center;">%s %s</div> <hr /> <div>%s</div> %s </div> </div> </div> <div class="quest-box"> <div class="dark-box"> %s <div class="content"> <div class="row"> <div class="medium-6 columns"> <div class="light-box">MONEY<div style="float:right">%s</div></div> <div class="light-box">EXP<div style="float:right">%s</div></div> <div class="light-box">评价<div style="float:right">%s</div></div> </div> %s %s </div> </div> </div> </div> </div> <div class="large-6 columns"> <div class="quest-box"> <div class="dark-box"> %s <div class="content"> %s </div> </div> </div> </div> </div> ]], frame:expandTemplate {title = "QuestBox/title", args = {"委托条件"}}, timeLimitQuest, npcName, addlink(data.npc_id.rlt_lnd.mapID.name, "任务"), data.npc_id.rlt_lnd.name, data.menu.purpose, otherCondition, frame:expandTemplate {title = "QuestBox/title", args = {"任务报酬"}}, data.reward_money * 10 or "", data.reward_exp * 10 or "", data.up_famous_A or "", reward_A, reward_B, frame:expandTemplate {title = "QuestBox/title", args = {"任务内容"}}, questInfo ) return compress(wikitext) end function p.setSmw(data) mw.smw.set( { id = data.row_id, npc = #data.npc_id.mob_name == 0 and data.npc_id.name or data.npc_id.mob_name, money = data.reward_money * 10, exp = data.reward_exp * 10, famous = data.up_famous_A, genre = data.qst_genre } ) for _, v in ipairs({"A1", "A2", "A3", "B1", "B2", "B3"}) do mw.smw.set({reward = data["reward_" .. v] and itemName(data["reward_" .. v]) .. slot(data["reward_" .. v])}) end for _, v in ipairs({"A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"}) do if data["type_succ_" .. v] == "KillEnemy" then mw.smw.set({questEnemy = data["cnd_succ_" .. v].name}) elseif data["type_succ_" .. v] == "GetItem" then mw.smw.set({questItem = itemName(data["cnd_succ_" .. v])}) elseif data["type_succ_" .. v] == "TalkNpc" then mw.smw.set({questNpc = data["cnd_succ_" .. v] and data["cnd_succ_" .. v].name}) end end end function p.fetchDataById(id) return post("bdat_common.JNL_quest", id) end function p.main(frame) local args = getArgs(frame) local out = "" for _, id in ipairs(args) do local data = p.fetchDataById(id) if args[2] then out = out .. html.h2(data.npc_id.name) end out = out .. p.template(frame, data) p.setSmw(data) end -- mw.log(mw.text.jsonEncode(data, mw.text.JSON_PRETTY)) return out end return p