梅尔基

创作者: Ezomic
已更新:2026-09-23 03:19:16
89KB

关于此 MOD

服务器决定谁出现在地图上,死亡是公开的。

梅尔基

每个人都在彼此的视野之中,而服务器才是最终的裁决者。当有人死亡时,他们的坟墓也会出现在你的地图上。

名字是古诺尔斯语 标记:一个标记,一个符号,一面旗帜。那是它在地图上留下的东西:每个人在哪里,以及谁在哪里倒下。

为什么

《英灵神殿》已经有位置共享功能了。那是地图上的一个复选框,每个玩家自行决定是否开启。

问题不在于人们藏起来。而在于隐藏本身与其他一切状态毫无区别。某人取消勾选那个选项时,并不会伴随着公告消失——他们只是不在 map 上,而这看起来和超出范围、死亡、离线,或者站在尚无人探索的地方完全一样。在一个以共同游玩为核心的服务器里,唯一能告诉你是否该去找某人的信息,却是每个人都能悄悄关闭、而其他人都看不到状态的设置。

梅尔基把那个决定权交给服务器。不是靠好言相求——而是从客户端手中夺走答案,就在游戏存储答案的地方。

实际运作原理,以及为什么必须由服务器来执行

值得记下来,因为它决定了整个模组的形态。

客户端每两秒向服务器报告一次其位置,并附带一个标记,表明是否正在共享该位置。 无论标志如何,每次都会发送位置信息 - 服务器出于其他原因需要它,并不关心复选框的状态。服务器会同时存储两者,然后构建向所有人广播的列表,将每个玩家的位置复制到该列表中 仅当他们的标记为是时.

所以隐藏是在服务器端进行的,依据的是客户端提供的一个事实。梅尔基在那个事实到达的瞬间就将其覆盖了。客户端再也不会被参考,也没有任何变通办法:取消勾选仍然会设置一个布尔值,那个布尔值仍然会传输,而服务器仍然会把它丢弃。

这也是为什么客户端的这个模组并不是一个较弱的版本。它无法强行把任何人放到地图上,因为客户端收到的列表不会包含隐藏玩家的地图位置。客户端唯一能获取的是周围的世界:游戏会流式加载你附近几个区域中的所有内容,包括其他玩家,所以只要离得够近能被看到,对方就已经在你的连接里了。除此之外,玩家列表是唯一携带位置信息的东西,而它是服务器写入的。

梅尔基不会改动每位玩家自己在复选框中的选择。服务器的规则是在此基础上应用的,并且永远不会覆盖保存它,因此当服务器关闭该规则或移除该模组时,每位玩家都会恢复到自己之前所做的选择。

范围:地图不必显示整个世界

因为是由服务器决定的,所以可以按人决定。两项设置,默认关闭,二者结合:

  • 射程 - 只有在一定米数内的玩家才会出现在你的地图上。
  • 同生物群系 - 仅限与你处于同一生物群系的玩家。

两者都关闭时,服务器广播自己未经修改的玩家列表,Merki 只负责强制处理。只要开启其中任意一个,列表就会为每个接收者单独构建一次,这是该功能实实在在的代价:同一份列表必须对不同的人说不同的话,因此它不再能是一次广播了。

在服务器端做这件事而不是让每个客户端隐藏太远的东西,原因在于:服务器声明一条规则却不执行,正是这个模组存在的意义所要终结的。如果所有位置都在网络上传输,任何运行自己构建版本的人都能看到整个服务器,那瞄准镜就只是装饰了。

选数字前有两个限制值得了解。位置每两秒上报一次,列表每两秒发出一次,所以边缘会有几秒的行程延迟:步行是几步,坐骑或乘船则是几十米。而且,如果范围小于游戏在你周围流式加载的区域,那么它只会把附近的玩家从地图上隐藏,而不会从你的连接中隐藏。

死亡标记

游戏已经在你自己的地图上标出了你的死亡位置。默基还会把它标记在其他玩家的地图上,墓碑下方会显示死亡玩家的名字,最多半小时后就会清除。你自己的死亡标记永远不会发给你;游戏自带的标记已经在那里了。

那一半是由已死亡客户端上报的,因为服务器从不运行玩家死亡代码。这就是为什么这个模组要求所有人都安装,而不是只有主机安装:没有安装 Merki 的玩家仍然会被强制进入地图,但他们的死亡不会被公告,这是功能上的漏洞而非功能缺失,并且从另一端是不可见的。

报告只发送到服务器,而非所有人,服务器再按照与地图相同的规则转发。位置设为私密的玩家不会发送标记,并且在设置Range或SameBiome时,只有那些能在地图上看到他们的玩家才会收到他们的墓碑。

只会显示玩家最近一次死亡的位置。再次死亡时,会移动其墓碑,而不是新增第二座,因为同一个人有两座坟墓会让你不得不看两遍地图才能弄清一件事。如果新位置超出了你能看到的地图范围,旧墓碑就会直接从你的地图上移除,而不是留在那里指向一具早已不在的尸体。这能告诉你他们又死了一次,但不会告诉你死在哪里。

名称是图钉自身的标签,因此它会显示在游戏中所有图钉名称显示的位置:当你放大到足够程度后,会显示在大地图上。小地图从不绘制图钉名称,所以也不会绘制这些名称。

服务器会记住每个标记,直到它过期,因此死亡后登录或重新连接的人仍然能收到它。这正是该功能存在的意义:十分钟后才加入帮忙的朋友,恰恰是最需要知道该去哪里的人。他们获得的是剩余时间,而不是重新计算的半小时,因为计时从死亡那一刻开始,并在服务器上持续运行。他们是否在范围内只判定一次,依据是他们最初站在世界中的位置,因为在此之前服务器不知道他们在哪里。对于全新角色来说,这意味着女武神将他们放下的位置,而不是载具出发处数百米外的那个点。在他们离线期间已经过期的标记永远不会被发送。

当玩家死亡时,死亡报告会通过该玩家自己与服务器的连接发送,服务器会从该连接的角色中获取名字,而不是从消息中获取。因此,没有人能替别人报告死亡,墓碑也只可能由服务器生成。

这些都不会被保存。标记只存在于服务器的内存中,所以重启服务器就会全部遗忘,最多损失半小时的墓碑记录。

安装中

需要BepInEx。别的什么都不需要。通过模组管理器安装,一步到位。手动安装的话,把 Merki.dll 在 BepInEx/plugins/Merki/.

然后启动游戏一次再退出。首次运行会生成配置文件。在模组加载之前该文件并不存在,这也是人们通常认为模组出问题的原因。

设置

文件位于 BepInEx/config/ezomic.valheim.merki.cfg每个设置项上方都有注释,文件本身就能说明一切。

请注意,在新版本中更改默认值对已经运行过该模组的机器没有任何影响。BepInEx 在首次运行时会写入每个条目,已保存的值会优先生效。

多人游戏

每个人都需要它。 与 核心 已安装,服务器会拒绝没有该内容且构建版本相同的客户端。没有核心,什么都无法检查。

服务器最需要它。在未安装Merki的服务器上使用带有Merki的客户端毫无意义:客户端等待服务器声明规则,而未安装Merki的服务器永远不会这样做。

如果安装了Core,此模组会向其版本门注册,主机的设置会应用于所有连接者,而你断开连接后自己的设置会立刻恢复。唯一的例外是详细模式,它始终由你掌控。这在这一点上比其他大多数此类模组更重要:每个玩家为自己设定的可见性规则,正是Merki所取代的东西。

没有核心,模组依然会运行,但它的退化是不均匀的,而不是温和的。强制可见性会保持,因为服务器是根据客户端无法隐瞒的数据来决定的。死亡标记则不会,因为任何没有梅尔基加入的人永远不会发送一个。

Bug 与建议

两人都前往该地点。 长屋.thijssensoftware.nl/漏洞 是用于表示任何损坏的情况,以及 长屋.thijssensoftware.nl/创意 是关于模组接下来应该做什么的。你也可以在那里给别人的想法投票。

登录需要使用 Steam 或 Discord 账号。我会根据那份列表来安排,所以投票结果决定我接下来选什么。

许可证

MIT。见 许可.

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!