赛博朋克 2077 专属功能说明
适用:模组加加 Pro 客户端 · 当前游戏为《赛博朋克 2077》时
维护:新增 / 修改这些功能时,请同步更新本文档
共同说明
- 入口:全部在「我的模组」页右上角 更多功能 下拉里,只有当前游戏是赛博朋克 2077(game_id = 53)时才出现这一组菜单项;其他游戏不受影响。
- 风险分级:标「只读」的绝不改动任何文件;标「写文件」的只写自己那一个/一组文件,且都会在改动前提示。
- 通用原则:需要读写游戏目录的功能,建议先关闭游戏(文件被占用时改不了、存档可能正被写入)。
| 功能 | 一句话 | 是否改动游戏文件 |
|---|---|---|
| archive 冲突 | 找出"两个模组抢同一个资源" | 只读 |
| 日志诊断 | 读日志自动标出错误/警告,并归纳已加载模组 | 只读 |
| CET 快捷键 | 改 CET 呼出控制台的快捷键 | 只写 bindings.json |
| 框架检查 | 查前置框架装没装 + 依赖预警 | 只读 |
| 加载顺序 | 调 archive 的加载顺序,写 modlist.txt | 只写 modlist.txt |
| 兼容检查 | 游戏/框架版本 vs 各框架的最低要求 | 只读 |
| 存档备份 | 动手前把存档整个备一份 | 只读复制存档 |
| REDmod 部署 | 跑一次 redMod deploy,让 REDmod 模组生效 | 只写 REDmod 产物 |
1. archive 冲突
作用:逐个解析模组里的 .archive,把"内部含同一个资源(同一个哈希)"的模组找出来。两个模组各带一个文件名不同的 .archive 时,「冲突扫描」查不到,这里能查到——游戏里它们必然打架。
背景:CP2077 归档的 RDAR 索引里只有 64 位资源哈希、没有路径,所以这里比的是哈希。
两层判定:
- 层①:同一个资源哈希出现在 ≥2 个模组 → 冲突。按"模组对"聚合(一对模组一行),展开才看具体归档清单与冲突哈希。
- 层②:这条冲突资源是否也在原版归档里 → 用来区分:
- 抢游戏自带文件(高危、最常见)——多个模组在覆盖同一个原版资源,最容易崩或失效,界面标红并给顶部汇总提示;
- 两个模组各自定义了同一条新路径(少见)。
顺序与胜负:列表里靠前的模组胜(≈ 加载顺序:同名资源先加载者生效)。
用法:点「开始扫描」逐个解析当前列表里的模组;「快速模式」下每个模组只要发现一处冲突就不再继续比对(结果更精简,但模组仍会全部扫完)。
相关联动:冲突结果会落库(ArchiveConflict 表);在卡片区勾选「互斥检查」并恰好选中一个模组时,与之冲突的卡片会描紫边(与路径冲突的橙边区分)。
边界:
- 明细只显示哈希,不显示可读路径(哈希不可逆,且业界没有可离线使用的全量"哈希→路径"字典);
- 原版归档需至少成功解析一次才能做层②;读不到时会明确提示"无法判定",而不是当成"没有冲突";
- 只扫当前列表(受分类 / 搜索 / 筛选影响)里的模组。
2. 日志诊断
作用:读游戏日志(redscript / RED4ext / 各插件 / CET),按内置签名库(从 ModWright 的 MIT 签名库一次性导出,52 条)自动标出错误与警告。只读。
两个视图(同一份结果,切换只重画、不重扫):
-
诊断结果
- 分级汇总:错误 / 警告 / 提示 / 正常;
- 命中明细:严重级别、来源日志、行号、说明、建议、原始行(悬停看全);
- 归属分析:把日志里"谁改 / 读了哪个对象"聚合成"对象 → 各来源方",被多个来源方争抢的对象排最前面——回答"某功能失效到底是谁干的"。
-
已加载模组
- 归纳日志里确实被加载的东西:RED4ext 插件(含版本与作者,最权威)、ArchiveXL(
.xl清单)、TweakXL(tweak 文件)、redscript、CET Lua 模组、资源缺失涉及的归档; - 能对上本管理器里的模组时,可直接定位到卡片。
- 归纳日志里确实被加载的东西:RED4ext 插件(含版本与作者,最权威)、ArchiveXL(
每条命中可做的动作:
- 打开日志文件:用系统默认程序打开这条命中所属的日志;
- 定位模组:从命中里抽出的名称匹配到本管理器的模组时,一键跳到那张卡片。
其他:
- 显示中文:用中文显示说明;关掉就是英文原文(中英两套随结果一起带回来,切换不用重扫);
- 复制日志:把诊断结果连同给 AI 的提示词一起复制,方便贴给 AI 分析。
实现:宿主只提供两个通用通道(列某目录下的 .log / 读一个日志文本),扫描与匹配全部在前端本地完成。
边界:只读;"版本 / 已加载"这类信息依赖日志存在(游戏至少跑过一次)。
3. CET 快捷键
作用:修改 Cyber Engine Tweaks 呼出控制台的快捷键。
改的是哪个文件:<游戏>\bin\x64\plugins\cyber_engine_tweaks\bindings.json 里的 cet.overlay_key(注意是 bindings.json,不是 config.json)。
原理与注意:
- 该值是 Windows 虚拟键码按大端打包(单键 =
vk << 48); - 写入采用区间替换,只改那一个数字、不整份 JSON 往返——因为别的模组的绑定可能存着超过 2^53 的整数,走
JSON.parse/stringify会丢精度、把别人的绑定改坏; - 必须游戏关闭时改:CET 只在启动时读一次配置;运行中在 CET 里点保存会覆盖这次修改;
- 界面只显示友好的按键名称,不暴露 VK 十六进制等技术细节。
4. 框架检查
作用:逐个查关键框架的标志文件是否存在,并按依赖关系给预警。只读(纯前端 window.ppFs.exists)。
检查项(路径依据 ModWright 的 compat.js detectComponents):
| 框架 | 标志路径 |
|---|---|
| RED4ext | red4ext\RED4ext.dll |
| redscript | engine\tools\scc.exe |
| ArchiveXL | red4ext\plugins\ArchiveXL\ArchiveXL.dll |
| TweakXL | red4ext\plugins\TweakXL\TweakXL.dll |
| Codeware | red4ext\plugins\Codeware\Codeware.dll |
| RedHotTools | red4ext\plugins\RedHotTools\RedHotTools.dll(可选) |
| CET | bin\x64\plugins\cyber_engine_tweaks.asi |
| Input Loader | r6\input |
| REDmod | tools\redmod\bin\redMod.exe |
依赖预警:
- RED4ext 是 ArchiveXL / TweakXL / Codeware 的原生插件前置——缺它这几个全都不会加载,依赖它们的模组会静默失效;
- Codeware 额外要求 CET ≥ 1.37。
RedHotTools 是可选:未安装时显示中性灰「可选」,不报红,也不计入"必需前置"的计数。
边界:这里不显示版本(读 DLL 的 PE 文件版本需要额外的宿主能力)——要看版本请到「日志诊断」的启动打印行,或用「兼容检查」。
5. 加载顺序
作用:管理 <游戏>\archive\pc\mod\*.archive 的加载顺序。
规则(移植 ModWright readCyberpunkLoadOrder):
- 归档默认按文件名 ASCII 排序;
- 若存在
archive\pc\mod\modlist.txt:列在里面的按列出顺序排在前,未列的按文件名排在后; - REDmod 的
mods\*固定排在所有归档之后(此处只读展示,部署见「REDmod 部署」)。
胜负:同名资源先加载者生效——列表第一位就是胜者(行上标「首位」)。
操作:
- 拖动任意一行调整顺序(行上半=插到它前面,下半=插到它后面;拖到空白处=移到末尾),也可用行右侧 ↑ / ↓ 微调;
- 按文件名排序:把界面顺序重置为 ASCII(仅改界面,标记"未保存");
- 保存顺序:把当前顺序整个写入
modlist.txt; - 删除覆盖:删掉
modlist.txt,恢复"按文件名排序"的默认行为。
归属模组:每个归档名后面会显示「归属模组:X」(先按"存储目录里实际存在的归档名"精确匹配,匹配不到再按名字猜),点一下跳到「我的模组」里那张卡片——免得用户只看到一个 .archive 文件名、不知道是哪个模组。
实现与边界:纯前端,只写 modlist.txt 这一个文本文件,不改动任何 .archive;重启游戏后生效。
6. 兼容检查
作用:检查各框架要求的最低版本有没有被"实际装着的版本"满足(即游戏版本 vs 模组 / 框架要求)。只读。
门槛规则(照抄 ModWright compat.js 的 RULES):
| 组件 | 要求 |
|---|---|
| ArchiveXL | 游戏 ≥ 2.31、redscript ≥ 0.5.31、RED4ext ≥ 1.29 |
| TweakXL | 游戏 ≥ 2.3、redscript ≥ 0.5.27、RED4ext ≥ 1.28 |
| Codeware | 游戏 ≥ 2.31、redscript ≥ 0.5.31、CET ≥ 1.37、RED4ext ≥ 1.29 |
| RedHotTools | 游戏 ≥ 2.21、ArchiveXL ≥ 1.21、CET ≥ 1.35、redscript ≥ 0.5.25、RED4ext ≥ 1.27 |
| RED4ext | (咨询性提示)插件与游戏构建绑定,更新游戏后需等插件跟进 |
版本从哪来:只从日志取(前端没有读 DLL 的 PE 版本的能力):
- 游戏版本 ← RED4ext 日志的
Product version:; - RED4ext ←
RED4ext (v…) is initializing; - ArchiveXL / TweakXL / Codeware ←
… has been loaded; - redscript ← 日志横幅
Running REDscript …;CET ← 日志首行版本号。
装没装仍用文件是否存在判断(与「框架检查」同口径)。
结论三态:兼容 / 有警告 / 不兼容。列表分两部分:组件版本表 + 兼容问题列表(阻塞 / 警告 / 提示)。
边界:游戏没跑过、日志不存在时读不到版本 → 全按「未确定」给温和警告,绝不会误判成"不兼容"。
7. 存档备份
作用:删模组前把《赛博朋克 2077》的存档整个复制一份。
为什么需要:删掉"添加了物品 / 装备"的模组,会让存档里对它们的引用失效——经典的坏档坑。动手前先留一份最省心。
存档目录:%USERPROFILE%\Saved Games\CD Projekt Red\Cyberpunk 2077(取自宿主 sysInfo 的 savedGames)。
备份位置:<运行目录>\data\Cache\SaveBackup\<gameid>\<yyyyMMdd-HHmmss>\。
操作:
- 立即备份:整棵存档目录递归复制一份;
- 打开备份目录:在资源管理器里打开备份根目录;
- 每份备份可 打开(定位到该份)/ 删除。
保留策略:只保留最近 5 份,自动删最旧的。
安全守卫:备份前先检查游戏是否在运行——游戏运行中会直接拦下(存档可能正被写入)。
还原:手动——打开某份备份,把它里面的内容复制回存档目录即可(本版不做自动还原)。
实现与边界:只读复制,绝不改动原存档;纯前端(ppFs 的目录递归复制)。
8. REDmod 部署
作用:让 REDmod 模组真正生效。
为什么需要:REDmod 模组放在 <游戏>\mods\<名>\(每个目录都必须有 info.json),但游戏不会自动认——必须跑一次 tools\redmod\bin\redMod.exe deploy,它会生成 mods\mods.json(游戏启动时读这个清单)。不 deploy = REDmod 模组白装。
界面:
- 工具检测:
tools\redmod\bin\redMod.exe在不在(不在=这台机没带 REDmod 工具,无法部署); - 模组列表:
mods\*里带info.json的目录;缺info.json的标橙(deploy 会跳过或报错); - 部署状态:
mods\mods.json在不在 →「已部署 / 尚未部署(橙)」; - 输出回显:上次部署的原始输出(可滚动查看)。
操作:部署 REDmod / 重新读取 / 打开 mods 目录。
原理:调用宿主通道 cp2077RedmodDeploy,跑 redMod.exe deploy,工作目录=游戏根,并显式带 -root="<游戏根>"(实测:不传 -root 时 redMod 会用错的默认值并打印 Invalid root path found),同步等结束、回传输出与退出码。
边界:
- 只写 REDmod 自己的产物(
mods\mods.json等),不动别的东西; - 重启游戏后生效;
- 若显示"没有 REDmod 模组",说明
mods\下确实没有带info.json的目录,不是 bug。