Skip to content

v0.9.3 —— 修好「修复后仍有缺失」与「EFMI d3d11.dll(注入用)缺失」+ Mod 备份开关(含上一批 v0.9.2)

Choose a tag to compare

@jing-hy jing-hy released this 02 Oct 06:22
· 5 commits to main since this release

上一批(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(注入用)/是否自动修复?」 —— 点了"继续"也修不好。

  1. Poser 安装记录被误判成"缺失"
    上游向导写的 plugin\poser-install.json 带 UTF-8 BOM,我们按 utf-8 读会直接解析失败、被当成"根本没装过",于是每点一次「修复」就重装一遍 Poser(plugin\poser-backups\ 每点一次多一个目录,向导每次还都回一句"安装记录已同步")。现在按 utf-8-sig 读,不再重复安装。
  2. 「修复」链路补上 XXMI 签名密钥
    全新环境里 XXMI 的 Security.user_signature 可能是空的(我们把它拉起来生成配置后随即关闭,签名没来得及落盘;而写注入库时只在"私钥文件缺失"才会补这一对)。这时我们写进去的注入签名,会在 XXMI 下次启动时被它自己重新生成的密钥作废 → 它弹 Failed to validate unsecure settings! → 点 Reset 后注入列表被清空,表现就是**"修了又坏"**。「修复」现在和一键启动一样,先补签名、再写配置。
  3. EFMI d3d11.dll(注入用) 的判据死结已解
    以前要求 <XXMI>\EFMI\d3d11.dll 已经存在才算找到 EFMI;而刚解压好、还没被 XXMI 部署过的环境里,这个 dll 只在 Resources\Packages\XXMI\。于是永远判"缺失":启动时弹框、点"继续"也修不好(修复链里没有任何一步能让它变"存在"),这个 dll 也永远进不了注入库(皮肤 Mod 因此加载不了)。现在会回退到包目录,那条早就写好却"永远走不到"的回退真正生效了。
  4. 诊断包里的 active_importer 不再永远显示 None
    注入链摘要读错了配置段(正确段名是 Launcher),会让每次排查都被自己的摘要往"XXMI 没配好"上带。

新增:Mod 备份总开关

设置页 ① 最上面新增 「Mod 备份」 滑块,默认开(与原来的行为一致)。

  • 关掉后 一个字节都不再备份,连备份目录都不会被创建;那一行的「Mod 备份目录」与「选择…」会变灰。
  • 已有的备份一个都不会删 —— "只增不减"这条不变,开关只决定"以后还备不备份"。
  • 重新打开后,库里还没备份过的 Mod 会在下次扫描 / 一键启动时补上。

顺带修正

  • 依赖的"已知有害"闸门判据:被**主动跳过(不加载)**的依赖,不再同时被报成"依赖缺失",日志不再自相矛盾。

相关反馈

  • 本版(0.9.3)那四个判据的现象来自反馈者发来的诊断包与截图(「修复后仍有缺失」/「EFMI d3d11.dll(注入用)」),没有直接对应的 issue。
  • 上一批(0.9.2)里"ini 里 shader 汇编的 endif 被改坏"、"RabbitFX 被注释里的名字误激活"、"崩溃被误判成 Mod 资源冲突"这几条,对应的正是 #10 / #11(庄方宜水墨旗袍:单个不加载、两个一起加载闪退)报的现象。#10 / #11 仍在跟进中 —— 装上这一版后如果现象还在,把新的诊断包发上来(管理器里「一键导出诊断包」)。