CP模组管理器

CP模组管理器

一个非常简单的命令行程序,方便手动安装/移除模组。简洁是关键。

实用工具

CP模组管理器

需求

本程序专为Python 3编写。

为了方便,安装时请记得勾选将Python添加到PATH。该选项显示为复选框。

从以下网址获取:Python 官方网站

程序功能

本程序遵循三大原则:简洁、直接、易用。

该程序旨在“镜像”您放入的任何文件夹和文件,自定义模组文件夹,使其出现在《赛博朋克2077》游戏文件夹中。文件和文件夹将被复制,以便您始终保留2份副本安装时的模组文件。

程序需要知道您的游戏文件夹安装位置。要设置此,你需要编辑一行代码。向下滚动到最下面的部分launcher.py文件。你会看到以下内容:

"""
脚本
---------------------------------------------------------------------
"""
# 此文件夹的路径。
HERE = os.path.dirname( os.path.realpath(__file__) )
游戏文件夹   = "C:\\GOG Games\\Cyberpunk 2077"

编辑game_folder的值,使你的游戏文件夹路径显示在双引号之间。

程序结构

本程序使用相对路径来管理其mod,因此程序启动器必须从程序文件夹内运行。

基本文件夹结构如下:

CP模组管理器/
    mods/
        自定义模组1/
        自定义模组2/
    launcher.py
    memory.json
    README.md

请注意,程序文件夹的名称"CP ModMan"可以随意更改,就像自定义模组文件夹的名称一样。

安装模组

设置

在安装模组之前,您需要先在程序的mods文件夹中进行设置文件夹。模组文件夹的名称可以随意命名,但建议使用简短、易识别的名称(稍后我们会明白原因)。在这个例子中,我将使用Yaiba Kusanagi CT-3X 自定义涂装包作为我想安装的模组。

涂装作业包模组由fuxsart制作

我将把模组文件夹命名为yaiba color。模组作者指定文件应放置在Cyberpunk 2077\archive\pc\mod目录下。我会选择继续带有黑色和铬合金变体,因此我的程序文件夹将包含以下内容:

CP模组管理器/
mods/
    yaiba color/
        archive/
            pc/
                mod/
                    yaiba_kusanagi_black_chrome.archive

请注意,yaiba color后的路径应与显示在游戏文件夹中的路径一致。

安装

现在我将打开程序文件夹并双击launcher.py文件来运行它。它将在命令行中打开并显示菜单:

    选择一个选项:
        1 : 安装一个模组
        2 : 列出所有模组
        3 : 移除一个模组
        10 : 安装所有模组
        30 : 移除所有模组
        0:更新内存
        q : 退出

由于我还没有安装任何模组,程序将不会有任何内容我需要安装。每当添加新模组时,必须先进行更新。因此,我将运行程序并且我会:

  • 输入:0
    • 添加或更改文件后始终更新
  • 进入:1
    • 注意到我也可以输入"10"
    • 我将看到一个模组列表
  • 输入:yaiba color

当要求输入模组名称时,输入简短的内容会更方便。这就是为什么建议使用简短、易识别的名称。

确认

此时菜单再次出现,但我无法判断是否发生了什么变化。我可以输入"2"列出所有模组,并看到"yaiba color"旁边有"已安装"字样。

--------------------------------------------------
|  yaiba color : 已安装
--------------------------------------------------

如果我想更彻底一些,我也可以导航到我的游戏文件夹(无论安装在何处)并查看该文件以及/archive/pc/mod/文件夹已被复制到此处。

删除模组

这个函数几乎与安装模组相反。让我们继续以yaiba color模组为例。当我输入"3"和模组名称时,程序将利用其内存创建与此模组相关的文件列表。然后你会找到这些文件在游戏文件夹中,使用相对路径,并将它们删除。任何子文件夹直到文件都不会被删除。因此,如果我只安装了yaiba color模组,/archive/pc/mod/文件夹仍会保留在《赛博朋克2077》游戏目录中。这是理想的选择,因为我们不希望删除其他已安装的模组。

当我输入"2"列出所有模组时,应该看到模组旁边显示"未安装"。

--------------------------------------------------
|  yaiba color : 未安装
--------------------------------------------------

修改模组

继续以yaiba color为例,假设我想更改默认颜色。我仍想使用这个模组,但只想使用不同的"colors"文件。我将运行程序并执行以下操作:

  • 输入:3
  • 输入:yaiba color
  • yaiba color模组中删除yaiba_kusanagi_black_chrome.archive文件
  • yaiba_kusanagi_black_gold.archive添加到yaiba color模组中
  • 进入:0
  • 进入:1
  • 输入:yaiba color

在更改任何文件之前,务必先卸载该模组。不这样做会导致程序的内存和实际文件夹内容冲突。此外,每次更新mod时,记得输入"0"以更新程序内存。

组合

因为程序会镜像每个自定义模组文件夹的目录结构,由该程序管理的mod实际上可以合并为一个。对此要小心。混合太多模组在一起最终可能会导致模组管理与没有管理器一样繁琐。

如果你有一组总是想一起安装的模组,那么你可以将他们的所有文件转储到一个自定义模组文件夹中。我在yaiba color示例中使用的涂装作业包模组作者对其他车辆进行了重新着色。可以运行管理程序并:

  • 输入:3
  • 输入:yaiba color
  • 将文件夹yaiba color重命名为fuxsart colors
  • 添加作者提供的其他文件,用于更改车辆颜色
  • 进入:0
  • 进入:1
  • 输入:fuxsart colors

注意到我不仅添加了更多模组,还重命名了自定义模组文件夹。如果我只想重命名模组,我也会遵循相同的步骤,但省略关于更改(或添加)文件的部分。如果你不想重命名文件夹,可以直接跳过该步骤。

黑客入侵

环境

在程序结构部分提到,本程序采用相对路径在程序文件夹内,且程序文件夹可被重命名如你所愿。这有什么重要的呢?

将模组合并到单个自定义模组文件夹的替代方法是克隆该程序。例如,假设我想管理实用模组与其他一切分开。

  • 我创建了一个名为CP ModMan - Util的文件夹
  • 我把launcher.py文件的副本放在了那里
  • 我在那里创建了一个空的mods文件夹
  • 我在那里安装了一些实用模组

以下是我运行该程序副本并选择"2"时的一些输出:

--------------------------------------------------
|  ArchiveXL 1-1-3 : 已安装
|  材质纹理覆盖(原始)1-0-0 : 已安装
|  red4ext 1-8-0 : 已安装
|  redscript 0-5-8 : 已安装
|  TweakXL 1-0-7 : 已安装
|  虚拟工作室 0-3-0 : 已安装
--------------------------------------------------

将这些合并到一个单独的模组文件夹中会使更新其中任何一个变得有点不方便。通过将它们保存在一个独立且单独的文件夹中,我可以特别关注这些模组。由于这些模组本身并不真正起作用(它们是其他模组的必备条件),我也不必担心它们在我移除其他模组时被影响。

如果你恰好对编程感兴趣,并想尝试捣鼓一番,你可以创建一个"实验性"副本。该程序相当小巧且充满了注释,希望对于初学者来说不会太难理解。

记忆

如果事情变得奇怪,你不仅可以查看程序的记忆,但你也可以修改它。记忆采用JSON格式,程序内存结构大致如下:

{
    "cet-1-6": {
        "状态": "已安装",
        "文件": [
            "\\bin\\x64\\global.ini",
            "\\bin\\x64\\LICENSE",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks\\scripts\\autoexec.lua",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks\\scripts\\json\\json.lua",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks\\scripts\\json\\LICENSE",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks\\scripts\\json\\README.md",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks\\ThirdParty_LICENSES",
            "\\bin\\x64\\plugins\\cyber_engine_tweaks.asi",
            "\\bin\\x64\\version.dll"
        ]
    },
    "不自动居中": {
        "状态": "已安装",
        "文件": [
            "\\r6\\tweaks\\NoCameraAutoCentering\\DisableForTPP.yaml"
        ]
    },
    "yaiba color": {
        "状态": "已安装",
        "文件": [
            "\\archive\\pc\\mod\\yaiba_kusanagi_black_gold.archive"
        ]
    }
}

cet-1-6模组实际上是awpsoleet制作的Cyber Engine Tweaks。注意到我只是将README和LICENSE文件也一并放在了那里。我当时很懒。

no auto center模组实际上是No Camera Auto Centering,作者是djkovrik。

让我们假设我想重命名yaiba color模组,但我不想执行整个“卸载、重命名、更新、安装”流程。或者我们可以设想我意识到之前已经重命名了文件夹(或几个文件夹),而本来应该完成所有这些步骤的……哎呀!

如果我直接在内存中更改模组文件夹名称,并且它与当前模组文件夹的名称一致,程序应正常运行。

假设我手动从《赛博朋克2077》游戏文件夹中删除了一个模组,然后想起来我在CP ModMan里有这个模组。要解决这个问题,我可以打开内存文件,只需将state值从“installed”更改为“uninstalled”。我甚至可以删除内存中该模组的部分;程序会在下次更新记忆时重新获取它。