Item:修订间差异
来自蒙纳多研究本部
MWBot |
MWBot |
||
| (未显示同一用户的3个中间版本) | |||
| 第100行: | 第100行: | ||
} or {} | } or {} | ||
end | end | ||
if #npc > 0 then | if #npc > 0 then | ||
| 第132行: | 第130行: | ||
"sort=id" | "sort=id" | ||
} | } | ||
if res then | if res then | ||
for _, v in ipairs(res) do | for _, v in ipairs(res) do | ||
| 第151行: | 第148行: | ||
if #quest > 0 then | 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 = | quest = | ||
mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, quest, {class = "xbtable"})) | mw.ustring.format([[<div class="large-6 columns">%s</div>]], html.wikitable(header, quest, {class = "xbtable"})) | ||
| 第158行: | 第162行: | ||
end | end | ||
if #drop > 0 or #npc > 0 or #quest > 0 then | 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( | return mw.ustring.format( | ||
[[ | [[ | ||
%s | %s | ||
<div class="row"> | <div class="row"> | ||
%s %s %s | %s %s %s %s | ||
</div> | </div> | ||
]], | ]], | ||
| 第169行: | 第210行: | ||
drop, | drop, | ||
npc, | npc, | ||
quest | quest, | ||
shop | |||
) | ) | ||
else | else | ||
| 第304行: | 第346行: | ||
for _, parts in pairs(data.itemID.pc) do | for _, parts in pairs(data.itemID.pc) do | ||
if parts.style then | if parts.style then | ||
table.insert(header, parts.pcid.name) | table.insert(header, addlink(parts.pcid.name, "", "造型装备/" .. parts.pcid.name)) | ||
table.insert(body, parts.style.name) | table.insert(body, parts.style.name) | ||
mw.smw.set {["appearance/" .. parts.pcid.row_id] = parts.style.name} | mw.smw.set {["appearance/" .. parts.pcid.row_id] = parts.style.name} | ||
| 第327行: | 第369行: | ||
wikitext = wikitext .. obtain(data) | wikitext = wikitext .. obtain(data) | ||
return compress(wikitext) | |||
end | |||
function p.collection(frame, data) | |||
local title = mw.title.getCurrentTitle() | |||
local isMelia = "相连的未来" == mw.ustring.sub(tostring(title), 1, 5) | |||
local wikitext = "" | |||
local area = data.itemID.mapID and data.itemID.mapID.name or "其他" | |||
mw.smw.set { | |||
id = data.row_id, | |||
itemType = data.itemType, | |||
area = area, | |||
collectionType = data.itemID.type | |||
} | |||
local info = data.comment | |||
info = | |||
info .. | |||
html.wikitable( | |||
{"物品分类", "种类", "产地"}, | |||
{ | |||
{ | |||
"收藏品", | |||
data.itemID.type, | |||
area | |||
} | |||
}, | |||
{transpose = true, class = "xbtable"} | |||
) | |||
wikitext = | |||
wikitext .. | |||
mw.ustring.format( | |||
[[ | |||
<div class="row"> | |||
<div class="large-6 columns">%s</div> | |||
</div> | |||
]], | |||
info | |||
) | |||
if not isMelia then | |||
wikitext = wikitext .. html.h2("礼物") | |||
wikitext = | |||
wikitext .. | |||
mw.ustring.format( | |||
[[ | |||
<div class="row"> | |||
<div class="large-6 columns">%s</div> | |||
</div> | |||
]], | |||
html.wikitable( | |||
{"角色", "牵绊值"}, | |||
{ | |||
{"修尔克", data.itemID.FSplus1}, | |||
{"莱恩", data.itemID.FSplus2}, | |||
{"菲奥伦", data.itemID.FSplus3}, | |||
{"丹邦", data.itemID.FSplus4}, | |||
{"卡露娜", data.itemID.FSplus5}, | |||
{"力奇", data.itemID.FSplus6}, | |||
{"梅莉亚", data.itemID.FSplus7} | |||
}, | |||
{class = "xbtable"} | |||
) | |||
) | |||
mw.smw.set { | |||
FSplus1 = data.itemID.FSplus1, | |||
FSplus2 = data.itemID.FSplus2, | |||
FSplus3 = data.itemID.FSplus3, | |||
FSplus4 = data.itemID.FSplus4, | |||
FSplus5 = data.itemID.FSplus5, | |||
FSplus6 = data.itemID.FSplus6, | |||
FSplus7 = data.itemID.FSplus7 | |||
} | |||
end | |||
wikitext = wikitext .. obtain(data) | |||
if data.itemID.mapID then | |||
wikitext = wikitext .. html.h2("地图") | |||
wikitext = | |||
wikitext .. | |||
'<div class="xb1map-collection" data-map-name="' .. | |||
data.itemID.mapID.id_name .. '" data-highlight-collection="' .. mw.title.getCurrentTitle().text .. '" ></div>' | |||
local c6ExtraCollection = { | |||
1854, | |||
1863, | |||
1864, | |||
1868, | |||
1875, | |||
1876, | |||
1877, | |||
1880, | |||
1881, | |||
1882, | |||
1883, | |||
1884, | |||
1885, | |||
1895, | |||
1904, | |||
1905, | |||
1910, | |||
1913, | |||
1914, | |||
1915, | |||
1916, | |||
1920, | |||
1921, | |||
1922, | |||
1923, | |||
1926, | |||
1927, | |||
1933, | |||
1936, | |||
1941, | |||
1942, | |||
1951, | |||
1952, | |||
1953, | |||
1954, | |||
1955, | |||
1956, | |||
1957, | |||
1958, | |||
1959, | |||
1968, | |||
1975, | |||
1980, | |||
1986, | |||
1990, | |||
1991, | |||
1992, | |||
2003, | |||
2008, | |||
2021, | |||
2022, | |||
2023, | |||
2024, | |||
2025, | |||
2026, | |||
2027, | |||
2028, | |||
2029, | |||
2036, | |||
2046, | |||
2055, | |||
2059, | |||
2060, | |||
2061, | |||
2062, | |||
2063, | |||
2064, | |||
2065, | |||
2066, | |||
2067, | |||
2071, | |||
2072, | |||
2083, | |||
2084, | |||
2085, | |||
2086, | |||
2087, | |||
2088, | |||
2091, | |||
2092, | |||
2093, | |||
2094, | |||
2095, | |||
2096, | |||
2097, | |||
2098, | |||
2099, | |||
2100, | |||
2105, | |||
2114, | |||
2119, | |||
2129, | |||
2134, | |||
2135, | |||
2136, | |||
2137, | |||
2138, | |||
2141, | |||
2142, | |||
2143, | |||
2144, | |||
2145, | |||
2146, | |||
2147, | |||
2149 | |||
} | |||
for _, id in ipairs(c6ExtraCollection) do | |||
if id == data.row_id then | |||
wikitext = | |||
wikitext .. | |||
"<hr>" .. | |||
'<div class="xb1map-collection" data-map-name="ma0401" data-highlight-collection="' .. | |||
mw.title.getCurrentTitle().text .. '" ></div>' | |||
end | |||
end | |||
end | |||
return compress(wikitext) | return compress(wikitext) | ||
| 第351行: | 第600行: | ||
then | then | ||
out = out .. p.equip(frame, data) | out = out .. p.equip(frame, data) | ||
elseif data.itemType == "收藏品" then | |||
out = out .. p.collection(frame, data) | |||
end | end | ||
2020年7月30日 (四) 21:39的最新版本
此模块的文档可以在模块: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, addlink(parts.pcid.name, "", "造型装备/" .. 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.collection(frame, data)
local title = mw.title.getCurrentTitle()
local isMelia = "相连的未来" == mw.ustring.sub(tostring(title), 1, 5)
local wikitext = ""
local area = data.itemID.mapID and data.itemID.mapID.name or "其他"
mw.smw.set {
id = data.row_id,
itemType = data.itemType,
area = area,
collectionType = data.itemID.type
}
local info = data.comment
info =
info ..
html.wikitable(
{"物品分类", "种类", "产地"},
{
{
"收藏品",
data.itemID.type,
area
}
},
{transpose = true, class = "xbtable"}
)
wikitext =
wikitext ..
mw.ustring.format(
[[
<div class="row">
<div class="large-6 columns">%s</div>
</div>
]],
info
)
if not isMelia then
wikitext = wikitext .. html.h2("礼物")
wikitext =
wikitext ..
mw.ustring.format(
[[
<div class="row">
<div class="large-6 columns">%s</div>
</div>
]],
html.wikitable(
{"角色", "牵绊值"},
{
{"修尔克", data.itemID.FSplus1},
{"莱恩", data.itemID.FSplus2},
{"菲奥伦", data.itemID.FSplus3},
{"丹邦", data.itemID.FSplus4},
{"卡露娜", data.itemID.FSplus5},
{"力奇", data.itemID.FSplus6},
{"梅莉亚", data.itemID.FSplus7}
},
{class = "xbtable"}
)
)
mw.smw.set {
FSplus1 = data.itemID.FSplus1,
FSplus2 = data.itemID.FSplus2,
FSplus3 = data.itemID.FSplus3,
FSplus4 = data.itemID.FSplus4,
FSplus5 = data.itemID.FSplus5,
FSplus6 = data.itemID.FSplus6,
FSplus7 = data.itemID.FSplus7
}
end
wikitext = wikitext .. obtain(data)
if data.itemID.mapID then
wikitext = wikitext .. html.h2("地图")
wikitext =
wikitext ..
'<div class="xb1map-collection" data-map-name="' ..
data.itemID.mapID.id_name .. '" data-highlight-collection="' .. mw.title.getCurrentTitle().text .. '" ></div>'
local c6ExtraCollection = {
1854,
1863,
1864,
1868,
1875,
1876,
1877,
1880,
1881,
1882,
1883,
1884,
1885,
1895,
1904,
1905,
1910,
1913,
1914,
1915,
1916,
1920,
1921,
1922,
1923,
1926,
1927,
1933,
1936,
1941,
1942,
1951,
1952,
1953,
1954,
1955,
1956,
1957,
1958,
1959,
1968,
1975,
1980,
1986,
1990,
1991,
1992,
2003,
2008,
2021,
2022,
2023,
2024,
2025,
2026,
2027,
2028,
2029,
2036,
2046,
2055,
2059,
2060,
2061,
2062,
2063,
2064,
2065,
2066,
2067,
2071,
2072,
2083,
2084,
2085,
2086,
2087,
2088,
2091,
2092,
2093,
2094,
2095,
2096,
2097,
2098,
2099,
2100,
2105,
2114,
2119,
2129,
2134,
2135,
2136,
2137,
2138,
2141,
2142,
2143,
2144,
2145,
2146,
2147,
2149
}
for _, id in ipairs(c6ExtraCollection) do
if id == data.row_id then
wikitext =
wikitext ..
"<hr>" ..
'<div class="xb1map-collection" data-map-name="ma0401" data-highlight-collection="' ..
mw.title.getCurrentTitle().text .. '" ></div>'
end
end
end
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)
elseif data.itemType == "收藏品" then
out = out .. p.collection(frame, data)
end
return out
end
return p