前引

饥荒联机是一个制作精良的“多人联机”生存游戏,游戏在可玩性上没得说,但是由于房主PC性能和网络等各种不确定性原因,导致联机体验特别糟糕。

猎杀时刻

对于联机卡顿的情况,可以通过搭建饥荒联机服务器来解决。

我会比较详细的介绍饥荒联机服务器搭建的过程,其中包括本地服务器搭建云服务器搭建通过两个服务器将地面和洞穴世界分开服务器搭建

KLEI服务器访问令牌

无论搭建什么类型的服务器此步骤都不能省略,获取到后可以暂时保存到记事本中,后面会用到

  1. 进入游戏

    打开饥荒联机版,进入菜单界面

    点击账号

    image-20230131212932263

  2. 找到饥荒服务器

    在导航栏中选择 游戏 ,找到饥荒联机版的图标,选择《饥荒:联机版》的游戏服务器

    image-20230131213355872

  3. 添加服务器

    名字可以随便取,取好名字之后就可以添加服务器

    image-20230131213945834

  4. 获取代码

    其他的都不用配置,直接复制访问令牌就可以

    image-20230131214244181

创建新世界

根据自己的喜好创建一个新的饥荒世界,配置好人数,世界属性,以及添加需要的服务器模组之后就和平时玩一样创建一个新世界。

在选人界面直接退出

image-20230131220545275

找到新世界存档,位置一般在C:\Users\mstzf\Documents\Klei\DoNotStarveTogether文件夹下面的那个数字文件夹里面存放着不同世界的文件夹。文件以Cluster_1来命名,找到新创建的世界文件夹点击进入。

在文件中添加新文件,命名为cluster_token.txt,一定要注意扩展名为. txt如果默认不显示扩展名的要注意可能会出错。打开 cluster_token.txt 将上一步获取的服务器访问令牌粘贴在里面保存退出。

image-20230131224430759

根据需求修改添加,其中必须要在默认的基础上加入 cluster_tooken.txt才可以搭建联机服务器

  • Cavers :饥荒联机版洞穴世界配置文件。
  • Master :饥荒联机版主世界配置文件。
  • adminlist.txt :管理员名单,在文件中写入玩家的KLEI ID可以将玩家变为服务器管理员,拥有控制台输入命令和踢人的权限。
  • blocklist.txt :黑名单,加入KLEI ID的玩家无法加入游戏。
  • cluster.ini :饥荒联机版配置文件,可以设置人数和世界模式等,可根据需要修改。
  • whitelist.txt :服务器白名单,可写入玩家KLEI ID加入白名单,服务器会空出白名单人数的可加入人数。如果服务器可以有人,白名单中有一人,那么如果白名单中的人不在世界中的话,实际可加入的人数就只有5人。

做完这些,这个游戏存档就可以被做为饥荒的联机服务器存档了

饥荒本地联机服务器搭建

  1. 复制存档

    将之前配置的游戏存档复制到他的上一级C:\Users\mstzf\Documents\Klei\DoNotStarveTogether

  2. 下载饥荒联机工具

    打开Steam游戏库,将游戏软件那个下拉箭头中,将工具也勾上

    image-20230131224118410

    在目录中找到Don't Starve Together Dedicated Server,并下载安装

    image-20230131224631734

  3. 编辑启动文件

    通过Steam直接打开服务器本地文件(也可以通过文件夹打开,路径为:Steam安装位置\steamapps\common\Don't Starve Together Dedicated Server

    image-20230131230145959

    找到 bin/scripts/launch_preconfigured_servers.bat 文件

    修改launch_preconfigured_servers.bat文件内容为

    1
    2
    3
    4
    5
    6
    7
    8
    @ECHO OFF

    set SteamAppId=322330
    set SteamGameId=322330

    cd ..
    start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster 改为新建世界存档名 -console -shard Master -console
    start "Don't Starve Together Caves" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster 改为新建世界存档名 -console -shard Caves -console

    如果你的服务器不需要任何服务器mod,那么可以直接点击launch_preconfigured_servers.bat文件启动服务器

  4. 添加mod

    对于本地搭建服务器的mod,可以直接复制原本饥荒的mod文件夹中的mod文件到饥荒服务器文件夹中的mod文件夹中

    找饥荒联机版文件的方法和之前一样,这里就不在赘述

    image-20230131233553886

    另一种方法时编辑mod文件夹下面的dedicated_server_mods_setup.lua

    1
    2
    ServerModSetup("350811795") --数字为mod的id号
    ServerModCollectionSetup("379114180") --数字为合计的id号

    对于怎么获取mod和合集的id,可以在Steam的创意工坊中,在mod或者合集订阅页面复制网页URL,在获取的网址中的数字就是mod或者合集的id号

云服务器搭建

饥荒联机云服务器相比与本地,有更好的网络连接条件,我本人在用一个2核2G的云服务器,短期档10人左右基本不卡,长期档6人以内也可以支持。

对于服务器的话,如果是学生,可以在阿里云进行学生认证,有着不错的折扣。

我的环境是Ubuntu 20.04.5 LTS

  1. 安装依赖环境

    1
    2
    更新系统
    sudo apt update && sudo apt upgrade -y

    安装依赖环境

    1
    sudo apt-get install lib32gcc1 libstdc++6 libgcc1 libcurl4-gnutls-dev -y
  2. 创建Steam安装目录

    1
    2
    mkdir ~/Steam
    cd Steam
  3. 下载SteamCMD安装软件

    1
    wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

    等待下载完成

  4. 对软件解压缩

    1
    tar -zxvf steamcmd_linux.tar.gz
  5. 运行SteamCMD

    1
    ./steamcmd.sh

    当看到Steam>

    就说明安装配置已经成功

    最有可能出现问题的就是在安装依赖的时候,多根据报错检查

    image-20230201172759557

  6. 指定游戏安装路径

    我喜欢装在Steam文件夹下,可以根据自己喜好修改

    1
    force_install_dir /root/Steam/DSTServer
  7. 登录Steam下载饥荒服务器

    1
    2
    login anonymous
    app_update 343050 validate

    等待游戏下载完成

    image-20230201173810519

    完成后可以使用Ctrl + C 或者输入quit 退出SteamCMD

  8. 编辑启动脚本

    可以通过直接运行文件来启动服务器

    ./root/Steam/DSTServer/bin/dontstarve_dedicated_server_nullrenderer

    但是这样不方便管理

    在启动时如果出现报错:

    error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory

    或者

    error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

    这里是个大坑。是由于缺少对应的库,开启i386支持再去安装对应的库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    开启i386支持
    sudo dpkg --add-architecture i386

    更新软件库
    sudo apt update && sudo apt upgrade -y

    安装缺少的库
    sudo apt install libcurl4-gnutls-dev:i386
    sudo apt install libstdc++6:i386

    启动脚本可以被放在任何位置,我习惯放在root下自建的bash文件下

    1
    2
    3
    mkdir /root/bash
    cd /root/bash
    vim startDST.sh

    没有vim的可以用:sudo apt install vim -y 安装

    启动脚本:

    • steamcmd_dir为steamcmd.sh路径
    • install_dir 为游戏安装路径
    • cluster_name为存档名
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #!/bin/bash

    steamcmd_dir="/root/Steam"
    install_dir="/root/Steam/DSTServer"
    cluster_name="Cluster_1"
    dontstarve_dir="/root/.klei/DoNotStarveTogether"

    function fail()
    {
    echo Error: "$@" >&2
    exit 1
    }

    function check_for_file()
    {
    if [ ! -e "$1" ]; then
    fail "Missing file: $1"
    fi
    }

    cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"

    check_for_file "steamcmd.sh"
    check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
    check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
    check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
    check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
    check_for_file "$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)

    "${run_shared[@]}" Caves | sed 's/^/Caves: /' &
    "${run_shared[@]}" Master | sed 's/^/Master: /'

    给脚本文件可执行权限

    1
    sudo chmod u+x /root/bash/startDST.sh

    执行脚本用 :./root/bash/startDST.sh

  9. 添加mod

    1
    vim /root/Steam/DSTserver/mods/dedicated_server_mods_setup.lua

    编辑文件内容

    1
    2
    3
    4
    ServerModCollectionSetup("2606822598") 
    -- 括号内数字替换为自己需要订阅的合集id
    ServerModSetup("1505270912")
    -- 括号内数字替换为自己需要订阅的mod的id

    image-20230201183857430

  10. 上传世界存档文件夹

    上传服务器的方式有很多

    软件方式可以使用FileZilla

    上传到服务器后将文件夹保存到:/root/.klei/DoNotStarveTogether/下面,并修改启动脚本中cluster_name的值

    找不到文件夹的可以先./root/Steam/DSTServer/bin/dontstarve_dedicated_server_nullrenderer运行一下

    完成后就可以运行启动脚本,启动饥荒联机服务器

  11. 后台运行

    推荐使用screen

    1
    2
    3
    4
    5
    6
    下载
    sudo apt install screen -y
    启动
    screen -S DST
    关闭
    Ctrl+A+D

双服务器分开地面和洞穴

要带一些大型模组的多人长期档,一个性能低的服务器可能无法满足,此时如果有多个服务器可以采用不同服务器跑不同部分的办法实现。

要使用这一方法,需要在每个服务器都安装饥荒服务器环境,并且都要上传饥荒游戏存档。

主要要编辑洞穴服务器的cluster.ini文件

image-20230202021547548

对于启动文件,只需要将最后的两部分根据需要注释掉就可以了

如果是主世界的启动程序就注释带有Caves的那一行,如果是洞穴就注释带有Master的那一行,然后要保证主世界先运行起来再启动洞穴

image-20230202021920313