如果玩游戏和开独服都在同一台电脑上,这里就可以使用游戏本身来创建、管理独立服务器的存档(包括 mod),更加方便直观。简单地说 ,独立服并没有什么特别之处,只是用它可以独立开服而不依赖游戏本身,更加稳定,并且可以多开世界。


最近在隔壁 STT 的安(拉)利(坑)下,入了 Steam 联机版饥荒。然而宿舍网并不好,两人在线联机延迟卡顿不能忍,游戏内开本地服却又莫名崩溃,就这样弃坑不好吧 щ(゚Д゚щ) 于是趁着 STT 去运动减肥的间隙,趁借机发挥下死鱼折腾精神,搞了个本地局域网独立服。

0x00. 需要软件


  • Linux Steam (用于安装饥荒游戏)

  • 饥荒联机版本体

0x01. 创建独服存档


独服存档实际上与游戏存档通用,所以这里用游戏本身来创建和管理存档,更加方便直观。

  1. 进入游戏新开存档,比如在第五个槽位新开,记住是第五个,设一个存档名以便同普通存档区分开。现在可以自己定制世界、添加 mod 等。完成后点击开始,世界生成完毕后再点取消。

  2. 获取独服授权口令(server token,在游戏主界面点击账户详情,生成后复制下来。具体操作细节搜索网络便可知)

  3. $HOME/.klei/DoNotStarveTogether/Cluster_5 中新建 cluster_token.txt,写入上面获得的授权码。(第五个,所以是 Cluster_5,*nix 系统注意区分文件名大小写)

0x02. 独服使用方法


Steam 安装饥荒联机版(DST)时,已经自带了一份独立服务器程序,无需再去工具库中另外安装。

可以在 home 目录新建 dedicated_server.sh

#!/bin/sh
install_dir="$HOME/.local/share/Steam/steamapps/common/Don't Starve Together"
# 饥荒默认安装目录,可在 steam 查看实际目录

cluster_name="Cluster_5"
# 要用存档的目录名,按需修改。这里是第五个,同上

dontstarve_dir="$HOME/.klei/DoNotStarveTogether"
# 默认存档位置 $HOME/.klei/DoNotStarveTogether

fail(){
    echo "错误: $@" >&2;
    exit 1
}
check(){
    if [ ! -e "$1" ]; then
        fail "丢失文件:  $1";
    fi
}
check "$dontstarve_dir/$cluster_name/cluster.ini"
check "$dontstarve_dir/$cluster_name/cluster_token.txt"
check "$dontstarve_dir/$cluster_name/Master/server.ini"
check "$dontstarve_dir/$cluster_name/Caves/server.ini"
# 如果不开洞穴,去掉上一行

check "$install_dir/bin"
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
# 开启服务端命令行,启动后可在终端直接执行命令

run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)

"${run_shared[@]}" -shard Master | sed 's/^/Master: /' &
"${run_shared[@]}" -shard Caves  | sed 's/^/Caves:  /'
# 如果不开洞穴,去掉上一行以及上面的符号“&”

保存后添加可执行权限 chmod +x dedicated_server.sh,现在运行 dedicated_server.sh 即可正常启动独服,无需 steam 或游戏本体。Ctrl+C 停止运行。

0x03. 管理独服存档


只需使用游戏本身进行管理,像正常的存档一样即可,比如添加 Mod 、回滚之类,最后点击一下运行再取消以便保存修改。注意:管理独服存档前,务必停止正在运行的那个存档!

0x04. 其他


a. 如何移植存档

DST 的兼容性很好,存档可以跨设备跨平台使用。比如我和 STT 玩,用我开的 Linux 本地独服,但存档是从他 Windows 版 DST 中直接复制来的。

  • 一个存档就是类似于 Cluster_* 的一个目录。存档名称查看目录中 cluster.ini 文件里的 cluster_name 值。
  • 如果从其他人那里拷贝存档,安装的 mod 不一致则会有兼容问题,最好把 mod 文件也一并复制来。mod 位于游戏安装目录的 mods 中,类似于 workshop-* 的一个目录即为一个 mod,mod 同样跨平台通用。
  • 使用复制来的存档,可能会出现 Token 过期问题。

b. Token 过期

独服运行后出现类似提示: [200] Account Failed (6): "E_EXPIRED_TOKEN" ,并拒绝加载。需要重新获取授权码并更新存档中的 cluster_token.txt 文件

c. 找不到 LAN 服务器

本地路由需要允许相应 udp 流量,在存档目录的 cluster.ini 文件中查看 master_port 主端口。另一种情况,如果独服和游戏在同一台主机上运行,则主机必须从外部获取到一个 IP 地址(局域网内网 IP 也行,不一定要联网),这可能是独服程序的一个臭虫。

d. 游戏无法执行管理员命令

klei 官方目前出于种种考虑,不支持 LAN 独服设置管理员,在 LAN only 的独服中,玩家在游戏中不能执行远程管理命令。但独服的 -console 选项仍可用,上面 dedicated_server.sh 中即包含 -console 启动项,要执行命令,在运行独服的终端里输入完回车即可。


参考 Klei 论坛原帖:forums.kleientertainment.com