Valheim
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
2 weeks ago
Downloads
289
Size
21KB
ADDatHost Valheim hosting
30% off

EasyGear

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

装备维护。 从 EasyQoL 按功能用途拆分而来,纯客户端模组。

1.0.5(2026-09-25)剔除:原先的第 4 项「跑步时也能切换武器 / 工具」已整体删除 —— 连同 PlayerCheckRunPatch / ClearActionQueuePatch 两个补丁类、4 - Equip While Running 配置节一起拿掉。该功能在 1.0.2 / 1.0.3 期间因补丁挂错方法(挂在 Humanoid.ClearActionQueue 的空实现上)从未生效,1.0.4 修好挂载点后经用户决定不再保留。 ⇒ 现在的 EasyGear 是三项功能:耐久、范围修理、进站自动修理。来龙去脉见 CHANGELOG.md。

1.0.1(2026-09-17)修复:耐久倍率(武器 / 工具 / 盾)此前完全不生效。 根因是拆分时 ObjectDB.Awake / ZNetScene.Awake 两个挂载点漏在了 EasyVitals, 导致本模组的耐久改写函数成了死代码。详见 CHANGELOG.md。

1.0.3(2026-09-17)修复:耐久倍率对身上穿的护甲(头盔 / 胸甲 / 裤子 / 披风)无效。 护甲不走 m_useDurabilityDrain,而是 Player.DamageArmorDurability 里直接把伤害值 从耐久里减掉(硬编码,不读任何倍率)。现单独挂了一个补丁按「伤害 ÷ 倍率」重算。详见 CHANGELOG.md。

功能(3 项)

# 功能 默认 配置节
1 武器 / 工具 / 弓 / 盾 耐久 + 穿戴中的护甲(头盔/胸甲/裤子/披风) 5 倍(LossReduction) 1 - Item Durability
2 锤子「范围修理」 半径 30 米 2 - Area Repair
3 进站自动修理 开(含背包,150 ms/件) 3 - Auto Repair At Station

角色/玩法数值(重量 / 食物 / 药水 / 地图 / Boss 之力 / Rested / 装备减速)在 EasyVitals。

配置

BepInEx/config/easygear.client.only.cfg

  • 1 - Item Durability → Mode 三选一:
    • LossReduction(默认)= 耐久消耗 ÷ 倍率。装备明显更耐用,但物品提示里的数字下降很慢。
    • MaxDurability = 耐久上限 × 倍率。提示里一眼可见;已有装备需要先用锤子修一次才会满。
    • Both = 两者都做(寿命约 ×25,慎用)。
  • 2 - Area Repair → Verbose 默认 true(沿用原 EasyQoL 的实机配置): 每次范围修理在日志里记一行修好了几个部件。
  • 3 - Auto Repair At Station → IntervalMilliseconds 是逐件修理的间隔(默认 150); 装备多的时候能看清耐久条一根根回满。填 0 = 一瞬间全满。

旧 cfg 里若还留着 [4 - Equip While Running] 那一节,可以直接无视 —— 该功能已在 1.0.5 剔除,BepInEx 不会再读它(留着不报错;想清爽就自己删掉那几行)。

⚠️ 改完必须重启游戏(BepInEx 只在插件 Awake 读一次配置)。

实现要点

  • 耐久 —— 两条代码路径,必须分别处理:
    • 武器 / 工具 / 弓 / 盾 / 放置:ObjectDB prefab 数据改写 (ObjectDB.Awake + ZNetScene.Awake 兜底),把 SharedData.m_useDurabilityDrain 原值 ÷ 倍率、幂等。
    • 穿戴中的护甲(头盔 / 胸甲 / 裤子 / 披风):不走上面那个字段。 Player.DamageArmorDurability(HitData) 里是把伤害值直接从耐久减掉(硬编码), 所以改共享数据对它无效。本模组另挂一个补丁:Prefix 记下扣前耐久、 Postfix 按 Max(0, 扣前值 − 伤害/倍率) 重算被扣的那件。 ⚠️ 必须从 HitData 重新取原始伤害 —— 原版的 Mathf.Max(0, …) 会先把负值 clamp 到 0、 真实伤害量就丢了;拿"已扣量"去除以倍率会导致"伤害大于剩余耐久时少扣", 极端情况下护甲会趋近于永不损坏。
  • 范围修理:Player.Repair 的 postfix —— 以鼠标指向的部件为中心,把半径内所有 WearNTear 也修一遍。 带防重入标记;Repair() 自身会跳过已满耐久/冷却中的部件,所以不会重复计。
  • 进站自动修理:InventoryGui.Show 的 prefix 记下「调用前界面是否已可见」, 只有【不可见 → 可见】且 activeGroup == 3(制造页)才算「刚打开」;逐件修理走协程带节奏。 身上穿戴的那批走游戏原版修理函数,所以涨熟练度、修理特效、「已修复 xxx」提示 与手动点修理按钮完全一致;原版修理本来就免费,所以不消耗材料。

联机

纯客户端。 主机、其他玩家都不需要装。

不声明 NetworkCompatibilityAttribute,不引用 Jotunn,不内嵌 ServerSync / CCS。

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.