Item:修订间差异
来自蒙纳多研究本部
MWBot |
MWBot |
||
| 第172行: | 第172行: | ||
mw.smw.ask { | mw.smw.ask { | ||
"[[Item::" .. title.text .. "[" .. i .. "] ]]", | "[[Item::" .. title.text .. "[" .. i .. "] ]]", | ||
"mainlabel=page" | "mainlabel=page", | ||
"sort=id" | |||
} | } | ||
if res then | if res then | ||
| 第185行: | 第186行: | ||
mw.smw.ask { | mw.smw.ask { | ||
"[[Item::" .. title.text .. " ]]", | "[[Item::" .. title.text .. " ]]", | ||
"mainlabel=page" | "mainlabel=page", | ||
"sort=id" | |||
} or {} | } or {} | ||
end | end | ||
2020年6月29日 (一) 19:57的版本
此模块的文档可以在模块:Item/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 function itemName(data)
local name = data.itemID.name
if data.rankType > 0 then
name = name .. data.rankType
end
return name
end
local function obtain(data)
-- 获得方式
local title = mw.title.getCurrentTitle()
local drop
do
local header = {{label = "敌人", scope = "page"}, {label = "等级", scope = "Lv"}, {label = "地区", scope = "Map"}}
if data.itemID.uni_flag == 0 then
table.insert(header, {label = "插槽", scope = "slot"})
drop = {}
for i = 0, data.itemID.jwl_slot_max do
local res =
mw.smw.ask {
"[[DropWpn::" .. title.text .. "[" .. i .. "] ]] OR [[DropEquip::" .. title.text .. "[" .. i .. "] ]]",
"?lv",
"?map",
"mainlabel=page",
"sort=id"
}
if res then
for _, v in ipairs(res) do
v.slot = i
table.insert(drop, v)
end
end
end
else
drop =
mw.smw.ask {
"[[DropUniWpn::" .. title.text .. " ]] OR [[DropUniEquip::" .. title.text .. " ]]",
"?lv",
"?map",
"mainlabel=page",
"sort=id"
} or {}
end
if #drop > 0 then
for i, _ in ipairs(drop) do
if type(drop[i].Lv) == "table" then
drop[i].Lv = table.concat(drop[i].Lv, "<br>")
end
if type(drop[i].Map) == "table" then
drop[i].Map = table.concat(drop[i].Map, "<br>")
elseif drop[i].Map == nil then
drop[i].Map = ""
end
end
drop =
mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, drop, {class = "xbtable"}))
else
drop = ""
end
end
local npc
do
local header = {{label = "NPC交换", scope = "page"}, {label = "地区", scope = "Area"}}
if data.itemID.uni_flag == 0 then
table.insert(header, {label = "插槽", scope = "slot"})
npc = {}
for i = 0, data.itemID.jwl_slot_max do
local res =
mw.smw.ask {
"[[exchange5::" .. title.text .. "[" .. i .. "] ]] OR [[Present::" .. title.text .. "[" .. i .. "] ]]",
"?Area",
"mainlabel=page",
"sort=id"
}
if res then
for _, v in ipairs(res) do
v.slot = i
table.insert(npc, v)
end
end
end
else
npc =
mw.smw.ask {
"[[exchange5::" .. title.text .. " ]] OR [[Present::" .. title.text .. " ]]",
"?Area",
"mainlabel=page",
"sort=id"
} or {}
end
if #npc > 0 then
for i, _ in ipairs(npc) do
if type(npc[i].Area) == "table" then
npc[i].Area = table.concat(npc[i].Area, "<br>")
elseif npc[i].Area == nil then
npc[i].Area = ""
end
end
npc =
mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, npc, {class = "xbtable"}))
else
npc = ""
end
end
local quest
do
local header = {{label = "任务报酬", scope = "page"}, {label = "NPC", scope = "Npc"}}
if data.itemID.uni_flag == 0 then
table.insert(header, {label = "插槽", scope = "slot"})
quest = {}
for i = 0, data.itemID.jwl_slot_max do
local res =
mw.smw.ask {
"[[任务:+]][[Reward::" .. title.text .. "[" .. i .. "] ]]",
"?Npc",
"mainlabel=page",
"sort=id"
}
if res then
for _, v in ipairs(res) do
v.slot = i
table.insert(quest, v)
end
end
end
else
quest =
mw.smw.ask {
"[[任务:+]][[Reward::" .. title.text .. " ]]",
"?Npc",
"mainlabel=page",
"sort=id"
} or {}
end
if #quest > 0 then
for i, _ in ipairs(quest) do
if type(quest[i].Npc) == "table" then
quest[i].Npc = table.concat(quest[i].Npc, "<br>")
elseif quest[i].Npc == nil then
quest[i].Npc = ""
end
end
quest =
mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, quest, {class = "xbtable"}))
else
quest = ""
end
end
local shop
do
local header = {{label = "商店", scope = "page"}}
if data.itemID.uni_flag == 0 then
table.insert(header, {label = "插槽", scope = "slot"})
shop = {}
for i = 0, data.itemID.jwl_slot_max do
local res =
mw.smw.ask {
"[[Item::" .. title.text .. "[" .. i .. "] ]]",
"mainlabel=page",
"sort=id"
}
if res then
for _, v in ipairs(res) do
v.slot = i
table.insert(shop, v)
end
end
end
else
shop =
mw.smw.ask {
"[[Item::" .. title.text .. " ]]",
"mainlabel=page",
"sort=id"
} or {}
end
if #shop > 0 then
shop =
mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, shop, {class = "xbtable"}))
else
shop = ""
end
end
if #drop > 0 or #npc > 0 or #quest > 0 or #shop > 0 then
return mw.ustring.format(
[[
%s
<div class="row">
%s %s %s %s
</div>
]],
html.h2("获得方式"),
drop,
npc,
quest,
shop
)
else
return ""
end
end
function p.weapon(frame, data)
mw.smw.set {
id = data.row_id,
itemType = data.itemType,
MinAttack = data.itemID.dmg_low,
MaxAttack = data.itemID.dmg_hi,
PhysicalDef = data.itemID.arm_phy,
EtherDef = data.itemID.arm_eth,
CriticalRate = data.itemID.att_lev,
BlockRate = data.itemID.grd_rate
}
if data.itemID.pcid then
mw.smw.set {
pc = data.itemID.pcid.name,
["appearance/" .. data.itemID.pcid.row_id] = data.itemID.style and data.itemID.style.name or nil
}
end
local wikitext = ""
local info = data.comment
local jwl = ""
if data.itemID.uni_flag == 0 then
jwl = data.itemID.jwl_slot_max
else
local jwlArr = {}
for i = 1, 3 do
local jwl_skill = data.itemID["jwl_skill" .. i]
if jwl_skill then
table.insert(jwlArr, jwl_skill.itemID.name .. jwl_skill.rankType .. " (" .. jwl_skill.percent .. "%)")
end
end
jwl = jwl .. table.concat(jwlArr, "<br>")
end
mw.smw.set {jwl = jwl}
info =
info ..
html.wikitable(
{"物品分类", "装备角色", "最小攻击力", "最大攻击力", "物理防御", "以太防御", "暴击率", "格挡率", "插槽(最大数)", "造型"},
{
{
data.itemType,
data.itemID.pcid and data.itemID.pcid.name or "",
data.itemID.dmg_low,
data.itemID.dmg_hi,
data.itemID.arm_phy,
data.itemID.arm_eth,
data.itemID.att_lev,
data.itemID.grd_rate,
jwl,
data.itemID.style and data.itemID.style.name or ""
}
},
{transpose = true, class = "xbtable"}
)
wikitext =
wikitext ..
mw.ustring.format(
[[
<div class="row">
<div class="large-6 columns">%s</div>
</div>
]],
info
)
wikitext = wikitext .. obtain(data)
return compress(wikitext)
end
function p.equip(frame, data)
mw.smw.set {
id = data.row_id,
itemType = data.itemType,
equipType = data.itemID.arm_type,
PhysicalDef = data.itemID.arm_phy,
EtherDef = data.itemID.arm_eth,
Weight = data.itemID.eva_rate
}
local info = data.comment
local jwl = ""
if data.itemID.uni_flag == 0 then
jwl = data.itemID.jwl_slot_max
else
local jwl_skill = data.itemID.jwl_skill1
jwl = jwl .. jwl_skill.itemID.name .. jwl_skill.rankType .. " (" .. jwl_skill.percent .. "%)"
end
mw.smw.set {jwl = jwl}
info =
info ..
html.wikitable(
{"物品分类", "装备类别", "物理防御", "以太防御", "重量", "插槽(最大数)"},
{
{
data.itemType,
data.itemID.arm_type,
data.itemID.arm_phy,
data.itemID.arm_eth,
data.itemID.eva_rate,
jwl
}
},
{transpose = true, class = "xbtable"}
)
local wikitext =
mw.ustring.format(
[[
<div class="row">
<div class="large-6 columns">%s</div>
</div>
]],
info
)
do
local header = {}
local body = {}
for _, parts in pairs(data.itemID.pc) do
if parts.style then
table.insert(header, parts.pcid.name)
table.insert(body, parts.style.name)
mw.smw.set {["appearance/" .. parts.pcid.row_id] = parts.style.name}
end
end
if #body > 0 then
local fashion = html.wikitable(header, {body}, {transpose = true, class = "xbtable"})
wikitext =
wikitext ..
mw.ustring.format(
[[
%s
<div class="row">
<div class="medium-6 columns">%s</div>
</div>
]],
html.h2("造型"),
fashion
)
end
end
wikitext = wikitext .. obtain(data)
return compress(wikitext)
end
function p.fetchDataById(id)
return post("bdat_common.ITM_itemlist", id)
end
function p.main(frame)
local args = getArgs(frame)
local out = ""
local id = args[1]
local data = p.fetchDataById(id)
-- mw.log(mw.text.jsonEncode(data, mw.text.JSON_PRETTY))
if data.itemType == "武器" then
out = out .. p.weapon(frame, data)
elseif
data.itemType == "头部防具" or data.itemType == "身体防具" or data.itemType == "手臂防具" or data.itemType == "腰部防具" or
data.itemType == "腿部防具"
then
out = out .. p.equip(frame, data)
end
return out
end
return p