本WIKI由逆熵战略研究所申请于2020年03月03日创建,编辑权限开放,如遇Chrome浏览器登陆后无法编辑点这里 BWIKI反馈留言板 BWIKI收藏到桌面的方法说明
我们的WIKI还有许多不足之处,欢迎大家积极补充
因系统升级,本站评论区暂时关闭
本站为非官方攻略站,若对官方有任何意见请到官方评论区留言,否则本攻略站有权按照《崩坏3WIKI社区规则》和《崩坏3WIKI免责声明》进行处理。
一路顺风,琪亚娜。我们会等你回家。
模块:女武神图标
此模块的文档可以在模块:女武神图标/doc创建
--模块:女武神图标
--------------------------------------------------
-- 调用模块:女武神数据
--------------------------------------------------
local p = require('模块:女武神数据')
Text = mw.text
--[[
替代文字 =
文字上色 =
nil, --不上色
1, --按女武神等级上色
2, --按改造等级上色
3, --按女武神等级、改造等级分别上色
显示改造 =
nil, --女武神
1, --女武神^改
2, --女武神.改
3, --女武神改
]]
--------------------------------------------------
--公开函数
--------------------------------------------------
p['小图标'] = function(frame)
local data = { }
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
data.dye = args['文字上色']
data.text = args['替代文字']
data.transform = args['显示改造']
return parseShipInStyle1(data)
end
p['仅小图标'] = function(frame)
local data = {}
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
if '改' == mw.ustring.sub(data.ship, -1) then
data.ship = mw.ustring.sub(data.ship, 1, -2)
data.transform = args['显示改造'] or 3
else
data.transform = args['显示改造']
end
return parseShipAvatorOnlyInStyle1(data)
end
p['小图标改'] = function(frame)
local data = {}
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
data.text = args['替代文字'] or args[2]
if '改' == mw.ustring.sub(data.ship, -1) then
data.ship = mw.ustring.sub(data.ship, 1, -2)
data.dye = args['文字上色'] or 2
data.transform = args['显示改造'] or 3
else
data.dye = args['文字上色'] or 1
data.transform = args['显示改造']
end
return parseShipInStyle1(data)
end
p['带框头像文字'] = function(frame)
local data = {}
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
data.dye = args['文字上色']
data.text = args['替代文字']
data.transform = args['显示改造']
return parseShipInStyle3(data)
end
p['仅带框头像'] = function(frame)
local data = {}
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
if '改' == mw.ustring.sub(data.ship, -1) then
data.ship = mw.ustring.sub(data.ship, 1, -2)
data.transform = args['显示改造'] or 3
else
data.transform = args['显示改造']
end
return parseShipAvatorOnlyInStyle3(data)
end
p['仅文字'] = function(frame)
local data = {}
local args = parseArgument(frame)
data.ship = p.NormalizeShipName(args[1] or '未知女武神')
data.dye = args['文字上色']
data.text = args['替代文字']
data.transform = args['显示改造']
return parseShipTextOnly(data)
end
p['无工具提示'] = function(frame)
local args = parseArgument(frame)
local foo = args[1] and p[args[1]]
if not foo then
mw.log('未能找到函数:'..tostring(args[1]))
mw.logObject(args, 'frame.args')
return ('<large style="alert alert-red"> LUA 错误!</large>')
end
table.remove(args, 1)
local html = foo( {args = args} )
return removeToolTip(html)
end
p['立绘预览'] = function(frame)
local args = parseArgument(frame)
local foo = args[1] and p[args[1]]
if not foo then
mw.log('未能找到函数:'..tostring(args[1]))
mw.logObject(args, 'frame.args')
return ('<large style="alert alert-red"> LUA 错误!</large>')
end
table.remove(args, 1)
local ship = p.NormalizeShipName(args[1] or '未知女武神')
if not p.ship_data[ship]
then
mw.log('未能找到女武神!')
mw.logObject(args, 'frame.args')
error(([[< div style = "alert alert-red" >
LUA警告:未找到女武神(% s)的数据。
</ div >]]):format(ship));
end
local template = [==[
<div class= "itemhover" style = "position:relative;
display: inline - block; ">
{ HTML}
< div class= "iteminfo panel panel-primary"
style = "position:absolute;
top: 0;
left: calc(100 % +80px);
width: 200px;
box - shadow: 0 6px 12px rgba(0,0,0,.175);
z - index:1000; ">
[[文件:{ FILE}| 200px | link =]]
</ div >
</ div >
]==]
local img = getShipPortraitFile(ship, args['显示改造'])
local html = foo( {args=args} )
html = template:gsub('\{(%w+)\}', {
HTML = html,
FILE = img,
});
return removeToolTip(html: gsub('[\r\n]', ''))
end
--测试函数
p.test = function()
return p['立绘预览'] {
args = {
[1] = '带框头像文字',
[2] = '绫波',
['显示改造'] = 2,
}
}
end
--------------------------------------------------
-- 主要过程
--------------------------------------------------
--移除当前LUA生成的HTML代码中的工具提示
function removeToolTip(html)
html = html:gsub('(%[%[文件[^%]]-link=)([^|%]]*)([^%]]-%]%])', function(pre, link, post)
if Text.trim(link) == '' then
return pre..']]'
end
href = tostring(mw.uri.fullUrl(link))
return ('[[%s]]'):format(data.ship)
end)
html = html:gsub('%stitle=%b""', '')
return html
end
--参考{ { 模板: 小图标} }
--行内小头像和文本
function parseShipInStyle1(data)
local sd = p.ship_data[data.ship]
local img = getShipAvatarFile(data.ship, data.transform)
local link = sd and data.ship or '|未实装的女武神'
local html = parseShipTextOnly(data)
return ('<span class="xtb-image">[[文件:%s|30px|link=%s]]%s</span>'):format(
img, link, html)
end
p.ParseShipInStyle1 = parseShipInStyle1
--仅行内小头像
function parseShipAvatorOnlyInStyle1(data)
local sd = p.ship_data[data.ship]
local img = getShipAvatarFile(data.ship, data.transform)
local link = sd and data.ship or '|未实装的女武神'
return ('<span class="xtb-image">[[文件:%s|30px|link=%s]]</span>'):format(
img, link)
end
p.ParseShipAvatorOnlyInStyle1 = parseShipAvatorOnlyInStyle1
--参考{ { 模板: 舰体切换列表 / 行} }
--带框大头像和文本
function parseShipInStyle3(data)
local template = [==[
< div style = "display:inline-block;
margin: 3px;
text - align:center;
width: 85px; ">
< div style = "display:inline-block;
position: relative;
overflow: hidden;
height: 80px;
border - radius:7px; ">
[[文件:% s | 80px | link =% s]]
< div style = "position:absolute;
width: 80px;
top: 0px;
!important; ">
[[文件:% s | 80px | link =% s]]
</ div >
</ div >
< span >
% s
</ span >
</ div >
]==]
local sd = p.ship_data[data.ship]
local kai = sd and sd.transform and data.transform
local avator = getShipAvatarFile(data.ship, kai)
local frame = getAvatarFrameFile((kai and sd.rarity + 1) or
sd and sd.nationality==97 and sd.rarity+20 or (sd and sd.rarity))
local link = sd and data.ship or '|未实装的女武神'
local html = parseShipTextOnly(data)
local ret = template:format(avator, link, frame, link, html)
return (ret: gsub('[\r\n]', ''))
end
p.ParseShipInStyle3 = parseShipInStyle3
--仅带框大头像
function parseShipAvatorOnlyInStyle3(data)
local template = [==[
< div style = "display:inline-block;
margin: 3px;
text - align:center;
width: 85px; ">
< div style = "display:inline-block;
position: relative;
overflow: hidden;
height: 80px;
border - radius:7px; ">
[[文件:% s | 80px | link =% s]]
< div style = "position:absolute;
width: 80px;
top: 0px;
!important; ">
[[文件:% s | 80px | link =% s]]
</ div >
</ div >
</ div >
]==]
local sd = p.ship_data[data.ship]
local kai = sd and sd.transform and data.transform
local avator = getShipAvatarFile(data.ship, kai)
local frame = getAvatarFrameFile((kai and sd.rarity + 1) or
sd and sd.nationality==97 and sd.rarity+20 or (sd and sd.rarity))
local link = sd and data.ship or '|未实装的女武神'
local ret = template:format(avator, link, frame, link)
return (ret: gsub('[\r\n]', ''))
end
p.ParseShipAvatorOnlyInStyle3 = parseShipAvatorOnlyInStyle3
--仅显示带颜色的文本
function parseShipTextOnly(data)
local sd = p.ship_data[data.ship]
data.selflink = sd and p.NormalizeShipName(
Text.trim(
mw.title.getCurrentTitle().text
)) == data.ship
--若当前页面是这个女武神,则不进行文字上色
--若查找不到这个女武神的数据,则不对文字上色
local dye = not data.selflink and sd and data.dye;
--生成“改”字的样式
local kai = ""
local iskai = sd and sd.transform and data.transform
if not iskai then
--【模块:女武神数据】中没有记录改造 => 不显示改字
elseif data.text then
--若有【替代文字】=> 不显示改字
elseif data.transform == 1 then
--样式1——女武神^改
kai = '<sup>改</sup>'
if dye == 3 then --按女武神等级、改造等级,分别对文字染色
kai = ('<sup style="color:%s">改</sup>'):format(
rarityToColor(sd.rarity+1)
)
end
elseif data.transform == 2 then
--样式2——女武神.改
kai = '.改'
if dye == 3 then --按女武神等级、改造等级,分别对文字染色
kai = ('.<span style="color:%s">改</span>'):format(
rarityToColor(sd.rarity + 1)
)
end
elseif data.transform == 3 then
--样式3——女武神改
kai = '改'
if dye == 3 then --按女武神等级、改造等级,分别对文字染色
kai = ('<span style="color:%s">改</span>'):format(
rarityToColor(sd.rarity + 1)
)
end
else
mw.log("ParseShipTextOnly> 无效的显示改造参数——"..data.transform..",类型:"..type(data.transform))
end
--改字代码生成完毕
--生成整段文本的样式
local html = ""
local href = tostring(mw.uri.fullUrl(data.ship)) --超链接地址
local text = data.text or data.ship:gsub('JP', ''):gsub('DE', ''):gsub('BB', ''):gsub('DOA', ''):gsub('SSSS', '')--女武神名字(修正“新月JP”)
if not sd then
--当女武神未记录(页面不存在)时
href = tostring(mw.uri.fullUrl(data.ship, {action = edit, redlink = 1}))
html = ('<span class="new nowrap" title="%s(未实装的女武神)" href="%s">%s</span>'):format(
data.ship, href, text
)
elseif data.selflink then
--当前页面是这个女武神=> 不设置超链接
html = ('<strong class="selflink nowrap" style="color:#808080;">%s%s</strong>'):format(
text, kai
)
elseif dye then
--使用使用女武神等级(1)或改造等级(2)对文字染色
local color
if dye == 2 and iskai then
color = rarityToColor(sd.rarity+1)
elseif sd.nationality == 97 then
color = rarityToColor(sd.rarity)
else
color = rarityToColor(sd.rarity)
end
html = ('[[%s|<span class="nowrap" style="color:%s" title="%s" >%s%s</span>]]'):format(
data.ship, color, data.ship, text, kai
)
else
--不对文字上色
html = ('[[%s|<span class="nowrap" title="%s">%s%s</span>]]'):format(
data.ship, data.ship, text, kai
)
end
return html
end
p.ParseShipTextOnly = parseShipTextOnly
--------------------------------------------------
-- 私有函数
--------------------------------------------------
--解析传入参数——去空白符+转换数字
function parseArgument(frame)
local arg = { }
for k, v in pairs(frame.args) do
arg[k] = tonumber(v) or Text.trim(v)
end
return arg
end
--将稀有度转换为颜色
function rarityToColor(rare)
if rare == 2 then
return '#808080'--白色
elseif rare == 3 then
return '#3b8bff' --蓝色
elseif rare == 4 then
return '#8000ff' --紫色
elseif rare == 5 then
return '#c90' --金色
elseif rare == 6 or rare == 7 then
return '#ee494c' --彩色
elseif rare == 15 then
return '#a0522d' --最高方案
elseif rare == 16 then
return '#c06' --决战方案
end
return 'red' --不存在
end
p.RarityToColor = rarityToColor
--返回女武神的头像文件名
function getShipAvatarFile(ship, kai)
return not p.ship_data[ship] and '未知女武神头像.png'
or kai and p.ship_data[ship].transform and ship..'改头像.jpg'
or ship..'头像.jpg'
end
--返回女武神
function getShipPortraitFile(ship, kai)
return not p.ship_data[ship] and '未知女武神立绘.png'
or kai and p.ship_data[ship].transform and ship..'改造.jpg'
or ship..'立绘.jpg'
end
--根据稀有度返回头像外框的文件名
function getAvatarFrameFile(rare)
if rare == 2 then
return '女武神头像外框白色.png'--白色
elseif rare == 3 then
return '女武神头像外框蓝色.png' --蓝色
elseif rare == 4 then
return '女武神头像外框紫色.png' --紫色
elseif rare == 5 then
return '女武神头像外框金色.png' --金色
elseif rare == 6 or rare == 7 then
return '女武神头像外框彩色.png' --彩色
elseif rare == 15 then
return '女武神头像外框最高方案.png' --最高方案
elseif rare == 16 then
return '女武神头像外框决战方案.png' --决战方案
elseif rare == 24 then
return '女武神头像外框精锐META.png' --紫色META
elseif rare == 25 then
return '女武神头像外框超稀有META.png' --金色META
elseif rare == 26 then
return '女武神头像外框海上传奇META.png' --彩色META
end
return '女武神头像外框.png' --不存在
end
return p