SkillAgentSearch skills...

RPGMakerUtils

RPG Maker MV MZ Helper Tools

Install / Use

/learn @Justype/RPGMakerUtils
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

RPG Maker MV MZ 帮助软件

本版本使用 .NET Framework 4.8 编写,支持 RPG Maker MV 和 RPG Maker MZ 的游戏。

2.2.1 以及之前的版本有可能会被杀毒软件误报为病毒,请自行判断是否下载使用。

功能

  1. 加载 MTools 的翻译文件 (推荐使用插件进行翻译)
    1. 翻译插件:加载我的翻译插件,并解析json文件,保存到 www/translations.json
      1. Faster 更快的翻译速度,部分菜单可能未被翻译
      2. Broader 更全面的翻译,速度较慢 (推荐,但在JoiPlay里面可能会出现插件菜单未翻译的情况)
      3. Comprehensive 翻译最全的 (默认模式)
    2. 替换翻译:根据json文件,修改 data/*json 文件 和 js/plugins.js 文件
      1. 普通模式,会按白名单翻译plugins.jscommand356 command357
      2. 大范围模式,不在白名单的,且在json中的,直接翻译 (如果运行出错,请使用普通模式;如果想,可以提交Issue)
  2. 修改字体 (复制系统字体到 www/Fonts,并修改CSS)
  3. 添加作弊,使用的是 paramonos/RPG-Maker-MV-MZ-Cheat-UI-Plugin 的代码
  4. 找游戏的宝箱密码
  5. 自动识别txt文件的编码格式,并转换为 UTF-8

使用方法

  1. 直接下载 exe 文件
  2. 运行 exe 文件
  3. 选择游戏目录 和/或 翻译文件(json)
  4. 点击修改按钮
  5. 等待修改完成
<image src="./assets/1.png" alt="Select Game Directory" width="400"/>

直接使用插件

  1. 找到游戏的js/plugins.js文件,添加我的插件到插件列表中 (最好添加到第一个)
  2. 将我的js插件复制到js/plugins文件夹中,并重命名为 JtJsonTranslationManager.js
  3. 将json复制到
    • MV: 游戏目录/www/translations.json
    • MZ: 游戏目录/translations.json
  4. 一定要删除 json 里面的//“注释”
{"name":"JtJsonTranslationManager","status":true,"description":"Loads translations.json and applies it.","parameters":{}},

“注释” 例子 (被GitHub标红)

{
  // 由XXX分享,请尊重劳动成果
  "する": "执行",
}

原理

翻译插件原理

  • 对于常用的、只加载一次的字段,直接在游戏加载时替换
  • 为了方便作弊的使用,也会翻译变量 variables switches
  • 对于地图事件的对话和选项之类的,替换游戏的渲染方法
  • 并且将类命名为TranslationManager,有些插件会调用这个类

Faster 翻译原理

RPG Maker 的相关方法:

  • Window_Message.prototype.startMessage() 添加对话
  • Window_Command.prototype.addCommand() 添加选项
  • Window_BattleLog.prototype.addText() 战斗日志
  • Window_Base.prototype.convertEscapeCharacters() 会被很多插件调用

Broader 翻译原理

RPG Maker 的相关方法:

  • Bitmap.prototype.drawText() 绘制文本
    • Window_Base.contexts 就是 Bitmap 的实例
    • Window_Base.prototype.drawText() 就调用了 this.contents.drawText() 也就是 Bitmap.prototype.drawText()
  • Bitmap.prototype.measureTextWidth() 测量文本宽度 (例如计算选项的宽度)
  • Window_Base.prototype.convertEscapeCharacters() 转义字符 (会被Window_Base.prototype.drawTextEx()调用)
    • Window_Base.prototype.drawTextEx() 绘制高级文本,是很多插件会调用的方法
    • Window_Base.prototype.convertEscapeCharacters() 也会被某些插件调用

总结就是:

  1. 只要覆盖了Bitmap.prototype.drawText()Bitmap.prototype.measureTextWidth()Window_Base.prototype.convertEscapeCharacters(),大部分的游戏内容和插件都能被翻译
    1. 于此同时,因为覆盖了这么多的方法,提升翻译方法的效率是必要的
    2. 所以要做的几个重要事情是:
      1. 将已经翻译过的内容保存到集合中,以避免重复翻译
      2. 如果遇到字典里没有的内容,由键的长度从长到短依次匹配
      3. 无论是否找到了,都将“译文”保存到集合中,以避免重复翻译或浪费计算资源
      4. 将内容拆分成更小的部分进行翻译(使用\n拆分)
  2. 又为了方便使用作弊插件,常用的游戏内容(物品、技能、状态、敌人等)都在游戏加载时直接替换

详细内容请查看 RPG Maker MV/MZ 的源码。就在 js/rpg_objects.jsjs/rpg_windows.jsjs/rpg_managers.js 文件中

Comprehensive 翻译原理

Comprehensive 模式结合了 FasterBroader 的优点

不能全依靠Broader,有些插件自己创建了新的消息显示窗口,所以我们还是需要Faster的功能

替换翻译原理

B站视频/YouTube: 使用方法与一些代码逻辑

  • data/*json 包含了所有的游戏数据
  • js/plugins.js 包含了所有的插件配置

只需要翻译 data/*json 文件 和 js/plugins.js 文件即可

需要翻译的字段有:

  • <Object>.json (Actors.json, Armors.json, Classes.json, Enemies.json, Items.json, MapInfos.json, Skills.json, States.json, Weapons.json)
    • name, description, profile and some note
  • events.json (MapXXX.jsonCommonEvents.json)
    • 对话、背景和选项 code: 401, 102402, 405 翻译所有 parameters 中的字符串
    • 插件代码 code: 356357
      • 使用白名单进行翻译
      • 如果值在字典中,直接替换
    • 赋值代码 code: 122
      • 只有当 parameters[3] == 4parameters[4] 是简单的字符串 'xxxxx' 并且 值在字典中,才翻译
  • js/plugins.js
    • 通过白名单进行翻译
    • 如果值在字典中,直接替换
    • 如果值为JSON,解析完后,再遍历

代码片段例子

122 赋值

当第四个参数为4时,会执行js,返回的值会赋值给对应的变量。

例如下面第一个例子执行后,游戏变量1215 就是 '雫' 主角的名字

{ "code": 122, "indent": 1, "parameters": [1215, 1215, 0, 4, "'雫'"] },

被使用的例子:

{
  "code": 401,
  "indent": 0,
  "parameters": ["(選択中のウワサ「\\v[1215]」+「\\v[1239]」)"]
},

第二个例子是一个游戏的称号系统,通过选词来实现:

  1. 先从词库里面选择对应的词 102 展示选项
  2. 然后通过122赋值,然后将它们组合到一起
{
  "code": 102, "indent": 0,
  "parameters": [
    ["した", "になった", "様の", "大好きな", "好きな", "なし"],
    -1, -1, 2, 0
  ]
},
{
  "code": 102, "indent": 0,
  "parameters": [
    ["彼女", "嫁", "人妻", "黒髪清楚", "なし"],
    -1, -1, 2, 0
  ]
},

假设执行了以下分支,游戏变量1215就是 "雫好きな嫁" ("name": "一ノ瀬 雫")

{ "code": 122, "indent": 1, "parameters": [1239, 1239, 0, 4, "'好きな'"]},
{ "code": 122, "indent": 1, "parameters": [1240, 1240, 0, 4, "'嫁'"] },
{
  "code": 122,
  "indent": 2,
  "parameters": [
    1215, 1215, 0, 4,
    "$gameParty.lastItem().name + $gameVariables.value(1239) + $gameVariables.value(1240)"
  ]
},

355 执行JS脚本

{
  "code": 355,
  "indent": 1,
  "parameters": [
    "BattleManager._logWindow.push('addText', 'ミス!悪意の手は空を切った!');"
  ]
},

{
  "code": 355,
  "indent": 1,
  "parameters": [
    "$dataClasses[1].name = '\\\\C[25]裏切りのハンター\\\\i[29]'"
  ]
},

插件代码

  • 356是MV里面的调用插件的代码,在MZ里面已被弃用
    • 参数为长度为1的字符串列表
    • 参数由 " " 空格分隔
    • 分隔后的第一个为插件名称
  • 357是MZ里面调用插件的代码
    • 参数为一个JS列表
    • 列表第一个为字符串,且为插件的名称
{
    "code": 356,
    "indent": 1,
    "parameters": ["D_TEXT こんだけ注目集めといてSじゃなかったら・・・ 12"]
}

{
  "code": 357,
  "indent": 0,
  "parameters": [
    "DTextPicture",
    "dText",
    "文字列ピクチャ準備",
    { "text": "ロレンチア\n", "fontSize": "0" }
  ]
}

鸣谢

  1. 感谢 davide97l/rpgmaker-mv-translator 提供的思路
  2. 感谢 paramonos/RPG-Maker-MV-MZ-Cheat-UI-Plugin 提供的作弊代码

Related Skills

View on GitHub
GitHub Stars216
CategoryDevelopment
Updated20h ago
Forks8

Languages

C#

Security Score

95/100

Audited on Mar 26, 2026

No findings