English | 中文
《深空当铺 / Probably Stolen》的自研辅助 Mod,适配正式版 0.8.12。 正式版为 Unity 2021.3.45f2 / Mono / x64(游戏 0.46D),使用游戏自带的 IMod / Harmony 加载器,不需要 MelonLoader 或 BepInEx。
- 顾客节点:每位普通顾客的开场对话结束后自动建立完整快照;双击节点回到那一刻。
- 手动节点:默认
F9随时建立,列表中显示为「手动」,不需要有顾客在场。 - 回到本日开业前(
F7)与回到上一天(F5)。 - 最多保留 20 个顾客 / 手动节点,另有独立的开业前与闭店节点。
- 跨顾客回溯:第 3 位顾客在场时也可以回到第 2 位顾客的节点。
- 闭店(含开门前的早市状态)下建立的手动节点可以正常回溯。
- 接了下一位顾客后才截断被放弃的后续分支。
- 离店、跨天、切换场景会释放内存节点;不支持跨场景回溯。
- 快速鉴定:鉴定界面列出真伪、问题与建议报价,可选自动提交。
- 双击鉴定:双击可鉴定物品时使用背包中的放大镜,省一次拖拽。
- 水质标注:实时标注水质,标签与实际不一致时标红。
- 化学辅助:水质栏显示主要成分与「占比% | 纯度% | 评级」;空瓶显示尺寸;滴管、量筒/量杯与 200mL 以下容器保持原名。
- 酿酒标注:显示荧光莓品相;未发酵酒瓶按内容物给出预期品质,水量不足单独提示,负分为「酿造失败」;违禁酵母使用原版样式的独立「违禁品」标签。
- 对话快进:普通顾客寒暄自动推进,遇到选择、SEC 与重要对话自动停下。
- 设置页「查看日志」可在游戏内滚动查看
PSTools.log末尾 400 行,日志路径自动复制到剪贴板。 - 日志头统一为
[QuickSL]/[QuickSL/子系统](如[QuickSL/Customer])。
| 默认按键 | 作用 |
|---|---|
F6 |
回到当前顾客的到店节点(内存恢复) |
F5 |
回到上一天的开业前节点 |
F7 |
回到本日开业前 |
F8 |
显示 / 隐藏检查点面板 |
F9 |
立即建立手动节点 |
全部可改:F8 → 设置 → 快捷键。点一行后按新键;Esc 取消、Backspace 恢复该条默认、Delete 停用该快捷键;底部「恢复默认快捷键」一键还原。新键与其他动作冲突时会自动交换。
如果游戏目录存在
dev.txt(开发者控制台),F8/F9会与游戏自带工具冲突,启动日志会给出提示。玩家通常不会开启它。
- 拖动标题移动,右下角缩放,标题按钮收起;位置、尺寸与收起状态持久化。
- 双击节点回溯;被拒绝时会逐条列出具体原因(顾客移动、拖拽、通话、状态不符等),并提示查看日志。
- 建立失败的节点以「损坏」显示,鼠标悬停查看原因。
- 设置区可滚动,包含功能开关、快捷键与「查看日志」。
- 容器容量 ≤ 2999mL 才显示成分;更大的桶保持原样。
- 水或酒精占比 > 65% 时按水 / 酒精为主成分;否则显示「水、酒精之外占比最高」的成分。
- 水质栏格式:
成分(占比% | 纯度% | 评级),占比为该成分 ÷ 全液总量。 - 纯度按「预期提纯后的产物」计算:排除水、酒精、脂合剂、脂肪、物理污染物、微生物、植物质、不溶性碎屑、三种菇类糊糊;蛋白 / 酸 / 碱不满 1mL 不扣除;化学污染物按 0.7% 封顶。
- 评级:纯品级 / 药用级 / 近药用级 / 街头标准级 / 掺兑级 / 垃圾级 / 淀粉级,按纯度划分并用颜色区分。
- 酒精为主时显示
酒精(占比),名称显示「酒精」;74–76% 为「医用酒精」,≥99.95% 为「脱水乙醇」。 - 空瓶名称显示为
空瓶(迷你/小/标准/大),不占用「水质」行。 - 名称替换只作用于悬浮说明与拖拽使用 / 倾倒提示;背包、交易列表、任务文本保持原名。
- Mod 不会主动调用游戏存档函数,也不会主动改动存档文件。
- 顾客节点是纯内存恢复。
- 「回到开业前 / 上一天」现在只加载节点、不写回存档:检查点会复制成临时文件,通过游戏的
NewGameData.saveFile读取;之后的存档完全由游戏自己写入。另会保留一份.pre_restore备份。 - 首次使用前仍建议手动存一次,尤其是在多 Mod 环境。
推荐:Steam 创意工坊 —— Probably Stolen Tools
在 Steam 创意工坊页面点击「订阅」,启动游戏后在「模组」菜单启用即可,更新由 Steam 自动完成。
手动安装:
- 下载 release 中的
ProbablyStolenTools文件夹,放进<游戏目录>\Mods\。 - 在游戏「模组」菜单启用 Probably Stolen Tools,按提示重启。
- 读档进店后按
F8打开面板。
需要 files、reflection-external、dynamic-code 能力,无网络访问。
- 适用于正式版(Mono);Demo / MelonLoader 路径不再维护。
- 与不修改同一界面、不新增数据结构到游戏内的 Mod 一般可共存。
- 快照会遍历游戏业务对象图,向游戏内新增大量对象或自定义数据结构的 Mod 可能导致建节点失败(面板会显示「损坏」及原因)。
src/ProbablyStolenTools/ Mod 本体(Harmony 补丁、快照引擎、原生 UI、配置)
tests/CheckpointTests/ 快照 / 状态图往返与布局回归
tests/ReleaseCompatibility/ 针对正式版 DLL 校验补丁目标与私有字段
scripts/Deploy-FullRelease.ps1 备份并部署到游戏 Mods 目录
release/manifest.xml Mod 清单(ID、版本、能力声明)
research/ 逆向、设计与问题记录
docs/workshop/ 创意工坊介绍文本
tools/ 自用逆向工具源码(MetaDump / ILDump)
AGENT.md 交接文档:架构、约束、验收顺序
关键文件:
| 文件 | 负责 |
|---|---|
CustomerCheckpoint.cs |
顾客 / 手动节点快照的捕获、恢复、分支截断 |
Rewind.cs |
文件节点(开业前 / 上一天)、只加载不写回的重载流程 |
ManagedStateAccess.cs |
托管对象图遍历与字段规则 |
StateGraph.cs |
槽位 / 对象 / 引用序列化与差异校验 |
LiquidComposition.cs |
液体成分、纯度与评级 |
WineAppraisal.cs |
荧光莓与未发酵酒瓶标注 |
Panel.cs |
F8 面板与设置项 |
游戏路径不写进仓库。首次构建前把 src\ProbablyStolenTools\local.props.example 复制为 local.props 并填入游戏目录(已加入 .gitignore):
<Project>
<PropertyGroup>
<GameDir>C:\Program Files (x86)\Steam\steamapps\common\Probably Stolen</GameDir>
</PropertyGroup>
</Project>也可以用环境变量 PROBABLY_STOLEN_FULL_DIR。
dotnet build src\ProbablyStolenTools\ProbablyStolenTools.csproj -c Release
dotnet run -c Release --project tests\CheckpointTests\CheckpointTests.csproj
dotnet run -c Release --project tests\ReleaseCompatibility\ReleaseCompatibility.csproj -- "<游戏目录>" src\ProbablyStolenTools\bin\Release\Mono\ProbablyStolenTools.dll release\manifest.xml
.\scripts\Deploy-FullRelease.ps1当前基线:编译 0 警告 / 0 错误;CheckpointTests 62 项通过;正式版 55 个 Harmony 入口、73 个字段与官方 Mod 扫描器通过。离线测试不能代替游戏内验收。
- 唯一真源是
release/manifest.xml的ModVersion。 - 版本规则:大版本、中间版本手动决定;小版本每次
git push前 +1(例如 0.8.12 → 0.8.13)。 - README 文案更新不推进版本号。
有日志基本都能定位到具体原因。请附上:
| 文件 | 位置 |
|---|---|
PSTools.log |
%LOCALAPPDATA%Low\Questing Goose Studio\Probably Stolen\PSTools.log |
Player.log |
同目录 |
PSTools_history.log |
同目录 |
并说明 Mod 版本、游戏版本与是否安装了其他 Mod。也可以在游戏内通过「设置 → 查看日志」临时读取。
源码与交接文档一起公开,就是为了让适配可以由任何人完成:
- clone 整个仓库(不要只下 DLL);
- 把「仓库 + 目标 Mod + 冲突日志」交给你的 AI 助手,提示它读
AGENT.md; - 按
AGENT.md的约束修改,跑上面两组测试; - 部署验收后提 PR,附改动说明与日志。
这个游戏的 Mod 生态没有统一框架,兼容问题往往不是改一行能解决的;作者不会主动为第三方 Mod 做适配。