全站通知:
模块:升级
刷
历
编
跳到导航
跳到搜索
示例
{{升级 |科技名称 = 机甲核心 |新列 = 能量上限,机甲耐久度,激光武器范围,激光武器伤害 |铁块*20+铜块*20, 3600, , , +80.0MJ 核心能量上限 机甲耐久度 +300 机甲激光武器攻击距离 +1m, 200MJ,11m,+300,26hp |电磁矩阵*100+能量矩阵*100, 36.0k, , , +200MJ 核心能量上限 机甲耐久度 +300 机甲激光武器攻击距离 +1m 机甲激光武器伤害 +2.0hp, 500MJ,12m,+600,28hp |{{图标|信息矩阵|1000}}<math>×Lv</math>,<math>500(Lv-2)</math>M,,, 此行是杜撰的数据 仅作展示用, 800MJ,13m,+900,30hp }}
机甲核心
等级 | 图标 | 研究消耗 | 数据量 | 解锁 | 能量上限 | 机甲耐久度 | 激光武器范围 | 激光武器伤害 |
1 | 2020 | 3600 哈希块 | +80.0MJ 核心能量上限 | 200MJ | 11m | +300 | 26hp | |
2 | 100100 | 36.0k 哈希块 | +200MJ 核心能量上限 | 500MJ | 12m | +600 | 28hp | |
∞ | 1000[math]\displaystyle{ ×Lv }[/math][1] | [math]\displaystyle{ 500(Lv-2) }[/math]M 哈希块 | 此行是杜撰的数据 | 800MJ | 13m | +900 | 30hp |
注意事项
- 当不存在“科技名称”参数时,模版会自动从页面名称猜测,但依然建议写入本参数
- 可以通过“新列”参数为表格添加自定义的新列,“新列”参数中各值用逗号分开
- 其他参数不需要参数名,依次写上这级科技的研究消耗、数据量(无单位)、前置科技、后续科技和解锁。参数中各值同样用逗号分开,没有的可以空过去
- 当所有升级科技对某个值都没有取值时,模板渲染的表格会忽略这一列
- 为保持美观,前置科技和后续科技中不要填和它同名的相邻等级科技
- 研究消耗、前置科技和后续科技按{{公式}}中的写法填入
- 当出现无限科技时,用{{图标}}模板和<math>标签填入公式
- “解锁”的值默认被<poem>标签环绕,识别所有的换行
注释
- ↑ 这里的“Lv”是科技等级的意思。
local getArgs = require([[Module:Arguments]]).getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame, {removeBlanks = false})
return p._main(frame, args)
end
function p._main(frame, args)
local techArgsGrp = {}
local tableHead = {"等级", "图标", "研究消耗", "数据量", "前置科技", "后续科技", "解锁"}
local techName = ''
if args['科技名称'] then
techName = args['科技名称']
else
techName = frame:getParent():getTitle()
end
-- 将其他传参格式化,获得二维数组techArgsGrp
for k, v in ipairs(args) do
if type(k) == 'number' then
local row = {}
if v == nil then
v = ','
end
for key, text in pairs(mw.text.split(v, '[\,,]')) do
row[key] = mw.text.trim(text)
end
table.insert(techArgsGrp, k, row)
end
end
-- 将参数“新列”格式化,并与tableHead合并
if args['新列'] == nil then
args['新列'] = ''
end
for key, text in pairs(mw.text.split(args['新列'], '[\,,]')) do
table.insert(tableHead, mw.text.trim(text))
end
-- 遍历techArgsGrp,找到没有值的列,获得最终的tableHead
for i = 3, #tableHead do
local nillTableHead = true
for row = 1, #techArgsGrp do
if techArgsGrp[row][i-2] ~= "" and techArgsGrp[row][i-2] ~= nil then
nillTableHead = false
break
end
end
if nillTableHead then
tableHead[i] = ""
end
end
-- 拼接表格
local table = mw.html.create('table')
table:css({['border-collapse']='separate', ['border-spacing']='5px 0px'})
-- 表头
local th = mw.html.create('tr')
th
:css('text-align', 'center')
:addClass('dsp-font')
for i = 1, #tableHead do
if tableHead[i] ~= "" and tableHead[i] ~= nil then
local cell = mw.html.create('td')
if tableHead[i] == '前置科技' then
cell:wikitext(tableHead[i]..frame:extensionTag('ref', '这里列出的前置科技不包括和它同名的上一级科技。'))
elseif tableHead[i] == '后续科技' then
cell:wikitext(tableHead[i]..frame:extensionTag('ref', '这里列出的后续科技不包括和它同名的下一级科技。'))
else
cell:wikitext(tableHead[i])
end
th:node(cell)
end
end
table:node(th)
-- 表的内容
for i = 1, #techArgsGrp do
local tr = mw.html.create('tr')
---- 等级
if tableHead[1] ~= '' and tableHead[1] ~= nil then
local levelCell = mw.html.create('td')
if string.find(techArgsGrp[i][1], 'math') then
levelCell
:wikitext('∞')
:css('text-align', 'center')
else
levelCell
:wikitext(i)
:css('text-align', 'center')
:addClass('dsp-font')
end
tr:node(levelCell)
end
---- 图标
if tableHead[2] ~= '' and tableHead[2] ~= nil then
local iconCell = mw.html.create('td')
iconCell:wikitext(frame:expandTemplate{
title = '图标',
args = {techName..'('..i..')'}
})
tr:node(iconCell)
end
---- 研究消耗
if tableHead[3] ~= '' and tableHead[3] ~= nil then
local consumeCell = mw.html.create('td')
if string.find(techArgsGrp[i][1], 'math') then
consumeCell:wikitext(techArgsGrp[i][1]..frame:extensionTag('ref', '这里的“Lv”是科技等级的意思。'))
else
consumeCell:wikitext(frame:expandTemplate{
title = '公式',
args = {techArgsGrp[i][1]}
})
end
tr:node(consumeCell)
end
---- 数据量
if tableHead[4] ~= '' and tableHead[4] ~= nil then
local dataCell = mw.html.create('td')
local techDataNum = mw.html.create('span')
local techDataHash = mw.html.create('span')
if mw.ustring.len(techArgsGrp[i][2]) > 8 then
techDataNum:css('font-size', '12px')
else
techDataNum:css('font-size', '20px')
end
techDataNum
:addClass('dsp-font')
:wikitext(techArgsGrp[i][2])
techDataHash
:css({['font-size'] = '12px', ['white-space'] = 'nowrap'})
:addClass('dsp-font')
:wikitext(' 哈希块')
dataCell
:node(techDataNum)
:node(techDataHash)
tr:node(dataCell)
end
---- 前置科技
if tableHead[5] ~= '' and tableHead[5] ~= nil then
local beforeTechCell = mw.html.create('td')
beforeTechCell:wikitext(frame:expandTemplate{
title = '公式',
args = {techArgsGrp[i][3]}
})
tr:node(beforeTechCell)
end
---- 后续科技
if tableHead[6] ~= '' and tableHead[6] ~= nil then
local afterTechCell = mw.html.create('td')
afterTechCell:wikitext(frame:expandTemplate{
title = '公式',
args = {techArgsGrp[i][4]}
})
tr:node(afterTechCell)
end
---- 解锁
if tableHead[7] ~= '' and tableHead[7] ~= nil then
local unlockCell = mw.html.create('td')
unlockCell:wikitext(frame:extensionTag('poem', techArgsGrp[i][5]))
tr:node(unlockCell)
end
---- 新列
for col = 8, #tableHead do
if tableHead[col] ~= '' and tableHead[col] ~= nil then
local cell = mw.html.create('td')
cell
:css('text-align', 'right')
:wikitext(techArgsGrp[i][col-2])
tr:node(cell)
end
end
table:node(tr)
end
-- 将表放到dsp-box模板里
local dspBox = mw.html.create('div')
dspBox
:css('display', 'flex')
:wikitext(frame:expandTemplate{
title = 'dsp-box',
args = {techName, tostring(table)}
})
return tostring(dspBox)
end
return p