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

Details

Date Uploaded
4 days ago
Downloads
528
Size
25KB
ADDatHost Valheim hosting
€1

BetterMapFix

⚠️ APPLICABILITY NOTICE — please read this before installing.

This patch was written for my own, heavily modded setup (30+ mods loaded — BepInEx 5.4.2350, Valheim 1.0.15, 30 enabled mods managed by r2modman). The symptom described below may be caused by my particular mod combination rather than by a bug in the original mod.

  • If you are not seeing exactly this symptom, please don't install this — it may do nothing for you.
  • This patch may not apply to your setup at all — with a different mod list the symptom may never appear.
  • Even with the same symptom, the root cause may be different — this is only a workaround derived from what I found on my machine.
  • I do not claim the original mod is buggy, and no blame is directed at its author.

If you think the original mod misbehaves, please report it to its author first. This is just my personal "works-on-my-machine" workaround, with no guarantee it works for anyone else.

⚠️ 适用性声明 —— 请先读这一段,再决定装不装。

本补丁是在我自己那套环境里做出来的:当时本机同时装着 30+ 个模组 (BepInEx 5.4.2350 / 游戏 1.0.15 / r2modman 管理的 30 个启用模组)。 下面描述的“症状”有可能是我这套模组组合互相冲突造成的,并不一定是原模组本身的 bug

  • 如果你没有遇到完全相同的症状,请不要安装本补丁 —— 它可能什么都不做;
  • 本补丁可能不适用于你的环境:换一套模组组合,症状也许根本不会出现;
  • 就算症状一样,成因也可能不同 —— 本补丁只是我按本机情况查出来的绕行方案;
  • 没有、也不主张任何“原模组有 bug”的结论,原模组作者与此事无关

如果你觉得原模组有问题,请先向原模组作者反馈。这只是我个人“能跑就行”的绕行方案, 不保证适用于任何人

BetterMap 打的客户端补丁 —— 修两件事:

  1. Boss 指引石(Vegvisir)从来不会被标记。
  2. 洞穴条目不全:山脉段压根没有冰霜洞穴,黑森林还漏了半埋墓穴与希尔迪的两个地牢。

⚠️ 本模组由 AI 生成(AI-generated)。


为什么指引石标记不了(根因)

BetterMap 的自动标记(AutoPins.Sweep)只遍历 ZNetScene.instance.m_instances —— 那是一张 Dictionary<ZDO, ZNetView>只包含有网络对象的东西。 而指引石是烘焙进 Location 预制体里的子物体,没有自己的 ZDO; 它们也不在 ZNetScene 的名字表里(GetPrefab 实测返回 null),于是 ZNetScene.IsPrefabZDOValid 永远过不了、ZDO 永远不存在。 BetterMap 自己在日志里就把结论写出来了:

[Warning: BetterMap] AutoPins: "Vegvisirs" watches a prefab named Vegvisir_DragonQueen,
  which this game has none of. Nothing will ever be pinned for it.

7 种 Boss 指引石全都是这个下场(不是龙母特有),cfg 里也没有自定义名字的选项。

这个补丁怎么做(尽量走 BetterMap 自己的路)

功能 做法
洞穴补全 Plugin.BindPinRules 跑之前,往 PinRules.All 里补几条规则。剩下的 BetterMap 自己全包 —— 在它自己的 cfg 里生成开关(分区 Auto Pins - <群系>、中文注释)、并进 _byLocation 地点表、进图例、按 Merge Distance 去重、"删掉的钉不会再出现"。
指引石 挂在它自己的 AutoPins.Sweep 之后:沿用它的扫描节奏与探索半径,找玩家附近的 Vegvisir 组件,再调它自己的 AutoPins.Place(rule, null, pos) 落钉。图钉类别 / 图标 / 标签($piece_vegvisir)/ 记账全是它那一套。

补的洞穴规则(开关出现在 BetterMap 自己的 cfg 里):

规则名 分区 位置名(ZoneLocation.m_prefabName 默认
Frost Caves Auto Pins - Mountain MountainCave02(实测 m_enable=True
Half Burried Crypt Auto Pins - BlackForest HalfBurried_ForestCrypt(实测 m_enable=**False**,原版不放置)
Hildir Cave Auto Pins - Mountain Hildir_cave
Hildir Crypt Auto Pins - BlackForest Hildir_crypt
Vegvisirs Auto Pins - Mistlands Vegvisir_SeekerQueen

位置名不是猜的:Assets/world/Locations/Mountains/MountainCave02.prefab 与 BetterMap 已经支持TrollCave02 / BearCave / SunkenCrypt4 / Crypt2 同表(SoftRef/manifest) 同命名法。名字如果写错,BetterMap 自己的自检会打 "watches a place named X, which this game has none of" —— 日志里没有这条就说明名字对

本补丁自己的配置(BepInEx/config/bettermapfix.client.only.cfg

默认 说明
1 - General / Enabled 总开关
2 - Vegvisirs / Scan Vegvisirs 指引石补标记
3 - Caves / Inject Cave Rules 注入上面那几条洞穴规则
4 - Labels / Chinese Labels 图钉名中文化
4 - Labels / Name Map 33 条 英文=中文,逗号分隔;可自行增删
4 - Labels / Rename Existing Pins 连已放在地图上的旧图钉一起改名
9 - Debug / Dump Location Names 世界加载后把游戏的地点表整表打进日志,用来核对位置名
9 - Debug / Verbose Pin Log 每落一个指引石图钉打一行日志

图钉中文化怎么实现的(只动标签这一层)

原模组落钉时用 PinNames.For(Rule, GameObject) 算图钉名;地点类规则的 NameToken 是空的、 go 传 null ⇒ 图钉名就等于英文规则名(这就是 Troll Caves / Bear Caves 的由来)。 本补丁只给这个函数的返回值做精确整串替换

  • 不改 rule.Name —— 那是原模组 cfg 的键名,改了会把你的配置项也改名;
  • 不动规则表、图标、图例、去重记录;
  • 表里没有的名字原样放行,所以只影响你想翻的那几个。

默认翻译的是地点类图钉(洞穴 / 要塞 / 祭坛 / 遗迹,共 33 条)。 资源类(矿脉、浆果、蘑菇…)故意没放进来——想一起中文,把配置里注释给的那串粘到 Name Map 后面即可。 Name Map 里键名写错只会静默不生效,所以交付前有一条机器校验(拿 BetterMap.dll 的字符串堆逐个核)。

旧图钉:名字是落钉那一刻写进地图数据的,光改上面那个函数对它们无效, 因此另有一趟 2 秒一次的低频重命名,只动名字精确命中映射表的图钉,直接改显示文本(不重建 UI)。

指引石仍然听 BetterMap 各群系里的 Vegvisirs 开关 —— 本补丁不改它。

怎么确认它在干活

日志里出现这些就说明工作正常:

[Info   : BetterMapFix] BetterMapFix 1.0.0 已加载:洞穴规则注入=True,指引石扫描=True(接口自检通过)。
[Info   : BetterMapFix] +规则 [Mountain] Frost Caves → MountainCave02(默认 开)
[Info   : BetterMapFix] 指引石已标记 [Mountain] 位置 1234.5,-678.9(距玩家 42.3 m)
[Info   : BetterMapFix] 本轮扫到附近指引石 2 块 → 新落钉 1,跳过 1(已记过账 / 该段开关关着)。

已知的一条无害日志:BetterMap 会对 Vegvisir_SeekerQueen 打一条 "which this game has none of" 警告(因为我们把这条规则放进了它的规则表,而它的 ZDO 扫描永远够不着它)。 落钉由本补丁完成,忽略即可。

兼容性

  • 面向 BetterMap 1.0.2xtav1m.BetterMap)编写。所有内部调用都走反射并做存在性自检, BetterMap 换版本时本补丁只会打印一条"接口自检不通过"并停用,不会拖垮游戏加载。
  • 纯客户端、不声明 NetworkCompatibility(NotEnforced)⇒ 主机不装也能用、不挡联机。
  • 只读场景对象与本地地图数据,不改任何网络权威数据。

卸载

删掉 BepInEx/plugins/<这个包>/BetterMapFix.dll 即可。 留在 BetterMap cfg 里的那几个键(Frost Caves 等)删不删都行,删掉下次启动会按默认值重建。

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