Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
EasyBuild
[AI-generated] Build, repair (boats included) and remove with the hammer without needing a workbench nearby. Client-only, no server sync.
By s6652289
| Last updated | 5 days ago |
| Total downloads | 329 |
| Total rating | 0 |
| Categories | Mods AI Generated |
| Dependency string | s6652289-EasyBuild-1.0.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README
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. 安装与卸载
r2modman:Settings → 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 …
游戏内自测(建议走一遍):
- 跑到离家很远的地方,造石墙 / 铁梁(原版需要石匠台 / 熔炉)→ 应该能成功。
- 开新档、从没做过工作台 → 锤子菜单里应该能看到全部部件。
- 在海上用锤子修船 → 应该能修。
- 拆掉远处的部件 → 应该能拆。
- 反向验证:材料不足时仍然失败(说明不是免费建造); 在别人守卫石范围内仍然不能建造/拆除(说明保护没被顺带解除)。
8. 已知限制
- 本模组针对当前版本(Valheim 1.0 程序集,Unity 6000.0.75f1 / BepInEx 5.4.x)。 如果以后游戏改了字段名,插件会在日志里打印「找不到字段 Piece.m_craftingStation」而不是崩溃 —— 届时把日志发我即可。
- 与其它"改建造规则 / 改工作台范围"的模组同时使用时可能互相覆盖(例如放大工作台范围的模组会变得没意义)。
- 与"物品耐久 / 修复"类模组不冲突(本模组不碰
WearNTear)。
MIT 精神,自用为主。有问题带着 LogOutput.log 找我就行。