模块:Quest
来自蒙纳多研究本部
此模块的文档可以在模块:Quest/doc创建
local p = {}
local post = require("Module:RequestHelper").post
-- local getArgs = require("Module:Arguments").getArgs
local function compress(wikitext)
wikitext = mw.ustring.gsub(wikitext, "\n", "")
wikitext = mw.ustring.gsub(wikitext, ">%s+<", "><")
wikitext = mw.ustring.gsub(wikitext, ">%s+{{", ">{{")
wikitext = mw.ustring.gsub(wikitext, "}}%s+<", "}}<")
return wikitext
end
local function itemName(data)
local name = data.itemID.name
if data.rankType > 0 then
name = name .. data.rankType
end
return name
end
local function addlink(title, namespace, pagename)
if pagename == nil then
pagename = title
end
return mw.ustring.format("[[%s:%s|%s]]", namespace, pagename, title)
end
function p.template(frame, data)
-- local args = getArgs(frame)
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_succ_B1 > 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_header = data.reward_B1 and mw.ustring.format([[<div style="text-align: center">A</div><hr />]]) 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), "物品") or "------",
data.reward_B2 and addlink(itemName(data.reward_B2), "物品") or " ",
data.reward_B3 and addlink(itemName(data.reward_B3), "物品") 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
local npcName = ""
if #data.npc_id.mob_name > 0 then
npcName = data.npc_id.mob_name
else
npcName = addlink(data.npc_id.name, "NPC")
if data.npc_id.range_s ~= data.npc_id.range_e then
npcName = npcName .. " " .. data.npc_id.range_s .. ":00 - " .. data.npc_id.range_e .. ":00"
end
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>
<div class="medium-6 columns">
<div class="light-box">
%s
<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>
%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_header,
data.reward_A1 and addlink(itemName(data.reward_A1), "物品") or "------",
data.reward_A2 and addlink(itemName(data.reward_A2), "物品") or " ",
data.reward_A3 and addlink(itemName(data.reward_A3), "物品") or " ",
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 nil,
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])})
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 quest_id = frame.args[1]
local data = p.fetchDataById(quest_id)
p.setSmw(data)
-- mw.log(mw.text.jsonEncode(data, mw.text.JSON_PRETTY))
return p.template(frame, data)
end
return p