EasyBuild

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

[AI-generated] Build, repair (boats included) and remove with the hammer without needing a workbench nearby. Client-only, no server sync.

模組介紹 作者原文

EasyBuild —— 隨處建造(免工作臺)

AI 生成聲明:本模組由 AI 智能體(WorkBuddy)在用戶的明確需求與逐項驗收下編寫;

功能設計、真機測試與發佈決定均由用戶主導。

用建築錘 建造 / 修復(含船、車)/ 拆除 時,不再要求工作臺、熔爐、石匠臺等製造站在附近。

順手也解除了「你得先發現過該工作站,部件纔會出現在錘子菜單裏」這條門檻。

純客戶端模組:無 Jotunn 依賴、無 ServerSync、無 NetworkCompatibility 聲明。

  • 效果一覽

| 動作 | 原版行爲 | 裝了這個之後 |

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

| 放置需要工作臺的部件(石牆、鐵梁、熔爐件、傳送門件…) | 工作臺不在附近 → 點擊無法放置,彈出提示 | 任意地點都能放置 |

| 修復建築 / 船(維京長船等)/ 車 | 同上,判定失敗就不給修 | 遠航途中、野外都能修 |

| 拆除已建部件 | 同上 | 任意地點都能拆 |

| 錘子菜單裏"需要你還沒見過的工作臺"的部件 | 灰掉 / 不出現 | 全部可見可選 |

不會變:材料照樣消耗(不是免費建造)、地形/支撐/水深/阻擋判定照舊、禁建區照舊、守衛石(私人區域)保護照舊、工作臺等級與配方系統照舊。

  • 原版的門檻到底在哪(IL 反彙編實證)

| 動作 | 原版判定鏈 |

|---|---|

| 建造放置 | Player.UpdatePlacement() → Player.HaveRequirements(piece, RequirementMode.CanBuild),返回 false 就彈提示並中止 |

| 修復 | Player.Repair() → 先過 Player.CheckCanRemovePiece(piece) |

| 拆除 | Player.RemovePiece() → 同樣先過 Player.CheckCanRemovePiece(piece) |

兩處判定最終都落在同一個條件上:

if (piece.m_craftingStation!= null // 這個部件需要某個製造站

&&!CraftingStation.HaveBuildStationInRange(stationName, 玩家位置)) // 而附近沒有

{

// 建造:HaveRequirements 返回 false

// 修復/拆除:CheckCanRemovePiece 返回 false 並提示

}

關鍵事實:Piece.m_craftingStation 在整個 assembly_valheim.dll 裏只有 3 個讀取者、沒有任何寫入者——

就是上面這兩處判定,加上 Hud.SetupPieceInfo(部件信息面板裏"需要 工作臺 xxx"那一行)。

所以只要把這個字段清掉,"需要工作臺"這個概念就從這個部件上徹底消失了。

  • 實現方式(核心只有幾行)

在 Piece.Awake 的 postfix 裏把 m_craftingStation 置爲 null:

  • 建築部件 prefab 一被激活就生效;Instantiate 出來的實例繼承 null,

所以舊存檔裏已經蓋好的建築、船也自動適用。

  • ZNetScene.Awake 兜底:場景加載後再把所有 prefab 掃一遍(防其它模組動態塞值)。

因爲原版三處判定讀的是同一個字段,這一個改動同時覆蓋了建造、修復、拆除和菜單解鎖。

  • 配置

文件:BepInEx/config/easybuild.client.only.cfg

| 分區 | 鍵 | 默認 | 說明 |

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

| 1 - 隨處建造 | Enabled | true | 總開關。關掉即完全回到原版行爲。 |

| 1 - 隨處建造 | SweepAllPrefabsOnSceneLoad | true | 場景加載時兜底掃描所有部件 prefab。 |

| 2 - 日誌 | VerboseLog | false | 每剝離一個部件打一行。平時建議關掉。 |

注意:建造 / 修復 / 拆除 三項是一體生效的,沒法單獨關其中一項 ——

因爲原版這三條路徑讀的是同一個字段(見第 2 節)。

  • 聯機說明(重要)
  • 純客戶端:沒有 NetworkCompatibility 聲明,不引 Jotunn,不嵌 ServerSync / ConditionalConfigSync

→ 放在 BepInEx/plugins/ 裏不會讓你連不上任何主機,純原版主機也能進。

  • 隻影響你自己:建造/修復的資格判定是在每個客戶端本地算的。

所以 主機和隊友不裝這個模組也照樣用;反過來,他們仍然受原版"要工作臺"限制。

  • 你放下去的部件、修好的耐久都是正常的 ZDO 變更,主機照常接受,不會掉線或回滾。
  • 安裝與卸載

r2modman:Settings → Install from file,選 EasyBuild-1.0.0.zip。

手動:把 EasyBuild.dll 丟進 BepInEx/plugins/ 即可。

卸載:r2modman 裏禁用/卸載,或刪掉 DLL。純運行時改動,不寫存檔、不留殘留。

  • 怎麼確認它生效了

日誌(BepInEx/LogOutput.log)裏應該能看到:

[Info: EasyBuild] EasyBuild 1.0.0 開始掛載 Harmony 補丁……

[Info: EasyBuild] 已掛載補丁類:PieceAwakePatch

[Info: EasyBuild] 已掛載補丁類:ZNetSceneAwakePatch

[Info: EasyBuild] Harmony 補丁掛載完成:2/2 成功。

[Info: EasyBuild] ---- 補丁掛載自檢 ----

[Info: EasyBuild] Piece.Awake() prefix=0 postfix=1 OK

[Info: EasyBuild] ZNetScene.Awake() prefix=0 postfix=1 OK

[Info: EasyBuild] -----------------------

[Info: EasyBuild] 兜底掃描完成:檢查了 N 個部件 prefab。

[Info: EasyBuild] 已剝離工作臺需求:M 個部件(見過的部件共 K 個)。例:wood_wall / stone_wall / ship_karve …

遊戲內自測(建議走一遍):

  • 跑到離家很遠的地方,造石牆 / 鐵梁(原版需要石匠臺 / 熔爐)→ 應該能成功。
  • 開新檔、從沒做過工作臺 → 錘子菜單裏應該能看到全部部件。
  • 在海上用錘子修船 → 應該能修。
  • 拆掉遠處的部件 → 應該能拆。
  • 反向驗證:材料不足時仍然失敗(說明不是免費建造);

在別人守衛石範圍內仍然不能建造/拆除(說明保護沒被順帶解除)。

  • 已知限制
  • 本模組針對當前版本(Valheim 1.0 程序集,Unity 6000.0.75f1 / BepInEx 5.4.x)。

如果以後遊戲改了字段名,插件會在日誌裏打印「找不到字段 Piece.m_craftingStation」而不是崩潰 —— 屆時把日誌發我即可。

  • 與其它"改建造規則 / 改工作臺範圍"的模組同時使用時可能互相覆蓋(例如放大工作臺範圍的模組會變得沒意義)。
  • 與"物品耐久 / 修復"類模組不衝突(本模組不碰 WearNTear)。

MIT 精神,自用爲主。有問題帶着 LogOutput.log 找我就行。

安裝與使用 安裝:BepInEx 外掛

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

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

前置依賴

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

denikson-BepInExPack_Valheim

檔案與校驗

檔案名稱
EasyBuild-1.0.0.zip
檔案大小
11.5 KiB
SHA-256
b9ad8c3132d2e9604952b552c06d456dc43cd34abf9f68349b5a597c55cd76b2
入庫時間
2026-10-10 18:44