v0.9.3 —— 修好「修复后仍有缺失」与「EFMI d3d11.dll(注入用)缺失」+ Mod 备份开关(含上一批 v0.9.2)
上一批(v0.9.2)的改动 —— 这次一起发布
v0.9.2 当时只更新了源码、没有单独发 Release,所以从 v0.9.1 用过来的人,下面这一批是这次才拿到的:
- 修掉一个"会改坏你的 Mod"的 bug(查庄方宜水墨旗袍时定位到的)
sanitize_ini_control_flow()以前会把Pattern/InsertDeclarations段里 shader 汇编文本中的endif当成 ini 控制流删掉。那段if_nz…endif是要插进 shader 的汇编、不是 ini 的逻辑;删掉后汇编不闭合,游戏启动几十秒后崩在显卡着色器编译器(nvgpucomp64)。现在只删真正的 ini 控制流 —— 库里那份 59 行的 ini 不会再被改成 55 行。 - 「皮肤 Mod」总开关语义重做:EFMI 的
d3d11.dll始终注入(实测不注入游戏直接起不来),这个开关现在只表示"一个皮肤都不加载"。 - 依赖自动处理:按需激活 + 去重 + 内外优先级;判据不再把「注释里提到的名字」当成引用(旗袍那句 isolation 声明曾把 RabbitFX 误激活 ⇒ 崩在着色器编译器);已知会导致崩溃的依赖(RabbitFX)自动不加载 —— 库里的文件照留,只是不放它进
Mods,日志里写明原因。 - 随包组件被换过时自动按基线重新展开(以前只提示,得自己删
runtime重下)。 - 崩溃归因更准:插件自己记下的崩溃(例如显卡着色器编译器)压过静态推测的「Mod 资源冲突」;启动前那个风险弹窗不再把「崩溃记忆」说成「Mod 冲突」。
- NRStyle 相关的自动改写与"是它导致崩溃"的断言已整段删除(实测它不是崩因)。
- 崩溃包 / 诊断包新增
runtime-inventory.txt(文件名 + 字节数 + sha256 + 是否偏离基线)。 - 设置页 15 个开关补上滑块样式;Mod 备份目录可在设置里自选(留空 = 数据根下的
mod-backup\)。
修好了「点几次『修复』都不管用」的四个判据
来自反馈者发来的诊断包与截图:界面一直停在 「修复后仍有缺失」,每次启动都弹 「发现缺失文件:EFMI d3d11.dll(注入用)/是否自动修复?」 —— 点了"继续"也修不好。
- Poser 安装记录被误判成"缺失"
上游向导写的plugin\poser-install.json带 UTF-8 BOM,我们按utf-8读会直接解析失败、被当成"根本没装过",于是每点一次「修复」就重装一遍 Poser(plugin\poser-backups\每点一次多一个目录,向导每次还都回一句"安装记录已同步")。现在按utf-8-sig读,不再重复安装。 - 「修复」链路补上 XXMI 签名密钥
全新环境里 XXMI 的Security.user_signature可能是空的(我们把它拉起来生成配置后随即关闭,签名没来得及落盘;而写注入库时只在"私钥文件缺失"才会补这一对)。这时我们写进去的注入签名,会在 XXMI 下次启动时被它自己重新生成的密钥作废 → 它弹Failed to validate unsecure settings!→ 点 Reset 后注入列表被清空,表现就是**"修了又坏"**。「修复」现在和一键启动一样,先补签名、再写配置。 EFMI d3d11.dll(注入用)的判据死结已解
以前要求<XXMI>\EFMI\d3d11.dll已经存在才算找到 EFMI;而刚解压好、还没被 XXMI 部署过的环境里,这个 dll 只在Resources\Packages\XXMI\。于是永远判"缺失":启动时弹框、点"继续"也修不好(修复链里没有任何一步能让它变"存在"),这个 dll 也永远进不了注入库(皮肤 Mod 因此加载不了)。现在会回退到包目录,那条早就写好却"永远走不到"的回退真正生效了。- 诊断包里的
active_importer不再永远显示None
注入链摘要读错了配置段(正确段名是Launcher),会让每次排查都被自己的摘要往"XXMI 没配好"上带。
新增:Mod 备份总开关
设置页 ① 最上面新增 「Mod 备份」 滑块,默认开(与原来的行为一致)。
- 关掉后 一个字节都不再备份,连备份目录都不会被创建;那一行的「Mod 备份目录」与「选择…」会变灰。
- 已有的备份一个都不会删 —— "只增不减"这条不变,开关只决定"以后还备不备份"。
- 重新打开后,库里还没备份过的 Mod 会在下次扫描 / 一键启动时补上。
顺带修正
- 依赖的"已知有害"闸门判据:被**主动跳过(不加载)**的依赖,不再同时被报成"依赖缺失",日志不再自相矛盾。