Skip to content

CodeSaver

neavo edited this page Dec 5, 2024 · 3 revisions

功能描述

  • 通过 角色代码还原代码段的替换与还原,尽可能的保留文本中混杂的代码段

  

角色代码还原

功能描述

  • RPGMaker MV/MZ 游戏中,角色姓名往往不直接使用明文,而是使用类似 \nn[1] 形式的角色代码,例如:
あれは、\NN[1]さん……    ->   あれは、小夜月さん……
  • 将角色代码还原回明文可以 显著的提升翻译与代码保留的效果,请不要跳过该步骤

使用步骤

  • 在进行翻译时,插件将在 输入文件夹 内寻找 Actors.json 文件
# 假设输入路径是:
.\input\

# 文件位置:
.\input\Actors.json
  • 如果找到 Actors.json,则会自动使用其中的数据执行 角色代码还原 步骤
  • Actors.json 一般在 RPGMaker MV/MZ 游戏目录的 data 或者 www\data 文件夹内
  • 插件只会使用 Actors.json 内的以下数据字段,你也可以手动创建文件来提供数据:
[
  {
    "id": 1,
    "name": "静叶", // 用于还原 \n[1]
    "nickname": "小夜月", // 用于还原 \nn[1]
  },
]

  

代码段的替换与还原

功能描述

  • 在开始翻以前,插件会检查内置的代码段规则
  • 如果找到匹配的代码段,则统一采用 ↓↓ 对其进行替换,并在翻译完成后进行还原
  • 翻译过程中,占位符可能会丢失或者错位,这会导致对代码段的还原失败
  • 这些失败的条目将写入 输出文件夹\代码救星_结果_*.json 文件,请在翻译完成后检查并修正这些错误的条目
  • 目前插件内置规则主要为 RPGMaker 引擎中常见代码,具体如下:
# 用于英文的代码段规则
CODE_PATTERN_EN = (
    SPACE_PATTERN + r"if\(.{0,5}[vs]\[\d+\].{0,10}\)" + SPACE_PATTERN,            # if(!s[982]) if(s[1623]) if(v[982] >= 1)
    SPACE_PATTERN + r"en\(.{0,5}[vs]\[\d+\].{0,10}\)" + SPACE_PATTERN,            # en(!s[982]) en(v[982] >= 1)
    SPACE_PATTERN + r"[/\\][a-z]{1,5}<[\d]{0,10}>" + SPACE_PATTERN,               # /C<1> \FS<12>
    SPACE_PATTERN + r"[/\\][a-z]{1,5}\[[\d]{0,10}\]" + SPACE_PATTERN,             # /C[1] \FS[12]
    SPACE_PATTERN + r"[/\\][a-z]{1,5}(?=<.{0,10}>)" + SPACE_PATTERN,              # /C<非数字> /C<非数字> \FS<非数字> \FS<非数字> 中的前半部分
    SPACE_PATTERN + r"[/\\][a-z]{1,5}(?=\[.{0,10}\])" + SPACE_PATTERN,            # /C[非数字] /C[非数字] \FS[非数字] \FS[非数字] 中的前半部分
)

# 用于非英文的代码段规则
CODE_PATTERN_NON_EN = (
    SPACE_PATTERN + r"if\(.{0,5}[vs]\[\d+\].{0,10}\)" + SPACE_PATTERN,            # if(!s[982]) if(v[982] >= 1)
    SPACE_PATTERN + r"en\(.{0,5}[vs]\[\d+\].{0,10}\)" + SPACE_PATTERN,            # en(!s[982]) en(v[982] >= 1)
    SPACE_PATTERN + r"[/\\][a-z]{1,5}<[a-z\d]{0,10}>" + SPACE_PATTERN,            # /C<y> /C<1> \FS<xy> \FS<12>
    SPACE_PATTERN + r"[/\\][a-z]{1,5}\[[a-z\d]{0,10}\]" + SPACE_PATTERN,          # /C[x] /C[1] \FS[xy] \FS[12]
    SPACE_PATTERN + r"[/\\][a-z]{1,5}(?=<.{0,10}>)" + SPACE_PATTERN,              # /C<非数字非字母> /C<非数字非字母> \FS<非数字非字母> \FS<非数字非字母> 中的前半部分
    SPACE_PATTERN + r"[/\\][a-z]{1,5}(?=\[.{0,10}\])" + SPACE_PATTERN,            # /C[非数字非字母] /C[非数字非字母] \FS[非数字非字母] \FS[非数字非字母] 中的前半部分
)

# 同时作用于英文于非英文的代码段规则
CODE_PATTERN_COMMON = (
    SPACE_PATTERN + r"\\fr" + SPACE_PATTERN,                                      # 重置文本的改变
    SPACE_PATTERN + r"\\fb" + SPACE_PATTERN,                                      # 加粗
    SPACE_PATTERN + r"\\fi" + SPACE_PATTERN,                                      # 倾斜
    SPACE_PATTERN + r"\\\{" + SPACE_PATTERN,                                      # 放大字体 \{
    SPACE_PATTERN + r"\\\}" + SPACE_PATTERN,                                      # 缩小字体 \}
    SPACE_PATTERN + r"\\g" + SPACE_PATTERN,                                       # 显示货币 \G
    SPACE_PATTERN + r"\\\$" + SPACE_PATTERN,                                      # 打开金币框 \$
    SPACE_PATTERN + r"\\\." + SPACE_PATTERN,                                      # 等待0.25秒 \.
    SPACE_PATTERN + r"\\\|" + SPACE_PATTERN,                                      # 等待1秒 \|
    SPACE_PATTERN + r"\\!" + SPACE_PATTERN,                                       # 等待按钮按下 \!
    SPACE_PATTERN + r"\\>" + SPACE_PATTERN,                                       # 在同一行显示文字 \>
    SPACE_PATTERN + r"\\\^" + SPACE_PATTERN,                                      # 显示文本后不需要等待 \^
    SPACE_PATTERN + r"\r\n" + SPACE_PATTERN,                                      # 换行符 \r\n
    SPACE_PATTERN + r"\n" + SPACE_PATTERN,                                        # 换行符 \n
    SPACE_PATTERN + r"\\\\<br>" + SPACE_PATTERN,                                  # 换行符 \\<br>
    SPACE_PATTERN + r"<br>" + SPACE_PATTERN,                                      # 换行符 <br>
)
  • 你可以通过编辑 Plugin_Scripts\CodeSaver\CodeSaver.py 文件来添加其他的代码规则
Clone this wiki locally