EasyGear
[AI-generated] Raises item durability (worn equipment too: helmet/chest/legs/cape). Repairs gear when you use a workbench, plus optional auto-repair on entering a station. Also lets you swap gear while running. Client-only.EasyGear
AI 生成声明:本模组由 AI 智能体(WorkBuddy)在用户的明确需求与逐项验收下编写; 功能设计、真机测试与发布决定均由用户主导。
装备维护。 从 EasyQoL 按功能用途拆分而来,纯客户端模组。
1.0.2(2026-09-17)新增:跑步时也能切换武器 / 工具(解除原版限制)。 原版奔跑时会每帧清空「装备动作队列」,导致带抽拿动画的武器/工具按数字键后 动作被取消、看起来完全没反应。现可正常切换。
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。
功能(4 项)
| # | 功能 | 默认 | 配置节 |
|---|---|---|---|
| 1 | 武器 / 工具 / 弓 / 盾 耐久 + 穿戴中的护甲(头盔/胸甲/裤子/披风) | 5 倍(LossReduction) | 1 - Item Durability |
| 2 | 锤子「范围修理」 | 半径 30 米 | 2 - Area Repair |
| 3 | 进站自动修理 | 开(含背包,150 ms/件) | 3 - Auto Repair At Station |
| 4 | 跑步时也能切换武器 / 工具 | 开 | 4 - Equip While Running |
角色/玩法数值(重量 / 食物 / 药水 / 地图 / 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= 一瞬间全满。4 - Equip While Running→Enabled:关掉即完全回到原版(跑步时切不动装备)。
⚠️ 改完必须重启游戏(BepInEx 只在插件 Awake 读一次配置)。
实现要点
- 耐久 —— 两条代码路径,必须分别处理:
- 武器 / 工具 / 弓 / 盾 / 放置:
ObjectDBprefab 数据改写 (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」提示 与手动点修理按钮完全一致;原版修理本来就免费,所以不消耗材料。 - 跑步可切换装备:
Player.CheckRun(每帧)的 prefix/postfix 只用来打一个"正在 CheckRun 内"的标记;Humanoid.ClearActionQueue的 prefix 在该标记为真、且实例确实在奔跑(Character.IsRunning())时 跳过这次清空。攻击 / 跳跃 / 翻滚触发的清空不受影响。 双保险设计:即使标记意外卡住,非奔跑状态也不会误跳过。
联机
纯客户端。 主机、其他玩家都不需要装。
不声明 NetworkCompatibilityAttribute,不引用 Jotunn,不内嵌 ServerSync / CCS。


