模块:角色属性:修订间差异
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的6个中间版本) | |||
第1行: | 第1行: | ||
local p = {} | local p = {} | ||
local db = | local db = mw.loadData('模块:角色属性数据') | ||
local dataList = db.char_self_data | local dataList = db.char_self_data | ||
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"} | local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"} | ||
local | local elementsName = {"HP", "SP", "物攻", "物防", "属攻", "属防", "会心", "速度"} | ||
-- | p["角色属性"] = function(frame) | ||
local function | local query_num = frame.args['角色序号'] | ||
local html = mw.html.create() | |||
-- 排序属性 | |||
local function numvalue(char, attr, lang) | |||
local attrValues = {} | |||
for _, data in ipairs(dataList) do | |||
local value = tonumber(lang == "cn" and data.Data_cn and data.Data_cn[attr] or data.Data_jp and data.Data_jp[attr]) | |||
if value then | |||
table.insert(attrValues, value) | |||
end | |||
end | |||
table.sort(attrValues, function(a, b) return a > b end) | |||
local targetData = tonumber(lang == "cn" and char.Data_cn and char.Data_cn[attr] or char.Data_jp and char.Data_jp[attr]) | |||
for i, value in ipairs(attrValues) do | |||
if value == targetData then | |||
return i | |||
end | |||
end | end | ||
return "暂无" | |||
end | end | ||
-- 创建属性表格 | |||
local function generateTable(char, lang) | |||
local tableHtml = mw.html.create('table'):addClass('wikitable'):css('width', '100%') | |||
local tableTitle = (lang == 'cn') and '国服' or '日服' | |||
tableHtml:tag('tr') | |||
:tag('th'):wikitext( tableTitle .. '属性'):done() | |||
:tag('th'):wikitext('基础满级'):done() | |||
:tag('th'):wikitext('6星120级'):done() | |||
:done() | |||
for i, element in ipairs(elements) do | |||
local elementName = elementsName[i] | |||
local maxAttr = "MAX" .. element | |||
local baseAttr = "Base" .. element | |||
local maxAttrValue = lang == "cn" and char.Data_cn and char.Data_cn[maxAttr] or char.Data_jp and char.Data_jp[maxAttr] or "" | |||
local baseAttrValue = lang == "cn" and char.Data_cn and char.Data_cn[baseAttr] or char.Data_jp and char.Data_jp[baseAttr] or "" | |||
local maxRank = numvalue(char, maxAttr, lang) | |||
local baseRank = numvalue(char, baseAttr, lang) | |||
tableHtml:tag('tr') | |||
:tag('td'):wikitext(elementName):done() | |||
:tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done() | |||
:tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done() | |||
:done() | |||
end | |||
for _, | return tableHtml | ||
end | |||
-- 执行查询 | |||
for _, char in ipairs(dataList) do | |||
if query_num == char.owner_order then | |||
html:node(generateTable(char, "jp")) | |||
if char.Data_cn then | |||
html:node(generateTable(char, "cn")) | |||
end | end | ||
end | end |
2024年6月28日 (五) 16:12的最新版本
可在模块:角色属性/doc创建此模块的帮助文档
local p = {}
local db = mw.loadData('模块:角色属性数据')
local dataList = db.char_self_data
local elements = {"HP", "SP", "ATK", "DEF", "MAG", "MDEF", "CRT", "SPD"}
local elementsName = {"HP", "SP", "物攻", "物防", "属攻", "属防", "会心", "速度"}
p["角色属性"] = function(frame)
local query_num = frame.args['角色序号']
local html = mw.html.create()
-- 排序属性
local function numvalue(char, attr, lang)
local attrValues = {}
for _, data in ipairs(dataList) do
local value = tonumber(lang == "cn" and data.Data_cn and data.Data_cn[attr] or data.Data_jp and data.Data_jp[attr])
if value then
table.insert(attrValues, value)
end
end
table.sort(attrValues, function(a, b) return a > b end)
local targetData = tonumber(lang == "cn" and char.Data_cn and char.Data_cn[attr] or char.Data_jp and char.Data_jp[attr])
for i, value in ipairs(attrValues) do
if value == targetData then
return i
end
end
return "暂无"
end
-- 创建属性表格
local function generateTable(char, lang)
local tableHtml = mw.html.create('table'):addClass('wikitable'):css('width', '100%')
local tableTitle = (lang == 'cn') and '国服' or '日服'
tableHtml:tag('tr')
:tag('th'):wikitext( tableTitle .. '属性'):done()
:tag('th'):wikitext('基础满级'):done()
:tag('th'):wikitext('6星120级'):done()
:done()
for i, element in ipairs(elements) do
local elementName = elementsName[i]
local maxAttr = "MAX" .. element
local baseAttr = "Base" .. element
local maxAttrValue = lang == "cn" and char.Data_cn and char.Data_cn[maxAttr] or char.Data_jp and char.Data_jp[maxAttr] or ""
local baseAttrValue = lang == "cn" and char.Data_cn and char.Data_cn[baseAttr] or char.Data_jp and char.Data_jp[baseAttr] or ""
local maxRank = numvalue(char, maxAttr, lang)
local baseRank = numvalue(char, baseAttr, lang)
tableHtml:tag('tr')
:tag('td'):wikitext(elementName):done()
:tag('td'):wikitext(baseAttrValue .. " (" .. baseRank .. ")"):done()
:tag('td'):wikitext(maxAttrValue .. " (" .. maxRank .. ")"):done()
:done()
end
return tableHtml
end
-- 执行查询
for _, char in ipairs(dataList) do
if query_num == char.owner_order then
html:node(generateTable(char, "jp"))
if char.Data_cn then
html:node(generateTable(char, "cn"))
end
end
end
return tostring(html)
end
return p