C1yHAX/fat-stacks

GitHub: C1yHAX/fat-stacks

一个 Cyberpunk 2077 的 RED4ext 插件,通过运行时三字节内存补丁移除游戏内金钱与物品堆叠的数量上限。

Stars: 0 | Forks: 0

# Fat Stacks - 无物品与欧金上限 [![build](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/052bc9eaea1744e860f382f618f1146be38e27dfd499bb29c253bcd1827fad60.svg)](https://github.com/C1yHAX/fat-stacks/actions/workflows/build.yml) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](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, 内存修改, 数据擦除, 游戏模组, 特征码扫描