C1yHAX/fat-stacks
GitHub: C1yHAX/fat-stacks
一个 Cyberpunk 2077 的 RED4ext 插件,通过运行时三字节内存补丁移除游戏内金钱与物品堆叠的数量上限。
Stars: 0 | Forks: 0
# Fat Stacks - 无物品与欧金上限
[](https://github.com/C1yHAX/fat-stacks/actions/workflows/build.yml)
[](LICENSE)
## 功能
Cyberpunk 2077 对物品数量进行了硬性上限限制。在游戏内部,金钱本质上只是一种物品
(`Items.money`),因此无论你做什么,上限都卡在 **1 亿**。
任何超出此数额的收入都会被静默扣除。
Fat Stacks 从根源上移除了这一上限:
| | 原版 | 使用 Fat Stacks |
|---|---|---|
| 欧金 (Eddies) | 100.000.000 | **2.147.483.647** |
| 物品堆叠(如合成材料) | 999.999 | **2.147.483.647** |
没有影子账户,没有二级钱包,也没有脚本补丁。上限
确实被移除了。购买、出售、拾取、任务奖励和银行提款
都会如你期望的那样正常运作。
## 工作原理
游戏引擎通过**精准的三条指令**来限制数量:
```
cmp ecx, edx ; 3B CA ecx = gewuenschte Menge, edx = Limit
cmovle edx, ecx ; 0F 4E D1 edx = min(menge, limit) <-- die Ursache
mov [rdi+78], edx ; 89 57 78 Menge ins Item schreiben
```
Fat Stacks 将 `cmovle` 替换为 `mov edx,ecx` + `nop` — 这样它将始终
采用完整的数值,而不是最小值。指令长度相同,没有
Trampoline,没有 Hook,也没有 Detour。
该位置是通过**特征码搜索**找到的,而不是依赖于固定地址。
如果 Plugin 未找到或找到多个匹配项,它**什么都不会做**,仅记录日志
——因此,在游戏更新后,它只会失效,而不会产生风险。
包含测试结果、推翻的假设以及所有被
排除的候选项的完整报告位于
[docs/REVERSE_ENGINEERING.md](docs/REVERSE_ENGINEERING.md)。
## 安装说明
**前置条件:** [RED4ext](https://github.com/WopsS/RED4ext)(已在 1.30.0 版本测试)。
1. 从 [Releases](https://github.com/C1yHAX/fat-stacks/releases) 下载 `FatStacks.zip`
2. 将内容解压至 Cyberpunk 2077 根目录 — 即 `bin\`, `r6\`
和 `archive\` 所在的位置:
\red4ext\plugins\FatStacks\FatStacks.dll
3. 启动游戏。完成。
**验证:** 启动后,可在以下位置查看日志:
`\red4ext\plugins\FatStacks\FatStacks.log`:
```
Geldlimit ENTFERNT. Patchstelle: 0x... (cmovle -> mov edx,ecx).
```
**卸载:** 删除文件夹 `red4ext\plugins\FatStacks`。它不会修改
任何游戏文件,也不会在存档中留下任何数据。
## 兼容性
- **存档:** 双向完全兼容。超过 1 亿的金额
在保存、加载和重启游戏后均能完好保留(已测试)。
- **其他 Mods:** 不涉及任何脚本或 TweakDB 的修改,因此实际上是
无冲突的。唯一已知的例外是:带有**自身**限制的 Mods
(例如 `CryptoExchange` 会拒绝超出其内部
`CASH_CAP` 的销售)——但这仅影响相应的 Mod。
- **游戏版本:** 得益于特征码搜索,只要
CDPR 不重构该代码段,便与游戏版本无关。开发与测试基于 **2.31** 版本。
## 限制 — 实事求是
**2.147.483.647 是绝对的终点。** 物品数量是 `Int32` 类型;超出此值会导致
数值变为负数。这是游戏的底层数据存储格式,**无法**
通过 patch 修复。十亿可以,万亿不行——如果有人承诺能做到其他效果,那他们只是通过二级账户绕过限制,而非真正移除它。
**Patch 是通用的。** 它移除了*所有*物品堆叠的上限,
而不仅仅是金钱。这是有意为之的,也是其名称的由来——如果你只想
解除金钱上限,请参阅 Reverse-Engineering 报告中关于“通用与金钱专属”的章节。
**金钱显示 UI 专为约 8 位数设计。** 十位数可能会在某些
独立 Widget 中显示不全。但这在功能上并无影响。
## 自行构建
前置条件:安装带有 C++ 工作负载的 Visual Studio 和 Git。**不需要** CMake。
```
.\Build-Plugin.ps1 -GamePath "E:\Games\steamapps\common\Cyberpunk 2077"
```
它会自动获取 RED4ext-SDK,使用 `cl.exe` 进行编译,并直接安装
到游戏中。构建完成的压缩包随后会位于 `dist\` 目录下。
或者,在不需要 Plugin 的情况下:`FatStacks-Patch.ps1` 可以对运行中的
游戏应用相同的 patch(持续到下次重启为止,无需编译器)。
## 许可证
[MIT](LICENSE) — 随你怎么用。
这是非官方的粉丝 Mod,与 CD PROJEKT RED 毫无关联。本 Mod 不会分发任何
游戏内容;该 Plugin 仅在运行时于内存中修改
三个字节。详情请见:[NOTICE.md](NOTICE.md)。
标签:AI合规, C++, Cyberpunk 2077, Libemu, RED4ext, 内存修改, 数据擦除, 游戏模组, 特征码扫描