Skip to content

v0.6.9 — 修净水器与水龙头残留杂质

Latest

Choose a tag to compare

@High-cla High-cla released this 24 Sep 15:58
· 12 commits to master since this release

修复: 净水器与水龙头残留杂质

UV 紫外线灯一直干净, 净水器与水龙头却总留一点点 —— 两条独立缺陷, 表象相同。根因靠读 ISIL 反编译定案 (dump/ascs/ 全是 throw null 空壳, 不可用)。

1. EmptyContainer 根本不清杂质

其 IL 全程没有出现过任何一个杂质 id 字面量, 只做 ModifyTag(容器 parts) 与 DisableTag("STRIP_TESTED_TAG") —— 它清的是容器里的**「水」(基液)**; 6 类杂质是各自独立的 part, 一个都不碰。

原净化补丁只有 EmptyContainer + AddPureWater(vol) 两步 → 基液换成了 100% 纯水, 杂质原样留着。而 UV 走 OnUVUsed → StripAllContaminants (逐类 RemoveContaminantFromContainer(minPercentage=0) 迭代到收敛), 根本不调 EmptyContainer —— 这正是两者表现不一致的原因。

2. AddWater 是「追加混合」而非替换

原水龙头补丁只把 grade 由 1 改成 0, 只保证新加的那一份是纯水; 容器原有杂质原封不动, 接水前残留多少仍是多少。

修复

补丁 改动
PatchPurifyToPure 补齐第三步: EmptyContainer + AddPureWater + StripAllContaminants
StripContaminantsOnly (新) 从 StripAllContaminants 抽出的「只剥离不补满」分支
PatchFaucetPure Prefix 增加 GameItem __0, 改完 grade 后调 StripContaminantsOnly

水龙头处刻意用 StripContaminantsOnly 而非 StripAllContaminants —— 后者会先补满, 原生 AddWater 就无处可加了。三者现共用同一条剥离路径。

开关默认值调整

键 默认 说明
FaucetAlwaysPure false (新改) 水龙头接出 100% 纯水

原版设计上水龙头只接得出高品质水 (grade=1), 改出纯水属于破例, 是否启用交给玩家在配置里决定; 净水器与紫外线灯是修正原生缺陷(残留杂质), 性质不同, 保持默认开启。

配置项与补丁逻辑本身不变, 仅默认值。

验证

  • dotnet build -c Release: 三项目 0 警告 0 错误。
  • DLL 内嵌符号校验: StripContaminantsOnly / StripAllContaminants / PatchFaucetPure / PatchPurifyToPure / FaucetWaterMarker 均在; AddPureWater / EmptyContainer / GetTotalVolume / GetFreeCapacity 未被误删。

资产

  • ProgressMod.dll
  • InventorySorter.dll
  • NetworkUnlockMod.dll

需重启游戏才会加载新 DLL。

完整变更: v0.6.8...v0.6.9


自 v0.6.8 以来的其它变更

  • 修库存检查器打不开 (c6661aa): NVIDIA 设计语言重构 d0e0f68 在 openCatalog 与 renderInstance 各加了一行 $('drawer').className = 'drawer';, 把 openDrawer() 刚加上的 show 类整个覆盖 ⇒ 页面变暗但抽屉不可见。图鉴「详情」不走 renderInstance 故一直正常, 解释了只有库存检查器中招。
  • 读路径改快照 (487cef2): /api/mine 与 /api/inventory 原先让 HTTP 线程同步等主线程 5s, 主线程一忙则两请求同时超时; 改为非阻塞置位 + 快照读取 (RefreshSnapshots 主线程节流 120ms)。