CM_Bill
想搞机🕹的🧪化学生
Call Me Bill
搭建饥荒联机版服务器
搭建饥荒联机版服务器

0 背景

几个小伙伴一起玩饥荒,用的其中一个人的电脑作为主机,但是我连上去之后延迟爆高以至于动都动不了暴毙于青蛙嘴下。因此萌生了搭一个服务器的想法,正好有一个小伙伴有一台没有使用了的阿里云学生机,遂打起了心思。在征得他的同意后拿到了管理权限,重装上 CentOS 7.3,开干。

1 准备

1.1 官方配置要求

经过查询官方文档,了解到《饥荒联机版》的服务器基本要求如下:

  • Internet (Upload) = 8Kbytes / player / s
  • Ram =  around 65Mbytes/player

而对 CPU 等其他的要求没有明确提到,显然阿里云的学生机跑一个6个玩家的饥荒联机版服务器是绰绰有余的。

1.2 我的搭建环境

  • 一台最便宜的装了 CentOS 7.3  和宝塔面板的的阿里云学生机(单核 2G)。
  • 购买了正版《饥荒联机版》的 Steam 账户。
  • 一台能运行《饥荒联机版》的 Windows 电脑。
  • 一组会在服务器后台敲代码的脑子和手。

2 安装 Steamcmd 并下载游戏

2.1 安装游戏本体

在服务器端运行的《饥荒联机版》也是需要使用 Steam 来安装并搭建服务器的,因此我们首先安装上命令行版本的 Steam,再安装游戏。

  1. 升级服务器并且安装所需环境
    yum -y update
    yum install -y mailx postfix curl wget bzip2 gzip unzip python tmux glibc.i686 libstdc++ libstdc++.i686 libcurl.i686

    关于提升 yum 下载速度,可以参考配置 yum 的阿里云镜像源

  2. 创建用户
    user add -m dst -p password
    sudo su dst #切换到这个用户

    使用 root 用户运行 Steam 有风险,因此建议创建一个新的用户。代码中 ‘password’ 为设置的用户密码。

  3. 下载安装 Steamcmd 并安装游戏
    mkdir ~/steamcmd
    cd ~/steamcmd #创建 Steamcmd 的安装文件夹并到这个目录中
    wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
    tar -zxvf steamcmd_linux.tar.gz #下载安装包并解压
    ./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit #运行 Steamcmd 并下载饥荒联机版
  4. 检查依赖
    cd ~/dst/bin
    ldd dontstarve_dedicated_server_nullrenderer
    ./dontstarve_dedicated_server_nullrenderer

    在这里我遇到了一个错误 error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory错误的大概意思也能读懂,就是没有找到那个文件,我们这样解决:

    cp /usr/lib/libcurl.so.4 ~/dst/bin/lib32/libcurl-gnutls.so.4

2.2 安装 Mod

游戏的安装文件夹在/root/dst/,我们打开 /root/dst/mods/dedicated_server_mods_setup.lua 文件,这里的语法十分简单,在文件中原有的注释里我们就能读到。
我们在最下方添加代码:

ServerModCollectionSetup("1704583429") --添加一个 Mod 合集包,括号内为合集包的创意工坊 id
ServerModSetup("360722606") --添加一个 Mod,括号内为 Mod 的创意工坊 id

这里的创意工坊 id 可以在 mod 的创意工坊页面的地址中找到。
Steamcmd 和《饥荒联机版》的游戏就已经安装完毕了,游戏启动后便会自动下载相关的 Mod。但是在此之前,我们还需要对游戏服务端进行配置。

3 配置游戏服务器

3.1 获取 token

这里的 token 可以认为是一种用来标识你的身份证明,表明你拥有这款游戏,这样才能正常运行服务器。
首先我们在电脑上打开 Steam 并运行游戏。进入游戏登录后,点击左下角的“账号”。  

https://www.callmebill.top/wp-content/uploads/2020/11/1.jpg

在接下来弹出来的网页中选择“游戏”。

https://www.callmebill.top/wp-content/uploads/2020/11/2.jpg

单击右侧的“饥荒联机版的游戏服务器”
https://www.callmebill.top/wp-content/uploads/2020/11/3.jpg

接下来填写一个服务器名称,然后选择“添加新的服务器”

https://www.callmebill.top/wp-content/uploads/2020/11/4.jpg

接下来就会生成一串代码,就是我们需要的 token,将其复制下来并且保存,后面将会用到。

3.2 配置游戏文件

手动配置游戏相关设置,编写配置文件过于硬核,因此我们使用游戏客户端直接生成相应的配置文件。
首先我们在自己的电脑上,到创意工坊订阅好自己需要的 Mod 并下载。然后进入游戏,选择“创建游戏”,在其中调整好自己的相关设置以及要启用的 Mod,然后进入这个游戏存档,直到选择角色的界面。
接下来退出游戏到主页面,单击左下角的“数据”就可以直接到达存档文件夹,默认的存文件夹地址为\文档\Klei\DoNotStarveTogether\你的Steam id,在这个文件夹下找到 Cluster_1(数字为存档编号,根据电脑上已有的存档数而定,这里没有其他的存档,因此就是1),将这个文件夹复制出来。
由于服务器配置的原因,在这里我只准备配置 Master 而不准备配置 Cave,因此接下来将 Cluster_1 中的 Master 文件夹打包,然后上传到服务器的/root/.klei/DoNotStarveTogether/MyDediServer 目录下,解压形成 Master 文件夹。同时将本地目录中的 cluster.ini 文件上传到 MyDediServer 目录下。
然后在 MyDediServer 文件夹中新建一个名为 cluster_token.txt 的文件,将之前获取的 token 直接粘贴进去,保存。

4 启动游戏服务器

我们使用了 screen 程序来后台运行游戏服务端,因此我们先安装 screen 。

yum install screen

然后输入以下命令,进入游戏文件夹并启动游戏。

cd /root/dst/bin/
screen -S dst
./dontstarve_dedicated_server_nullrenderer -console -cluster "MyDediServer" -shard Master -monitor_parent_process $$

如果有显示了 [Steam] SteamGameServer_Init success 即说明启动成功。此时可以直接输入游戏的控制台命令。
此时按下 Ctrl + A + D 即可退出当前界面返回 SSH。
若要再次进入游戏服务端后台,先输入命令 screen -ls 查看正在运行的终端 pid,然后输入 screen -r [pid] 即可进入程序的管理后台。如果在 screen -ls 的结果后标记为 Attached,说明当前终端有其他窗口打开,则输入 screen -r [pid] -Rd 抢占即可进入。
如果要关闭服务器,则在游戏服务端控制台按下 Ctrl + C 即可。
至于游戏控制台命令,可以到游戏官方 Wiki 查询。

5 一些其他的操作

5.1 添加管理员

在 /root/.klei/DoNotStarveTogether/MyDediServer/ 目录中新建一个名为 adminlist.txt 的文件,然后将你要设为管理员的玩家的 Klei ID (KU_开头的一串字符)填进去,一行一个,然后保存即可。

5.2 无法直接通过 c_connect() 命令加入游戏/游戏真延迟过大

刚开始的时候我连接到游戏服务器延迟极高,但是直接 ping 服务器地址延迟一直在 100 ms 以内。尝试多种方法后发现,可能是由于云服务器端口设置问题,在使游戏端口(默认为10999)的 TCP 与 UDP 协议均开放后,再连接到服务器延迟便降了下来。

6 参考资料

发表评论

textsms
account_circle
email

Call Me Bill

搭建饥荒联机版服务器
在阿里云学生机上搭建一个饥荒联机版的独立服务器。
扫描二维码继续阅读
2020-04-20
近期文章
近期评论