如果你看到本段文字,说明该页面未正常加载全局JS,部分功能将无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:
模块:舰娘定位筛选
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:舰娘定位筛选/doc创建
local p = {}
--------------------------------------------------
-- 公开函数
--------------------------------------------------
p['查询舰娘数据'] = function(frame)
local data = callAskQuery('[[分类:舰娘||方案舰娘||META舰娘||联动舰娘]]', {
'?分组',
'?特殊分组',
'?和谐名',
'?编号',
'?类型',
'?改造后类型',
'?稀有度',
'?改造后稀有度',
'?阵营',
'?装甲类型',
'?满级耐久',
'?改造满级耐久',
'?满级装填',
'?改造满级装填',
'?满级炮击',
'?改造满级炮击',
'?满级雷击',
'?改造满级雷击',
'?满级机动',
'?改造满级机动',
'?满级防空',
'?改造满级防空',
'?满级航空',
'?改造满级航空',
'?满级命中',
'?改造满级命中',
'?满级反潜',
'?改造满级反潜',
'?幸运',
'?满级消耗',
'?航速',
'?改造航速',
'?初始氧气',
'?改造满级氧气',
'?技能1名',
'?技能1',
'?技能2名',
'?技能2',
'?技能3名',
'?技能3',
'?技能4名',
'?技能4',
'?特性标签',
link = 'none',
sort = '编号',
headers = 'hide',
format = 'table',
named_args = 1,
limit = 1000
})
local result = {}
for _, item in ipairs(data) do
result[#result + 1] = parseToTableRow(item, frame.args['popup'], frame.args['info'])
end
return table.concat(result, '')
end
--------------------------------------------------
-- 主要过程
--------------------------------------------------
--将每一行的数据解析为表格的行
local skill_keys = {'技能1名', '技能1', '技能2名', '技能2', '技能3名', '技能3', '技能4名', '技能4'}
function parseToTableRow(args, hasPopup, hasInfo)
--参考[[模板:舰娘数据列表15/行]]
--用于匹配替换的参数列表
local repl_args = {}
for k, v in pairs(args) do
repl_args[tostring(k)] = v --将数字转换为字符串
end
--改造舰娘参数处理
if not isNil(args['改造后类型']) then
repl_args['类型'] = args['改造后类型']
end
if not isNil(args['改造后稀有度']) then
repl_args['稀有度'] = args['改造后稀有度']
end
if not isNil(args['改造满级耐久']) then
repl_args['满级耐久'] = args['改造满级耐久']
end
if not isNil(args['改造满级装填']) then
repl_args['满级装填'] = args['改造满级装填']
end
if not isNil(args['改造满级炮击']) then
repl_args['满级炮击'] = args['改造满级炮击']
end
if not isNil(args['改造满级雷击']) then
repl_args['满级雷击'] = args['改造满级雷击']
end
if not isNil(args['改造满级机动']) then
repl_args['满级机动'] = args['改造满级机动']
end
if not isNil(args['改造满级防空']) then
repl_args['满级防空'] = args['改造满级防空']
end
if not isNil(args['改造满级航空']) then
repl_args['满级航空'] = args['改造满级航空']
end
if not isNil(args['改造满级命中']) then
repl_args['满级命中'] = args['改造满级命中']
end
if not isNil(args['改造满级反潜']) then
repl_args['满级反潜'] = args['改造满级反潜']
end
if not isNil(args['改造航速']) then
repl_args['航速'] = args['改造航速']
end
if not isNil(args['改造满级氧气']) then
repl_args['满级氧气'] = args['改造满级氧气']
end
if not isNil(args['改造后稀有度']) then
repl_args.fenzu = case(args['改造后稀有度'], '稀有','精锐','超稀有','海上传奇')
and '改造'
repl_args['改'] = '.改'
repl_args.gaizaobianhao = '3'
else
repl_args.fenzu = args['分组']
end
--类型分类处理
repl_args.leixing = (case(args['改造后类型'], '驱逐', '轻巡', '重巡', '超巡', '运输', '风帆V') and args['改造后类型'] .. ',前排先锋')
or (case(args['改造后类型'], '潜艇', '潜母', '风帆S') and args['改造后类型'] .. ',潜艇')
or (args['改造后类型'] .. ',后排主力')
--稀有度颜色处理
if repl_args['稀有度'] == '普通' then
repl_args.raritycolor = '#808080'
elseif repl_args['稀有度'] == '稀有' then
repl_args.raritycolor = '#3b8bff'
elseif repl_args['稀有度'] == '精锐' then
repl_args.raritycolor = '#8000ff'
elseif repl_args['稀有度'] == '超稀有' then
repl_args.raritycolor = '#c90'
elseif repl_args['稀有度'] == '海上传奇' then
repl_args.raritycolor = '#ee494c'
elseif repl_args['稀有度'] == '最高方案' then
repl_args.raritycolor = '#a0522d'
elseif repl_args['稀有度'] == '决战方案' then
repl_args.raritycolor = '#c06'
else
repl_args.raritycolor = 'red'
end
--和谐名处理
if not isNil(args['和谐名']) then
if not isNil(args['改造后稀有度']) then
repl_args['页面链接'] = '<span class="xtb-image" style="display:none;">[[file:'..args[1]..'改头像.jpg|25px|link='..args[1]..']]</span>[['..args[1]..'|<span style="color:'..repl_args.raritycolor..';">'..args[1]..'('..args['和谐名']..').改</span>]]'
else
repl_args['页面链接'] = '<span class="xtb-image" style="display:none;">[[file:'..args[1]..'头像.jpg|25px|link='..args[1]..']]</span>[['..args[1]..'|<span style="color:'..repl_args.raritycolor..';">'..args[1]..'('..args['和谐名']..')</span>]]'
end
else
if not isNil(args['改造后稀有度']) then
repl_args['页面链接'] = '<span class="xtb-image" style="display:none;">[[file:'..args[1]..'改头像.jpg|25px|link='..args[1]..']]</span>[['..args[1]..'|<span style="color:'..repl_args.raritycolor..';">'..args[1]..'.改</span>]]'
else
repl_args['页面链接'] = '<span class="xtb-image" style="display:none;">[[file:'..args[1]..'头像.jpg|25px|link='..args[1]..']]</span>[['..args[1]..'|<span style="color:'..repl_args.raritycolor..';">'..args[1]..'</span>]]'
end
end
repl_args.texingbiaoqian = args['特性标签']:gsub('<br>',', ')
repl_args['特性标签'] = args['特性标签']:gsub('<br>','、')
repl_args['航速'] = math.floor(tonumber(args['航速']) or 0)
--技能
local popover = [[
]]
local skill_info = ''
local skill_table = '<table class="wikitable skilltable" style="width:100%;border:none;margin:0;"'
for i, key in ipairs(skill_keys) do
if not isNil(args[key]) then
if i % 2 == 1 then
skill_table = skill_table .. ([[
<tr style="font-weight:bold"><td>%s</td></tr>
]]):format(args[key])
skill_info = skill_info .. ([[
<p><span style="font-weight:bold">%s</span><br>
]]):format(args[key])
else
skill_table = skill_table .. ([[
<tr style="text-align:left"><td>%s</td></tr>
]]):format(args[key])
skill_info = skill_info .. ([[
%s</p>
]]):format(args[key])
end
end
end
repl_args.POPOVER = ''
if hasPopup then
repl_args.POPOVER = '<div style="display:none;"><div style="width:300px;max-width:100%;">\n' .. skill_table .. '</table>' .. '</div></div>'
end
repl_args.INFO = ''
if hasInfo then
repl_args.SKILL_INFO = skill_info
repl_args.INFO = ([[<span data-id="info_{{{1}}}{{{改}}}" style="display:none">{{{页面链接}}}<p>
<span>类型:</span>{{{类型}}}<br>
<span>装甲类型:</span>{{{装甲类型}}}
</p><hr><p>
<span>耐久:</span>{{{满级耐久}}}<br>
<span>装填:</span>{{{满级装填}}}<br>
<span>炮击:</span>{{{满级炮击}}}<br>
<span>雷击:</span>{{{满级雷击}}}<br>
<span>机动:</span>{{{满级机动}}}<br>
<span>防空:</span>{{{满级防空}}}<br>
<span>航空:</span>{{{满级航空}}}<br>
<span>命中:</span>{{{满级命中}}}<br>
<span>反潜:</span>{{{满级反潜}}}<br>
<span>幸运:</span>{{{幸运}}}<br>
<span>消耗:</span>{{{满级消耗}}}<br>
<span>航速:</span>{{{航速}}}<br>
<span>氧气:</span>{{{初始氧气}}}<br>
</p><hr>
<span>特性标签:</span>{{{特性标签}}}<br>
<hr>{{{SKILL_INFO}}}</span>
]]):gsub('%{%{%{(.-)%}%}%}', function(key)
return repl_args[key] or ''
end
)
end
repl_args.COMPARESEL = mw.getCurrentFrame():preprocess('<div class="compare-label"><span class="" onclick="card_sel(this);">对比</span></div>')
return ([[
|-class="divsort" data-param0="0" data-param1="{{{leixing}}}" data-param2="{{{稀有度}}}" data-param3="{{{阵营}}}" data-param4="{{{装甲类型}}}" data-param5="{{{满级消耗}}}" data-param6="{{{texingbiaoqian}}}" data-param7="{{{fenzu}}},{{{特殊分组}}}"
| class="mwiki_hide" | {{{gaizaobianhao}}}{{{编号}}}
|<span data-cardurl="{{{1}}}{{{改}}}">
<div class="popup"><div style="position:relative;">{{{页面链接}}}</div>{{{POPOVER}}}</div>
{{{INFO}}}
</span>
| class="mwiki_hide" | {{{类型}}}
| class="mwiki_hide" | {{{特性标签}}}
| class="mwiki_hide" | {{{装甲类型}}}
|{{{满级耐久}}}
|{{{满级装填}}}
|{{{满级炮击}}}
|{{{满级雷击}}}
|{{{满级机动}}}
|{{{满级防空}}}
|{{{满级航空}}}
|{{{满级命中}}}
|{{{满级反潜}}}
|{{{幸运}}}
|{{{满级消耗}}}
|{{{航速}}}
|{{{初始氧气}}}
|<div class="cpr_btn1" data-card="{{{1}}}{{{改}}}" data-id="box_{{{1}}}{{{改}}}" data-cardinfo="info_{{{1}}}{{{改}}}"><span class="compare-label";>对比</span></div>
]]):gsub('%{%{%{(.-)%}%}%}', function(key)
return repl_args[key] or ''
end
)
end
--------------------------------------------------
-- 私有函数
--------------------------------------------------
--检查字符串是否为空
function isNil(s)
return not s or s == ''
end
--检查table中是否含有某项
function case(value, ...)
for _, v in ipairs({...}) do
if value == v then return true end
end
return false
end
--调用#ask语义查询,并将结果解析为table
function callAskQuery(title, args)
local frame = mw.getCurrentFrame()
args.format = 'table'
local html = frame:callParserFunction('#ask:'..title, args)
--返回解析结果的key
local keys = {}
keys[1] = '' --#ask的参数#1是title
for i, v in ipairs(args) do
keys[i+1] = mw.text.trim(v:sub(2))
end
local data = {}
for tr in html:gmatch('<tr .-</tr>') do
if tr:match('smwfooter') then break end
local item = {}
local i = 1 --#1单元格是页面名称
for td in tr:gmatch('<td.->(.-)</td>') do
td = mw.text.trim(td)
item[i] = td
if keys[i] then item[ keys[i] ] = td end
i = i + 1
end
table.insert(data, item)
end
return data
end
return p