GUI界面的KCD2模组合并工具

GUI界面的KCD2模组合并工具

KCD2 Mods Merger with GUI 一款强大的跨平台工具,旨在将多个KCD2模组合并成一个统一的模组包。该工具解决了“模组数量上限”(比如最多150个?!)的问题,并通过将所有模组合并为一个来简化加载顺序管理。

实用程序

[b][color=#cc0000][效用限制][/color]

  • 可以合并模组,除了:纹理、脚本等。
  • 可以合并剧情引擎XML文件(如技能等),并支持备用语言本地化(西班牙语 → 法语 → 德语 → 英语(主语言))。

[color=#6aa84f][b]关键能力与特点[/b][/color]

  1. 智能本地化合并

    • [b]多语言支持 + 备用方案:[/b] 与仅支持英语的旧工具不同,本程序会扫描[i]所有[/i]本地化PAK文件(例如 French_xml.pak、English_xml.pak、Czech_xml.pak 等)。
    • [b]XML节点合并:[/b] 该功能从本地化存档中提取XML文件,解析后合并内存中的XML树结构。[i]这能确保Mod A和Mod B的文本字符串在游戏中同时显示。[/i]
    • [b]内存优化:[/b] 合并操作在 [b]内存[/b] 中进行;该工具直接创建最终的 [code]Localization/*.pak[/code] 文件,无需向 [b]磁盘[/b] 写入大量临时 [b]XML 文件[/b]。
  2. 高级数据处理(PAK文件与松散文件)

    • [b]松散文件打包(zzz_merged_logic.pak):[/b]
      • 该工具检测“松散”文件(即文件夹中的原始[b].xml[/b]、[b].dds[/b]、[b].tbl[/b]文件),这些文件不在[b].pak[/b]文件中。
      • 它会自动将它们打包成一个名为[b]zzz_merged_logic.pak[/b]的新存档。
      • [b]优先级逻辑:[/b] [b]zzz_[/b]前缀确保此归档文件被[b]CryEngine/KCD2引擎[/b] [i]最后[/i]加载,从而[i]保证[/i]您的[b]松散文件覆盖优先级高于原版数据或其他打包的模组。[/b]
    • [b]智能去重:[/b] (功能描述未提供,保留原样)
    • [b]现有PAK管理:[/b]
      • 源模组中现有的 [b].pak[/b] 文件会被复制到输出中。
      • [b]碰撞避免:[/b] 通过添加[b]前缀[/b](模组文件夹名称)进行重命名自动实现。
  3. 模组清单生成

    • 自动生成一个有效的[b]mod.manifest[/b] XML文件。
    • 通过界面自定义元数据输入:[i]名称、模组ID、描述、作者和版本号。[/i]
    • 在[b]ISO 8601 UTC格式[/b]中自动添加创建日期的时间戳。
  4. 用户体验与安全

    • [b]排除掩码(Exclusion Masks):[/b] 支持通配符过滤(例如 [b][color=#cc0000]_*[/color][/b]),用于在合并过程中排除备份文件夹、隐藏文件或特定模组。
    • [b]GUI 验证:[/b]如果关键路径缺失或字段为空,则阻止运行合并。
    • [b]安全检查:[/b] 如果输出目录不为空,则警告用户,以防止意外数据丢失。
    • [b]确定性顺序:[/b] 模组按字母顺序处理,以确保每次构建时结果一致。

⚠️ [b][color=#ffe599]限制条件[/color][/b]

  1. XML合并策略(仅追加):

    • 该工具通过将一个文件的节点附加到另一个文件来合并[b]XML[/b]。它不会在特定XML行内执行“[b]深度[/b]”逻辑合并或冲突解决。
    • [i][b]示例[/b]:[/i] 如果模组A设置[i]RPG参数[/i] [b]强度=5[/b],而模组B设置[b]强度=10[/b],两条条目都可能被写入XML。游戏引擎通常会读取最后加载的条目。
  2. 二进制文件冲突:

    • 该工具无法合并二进制文件(如已有[b]PAK[/b]中的纹理)的[i]内容[/i]。它只能将[b]PAK[/b]文件[b]并列复制[/b]。如果两个[b]PAK[/b]文件包含完全相同的内部文件路径,引擎将根据[b]PAK[/b][i]命名/加载顺序[/i]决定加载哪一个。
  3. 加密档案:

    • 该工具假定使用 [b]KCD/CryEngine[/b] 的标准 Zip 压缩(Deflate)。不支持加密或自定义格式的 PAK 文件(尽管这在模组制作中很少见)。
  4. 松散文件优先级:

    • [i]松散文件[/i]由于使用了[b]zzz[/b]命名,其[b]优先级[/b]高于此工具生成的[b]PAK[/b]文件,但用户需注意,位于[i]游戏根目录[/i]的松散文件仍可能根据游戏特定的加载行为覆盖模组文件。

[color=#cc0000][b]如何运行[/b][/color]

[b]选项A[/b]:[color=#bf9000][i]Windows系统[/i][/color]

  1. 确保已安装 [b]Python 3[/b](安装时勾选 "[i]将 Python 3 添加到 PATH[/i]")。
  2. 双击 [b]RunModMerge.cmd[/b]。
  3. 启动器将自动检查 [b]Python 3[/b] 和 [b]Tkinter[/b]。

[b]选项 B[/b]:[color=#bf9000][i]Linux[/i][/color]

  1. 确保已安装 [b]Python 3[/b] 和 [b]Tkinter[/b]:
    • Ubuntu/Debian:
      sudo apt install python3 python3-tk
      
    • Arch:
      sudo pacman -S python tk
      
  2. 使脚本可执行:
    chmod +x RunModMerge.sh
    
  3. 运行脚本:
    ./RunModMerge.sh
    

[b]选项C[/b]:直接执行[b]Python[/b] 在文件夹中打开[i]终端/命令提示符[/i]并运行:

python3 ModMerge.py

[color=#e69138][b]使用指南[/b][/color]

  1. [b]模组源文件夹:[/b] 选择存放已解压的模组的文件夹。
    • [i]结构:[/i] [b]SourceFolder[/b] → [b]Mod名称[/b] → [b]Data[/b] / [b]Localization[/b]
  2. [b]输出捆绑包文件夹:[/b] 选择你希望结果保存的根文件夹。
    • 工具将使用您提供的[b]Mod ID[/b]创建一个子文件夹。
  3. [b]设定:[/b]
    • [i]排除掩码[/i]:可选,输入类似 [b][color=#cc0000]_*[/color][/b] 的格式用以跳过以下划线开头的文件夹。留空则包含所有内容。
  4. [b]清单信息:[/b] 填写模组详细信息(名称、ID、版本等)。
  5. [b]合并:[/b] 点击按钮 [b]合并模组[/b]。
  6. [b]结果:[/b]
    • 前往[i]输出文件夹[/i]。
    • 将生成的文件夹复制到您的[i]游戏[/i]的[b]Mods[/b] [i]目录[/i]中。

[color=#a64d79][b]面向模组作者的技术细节[/b][/color]

  • [b]松散文件打包:[/b] 该工具会创建 [b]Data/zzz_merged_logic.pak[/b]。这种命名方式是为了[b]利用CryEngine按字母顺序加载的机制,[/b]确保这些文件能覆盖更早的资源。
  • [b]线程处理:[/b] 合并过程在单独的线程中运行,以保持界面响应性([b]不会冻结GUI[/b])。

[b]许可证:[/b] 开源(MIT)