模块:IngameStory

来自PRTS
跳到导航 跳到搜索

用于编写关卡内剧情。

和一般的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