MDL3 厨师交接

MDL3 厨师交接

Helldivers 2: run Chef Shared Loader & HUDdle next to MDL3 — an MDL3 addon that hands the game over to Chef. 让 Chef 和 HUDdle 在 MDL3 下一起工作。

[center][size=6][b]Chef Hand-off for MDL3[/b][/size]
[i]在同一游戏中共用 Chef Shared Loader mod 与 MDL3 mod[/i][/center]

[line]

[size=4][b]问题所在[/b][/size]
《绝地潜兵 2》只运行一个 [b]boot[/b] 脚本:即优先级最高的补丁中的那一个。[b]Chef Shared Loader[/b] 和 [b]MDL3[/b] 都想成为这个 boot,因此通常情况下你只能得到其中一个:
[list]
[][b]Chef 在上:[/b]Chef 以及为它制作的 mod(HUDdle、Treasure Radar……)会运行。MDL3 及其 mod 不会运行。[/]
[][b]MDL3 在上:[/b]MDL3 及其 mod 会运行(例如 BF5 Hit and Kill Feedback 的 MDL3 版本)。Chef 以及为其制作的一切都不会运行。[/]
[/list]例如,HUDdle 仅以 Chef mod 的形式存在,而 BF5 反馈 mod 需要 MDL3。本 mod 让你可以同时运行两者。

[size=4][b]它的作用[/b][/size]
这是一个极小的附加组件,MDL3 会像启动其他任何附加组件一样启动它。在进入游戏约 6 秒后,它使用 Chef 自身文档中描述的、用于其他加载器的交接方式,将游戏交给真正的 Chef Shared Loader。此后,MDL3 继续运行其 mod,Chef 运行其 mod。
[list]
[]不包含也不修改 Chef、HUDdle 或 MDL3 的任何内容。仅 Lua:无 DLL,无内存访问。[/]
[]如果未安装 Chef,或 Chef 已在运行,则它什么也不做。[/]
[]它会将两个小文件 [i]chef_handoff.log[/i] 和 [i]chef_handoff_state.txt[/i] 写入 [i]%APPDATA%\Arrowhead\Helldivers2[/i]。仅此而已。[/]
[/list][size=4][b]0.2.0 新增:MDL3 在无 Chef 的情况下“启动”的 Chef mod[/b][/size]
MDL3 会启动每个带有 [i]HD2-Addon[/i] 头的附加组件,包括 Chef 的 mod,但没有 Chef。其中一些(Treasure Radar)在那时不会失败,因此 Chef 认为另一个加载器已经启动了它们并跳过它们。在交接之前,0.2.0 现在会读取游戏的补丁文件,识别为 Chef 制作的附加组件,并将它们从 [i]package.loaded[/i] 中移除,以便 Chef 正确启动它们。

[size=4][b]要求[/b][/size]
[list]
[][b]MDL3[/b],以及你喜欢的 MDL3 mod(例如 [url=https://www.nexusmods.com/helldivers2/mods/16927]BF5 Hit and Kill Feedback, MDL3 build[/url])[/]
[][b]Chef Shared Loader 1.2.0 或更新版本[/b](已测试 1.4.1):[url=https://github.com/Th3chef/Chef-Shared-Loader/releases/latest]下载[/url][/]
[]你想要的 Chef mod,例如 [url=https://www.nexusmods.com/helldivers2/mods/18108]HUDdle[/url] 或 [url=https://www.nexusmods.com/helldivers2/mods/18265]Treasure Radar[/url][/]
[]一个能安装《绝地潜兵 2》补丁 zip 的 mod 管理器(Arsenal 或 HD2 Mod Manager)[/]
[/list][size=4][b]安装[/b][/size]
[list=1]
[]照常安装 MDL3、Chef Shared Loader 和你的 mod。[/]
[]将 [b]Chef-Hand-off-for-MDL3-0.2.0.zip[/b] 添加到你的 mod 管理器并启用它。[/]
[][b]给 MDL3 比 Chef 更高的优先级。[/b]这与 Chef 和 HUDdle 的说明相反(它们希望 Chef 在上):游戏必须运行 MDL3 的 boot。在 Arsenal 中,如果设置为 [i]First mod highest priority[/i],则将 MDL3 放在列表中 Chef 的[b]上方[/b];如果是 [i]Last mod highest priority[/i],则将 MDL3 放在 Chef 的[b]下方[/b]。如果不确定:将 MDL3 放在原来 Chef 的位置,并将 Chef 紧挨着它。所有其他 mod 的顺序无关紧要。[/]
[]Purge,然后 Deploy。[/]
[]启动游戏,在标题画面等待约 10 秒,然后开始一项任务。[/]
[/list][size=4][b]如何判断它生效了[/b][/size]
[list]
[]在 [i]%APPDATA%\Arrowhead\Helldivers2\chef_handoff.log[/i] 中,最后一行显示 [i]Chef Shared Loader 1.4.x started[/i](启动后约 6 秒)。在此之前,你会看到类似 [i]patch files read: 91 (4 addons, 2 made for Chef, 0 read errors)[/i] 的行。[/]
[][i]chef_loader.log[/i](同一文件夹)包含 [i]started by MDL3 chef_handoff 0.2.0, which handed off to me[/i]。[/]
[]游戏中:任务中出现 HUDdle HUD,按 F9 出现 Chef 菜单,并且你的 MDL3 mod 像以前一样工作。[/]
[/list][size=4][b]故障排除[/b][/size]
[list]
[][b]MDL3 mod 正常,Chef mod 不正常:[/b]交接没有启动 Chef。查看 chef_handoff.log。“Chef Shared Loader is not installed”表示 Chef 的补丁未部署或已禁用。[/]
[][b]Chef mod 正常,MDL3 mod 不正常(且没有 chef_handoff.log):[/b]Chef 仍具有更高优先级。交换它们,Purge,Deploy。[/]
[][b]某个 Chef mod 没有启动,且 chef_loader.log 显示“already started by another loader (started), not started again”:[/b]0.2.0 仅能识别具有以“local chef = ...”开头的行或“-- HD2-Requires: chef-shared-loader”头的 Chef 附加组件。请告诉我是哪个 mod。[/]
[][b]“the last launch ended during the hand-off”:[/b]上一次启动在交接期间结束,因此为避免崩溃循环,未再次尝试。删除 chef_handoff_state.txt 以重试。[/]
[/list][size=4][b]已知问题[/b][/size]
[list]
[]在 0.1.0 中,我在任务中途按 ESC 返回飞船时,游戏关闭过一次。我无法复现(0.2.0 也没有),也不知道原因。如果你遇到这种情况,请在重启游戏前复制 MDL.log,并将其与 chef_handoff.log 和 chef_loader.log 一起发送。[/]
[]MDL3 自己的日志将 HUDdle 列为“enable failed”。这是 MDL3 的视角(它给附加组件提供自己的上下文,而非 Chef 的);运行 HUDdle 的是 Chef。[/]
[]仅在 MDL3 3.0.0-dev.29(一个预览版本)上测试过。不同的 MDL3 版本可能会以不同方式启动附加组件。[/]
[/list][size=4][b]测试环境[/b][/size]
MDL3 3.0.0-dev.29、Chef Shared Loader 1.4.1、HUDdle 0.6.11、Treasure Radar 0.7.1n、BF5 Hit and Kill Feedback (MDL3 build) 2.0.1。

[size=4][b]须知[/b][/size]
[list]
[]开销:读取补丁文件需要几毫秒(此处 91 个补丁文件用了 5 毫秒)。Chef 启动会导致一次几十毫秒的卡顿,通常发生在标题画面。[/]
[]卸载:在你的 mod 管理器中禁用它,Purge,Deploy。你可以删除 chef_handoff.log 和 chef_handoff_state.txt。[/]
[/list][size=4][b]致谢与链接[/b][/size]
[list]
[][b]Chef Shared Loader[/b] 由 Th3chef 制作。此处使用的交接方式是 Chef 自己文档中的那个(“Everything here is free to copy into your loader as it is”)。[/]
[][b]HUDdle[/b] 由 rosensterner 制作,[b]Treasure Radar[/b]、[b]MDL3[/b] 和 [b]BF5 Hit and Kill Feedback[/b] 由其各自作者制作。未包含它们的任何文件。[/]
[]源代码、问题跟踪器和文档:[url=https://github.com/JFRedist/HD2-Chef-Handoff-for-MDL3]GitHub[/url](MIT 许可证)。[/]
[]代码是在 Claude(Anthropic 的 AI)的帮助下编写的,并由我在真实游戏中测试。[/]
[/list][spoiler][b]技术细节[/b]
游戏的补丁文件(data/9ba626afa44a3aa3.patch_N)被直接读取,方式与 Chef 读取它们相同。只查看 16 字节到 4 MB 之间的 Lua 资源,并且只查看其前 16 KB,且仅限条目数不超过 4096 的补丁(更大的补丁是构建的游戏数据)。
附加组件是以“-- HD2-Addon: mods/author/name”头开头的 Lua 资源。如果它具有以“local chef = ...”开头的行(Chef 将其辅助表作为 chunk 参数传递给每个附加组件)或“-- HD2-Requires: chef-shared-loader”头行,则它被视为为 Chef 制作。注释中的提及不算数。
这些名称会从 package.loaded 中移除(并在 Bingus 风格加载器的模块表中标记为未运行,如果它有的话)。然后进行交接:设置 ChefSharedLoaderHandoff = { from = ..., phase = 'init' },并 require Chef 的核心(mods/chef_shared_loader/core_1)。
如果无法读取补丁文件,则使用内置列表(Treasure Radar、HUDdle)。
既没有上述任一标记的 Chef mod 不会被识别。[/spoiler]

[spoiler][b]简体中文[/b]
[b]解决什么问题:[/b]游戏只运行优先级最高的补丁里的 boot。Chef Shared Loader 和 MDL3 都想当这个 boot,所以默认只能有一个工作:Chef 在上,HUDdle、Treasure Radar 等 Chef mod 能用,MDL3 和它的 mod(比如 BF5 击杀反馈的 MDL3 版)不能用;MDL3 在上则相反。
[b]它做什么:[/b]这是一个由 MDL3 启动的小 addon,进游戏约 6 秒后,按 Chef 文档里写明的交接办法把游戏交给真正的 Chef。之后 MDL3 照常运行它的 mod,Chef 运行 Chef 的 mod。不包含也不修改 Chef、HUDdle、MDL3 的任何文件;没装 Chef 或 Chef 已在运行时什么也不做。
[b]0.2.0 新增:[/b]MDL3 会把 Chef 的 mod 也"启动"一遍(给的不是 Chef)。没报错的(Treasure Radar)会被 Chef 当作已经被别的加载器启动而跳过。现在交接前先读游戏的补丁文件,认出做给 Chef 的 addon,把它们从 package.loaded 里摘掉,Chef 就会正常启动它们。
[b]需要:[/b]MDL3;Chef Shared Loader 1.2.0 以上(测试用 1.4.1);Arsenal 或 HD2 Mod Manager。
[b]安装:[/b]
1. 照常安装 MDL3、Chef 和你要用的 mod。
2. 把 Chef-Hand-off-for-MDL3-0.2.0.zip 加进 Arsenal / HD2 Mod Manager 并启用。
3. [b]MDL3 的优先级要比 Chef 高[/b](这和 Chef、HUDdle 的说明相反)。Arsenal 的设置是 First mod highest priority,就把 MDL3 放在 Chef 上面;是 Last mod highest priority,就放在下面。拿不准:把 MDL3 放到你原来放 Chef 的位置,Chef 挪到它旁边。其余 mod 的顺序没关系。
4. Purge,再 Deploy。启动游戏,在标题画面停 10 秒以上,再进一局任务。
[b]怎么知道成功了:[/b]%APPDATA%\Arrowhead\Helldivers2\chef_handoff.log 最后一行是 Chef Shared Loader 1.4.x started;chef_loader.log 里有 started by MDL3 chef_handoff 0.2.0, which handed off to me;任务中出现 HUDdle,按 F9 出 Chef 的菜单,MDL3 的 mod 照常。
[b]出问题时:[/b]MDL3 的 mod 正常、Chef 的 mod 没有:看 chef_handoff.log。Chef 的 mod 正常、MDL3 的 mod 没有(也没有 chef_handoff.log):Chef 的优先级还是高的,对调后 Purge 再 Deploy。反馈时请附上 chef_handoff.log、chef_loader.log 和 MDL.log(MDL.log 每次启动会被覆盖,闪退后先拷出来再重开游戏)。
[b]已知问题:[/b]0.1.0 下任务中按 ESC 回飞船闪退过一次,原因没找到,之后没有再出现。只在 MDL3 3.0.0-dev.29(预览版)上测过。
[b]来源:[/b]代码、文档和问题反馈在 GitHub(MIT 许可)。代码是在 Claude(Anthropic 的 AI)的帮助下写的,由我在真实游戏里测试。[/spoiler]