模块:IngameStory
RaYmondCheung(讨论 | 贡献)2021年10月26日 (二) 13:42的版本
这个模块引用自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 modeJ = mw.text.trim(args["mode"] or "") local data_str = mw.text.trim(args["data"] or "") if modeJ ==1 then res_table = {} table.insert(res_table, '{| class="wikitable mw-collapsible 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">进入过关卡(包括中途退出与完成关卡)后触发特殊对话,无特殊对话则触发通用对话\n') else 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;"| 关卡剧情记录\n') end 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