符文背包修复

创作者: s6652289
已更新:2026-09-19 19:51:21
15KB

前置 MOD

使用 符文背包修复 时将自动安装

关于此 MOD

[AI生成] 这不是任何一个模组的bug:RunicInventory和Stackmaster都使用了左Alt键。阻止了RunicInventory的鼠标锁定手势吞掉InventoryGrid.OnRightDown,从而避免Stackmaster的Alt+鼠标操作被无声屏蔽。仅客户端。

符文物品栏修复

⚠️ 请先读:这不是 bug / 适用范围说明

中文:

这不是 bug。 查兹曼-符文背包 和 JStack424-堆叠大师 两个模组本身都没有问题,它们各自都完全按自己的设计正常工作。这只是两个独立开发的模组恰好都把 左Alt 选作了自己的 修饰键,属于「按键撞车」这种纯粹的巧合,不是任何一方的编码错误。

  • 原模组作者不应被追责。 本补丁与 查兹曼、JStack424 两位作者没有任何关系, 也没有经过他们的同意或审查有问题请找我。不要去打扰原作者。
  • 本补丁仅在同时安装这两个模组,并且你在意 Stackmaster 那套 Alt+鼠标 手势时才有意义。 只装其中一个模组 ⇒ 根本不存在冲突,装本补丁纯属多余。
  • 本补丁只做一件事让 RunicInventory 的鼠标锁格手势不再拦截输入。 不改任何数值、不加任何功能、不碰存档格式。
  • 这是一个取舍,不是「谁对谁错」:本补丁选择保留 Stackmaster 的手势、关掉 RunicInventory 的。 如果你的偏好相反,不要装本补丁,改成把 Stackmaster 的 存储操作快捷键 修饰键从 左Alt 换成别的键即可(两个模组的功能都能保住,见文末)。
  • 上级任意一方之后若自行解决了这个撞车问题,请优先升级上游并停用本补丁。

英语:

这不是一个漏洞。 都不是 查兹曼-符文背包 也不 JStack424-堆叠大师 是有缺陷的——两者的工作方式都完全符合设计。两个独立开发的模组只是恰好选择了 左Alt 作为它们的修饰键。这是一个普通 快捷键冲突,这不是任何人的编码错误。

  • 不应归咎于原作者。 此补丁为 与……无关且未获其认可 查兹曼 或 JStack424. 有任何情况都向我汇报, 对他们来说不是.
  • 只有同时运行两个模组并且在意 Stackmaster 的 Alt+鼠标手势时才有影响。 只安装其中一个时 完全没有碰撞,而这个补丁毫无意义。
  • 它只做一件事:停止RunicInventory的 鼠标 锁定手势,阻止其拦截输入。未更改任何值,未添加任何功能,未触及存档格式。
  • 这是一个 权衡,而非裁决:它保留Stackmaster的手势并禁用RunicInventory的手势。如果你更喜欢相反的情况, 不要安装这个 ——而是改变堆叠大师的 存储操作快捷键 远离修正 左Alt (见本页末尾)。

🤖 本模组的代码由 AI 生成(AI Generated),需求、验证与发布由人类完成。


它解决的是什么

两个模组全都拿上 左Alt 当修饰键,而 RunicInventory 的手势补丁点更靠上游:

物品栏网格.右键按下 ← 符文物品栏补丁在此处(上游) └─ 右键点击委托 └─ 物品栏界面.右键点击物品 ← 堆叠大师的 Alt+右键 挂在此处(下游)

符文物品栏的补丁逻辑是:

// InventoryGridRightClickLockPatch.Prefix —— 补丁 InventoryGrid.OnRightDown 返回 !InventoryRuntime.TryTogglePointerLock(grid, handler);

只要 尝试切换指针锁定 返回 真,前缀就 返回 false ⇒ 原版 按下右键 整条不执行 ⇒ 它内部的 右键点击 委托不会被调用 ⇒ 悬挂着下游Stackmaster 的右键功能永远收不到调用(症状就是「静默失效」,连报错都没有)。

而 切换指针锁定 在下列情况下都会返回 true:

情况 结果
需要锁定状态() 为假(锁功能不可用:尺寸不匹配 / 持久化状态对不上) 返回 true ⇒ 掐断
Alt+右键没有落在有效的背包格子上 返回 true ⇒ 掐断
成功切换了锁定 返回 true ⇒ 掐断

⇒ 实际上「按住 Alt 在玩家背包上点右键」几乎必然掐断整条链路。

顺便澄清一个容易误判的点:RunicInventory 也补丁了 背包界面.选中物品时 (Stackmaster 的 Alt+左键落点),但它的 允许选定操作 是恒返回 true(整个文本仅有 加载常量1;返回)⇒ 对左键不构成拦截。也就是说按代码推演,被真正掐断的是 Alt + 右键,不是左键。

它是怎么修的

尝试切换指针锁定 在 RunicInventory 1.1.9 里只有一个调用点 (已用 member_refs_dll.py 反向查找确认),所以补这一个方法就够:

[HarmonyPatch(typeof(InventoryRuntime), "TryTogglePointerLock", ...)] // 实际用反射定位 static bool Prefix(ref bool __result) { __result = false; return false; // false = 不执行原方法 }

⇒ 该方法始终返回 假 ⇒ 符文物品栏 自己的 前缀 算出 非假即真 ⇒ 放行原版 ⇒ 堆叠大师的 右键点击物品 / 选中物品时 都能正常收到调用。

为什么用 Prefix 跳过,而不是 Postfix 只改返回值(重要)

尝试切换指针锁定 在命中格子时会内部真的会调用 锁定位置 切换锁定目标。若只用 Postfix 改返回值,锁定依然会被切换(副作用已经发生)—— 而我们要的是「手势彻底关掉」。 Prefix 跳过原方法还顺带避免了它在「锁不可用 / 没点到格子」时弹出的 通知 提示。

刻意保留、绝不触碰的部分

保留项 原因
符文背包 键盘锁定格子键(默认 L + 左Alt) 它走 插件更新 → 库存运行时.帧更新 → 键盘输入.快捷键按下(切换锁定) → 切换聚焦锁定,与本补丁的目标方法无关
符文背包的额外装备行 / 整理 / 拾取过滤 / 界面 / 拓扑 全部不涉及本补丁的目标方法
堆叠大师的 Alt+左键 / Alt+右键 这正是要救回来的
堆叠大师的 Alt+E 存料、合成/建造取料 不受影响

配置

BepInEx/配置/s6652289.RunicInventoryFix.cfg

项 默认 说明
禁用鼠标锁定手势 真 关闭 RunicInventory 的鼠标锁格手势。设 假 = 本补丁什么都不做,冲突照旧
详细 真 打印补丁安装与目标签名确认细节

⚠️ 开不支持热切换:醒来 时读取一次,改了要重启游戏。

怎么看它生效了

日志(BepInEx/LogOutput.log)里搜 修复:

[修复] 已打补丁:RunicInventory.Integration.InventoryRuntime.TryTogglePointerLock → Prefix 恒返回 false(跳过原方法) [修复] 效果:RunicInventory 的『左Alt+右键』不再拦截 InventoryGrid.OnRightDown, [修复] Stackmaster 的 Alt+左键 / Alt+右键 应恢复正常。 [修复] 目标方法签名确认:Boolean TryTogglePointerLock(InventoryGrid, UIInputHandler)

关键判据:打开背包 → Alt + 左键 点击物品 → 出现 堆叠大师:物品已保护。 / 堆叠大师:物品未受保护。 提示 = 修好了。

如果看到以下任意一条,说明是环境问题而非补丁问题,本补丁不会做任何改动:

[修复] 180 秒内没等到 RunicInventory.Integration.InventoryRuntime —— RunicInventory 可能没装或版本不匹配,本模组未做任何改动。 [修复] 找到类型但没有 TryTogglePointerLock —— RunicInventory 版本不匹配,拒绝打补丁(本模组不做任何改动)。 [修复] 目标方法签名不符(期望 实例方法 bool ...)—— 拒绝打补丁。

安装 / 卸载

  • 安装:把 符文物品栏修复.dll 放上去 BepInEx/plugins/RunicInventoryFix/
  • 卸载:删掉该目录
  • 依赖:denikson-BepInExPack_Valheim + 查兹曼符文物品栏。 不需要 只有安装 Stackmaster 后才能启动,但未安装 Stackmaster 时本补丁毫无意义。
  • 纯客户端,不联网,不引用 RunicInventory.dll(全部走反射定位) ⇒ RunicInventory 没装或不兼容时本模组只是安静地不做事,不会导致启动失败。

如果你其实是想要相反的效果

不要装本补丁。改成在 Stackmaster 的 cfg 里把修饰键挪开:

# BepInEx/config/com.jstack424.stackmaster.cfg # 默认:存储操作快捷键 = E + 左Alt 存储操作快捷键 = E + 左Ctrl

Stackmaster 的这个值同时驱动 Alt+E(存料)、Alt+左键(保护物品)、Alt+右键 ⇒ 改成 左Ctrl 就整体挪开,两个模组的功能都能保住(代价是 Stackmaster 的组合键从 Alt 变 Ctrl)。

源码

D:\WorkBuddy\RunicInventoryFix\(本地工作区)

已知边界

  • 本文的结论全部来自静态IL反汇编(符文背包.dll 1.1.9 + 堆叠大师.dll 1.1.4) 与 cfg,未做联机/专用服务器场景的实机验证。
  • 只验证到 RunicInventory 1.1.9。上游若改掉 尝试切换指针锁定 在安装阶段,本补丁会打印「拒绝打补丁」并显示其名字或签名,保持不做任何事(不会造成新的破坏)。
  • 本补丁不处理手柄侧的按键冲突:那边 RunicInventory 走的是 获取控制器按钮* 系列补丁 + 控制器和弦会话,与鼠标手势是两条独立链路。

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!