RunicInventoryFix

版本 v1.0.0·更新於 2026-09-19

[AI-generated] NOT a bug in either mod: RunicInventory and Stackmaster simply both use LeftAlt. Stops RunicInventory's mouse lock gesture from swallowing InventoryGrid.OnRightDown, which silently kill

模組介紹 作者原文

RunicInventoryFix

⚠️ 請先讀:這不是 bug / Applicability Notice

中文:

這不是 bug。 Chazman-RunicInventory 和 JStack424-Stackmaster 兩個模組本身都沒有問題,

它們各自都完全按自己的設計正常工作。這只是兩個獨立開發的模組恰好都把 LeftAlt 選作了自己的

修飾鍵,屬於「按鍵撞車」這種純粹的巧合,不是任何一方的編碼錯誤。

  • 原模組作者不應被追責。 本補丁與 Chazman、JStack424 兩位作者沒有任何關係,

也沒有經過他們的同意或審查。有問題請找我,不要去打擾原作者。

  • 本補丁只在同時裝了這兩個模組、並且你在意 Stackmaster 那套 Alt+鼠標 手勢時纔有意義。

只裝其中一個模組 ⇒ 根本不存在衝突,裝本補丁純屬多餘。

  • 本補丁只做一件事:讓 RunicInventory 的鼠標鎖格手勢不再攔截輸入。

不改任何數值、不加任何功能、不碰存檔格式。

  • 這是一個取捨,不是「誰對誰錯」:本補丁選擇保留 Stackmaster 的手勢、關掉 RunicInventory 的。

如果你的偏好相反,不要裝本補丁,改成把 Stackmaster 的 Storage-action keybind

修飾鍵從 LeftAlt 換成別的鍵即可(兩個模組的功能都能保住,見文末)。

  • 上游任意一方之後若自行解決了這個撞車,請優先升級上游並停用本補丁。

English:

This is not a bug. Neither Chazman-RunicInventory nor JStack424-Stackmaster is defective —

both work exactly as designed. Two independently developed mods simply happened to pick LeftAlt

as their modifier key. It is a plain hotkey collision, not a coding error on anyone's part.

  • The original authors should not be blamed. This patch is unaffiliated with and

not endorsed by Chazman or JStack424. Report anything to me, not to them.

  • It only matters if you run both mods and care about Stackmaster's Alt+mouse gestures.

With only one of them installed there is no collision at all, and this patch is pointless.

  • It does exactly one thing: stop RunicInventory's mouse lock gesture from intercepting input.

No values changed, no features added, no save format touched.

  • This is a trade-off, not a verdict: it keeps Stackmaster's gestures and disables

RunicInventory's. If you prefer the opposite, do not install this — instead change

Stackmaster's Storage-action keybind modifier away from LeftAlt (see the end of this page).

🤖 本模組的代碼由 AI 生成(AI Generated),需求、驗證與發佈由人類完成。

它解決的是什麼

兩個模組都拿 LeftAlt 當修飾鍵,而 RunicInventory 的手勢補丁點更靠上游:

InventoryGrid.OnRightDown ← RunicInventory 補丁在這裏(上游)

└─ m_onRightClick 委託

└─ InventoryGui.OnRightClickItem ← Stackmaster 的 Alt+右鍵 掛在這裏(下游)

RunicInventory 的補丁邏輯是:

// InventoryGridRightClickLockPatch.Prefix —— 補丁 InventoryGrid.OnRightDown

return!InventoryRuntime.TryTogglePointerLock(grid, handler);

只要 TryTogglePointerLock 返回 true,Prefix 就 return false

⇒ 原版 OnRightDown 整條不執行 ⇒ 它內部的 m_onRightClick 委託不會被調用

⇒ 掛在下游的 Stackmaster 右鍵功能永遠收不到調用(症狀就是「靜默失效」,連報錯都沒有)。

而 TryTogglePointerLock 在下列情況下都會返回 true:

| 情況 | 結果 |

|---|---|

| RequireLockState() 爲假(鎖功能不可用:尺寸不匹配 / 持久化狀態對不上) | 返回 true ⇒ 掐斷 |

| Alt+右鍵沒落在有效的背包格子上 | 返回 true ⇒ 掐斷 |

| 成功切換了鎖定 | 返回 true ⇒ 掐斷 |

⇒ 實際上「按住 Alt 在玩家背包上點右鍵」幾乎必然掐斷整條鏈路。

順帶澄清一個容易誤判的點:RunicInventory 也補丁了 InventoryGui.OnSelectedItem

(Stackmaster 的 Alt+左鍵落點),但它的 InventoryRuntime.AllowSelectedAction

是恆返回 true(IL 全文只有 ldc.i4.1; ret)⇒ 對左鍵不構成攔截。

也就是說按代碼推演,被真正掐斷的是 Alt + 右鍵,不是左鍵。

它是怎麼修的

TryTogglePointerLock 在 RunicInventory 1.1.9 裏只有一個調用點

(已用 member_refs_dll.py 反查確認),所以補這一個方法就夠:

[HarmonyPatch(typeof(InventoryRuntime), "TryTogglePointerLock",...)] // 實際用反射定位

static bool Prefix(ref bool __result)

{

__result = false;

return false; // false = 不執行原方法

}

⇒ 該方法恆返回 false ⇒ RunicInventory 自己的 Prefix 算出!false = true ⇒ 放行原版

⇒ Stackmaster 的 OnRightClickItem / OnSelectedItem 都能正常收到調用。

爲什麼用 Prefix 跳過,而不是 Postfix 只改返回值(重要)

TryTogglePointerLock 在命中格子時會內部真的調用 ToggleLockAt 去切換鎖定。

若只用 Postfix 改返回值,鎖定依然會被切換(副作用已經發生)—— 而我們要的是「手勢徹底關掉」。

Prefix 跳過原方法還順帶避免了它在「鎖不可用 / 沒點到格子」時彈出的 Notify 提示。

刻意保留、絕不觸碰的部分

| 保留項 | 原因 |

|---|---|

| RunicInventory 鍵盤鎖格鍵(默認 L + LeftAlt) | 它走 Plugin.Update → InventoryRuntime.Tick → KeyboardInput.ShortcutDown(ToggleLock) → ToggleFocusedLock,與本補丁的目標方法無關 |

| RunicInventory 的額外裝備行 / 整理 / 拾取過濾 / UI / 拓撲 | 全部不涉及本補丁的目標方法 |

| Stackmaster 的 Alt+左鍵 / Alt+右鍵 | 這正是要救回來的 |

| Stackmaster 的 Alt+E 存料、合成/建造取料 | 不受影響 |

配置

BepInEx/config/s6652289.RunicInventoryFix.cfg

| 項 | 默認 | 說明 |

|---|---|---|

| SuppressMouseLockGesture | true | 關掉 RunicInventory 的鼠標鎖格手勢。設 false = 本補丁什麼都不做,衝突照舊 |

| Verbose | true | 打印補丁安裝與目標籤名確認細節 |

⚠️ 開關不支持熱切換:Awake 時讀取一次,改了要重啓遊戲。

怎麼看它生效了

日誌(BepInEx/LogOutput.log)裏搜 [Fix]:

[Fix] 已打補丁:RunicInventory.Integration.InventoryRuntime.TryTogglePointerLock → Pr

安裝與使用 安裝:BepInEx 外掛

  1. 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
  2. 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
  3. 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
  4. 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。

帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。 多人連線時,主機與所有用戶端需要安裝一致的模組。

前置依賴

下面這些內容需要先安裝,否則該模組不會生效:

denikson-BepInExPack_ValheimChazman-RunicInventory

檔案與校驗

檔案名稱
RunicInventoryFix-1.0.0.zip
檔案大小
15.1 KiB