如果你看到本段文字,说明该页面未正常加载全局JS,部分功能无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:
模块:彩蛋台词
刷
历
编
跳到导航
跳到搜索
这个模块用来显示彩蛋台词的触发条件。
特定舰船
{{#invoke:彩蛋台词|舰船|新月|小天鹅|命运女神|萤火虫}} 或 {{#invoke:彩蛋台词|舰船|20109|20110|20112|20114}} 或 {{#invoke:彩蛋台词|CoupleShip|201091|201101|命运女神|201141}} |
(新月,小天鹅,命运女神,萤火虫) |
参数支持舰船ID或舰船名字。 舰船ID支持XXX和XXX1两种格式。 |
{{#invoke:彩蛋台词|舰船|新月|小天鹅|命运女神|萤火虫|数量=1}} {{#invoke:彩蛋台词|舰船|新月|小天鹅|命运女神|萤火虫|数量=2}} {{#invoke:彩蛋台词|舰船|新月|小天鹅|命运女神|光辉|数量=4}} |
(新月,小天鹅,命运女神,萤火虫) |
数量规定编队中存在几艘船。 |
{{#invoke:彩蛋台词|解析|20109|20110|20112|20114|2|0}} |
(新月,小天鹅,命运女神,萤火虫) | 旧的写法 |
特定类型
{{#invoke:彩蛋台词|类型|重巡|数量=2}} 或 {{#invoke:彩蛋台词|CoupleType|3|数量=2}} 或 {{#invoke:彩蛋台词|CoupleType|3|2}} |
(重巡2艘) |
支持舰船类型ID或舰船类型的名字 函数 |
{{#invoke:彩蛋台词|解析|3|2|1}} |
(重巡2艘) | 旧的写法 |
特定阵营
{{#invoke:彩蛋台词|阵营|皇家|数量=5}} 或 {{#invoke:彩蛋台词|CoupleNation|2|数量=5}} 或 {{#invoke:彩蛋台词|CoupleNation|2|5}} |
(皇家5艘) |
支持阵营ID或阵营的名字 函数 |
{{#invoke:彩蛋台词|解析|2|5|3} |
(皇家5艘) | 旧的写法 |
特定画师
{{#invoke:彩蛋台词|画师|番茄|数量=3}} 或 {{#invoke:彩蛋台词|CoupleIllustro|4|数量=3}} 或 {{#invoke:彩蛋台词|CoupleIllustro|4|3}} |
(番茄舰队3艘) (番茄大队3只) |
支持画师ID或画师的名字。 (有些画师的舰队有独特的彩蛋) |
{{#invoke:彩蛋台词|解析|4|3|4} |
(番茄大队3只) | 旧的写法 |
Text = mw.text
local p = {}
ZhNum = {
[1] = '一',
[2] = '两',
[3] = '三',
[4] = '四',
[5] = '五',
[6] = '六',
[7] = '七',
[8] = '八'
}
--------------------------------------------------
-- 公开函数
--------------------------------------------------
p.Parse = function(frame)
local arg = parseArgument(frame)
local n = #arg
if n < 1 then return '' end
local couple_type = arg[n]
arg[n] = nil
if couple_type == 0 then
-- CoupleShip
--10112,10113,10114,2,0
local span_num = arg[#arg]
arg[#arg] = nil
return parseShipCouple(arg, span_num)
elseif couple_type == 1 then
--CoupleType
--3-2-1
return parseTypeCouple(arg[1], arg[2])
elseif couple_type == 3 then
--CoupleNation
--2-5-3
return parseNationCouple(arg[1], arg[2])
elseif couple_type == 4 then
--CoupleIllustro
--4,3,4
return parseIllustroCouple(arg[1], arg[2])
end
return [[<small>'''(???)'''</small>]]
end
p['解析']=p.Parse
p.CoupleShip = function(frame)
local arg = parseArgument(frame)
if not arg[2] then
arg[1] = arg[1] or '???'
return parseShipCouple(arg, 1)
end
local span_num = arg['数量'] or 1
local tmp = arg[#arg]
if type(tmp) == 'number' and tmp <= 8 then
span_num = tmp
arg[#arg] = nil
end
return parseShipCouple(arg, span_num)
end
p.CoupleType = function(frame)
local arg = parseArgument(frame)
return parseTypeCouple(arg[1] or '???', arg[2] or arg['数量'] or 1)
end
p.CoupleNation = function(frame)
local arg = parseArgument(frame)
return parseNationCouple(arg[1] or '???', arg[2] or arg['数量'] or 1)
end
p.CoupleIllustro = function(frame)
local arg = parseArgument(frame)
return parseIllustroCouple(arg[1] or '???', arg[2] or arg['数量'] or 1)
end
p['舰船'] = p.CoupleShip
p['类型'] = p.CoupleType
p['阵营'] = p.CoupleNation
p['画师'] = p.CoupleIllustro
--------------------------------------------------
-- 主要过程
--------------------------------------------------
--特定舰船触发的彩蛋
function parseShipCouple(shipList, spanNum)
local title = '' --编队中包含xxx、xxx或xxx中任意n艘
local text = '' --(xx, xx, xx)
spanNum = spanNum or 1
if #shipList == 1 then
title = ('编队中包含%s'):format(shipIdToName(shipList[1]))
text = '(' .. spanLink(shipIdToName(shipList[1]), title) ..')'
else
for i, v in ipairs(shipList) do
shipList[i] = shipIdToName(shipList[i])
if i == 1 then
title = shipList[i]
elseif i ~= n then
title = title .. '、' .. shipList[i]
elseif #shipList == spanNum then
title = title .. '和' .. shipList[i]
else
title = title .. '或' .. shipList[i]
end
end
title = #shipList == spanNum
and ('编队中包含%s%s艘舰船'):format(title, ZhNum[spanNum])
or ('编队中包含%s中任意%s艘舰船'):format(title, ZhNum[spanNum])
for i, v in ipairs(shipList) do
if i == 1 then
text = spanLink(shipList[i], title)
else
text = text .. ',' .. spanLink(shipList[i], title)
end
end
text = '(' .. text .. ')'
end
return spanText(title, text)
end
--舰船类型触发的彩蛋
function parseTypeCouple(shipType, spanNum)
--3-2-1
local ship_type = typeIdToName(shipType)
local title = ('编队中包含%d艘类型为%s的舰船'):format(spanNum, ship_type)
local text = '('..spanLink(ship_type, title, ship_type..spanNum..'艘')..')'
return spanText(title, text)
end
--特定阵营触发的彩蛋
function parseNationCouple(nationId, spanNum)
--2-5-3
local nation = nationIdToName(nationId)
local title = ('编队中包含%d艘属于%s的舰船'):format(spanNum, nation)
local text = '('..spanLink('阵营',title, nation..spanNum..'艘')..')'
return spanText(title, text)
end
--特定画师触发的彩蛋
function parseIllustroCouple(illustroId, spanNum)
--4,3,4
local name = illustroIdToName(illustroId)
local fleet = getFleetNickname(illustroId)
return spanText(
('编队中包含%d艘画师为%s的舰船'):format(spanNum, name),
('('..fleet..')'):format(spanNum)
)
end
--------------------------------------------------
-- 工具函数
--------------------------------------------------
function shipIdToName(id)
mSHD = require('模块:舰娘数据')
return type(id) == 'string' and id
or mSHD.ShipIdToName(id, '未知')
end
function typeIdToName(id)
mSHD = require('模块:舰娘数据')
return type(id) == 'string' and id
or mSHD.TypeIdToName(id, '未知')
end
function nationIdToName(id)
mSHD = require('模块:舰娘数据')
return type(id) == 'string' and id
or mSHD.NationIdToName(id, '未知')
end
function illustroIdToName(id)
if type(id) == 'string' then return id end
mILL = require('模块:画师数据')
local data = mILL.GetIllustratorData(id)
if not data then return '未知' end
return data.name or data.pen_name
end
function getFleetNickname(id)
if id == 10 then return '猴子军团%d只'
elseif id == 8 then return '八才战队%d艘'
elseif id == 4 then return '番茄大队%d只'
elseif id == 1 then return '枫之军团%d艘'
elseif id == 7 then return '阿鸡分队%d只'
end
mILL = require('模块:画师数据')
local data = mILL.GetIllustratorData(id)
if not data then
return type(id) == 'string'
and id .. '舰队%d艘'
or '未知舰队%d艘'
end
return (data.pen_name or data.name) .. '舰队%d艘'
end
function spanText(title, text)
return ('<span style="font-weight:bold;font-size:smaller;color:#555555;" title="%s">%s</span>')
:format(tostring(title), tostring(text))
end
function spanLink(link, title, text)
return ('[[%s|<span style="color:#555555;" title="%s">%s</span>]]')
:format(tostring(link), tostring(title), tostring(text or link))
-- return ('[[%s|<span style="color:#555555;" title="%s">%s</span>]]')
-- :format(tostring(link), tostring(title), tostring(text or link))
end
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
return p