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

Details

Date Uploaded
4 days ago
Downloads
536
Size
23KB
ADDatHost Valheim hosting
€1

BetterMapFix

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