Valheim
Install with App

Details

Latest version
1.0.0
Last Updated
First Uploaded
Downloads
320
Likes
0
Size
12KB
Dependants
ADDatHost Valheim hosting
€1

EasyBuild —— 随处建造(免工作台)

AI 生成声明:本模组由 AI 智能体(WorkBuddy)在用户的明确需求与逐项验收下编写; 功能设计、真机测试与发布决定均由用户主导。

用建筑锤 建造 / 修复(含船、车)/ 拆除 时,不再要求工作台、熔炉、石匠台等制造站在附近。 顺手也解除了「你得先发现过该工作站,部件才会出现在锤子菜单里」这条门槛。

纯客户端模组:无 Jotunn 依赖、无 ServerSync、无 NetworkCompatibility 声明


1. 效果一览

动作 原版行为 装了这个之后
放置需要工作台的部件(石墙、铁梁、熔炉件、传送门件…) 工作台不在附近 → 点击无法放置,弹出提示 任意地点都能放置
修复建筑 / 船(维京长船等)/ 车 同上,判定失败就不给修 远航途中、野外都能修
拆除已建部件 同上 任意地点都能拆
锤子菜单里"需要你还没见过的工作台"的部件 灰掉 / 不出现 全部可见可选

不会变:材料照样消耗(不是免费建造)、地形/支撑/水深/阻挡判定照旧、禁建区照旧、守卫石(私人区域)保护照旧、工作台等级与配方系统照旧。


2. 原版的门槛到底在哪(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"那一行)。

所以只要把这个字段清掉,"需要工作台"这个概念就从这个部件上彻底消失了。

3. 实现方式(核心只有几行)

Piece.Awake 的 postfix 里把 m_craftingStation 置为 null

  • 建筑部件 prefab 一被激活就生效;Instantiate 出来的实例继承 null, 所以旧存档里已经盖好的建筑、船也自动适用
  • ZNetScene.Awake 兜底:场景加载后再把所有 prefab 扫一遍(防其它模组动态塞值)。

因为原版三处判定读的是同一个字段,这一个改动同时覆盖了建造、修复、拆除和菜单解锁。


4. 配置

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

分区 默认 说明
1 - 随处建造 Enabled true 总开关。关掉即完全回到原版行为。
1 - 随处建造 SweepAllPrefabsOnSceneLoad true 场景加载时兜底扫描所有部件 prefab。
2 - 日志 VerboseLog false 每剥离一个部件打一行。平时建议关掉。

注意:建造 / 修复 / 拆除 三项是一体生效的,没法单独关其中一项 —— 因为原版这三条路径读的是同一个字段(见第 2 节)。


5. 联机说明(重要)

  • 纯客户端:没有 NetworkCompatibility 声明,不引 Jotunn,不嵌 ServerSync / ConditionalConfigSync → 放在 BepInEx/plugins/不会让你连不上任何主机,纯原版主机也能进。
  • 只影响你自己:建造/修复的资格判定是在每个客户端本地算的。 所以 主机和队友不装这个模组也照样用;反过来,他们仍然受原版"要工作台"限制。
  • 你放下去的部件、修好的耐久都是正常的 ZDO 变更,主机照常接受,不会掉线或回滚。

6. 安装与卸载

r2modmanSettings → Install from file,选 EasyBuild-1.0.0.zip

手动:把 EasyBuild.dll 丢进 BepInEx/plugins/ 即可。

卸载:r2modman 里禁用/卸载,或删掉 DLL。纯运行时改动,不写存档、不留残留


7. 怎么确认它生效了

日志(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 …

游戏内自测(建议走一遍):

  1. 跑到离家很远的地方,造石墙 / 铁梁(原版需要石匠台 / 熔炉)→ 应该能成功。
  2. 开新档、从没做过工作台 → 锤子菜单里应该能看到全部部件。
  3. 海上用锤子修船 → 应该能修。
  4. 拆掉远处的部件 → 应该能拆。
  5. 反向验证:材料不足时仍然失败(说明不是免费建造); 在别人守卫石范围内仍然不能建造/拆除(说明保护没被顺带解除)。

8. 已知限制

  • 本模组针对当前版本(Valheim 1.0 程序集,Unity 6000.0.75f1 / BepInEx 5.4.x)。 如果以后游戏改了字段名,插件会在日志里打印「找不到字段 Piece.m_craftingStation」而不是崩溃 —— 届时把日志发我即可。
  • 与其它"改建造规则 / 改工作台范围"的模组同时使用时可能互相覆盖(例如放大工作台范围的模组会变得没意义)。
  • 与"物品耐久 / 修复"类模组不冲突(本模组不碰 WearNTear)。

MIT 精神,自用为主。有问题带着 LogOutput.log 找我就行。

DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro
DatHost — Valheim server hosting, first month for one euro