免责声明:此工具几乎完全由“氛围编程”生成。我以.pyw格式发布,以便您可以自行查看代码。我不建议在未查看源代码的情况下运行随机AI编写的可执行文件!你是否曾想过要重装或更新某个模组,却完全不记得之前选了哪些FOMod选项?我肯定有过。好消息是,
FOMod Plus 存在。(说真的,快去安装它,这是我见过的MO2最好用的生活质量工具,没有之一。)它会记录你之前的选择,并在重新安装/更新时自动选中它们,此外还有许多实用功能。
不过,这仅适用于你已安装的模组。
之后 已经安装了插件。你可能正处在我曾经遇到的困境中。我当时已经有一个包含1000多个模组的模组列表,所以我想在添加插件后重新安装模组,这样我的选择就能被保存下来。然而,我很快就遇到了一个问题——我完全不知道之前具体做了哪些选择。我选的是1K、2K还是4K纹理?我选择了10个补丁选项中的哪一个?我到底选没选那个可选选项?我是选择了整合版还是手动选择补丁?
在我重新安装所有FOMod模组的过程中,我意识到需要一种方法来确认之前做了哪些选择。起初我手动对比已安装的模组文件夹和各个FOMod安装器,但很快就变得繁琐起来。于是,我让AI编写了这个Python脚本,帮我节省了手动比对文件所需的数十个小时。
正如上方免责声明所述,这个Python脚本几乎完全是由AI直觉编程生成的。我经历了30多轮迭代来微调其功能。我粗略检查过代码并做了少量手动修改,但请记住,这些代码几乎都不是我写的。
使用方法概述:运行工具:- 安装下面列出的需求,然后通过命令行或Windows资源管理器运行该文件。
- 首次运行时会打开设置向导:将其指向你的MO2安装文件夹并选择一个配置(它会读取所有profiles/<配置文件名称>/modlist.txt)。
- 主窗口列出该配置文件中的所有已启用模组,并显示状态图标(匹配/冲突/缺失档案/无FOMod/已跳过)。
- 选择你想要分析的模组,然后点击 分析。每个模组/步骤的进度会实时流式更新。你可以在分析中途停止,但之后若不重新开始,将无法继续该进度。
- 结果以分步视图显示(通过上一步/下一步浏览所有安装步骤),或显示为完整摘要视图,每个选项对应彩色编码卡片(绿色 = 已选择, 黄色 = 存疑, 红色 = 未知, 灰色 = 未选择).
- 手动重新安装或更新你的模组,选择你之前选过的选项,这样FOMod Plus就能保存你的选择! 此工具不会修改你已安装的文件或MO2配置文件,它只是将你之前所做的选择整理成一份精美的列表。
导出和导入你的结果:将单个模组的结果导出为.txt文件,或全部导出为.json文件及配套的_readable.txt文件。导入先前导出的.json文件可恢复结果和模组状态。
要求:我觉得这个工具或许能帮助其他人更好地管理他们的模组列表,所以决定分享出来。不过,这个工具是由AI为我的特定用途制作的,这意味着目前它只适用于MO2,并且是一个.pyw文件,方便从Windows资源管理器中直接触发。因此,使用要求如下:
它在您的系统上创建或修改的文件:- %USERPROFILE% / fomod_detective_analysis.log:完整调试日志,每次运行时重写,每行写入后立即刷新,以便在分析过程中遇到问题时可实时查看。
- %USERPROFILE% / fomod_detective_error.log:仅在应用启动崩溃时写入
- %USERPROFILE% / fomod_detective_config.json:您的已保存设置:MO2路径、配置文件、存档覆盖及冲突解决方案
您的MO2安装目录或模组文件夹中的任何文件都不会被修改!该工具仅读取模组文件夹和压缩包,并在需要第四层级对比时,将压缩包解压至临时目录(自动清理)。说明那么,这个工具到底是怎么工作的呢?FOMOD侦探会在事后重建你的安装决策历史,具体方式为:
- 正在读取模组的 fomod/ModuleConfig.xml (从原始.zip/.7z/.rar压缩包中提取)以了解安装程序提供的每个选项,包括条件文件安装和标志依赖关系。
- 正在比对FOMod选项本应安装的文件与MO2模组文件夹中实际存在的文件。
- 按安装步骤报告所选的选项,并标注所使用的检测方法。
!!! 这意味着该工具仅适用于通过FOMod安装器安装的模组,且其原始压缩包仍保留在MO2的“下载”文件夹中。 !!!
正在将已安装的模组与其压缩包文件进行匹配在分析运行之前,每个MO2模组都需要与其最初安装时对应的压缩包(位于您的MO2 `downloads/` 文件夹中)进行配对。工具将按以下顺序尝试匹配您的模组:
- 您之前为那个模组选择的手动匹配覆盖(仅当您需要纠正工具选择时使用,此覆盖会被记住)
- meta.ini:“installationFile=(MO2记录的确切文件名)”。
- meta.ini:其中的“modID=”会与“downloads/”目录下具有相同Nexus模组ID的.meta文件进行匹配。
- 模糊文件名匹配(模组名称与压缩包主干名,去除标点及空格后比对)。
确定先前的选择对于每个选项组,工具会逐步尝试更复杂的检查,并在一项检查给出可信答案后立即停止:
- 空插件清除: 如果一组安装选项中,某个选项不安装任何文件,而其他选项会安装文件,那么根据其他选项文件的存在与否,即可判断是否选择了该选项。
- ESP/ESM/ESL 存在性: 查看某个选项将要安装的插件文件(.esp/.esm/.esl,且这些文件在FOMod中无法稍后安装),并检查这些文件是否存在。如果存在,则表示该选项已被选中。
- 唯一文件名存在性: 类似于上一步,但此步骤检查的是由FOMod选择选项安装的其他文件类型。若这些文件存在,则说明提供它们的FOMod选项已被选中。
- 单个文件比较:先比较文件大小,再比较MD5哈希值: 当多个选项可能生成相同的目标文件名时(例如,多个“补丁”选项都将文件重命名为同一目标),模组压缩包会被解压到临时文件夹,并通过比对已安装文件的哈希值与每个候选源文件来确定匹配项。首先会比较文件大小。若无法判定,且文件小于50,则使用MD5哈希比对实际文件内容。这是最后一种方法,因为它开销最大,耗时远比前三种选项长。
有些FOMod组本身不安装任何文件,它们只是设置一个内部“标记”,用于控制后续步骤的可见性(例如“选择‘整合版’或‘手动版’”,后续步骤只会在选择“手动版”时出现)
对于这些情况,工具通过检查以下内容来推断哪个旗帜处于激活状态:
- 磁盘上是否存在后续由标志位控制的步骤的ESP。
- 该条件文件安装模式绑定的标志位是否在磁盘上生成了实际存在的文件。
由于我经常遇到这些标志的问题,该工具现在分两轮处理:在分析下列选择组之前进行初步猜测,然后仅使用上述四个决定中实际确认的标志进行第二轮精炼,从而避免不确定的结果传播。
每个选项显示的对应结果状态工具运行完毕后,您可以看到输出结果,并且针对每项结果,它都会显示其做出该选择的原因:
- 已选中:确信已被选中,并注明了检测方法
- 自动安装:此选项始终被选中,不存在其他选择。(例如,许多“继续”页面都属于此类)
- only-option:该小组恰好有一个非可选选项。
- 存在多个可能的选择,无法自动判定。
- 未知:无法确定答案的决策层级
已知限制再次强调,此工具由AI制作。请勿将结果奉为金科玉律。AI会犯错,而且一定会犯错!我已经针对完整模组列表进行了30多次迭代优化,以确保其正常工作,但毫无疑问,仍存在我在测试中未曾遇到的边缘情况。
大文件(50 MB以上)仅通过大小匹配,而非哈希匹配,这是出于性能权衡的考虑。这意味着对于大文件,在极少数情况下,如果两个选项的文件大小完全一致,该工具理论上可能出现误报。不过这种情况极为罕见。
为什么没有.exe选项?我不建议在无法自行查看代码的情况下,随意运行某个用户声称是AI生成的代码或可执行文件。因此,我没有将其发布为.exe文件。不过,如果你确实想要一个一键运行的可执行文件(我仍然建议手动安装依赖包后,直接从Windows资源管理器中运行.pyw文件),你可以使用 PyInstaller 要自己创建.exe文件: pyinstaller --onefile --windowed --name "FOMod Detective" '.\FOMod Detective.pyw'