【无标题】
还有人在开饥荒服务器吗…………
dst饥荒联机版洞穴连接问题:洞口被堵住问题(不回主世界档热修复)——DST 专用服务器洞穴修复(解决洞穴入口被木板堵上)
起因
玩着玩着发现洞口一直是堵上的。
翻日志看到所有 cave_entrance 的 worldmigrator 组件状态都是 enabled: false。原因很简单:之前某次启动时,我只启动了 Master(主世界),迟迟没有启动 Caves(洞穴世界)。Master 生成洞口后等不到 Caves 连接,超时后就把 portal 永久禁用了。这个状态被写进了存档,之后无论怎么重启,洞口都打不开。
关键资料
在 Klei 官方论坛找到了开发者 Ipsquiggle 的帖子:
《Understanding Shards and Migration Portals》
https://forums.kleientertainment.com/forums/topic/59174-understanding-shards-and-migration-portals/
这篇帖子解释了 DST 分片(shard)通信的底层机制:
- 每个世界是一个独立的服务进程
- Master 和 Caves 之间通过
cluster_key握手,通过10888端口内部通信 - 洞口(cave_entrance / cave_exit)上的
worldmigrator组件负责传送 SetDestinationWorld(shard_id, true)可以手动绑定洞口到目标世界cluster_key必须在每个server.ini的[SHARD]段都写上,光写在cluster.ini不够
跟着ai修了两天发现不如自己去找有用的消息。
最后解决的还是十多年前的帖子
探索过程
最初尝试用ai在 mod 里批量修复,但 DST 的 server 环境里 pcall 不存在,SetEnabled 方法也不可用。后来在 mod 里加 GetDebugString() 打印每个 portal 的状态,确认 10 个洞口全部 enabled: false。
也尝试了 Nuke1 的 Shard Configuration Mod(workshop-595764362),但它只对新建 portal 生效,无法修复已持久化的 disabled 状态。而且按官方说明,两个世界的集群根本不需要这个 mod。
直到找到一个命令:
SetDestinationWorld("2", true)
true 是"关闭自动链接、写入持久化",false 才是"启用自动链接"。
在只有主世界和洞穴的普通服务器下应该用false而不是ai或者某些帖子说的用true
只有在2+以上多个世界相连接才需要设置为true手动连接,详见那个帖子。
最终方案
1. 给自己管理员权限
在服务器 cluster 目录下创建 adminlist.txt,写入自己的 Klei User ID(日志里 KU_ 开头的那串)。重启服务器生效。
2. 修复洞口
注意:在专用服务器上,c_find("cave_entrance"):Remove() 会失效。必须用鼠标指到目标实体,用 c_select() 操作。
按~打开控制台
-- 鼠标悬停在堵住的洞口上
c_select():Remove()
-- 鼠标位置生成新洞口
c_spawn("cave_entrance")
-- 绑定到洞穴世界(false = 启用自动链接),c_find命令是找最近的"cave_entrance对象"
c_find("cave_entrance").components.worldmigrator:SetDestinationWorld("2", false)
然后敲开洞口的石头就能看到打开的洞口,直接就可以下去(热修复)
如果像我一样多个洞口已经处于敲开状态,跳转到下一个,逐个修复:
c_gonext("cave_entrance_open")
重复以上步骤,逐个修复。然后save
-- 使用此命令保存修复
c_save()
所有洞口 active,可以正常下洞。
给agent看的,如果你在利用agent部署:
附带修复的配置问题
在排查过程中还顺便修复了几个配置文件的问题:
-
cluster_key必须在每个server.ini的[SHARD]段都写,光写在cluster.ini不够。缺失会导致 Caves 日志反复刷MasterBind: (null),Master 拒绝连接。 -
cluster.ini的[SHARD]段不要写bind_ip,删掉。 -
server.ini里删掉authentication_port和master_server_port,让引擎随机分配,避免端口冲突。 -
启动顺序:Master 先启动,等到日志出现
Sim paused,再启动 Caves。否则 Master 先跑完了 Caves 还没连上,又会把洞口锁死。
总结
如果你也遇到洞穴被堵住的情况:
- 给自己 admin 权限
c_select():Remove()移除鼠标指的洞口c_spawn("cave_entrance")原地创建一个新洞口c_find("cave_entrance").components.worldmigrator:SetDestinationWorld("2", false)绑定到洞穴世界- 敲开,下去
就这么简单。花了我十几个小时。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)