模块: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