模块:IngameStory

来自节奏医生中文百科
RaYmondCheung讨论 | 贡献2021年10月26日 (二) 00:40的版本
跳到导航 跳到搜索
这个模块引用自PRTS,并进行了修改。感谢所有编辑们做出的贡献。

本模块用于编写关卡剧情。

参数有两个:mode 和 data

mode 参数控制表头文字,当值为 1 时表头为清洁工文本,不填或填其他值时表头为关卡剧情记录
data 参数填写剧情内容,每行均按照固定格式编写:
C;;进入关卡
T;;数天前......
T;;中海医院 员工休息室
S;;X;;char Paige;;伊恩,去看下病人好不好。
S;;X;;char Ian;;烦内。
S;;2;;char Paige;;我才说你两句你就嫌我烦。
S;;我只想让你好好用过读书。

其中;;(连续两个半角分号)为分隔符,分隔的参数根据第一个参数而变化。

  • 第一参数“标识符”指定本行的属性,分为底部对话(T)/浮层对话(S)/注释型句子(C,例如特殊演出)
简单而言,S为带头像的对话文本;T为不带头像的文本;C为注释,可填写触发条件,对话分类等。
  • (T/C)第二参数即为对话内容或注释内容
  • (S)第二参数为同一人连续的句子数,非数字则只有1句
如果此参数的数字n>=2,则后续n-1行不使用第三、四参数
  • (S)第三参数指定头像文件(省略扩展名)
  • (S)第四参数指定对话内容

附:各角色文件名与中文名称对照表

中文名 文件名 中文名 文件名
佩奇 Paige 玄凤 Cockatiel
伊恩 Ian 猫头鹰 Owl
埃德加 Edega 理查德·休

政客

Politician
清洁工 Janitor 史蒂文森先生 MrStevenson
农场小子 Farmer 史蒂文森太太 MrsStevenson
武士 Samurai 矿工大叔 Miner
狂武士 SamuraiBoss 露西娅 Lucia
少年

洛根

Boy Quaver, Treble

Beat, Clef

Quaver, Treble

Beat, Clef

少女

海莉

Girl 布若 Buro
科尔 HoodieBoy Rin
妮可 SmokinBarista 玛莉嘉 Marija

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;"\n')
	table.insert(res_table, '! colspan=2 style="background: #BDBDBD;"| 关卡内剧情 <span class="mc-tooltips"><i class="fa-question-circle far"></i><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 = ''
		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首行
				style_str = style_str..'vertical-align:top; '
				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