模块:IngameStory
跳到导航
跳到搜索
用于编写关卡内剧情。
和一般的AVG剧情不同,本模块用于编写进入关卡后以浮层形式展现的对话剧情。
参数只有data,每行均按照固定格式编写:
C;;行动开始 T;;数天前...... T;;罗德岛 作战训练场 S;;X;;头像 杰西卡;;杜宾老师,对不起我...... S;;X;;头像 杜宾;;干员杰西卡,根据日程安排,已迟到了3分14秒。 S;;2;;头像 杜宾;;博士的救出计划将会在数日后进行,现在我们需要根据实际状况进行演习。 S;;我会告诉你一些相对进阶的作战技巧,同时参与行动的人员也会更加熟悉这些作战技巧,以配合指挥。
其中;;为分隔符,分隔的参数根据第一个参数而变化。
- 第一参数“标识符”指定本行的属性,分为底部对话(T)/浮层对话(S)/注释型句子(C,例如特殊演出)
- (T/C)第二参数即为对话内容或注释内容
- (S)第二参数为同一人连续的句子数,非数字则只有1句
- 如果此参数的数字n>=2,则后续n-1行不使用第三、四参数
- (S)第三参数指定头像(省略扩展名)
- (S)第四参数指定对话内容
local p = {}
function p.list(frame)
local args = (frame == mw.getCurrentFrame() and frame.args) or frame
local data_str = mw.text.trim(args["data"] or "")
res_table = {}
table.insert(res_table, '{| class="wikitable mw-collapsible mw-collapsed mw-collapsible-title-center" style="width:800px;line-height:40px;display:table;white-space:normal;"\n')
table.insert(res_table, '! colspan=2 style="background: #BDBDBD;"| 关卡内剧情 <span class="mc-tooltips"><span class="mdi mdi-help-circle-outline"></span><span style="display:none" data-size="350">在集成战略模式或消耗理智的关卡中,本部分剧情仅在第一次通关前显示。<br>不消耗理智的关卡中,本部分剧情会在每一次作战时显示。</span></span>\n')
local data_table = mw.text.split(data_str, "\n", true)
local first_line = true
local rowspan_count = 0
for i = 1, #data_table do
local da_table = mw.text.split(data_table[i], ";;", true)
local style_str = 'vertical-align:top;'
table.insert(res_table, '|-\n')
if da_table[1]=='S' then --句子
if first_line then --首行
style_str = style_str..'width:40px; '
first_line = false
end
local num_row = tonumber(mw.text.trim(da_table[2] or "")) or 0--rowspan值
if num_row>=2 then --rowspan首行
rowspan_count = num_row - 1
local style_str2 = string.format('style="%s"',style_str)
local rows_str = string.format('rowspan="%s"',num_row)
local avan_str = string.format("[[文件:%s.png|40px|link=]]",mw.text.trim(da_table[3] or ""))
local msg_str = string.format("%s",mw.text.trim(da_table[4] or ""))
local line = string.format("|%s %s|%s\n",style_str2,rows_str,avan_str)
line = line..string.format("|%s\n",msg_str)
table.insert(res_table, line)
else
local line = ''
local style_str2 = string.format('style="%s"',style_str)
if rowspan_count==0 then
local avantar_str = string.format("[[文件:%s.png|40px|link=]]",mw.text.trim(da_table[3] or ""))
local msg_str = string.format("%s",mw.text.trim(da_table[4] or ""))
if style_str ~= '' then
line = string.format("|%s|%s||%s\n",style_str2,avantar_str,msg_str)
else
line = string.format("|%s||%s\n",avantar_str,msg_str)
end
else
local msg_str = string.format("%s",mw.text.trim(da_table[2] or ""))
line = string.format("|%s\n",msg_str)
rowspan_count = rowspan_count - 1
end
table.insert(res_table, line)
end
elseif da_table[1]=='T' then
local comment_str = mw.text.trim(da_table[2] or "")
table.insert(res_table, string.format("|colspan=2|%s\n",comment_str))
else --注释
local comment_str = mw.text.trim(da_table[2] or "")
table.insert(res_table, string.format('!colspan=2 style="line-height: normal;"|%s\n',comment_str))
end
end
table.insert(res_table, '|}[[分类:含有内置剧情的关卡]]')
return table.concat(res_table)
end
return p