模块:Plot
这个模块用来生成与剧情序列有关的东西。
navigate函数:用来生成页眉导航(上一关、下一关)。匿名参数按顺序为:类别、系列名、PAGENAME、±1、override。
- 类别:同Template:Navigator/plot,主线EP,支线SS,故事集VN
- 系列名:同Template:Navigator/plot,主线填章节数(阿拉伯数字),其它填活动名
- PAGENAME:强制指定当前页面名
- 距离当前页的距离,前一页为-1,后一页为+1。写0大概没有意义,填其它数可能会报错,没试过(其实填0也没试过
- override:不查表而是直接以该值作为页面结果进行处理。
list和mobile函数:用来生成Template:剧情导航的剧情序列。匿名参数按顺序为:类别、系列名。好像没必要再解释了。
list用于桌面版navbox,mobile则是移动版的表格低配替代品。分隔符我用的是 <b>·</b> ,和{{dot}}不一样。然后就去把{{dot}}改了
剧情数据存储在三个子页面:/EP、/SS、/VN。分别为主线、支线、故事集。
一些页面在表中以[[X|Y]]的形式储存。Module:Plot/special列出了相关页面及其显示名称。
如何修改、添加子页面的数据?
模仿已有的数据吧,就注意尾巴要不要加逗号,我也忘了该不该加了反正现在能用。
Module:Plot/special要怎么用呢?
模块的行为是去除PAGENAME后面的/NBT、/BEG或者/END,分别替换为(什么都没有)、行动前、行动后,然后得到显示名称。(故事集剧情还会把关卡编号去掉。)当没法按这个逻辑生成显示名称的时候就要用到/special了。/special的语法是p[页面名] = 显示名
,如p['W2G/BEG'] = '序章·上'
。然后在相应的表中直接以[[X|Y]]的形式加入即可,如这边的"[[W2G/BEG|序章·上]]",
。
local z = {}
function toLink(a, st)
if st=='VN' then
return '[[' .. a .. '|' .. mw.ustring.gsub(a, '^.- (.+)/NBT$', '%1') .. ']]'
else
local suf = ''
sub = mw.ustring.sub(a, -3)
if sub == 'BEG' then
suf = ' <span style="font-size:80%;white-space:nowrap">行动前</span>'
elseif sub == 'END' then
suf = ' <span style="font-size:80%;white-space:nowrap">行动后</span>'
elseif sub == 'NBT' then
else
return a
end
return '[[' .. a .. '|' .. mw.ustring.sub(mw.ustring.gsub(a, '^(.-) ', '<span style="white-space:nowrap">%1</span> '), 0, -5) .. suf .. ']]'
end
end
--- 传参:类别、系列名、{{pagename}}、±1、override
function z.navigate(frame)
local cat = frame.args[1]
local series = frame.args[2]
local pagename = frame:preprocess(frame.args[3])
local direction = tonumber(frame.args[4])
local re = frame:preprocess(frame.args[5])
local isEP = false
if re ~= '#default' then
return toLink(re, cat)
end
local npn = require('Module:Plot/special')[pagename]
if npn then
pagename = '[[' .. pagename .. '|' .. npn .. ']]'
end
if cat == 'EP' then
series = tonumber(series) + 1 --主题曲从第零章开始,但Lua表格的键从1开始
isEP = true
end
local e = require('Module:Plot/' .. cat)
local stories = e[series]
local position = nil
for i, value in ipairs(stories) do
if value == pagename then
position = i
break
end
end
if position then
local delta = position + direction
if delta == 0 then
if isEP and series ~= 1 then
local f
f = e[series - 1]
return toLink(f[#f], cat)
else
return ''
end
elseif delta == #stories + 1 then
if isEP and series ~= #e then
e = e[series + 1]
return toLink(e[1], cat)
else
return ''
end
else
return toLink(stories[delta], cat)
end
else
return 'Error[[Category:剧情导航出现错误的页面]]'
end
end
function z.list(frame)
wt = {}
local cat = frame.args[1]
local series = frame.args[2]
if cat == 'EP' then
series = tonumber(series) + 1 --主题曲从第零章开始,但Lua表格的键从1开始
end
local e = require('Module:Plot/' .. cat)
local stories = e[series]
for i, value in ipairs(stories) do
table.insert(wt, '<li>' .. toLink(stories[i], cat) .. '</li>')
end
return table.concat(wt)
end
-- for Navbox for mobile
function z.mobile(frame)
wt = {}
local cat = frame.args[1]
local series = frame.args[2]
if cat == 'EP' then
series = tonumber(series) + 1 --主题曲从第零章开始,但Lua表格的键从1开始
end
local e = require('Module:Plot/' .. cat)
local stories = e[series]
for i, value in ipairs(stories) do
table.insert(wt, toLink(stories[i], cat))
end
return table.concat(wt, ' <b>·</b> ')
end
return z