菜单管理器

菜单管理器

按照你的喜好整理菜单吧!

用户界面

无限模组菜单

适用于次世代和旧世代。(支持版本的详细信息可在文件选项卡中找到。)

详细信息

MOD 的目的

剧透:显示

显示超过9个MOD菜单!

《巫师3》的选项菜单一次只能正常显示9个条目(+"返回"),超过这个数量会出现错误。

然而,《巫师3》的好Mod太多了,你的Mod菜单很快就会超过9个。

菜单字符串,由wghost81提供,是解决这个问题的优秀通用资源,但需要对xml文件进行一些繁琐的编辑(如果你是完美主义者,还需要编辑w3strings文件),对于初学者来说可能会感到困惑。

这就是这个Mod的用武之地!

只需安装菜单管理器,您就能完全摆脱模组菜单条目数量的限制,无需任何额外步骤。

此外,它还可以与菜单字符串结合使用。(它也支持ElementaryLewis的模组菜单分类。)

随心所欲地整理你的菜单!

过去有一些模组将菜单组织得更容易使用,但没有一个功能允许用户随心所欲地整理菜单。

菜单组织器将游戏中可用的各种GUI引入到选项菜单中,让您能通过直观的操作来整理菜单。

它还添加了新的菜单项,如快速保存、快速加载和调试任务。

制作选项菜单现在更加简单了!

在原版游戏中,选项菜单中字符串的本地化键需要正确使用四个前缀:"panel_"、"preset_"、"preset_value_"和"option_",这对新手模组开发者来说令人困惑。

此外,预设标题要求除了“preset_”之外还要包含模组菜单位置的路径,这导致菜单字符串功能引入后无法正确获取字符串。

菜单组织器摒弃了这一机制,允许在无论有无前缀的情况下获取字符串。

模组特性

整理模组菜单

剧透:显示

无限数量的模组菜单

根据模组菜单中的条目数量,系统会自动创建新页面来组织菜单,因此条目数量不再有限制。

在该模组的选项菜单中,选择以下两种组织方式之一:

  • 页面循环(默认设置):我们将添加一个按钮翻到下一页,每页显示八个条目。最后一页会添加一个按钮返回第一页。推荐给没有大量模组菜单的用户使用。
  • 文件夹层次结构:根据条目数量创建文件夹层次结构,每个文件夹存储九个条目。条目的颜色强度表示其所在文件夹层次的深度。推荐给拥有大量模组菜单的用户使用。

你可以通过更改本模组选项菜单中的“条目限制”来设置每页显示的最大条目数。

重新排列模组菜单

MOD菜单会自动按字母顺序排序。你可以在本模组的选项菜单中关闭"按字母顺序排序MOD菜单"功能来禁用此特性。你也可以编写自己的模组列表,按个人喜好对模组进行排序。具体操作方法请参阅自定义设置章节。

分类模组菜单

当与菜单字符串(Menu Strings)或模组菜单类别(Mods Menu Category)结合使用时,你可以将模组菜单组织为9个类别(若两者结合则可使用14个类别)。除了传统的编辑xml文件的方法,你还可以通过在该模组的ws文件中为每个类别编写模组列表的方式来实现。有关操作详情,请参见自定义(CUSTOMIZATION)部分。

组织整个菜单

剧透:显示

通过此模组选项菜单,你可以随心所欲地组织整个菜单。

您可以更改菜单的顺序和每页显示的条目数。(如果您的菜单跨越多页,将通过页面循环的方式进行组织。)某些菜单可以隐藏。

我的奖励、已安装和致谢可以归类在"内容"文件夹中。控制设置、控制器方案和按键绑定可以归类在"控制"文件夹中。

打开和关闭DLC的选项可以从游戏.模组菜单中分离出来。模组菜单可以从选项菜单中分离出来。

扩展DLC标志可以隐藏。(你也可以只隐藏文字。)

以下新的菜单项已添加:

  • 快速保存
  • 快速加载(您还可以设置,使自动存档不包含在加载目标中。)
  • 调试任务(请注意,如果在游戏过程中启动调试任务,您将丢失未保存的进度。)

笔记

在这个模组中,游戏启动时出现的菜单称为“主菜单”,在游戏过程中按下ESC键出现的菜单称为“游戏菜单”。(此模组不涉及按下Enter键时出现的中心菜单。)

在某些情况下,例如当Mods菜单与Options菜单分离时,菜单标题将无法正确显示。修复此问题会显著降低与其他模组的兼容性,因此我们保持现状。

无需使用前缀

剧透:显示

好消息! 如果你曾因编辑XML文件导致预设头衔被破坏,只需安装此模组即可修复。

面向模组开发者的特性

获取本地化字符串的机制(预设标题以外的情况)

该mod通过以下步骤调用本地化字符串,使你能够获取带或不带前缀的字符串:

  1. 根据原版机制调用字符串。
  2. 如果未返回字符串,则添加前缀到本地化键并再次调用字符串。
  3. 如果未返回字符串,则移除前缀到本地化键并再次调用字符串。
  4. 如果未返回字符串,则显示不带前缀的本地化键。
  5. 如果无法获取本地化键,则显示 "error: no text"。

获取本地化字符串的机制(用于预设标题)

您可以通过在选项组的"displayName"末尾添加".p_localizationKey_p"来使用任何本地化键。

预设头部中的本地化字符串按照以下步骤调用:

  1. 如果选项组的 "displayName" 以 p 结尾,则使用 .pp 之间的部分作为本地化键,并添加前缀 "preset" 来调用该字符串。
  2. 如果字符串未返回,则移除前缀并再次调用该字符串。
  3. 如果字符串仍未返回,则遵循原版机制获取字符串。(使用前缀 "preset_"。)
  4. 如果字符串未返回,则移除前缀并再次调用该字符串。
  5. 如果字符串仍未返回,则从本地化键中移除 "Mods_" 后的类别 ID,并再次以 "preset_" 为前缀调用该字符串。
  6. 如果字符串未返回,则移除前缀并再次调用该字符串。
  7. 如果字符串仍未返回,则显示 "Presets"。

如果在 w3strings 文件中提供了预设标题的本地化字符串,即使没有预设,这些字符串也会出现在预设标题中。

添加新前缀“mrckimm_option_value_”

在原始版本中,预设名称和选项值名称都使用相同的前缀"preset_value_",但在这个模组中新增了一个前缀"mrckimm_option_value_"来区分两者。在获取选项值名称时,会优先使用"mrckimm_option_value_"作为前缀,如果无法获取到对应的字符串,则会使用"preset_value_"作为前缀。

选项菜单规格提示:

  • 一个组中的选项不能被分割并显示在多个页面上。
  • 如果你将不同组的选项放在同一页面上,显示的唯一预设将来自最后加载的组。
  • 你不能使用一个预设来更改不同组中的选项,即使它们位于同一页面上。
  • 我建议给每个在选项菜单中使用的字符串分配一个唯一的本地化键,并避免与在其他位置使用的字符串共享。
  • 这样,翻译者可以选择最适合每个字符串显示区域的字体大小。

其他功能

剧透:显示

显示菜单路径用于菜单管理器

打开选项菜单后,按下 Z(键盘)、Y(Xbox)或 △(PS)可显示菜单整理器的菜单路径。

打开选项菜单时会显示提示,但关闭本模组选项菜单中的“显示菜单路径提示”后,该提示将消失。

你可以使用以下控制台命令来显示特定模组菜单的路径:

FmrckIMM_Path( 模组菜单 ID )

请参考“自定义”部分,了解如何查找特定模组的“模组菜单ID”。您无法在主菜单中使用调试控制台,因此需要加载存档并启动游戏。如果您尚未安装调试控制台,可从下方链接下载。

与“displayName”相关的选项组变更

  • 修复了一个原版漏洞,即当"displayName"包含连续"."时游戏会卡死。在该模组中,连续"."被视为一个"."。
  • 不再区分大小写。
  • 如果无法获取模组菜单名称,将显示从"displayName"中提取的模组菜单ID,而不是空白。

MOD模组选项菜单

剧透:显示

选择预设时,将弹出一个窗口询问是否应用更改。(此功能仅在该模组的选项菜单中可用。)

如果你修改了这个模组中的任何设置,你需要关闭选项菜单来应用更改。

定制化

剧透:显示

你可以通过编辑 "modMenuOrganizerNG_IMM_MrCK\content\scripts\mrckLocal" 中的 IMM_Settings.ws 文件来整理你的模组菜单,并写下模组菜单 ID 列表。建议使用 VSCode 和其扩展程序 WitcherScript IDE 来编辑 ws 文件。

如何查找特定模组的模组菜单ID

  1. 从位于"...\游戏目录\bin\config\r4game\user_config_matrix\pc"的选项菜单XML文件中,选择你想了解模组菜单ID的模组文件。
  2. 用文本编辑器打开该XML文件,找到以<Group开头的行(通常是第三行)。
  3. 在该行中的"displayName"中,位于Mods.与下一个.之间的部分即为模组菜单ID。(如果后面没有下一个.,则直到"为止)。
  4. 如果菜单字符串提供的ID写在“Mods.”旁边,则跳过该ID,使用下一个“.”后面的ID作为Mod菜单ID。
  5. 如果Mod菜单ID无效,但Mod菜单在游戏中可见,请在xml文件中搜索<Group以查找其他Mod菜单ID。
  6. 对于菜单管理器,Mod菜单ID为TmrckIMM

如何在游戏中查看模组菜单 ID

在这个模组的选项菜单中,选择模组菜单设置 > 模组分类设置以打开弹出菜单,然后按Z显示模组菜单列表。ID显示在/的右侧。ID会以小写字母显示,但这并不影响,因为它不区分大小写。

重新排序模组菜单

如果你在IMM_Settings.ws文件中的FmrckIMM_ModCategoryContents_0中写入Mod菜单ID列表,Mod菜单的显示顺序将按照该列表排列。在Mod菜单ID前后添加+和",写成+"Mod菜单ID"+

分类模组菜单

将一个或多个Mod菜单ID输入到IMM_Settings.ws中的FmrckIMM_ModCategoryContents_1至14中,然后从该模组的选项菜单中启用“分类模组菜单”,即可按类别整理你的模组。

未纳入任何分类的模组菜单会自动归入FmrckIMM_ModCategoryContents_0。

你可以通过查看FmrckIMM_ModCategoryName来了解每个数字对应的类别。

如果你从该模组的选项菜单中启用了“忽略包含菜单字符串的XML编辑”,则根据菜单字符串说明添加到“displayName”中的ID将被忽略,仅使用IMM_Settings.ws中的列表。

如果同一个Mod菜单ID被列在多个类别中,将按照以下优先级将其归入优先级最高的类别。

1>2>3>4>...>xml>0(1为最高,0为最低) 如果您没有菜单字符串和模组菜单分类的w3strings文件,分类名称将无法正确显示。

注意事项

  • // 右侧的文本会被注释掉,不会加载到游戏中,因此可用于留备注或禁用列表的部分内容。
  • 如果启动游戏时发生编译错误且错误信息显示 Error [modmenuorganizerng_imm_mrck]mrcklocal\imm_settings.ws,则表明编辑 IMM_Settings.ws 时出现了错误。

兼容性

剧透:已确认不兼容的Mods
  • 聪明的主菜单

更新日志

从v2.1.1版本开始,变更的文件现在已被清晰标示。

版本 2.1.1

剧透:显示
  • 修复了导致快速加载无法使用的错误。
  • 修改后的文件(次世代版):Mods\modMenuOrganizerNG_IMM_MrCK\content\scripts\mrckLocal\IMM_NG.ws
  • 修改后的文件 (旧版):Mods\modMenuOrganizerOG_IMM_MrCK\content\scripts\mrckLocal\IMM_OG.ws

版本 2.1.0

  • 在模组分类设置弹窗中新增了隐藏未使用分类的功能。
  • 拼写错误中,“load”错误地写成了“lode”,现已修正。因此,w3strings文件中以下ID的key(str)已更改:
    • 2118587139
    • 2118587143
    • 2118587191
  • 修复了一些日语翻译问题。

版本 2.0.1

  • 修复了一个错误,该错误在关闭分类模组菜单时导致模组菜单未整理。

版本 2.0.0

  • 模组名称已从 Infinite Mod Menus 更改为 Menu Organizer。
  • 现在可以整理整个菜单,而不仅仅是模组菜单。
  • 现在支持通过“模组菜单类别”对模组菜单进行分类。
  • 选择可选预设时,将弹出窗口询问是否应用更改。
  • 返回第一页的按钮现在始终可用,即使在旧版本中也是如此。
  • 即使使用页面循环方法,条目限制现在也可以设置为9。
  • 为了统一游戏内的规范,表示字符串无法正确检索的前缀##已更改为#。
  • 我忘了在描述页面提及即使预设不存在时也能在预设标题中显示文本的功能,因此我已将该功能添加到描述页面。
  • 修复了导致Mods菜单中出现MRCKIMM_BACK的错误。
  • 修复了如果Mods类别名称包含句点,菜单会组织错误的错误。
  • 在 w3strings 文件中添加了大量本地化字符串。
  • 在现有文本中,以下ID对应的文本已发生变更,需要重新翻译:
    • 2118587114
    • 2118587129
    • 2118587130
  • 还进行了其他一些小的改进。

版本 1.0.1

  • 改进了获取预设头部字符串的程序。

版本 1.0.0

  • 首发版

安装

剧透:显示

自动安装

  1. 使用《巫师3》模组管理器(目前尚未测试其他模组管理器)。
  2. 下载主文件并将其拖入《巫师3》模组管理器进行安装。
  3. 若弹出提示“是否保留当前键位?”,请选择“全部否”。
  4. 使用脚本合并工具与其他模组合并冲突。

手动安装

  1. 下载主文件,解压后,将其中的"bin"和"Mods"文件夹放入游戏根目录。(游戏根目录即包含"bin"、"content"及"dlc"等文件夹的目录。)
  2. 添加按键绑定:使用文本编辑器,将模组自带的"input.txt"中的内容添加到位于"...%userprofile%\Documents\The Witcher 3"的"input.settings"文件中。
  3. 启用模组选项(仅适用于次时代v4.00+版本):编辑位于"'游戏目录'\bin\config\r4game\user_config_matrix\pc"中的"dx11filelist.txt"和"dx12filelist.txt"文件,并添加"modMenuOrganizerNG_IMM_MrCK.xml;"到列表中。(使用菜单文件列表更新器可自动完成此步骤。)
  4. 使用脚本合并工具处理与其他模组的冲突。

卸载

选项设置保存在用户设置文件中,路径为"...%userprofile%\Documents\The Witcher 3",因此即使卸载模组,这些设置也不会丢失。

  1. 删除你添加到游戏中的文件。
  2. 使用Script Merger重新合并冲突。
  3. 如果你手动卸载了,请删除你在"dx11filelist.txt"和"dx12filelist.txt"中添加的XML文件名。(菜单中的Filelist Updater可以让你自动完成这一步。)
  4. 如果你保留添加到"input.settings"中的按键绑定,不会有任何不良影响。

更新

如果你使用的是自行编辑的 IMM_Settings.ws 文件,请先为其创建一个备份文件。

方法 1:重新安装

  1. 卸载旧版本。(无需合并脚本。)
  2. 安装新版本。(需要合并脚本。)

方法 2:覆盖

  1. 检查 CHANGELOGS,查找已被删除、重命名或更改目录的文件,并将它们从旧安装版本中移除。
  2. 将新版本文件夹放入游戏主目录,覆盖现有文件。
  3. 如果 input.txt 的内容已被更改,请编辑 input.settings 以应用这些更改。
  4. 使用 Script Merger 重新合并冲突。
  5. 最后,打开新的 IMM_Settings.ws,并从备份的 IMM_Settings.ws 中复制粘贴模组列表。(如果你是从 v2.0.0 或更高版本更新,IMM_Settings.ws 没有变化,因此你可以继续使用旧的 IMM_Settings.ws。)

Mod 限制修复(适用于旧版本 v1.32/1.31)

如果你想在旧版 v1.32/1.31 中使用大量模组,你需要安装《模组限制修复》。

如何合并脚本

剧透:显示

首先,仔细阅读脚本合并工具的使用说明,并按照说明操作。

当脚本合并器加载文件时,它们将如下图中所示列出。

  • 左侧列出了冲突模组及其对应的文件。
  • 右侧,合并的模组按文件列出。

如果你不进行合并,优先级最高(在冲突列表中颜色较深的模组)的模组文件将被加载。(优先级可在《巫师3:狂猎》模组管理器中设置。)

选择你想要合并的文件,然后点击“创建选定合并”按钮。

根据模组的不同,模组作者可能会指示你不要合并冲突,因此在合并前请仔细检查说明。

如果需要手动合并,将会弹出一个类似于下图的窗口。

在上方一行中,左侧显示了三个文件A、B和C的冲突位置。

  • A 是原始文件,B 和 C 是冲突的模组文件。
  • 合并后的文件代码显示在底部。

如果从顶部工具栏中选择“B”和/或“C”,所选文件中的代码将被添加到合并文件中。(上图示例中,B和C按此顺序均被选中。)

点击工具栏上"A"左侧的"转到下一个未解决的冲突"按钮,以显示下一个冲突位置。

在所有冲突合并完成后,关闭窗口并保存。

如何选择B或C

最好同时选择B和C,以启用所有模组功能。

这样做时,请注意不要破坏代码的格式。即使你没有任何编程知识,也应该能看到代码是按照某些规则编写的。

查看上图中的C代码。

  • 红色的部分与原版不同,黄色的部分是冲突的部分,灰色的部分已包含在合并文件中。
  • {} 之间的部分是代码块,块的标题写在块的顶部或左侧。
  • 如果你在最后没有选择C,原本应该附加到灰色代码块上的标题就会丢失,从而偏离模组的预期效果。
  • 因此,我按照B和C的顺序选择了代码。
  • 如果同时选择B和C会导致代码出错,请只选择其中一个。
  • 或者,你可以不用工具栏按钮,而是通过从冲突文件中复制代码并将其粘贴到合并后文件的相应部分,从而正确地合并它们。

需要注意的代码列表:

  • {}:{}之间的部分被视为一个整体。
  • event:事件
  • function:函数
  • 如果代码块{}中的标题以"function"或"event"开头,则该代码块被视为一个段落。当加载段落时,代码会从顶部开始按顺序加载,当加载到"return"或所有代码加载完毕时,段落结束。
  • return:返回,完成那一部分。“;”之后的代码将不会被加载。
  • if():只有括号中的条件被满足时,后面编写的代码才会被加载。
  • else:否则,在"if"语句之后使用。写在"else"旁边的代码只有当"if"语句的条件不满足时才会被加载。
  • var:如果一个区块内的代码行以"var"开头,则该代码必须放在该区块的开头。
  • ///**/:"//"右侧或"/"与"/"之间的部分被注释掉,不会被加载到游戏中。

翻译

请问您需要翻译什么内容?请提供需要翻译的游戏文本。

剧透:除日语外,所有语言文件均使用机器翻译成英文。

如果你想要创建自己的翻译,请使用 The Witcher3 String Editor NextGen 编辑模组内容文件夹中的 w3strings 文件。或者,你也可以用文本编辑器编辑模组内容文件夹中的 csv 文件,然后使用 Mod Translation Guide 和 Gui for w3stringsx 将 csv 文件编码为 w3strings 文件。

<> 是HTML标签。您可以使用它来调整每种语言的字体大小。 <<>> 是WS标签。该标签将被巫师脚本中的另一个字符串替换。

一旦你完成了翻译,我们非常希望你能将其上传至Nexus,与我们一起分享。

其他

如果你喜欢这个模组,请通过点击页面顶部的“推荐”和“投票”按钮来支持它!也请看看我创作的其他模组。

如果您有任何问题或意见,欢迎在“POSTS”选项卡上发布。

我不会回复每一篇帖子,但也许其他人会替你回复。虽然我没有逐一回复每一条支持或友善的评论,但它们确实鼓励我继续制作模组。非常感谢!