饥荒服务器搭建

1. 游戏介绍

《饥荒:联机版》是一款多人联机沙盒生存类游戏。多人联机时需要房主开房作为服务器,但是这样只有房主在线时,其他人才能进入房间。并且由于网络或配置的问题,其他人可能会出现延迟、丢包甚至掉线的糟糕游戏体验。因此使用独立的服务器来开服,可以大大提升游戏体验。

2. 服务器选择

饥荒游戏只吃单核性能,因此加钱购买多核服务器收效甚微。因此购买单核1G内存的云服务器足以,国内可以考虑腾讯云和阿里云的学生机器。上行带宽官方给出的数据是8Kbytes / player / s,所以1M带宽足以。
系统选择上优先考虑饥荒官方教程中的Debian/Ubuntu,以减少不必要的麻烦。

3. 依赖安装

搭建饥荒服务器需要:

  • SteamCMD
  • Don’t Starve Together
  • screen

3.1. SteamCMD需要的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
# 需要root权限或者使用sudo

# 对于Debian/Ubuntu 64位系统:
apt-get install lib32gcc1

# RedHat/CentOS 32位系统:
yum install glibc libstdc++
yum -y install glibc.i686
yum install libcurl.so.4
yum install libstdc++.so.6

# RedHat/CentOS 64位系统:
yum install glibc.i686 libstdc++.i686

3.2. Don’t Starve Together需要的依赖

1
2
3
4
5
6
7
8
# 同样需要root权限或者使用sudo

# 对于Debian/Ubuntu 64位系统
dpkg --add-architecture i386
apt-get update
apt-get install lib32gcc1
apt-get install lib32stdc++6
apt-get install libcurl4-gnutls-dev:i386

3.3. 下载SteamCMD

建议使用非root账户来运行游戏服务器

1
2
3
4
5
6
7
8
9
10
11
adduser dst
su - dst

# 下载SteamCMD
mkdir steamcmd #创建目录用来存放SteamCMD
cd steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz

# 运行SteamCMD,匿名登陆,force_install_dir 后面加饥荒的下载目录
./steamcmd.sh +login anonymous +force_install_dir /home/dst/server_dst +app_update 343050 validate +quit

4. 运行Don’t Starve Together

1
2
3
4
5
6
7
8
9
10
11
12
13
#进入上一步饥荒的下载目录
cd /home/dst/server_dst/bin
#创建地上世界服务器运行脚本
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master > start.sh
#创建洞穴服务器运行脚本
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves > start2.sh

sh start.sh
#第一次运行会出现Your Server Will Not Start,CTRL+C停止即可

#如果不需要开洞穴,下面这行命令可以不运行
sh start2.sh
#第一次运行会出现Your Server Will Not Start,CTRL+C停止即可

运行完成后会在~/.klei/DoNotStarveTogether/中生成MyDediServer目录,这是存档和配置的目录,包括地上和洞穴

5. 服务器配置

5.1. token文件

服务器运行需要token文件,token需要到游戏中生成,在电脑中打开饥荒游戏客户端。
Snipaste_2020-03-27_15-50-57.png
Snipaste_2020-03-27_15-53-22.png
Snipaste_2020-03-27_15-57-26.png
Snipaste_2020-03-27_16-11-47.png
得到token后在服务器中~/.klei/DoNotStarveTogether/MyDediServer目录下创建cluster_token.txt文件,并将token复制进去。

5.2. 配置游戏设置

直接在配置文件中配置世界设置过于麻烦,建议直接启动游戏创建一个存档,设置好世界和模组的设置。然后打开游戏本地存档,一般是在文档/Klei/DoNotStarveTogether/中,找到创建存档中Master文件夹中leveldataoverride.luamodoverrides.lua文件,复制的服务器中~/.klei/DoNotStarveTogether/MyDediServer/Master目录中,如果需要开启洞穴,则需要将洞穴中的文件同样复制的Caves中。

5.3. 服务器配置

服务器相关配置文件在~/.klei/DoNotStarveTogether/MyDediServer/cluster.ini文件中。配置文件详解:

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
[MISC]
max_snapshots = 6 # 最大快照数,决定了可回滚的天数
console_enabled = true # 是否开启控制台

[SHARD]
shard_enabled = true # 服务器共享,要开启洞穴服务器的必须启用
bind_ip = 127.0.0.1 # 服务器监听的地址,当所有实例都运行在同一台机器时,可填写 127.0.0.1,会被 server .ini 覆盖
master_ip = 127.0.0.1 # master 服务器的 IP,针对非 master 服务器,若与 master 服务器运行在同一台机器时,可填写 127.0.0.1,会被 server.ini 覆盖
master_port = 10888 # 监听 master 服务器的 UDP 端口,所有连接至 master 服务器的非 master 服务器必须相同
cluster_key = dst # 连接密码,每台服务器必须相同,会被 server.ini 覆盖

[STEAM]
steam_group_only = false # 只允许某 Steam 组的成员加入
steam_group_id = 0 # 指定某个 Steam 组,填写组 ID
steam_group_admins = false # 开启后,Steam 组的管理员拥有服务器的管理权限

[NETWORK]
offline_server = false # 离线服务器,只有局域网用户能加入,并且所有依赖于 Steam 的任何功能都无效,比如说饰品掉落
tick_rate = 15 # 每秒通信次数,越高游戏体验越好,但是会加大服务器负担
whitelist_slots = 0 # 为白名单用户保留的游戏位
cluster_password = # 游戏密码,不设置表示无密码
cluster_name = server_name # 游戏房间名称
cluster_description = description # 游戏房间描述
lan_only_cluster = false # 局域网游戏
cluster_intention = madness # 游戏偏好,可选 cooperative, competitive, social, or madness,随便设置,没卵用

[GAMEPLAY]
max_players = 16 # 最大游戏人数
pvp = true # 能不能攻击其他玩家,能不能给其他玩家喂屎
game_mode = survival # 游戏模式,可选 survival, endless or wilderness,与玩家死亡后的负面影响有关
pause_when_empty = false # 没人服务器暂停,刷天数必备
vote_kick_enabled = false # 投票踢人

独立配置文件 ~/.klei/DoNotStarveTogether/MyDediServer/Master/server.ini :
1
2
3
4
5
6
7
8
9
10
11
[SHARD]
is_master = true /false # 是否是 master 服务器,只能存在一个 true,其他全是 false
name = caves # 针对非 master 服务器的名称
id = ??? # 随机生成,不用加入该属性

[STEAM]
authentication_port = 8766 # Steam 用的端口,确保每个实例都不相同
master_server_port = 27016 # Steam 用的端口,确保每个实例都不相同

[NETWORK]
server_port = 10999 # 监听的 UDP 端口,只能介于 10998 - 11018 之间,确保每个实例都不相同

5.4. 模组配置

模组需要在游戏目录 /home/dst/server_dst/mods 中的 dedicated_server_mods_setup.lua 文件中添加每个模组,或者直接添加模组集合。建议在创意工坊中创建服务器模组集合,方便使用。

1
2
3
4
5
-- id可以在创意工坊中模组或者集合的链接里找到
-- 添加单个模组,
ServerModSetup("350811795")
-- 添加模组集合
ServerModCollectionSetup("379114180")

模组的配置则在 modoverrides.lua,需要 MasterCaves 中各一份。上一步中已经将模组的配置文件复制了。

5.5. 可选配置文件

5.5.1 管理员设置

获取用户ID( KU_ 开头的id)
1. 让该玩家加入游戏,再查看日志,在日志中找用户id。
2. 让该玩家点击游戏主页面的 Account 按钮(和获得 token 一样),在页面中会有用户id
~/.klei/DoNotStarveTogether/MyDediServer/中创建adminlist.txt文件。并将上述得到的用户id,每行一个写入文件。

5.5.2 黑名单

将日志中的用户id写入到 blocklist.txt 文件中

5.5.3 白名单

需要先在 cluster.ini 配置文件中配置 whitelist_slots,白名单席位会占用最大游戏人数。
将用户id写入到 whitelist.txt

6. 运行和维护脚本

目录 /home/dst/server_dst/bin

start.sh
1
2
# 启动地上世界服务器
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master
start2.sh
1
2
# 启动洞穴服务器
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves
restart.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
# launch of server Overworld

#Path Directory
name_folder="/home/dst/server_dst/bin"

#Command line
start_overworld="sh start.sh"

#Start or Restart the server
screen -dr dst_server1 -X -S quit
cd ${name_folder}
screen -dmS dst_server1 ${start_overworld}
restart2.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
# launch of server Cave

#Path Directory
name_folder="/home/dst/server_dst/bin"

#Command line
start_cave="sh start2.sh"

#Start or Restart the server
screen -dr dst_server2 -X -S quit
cd ${name_folder}
screen -dmS dst_server2 ${start_cave}
update.sh
1
2
3
4
5
6
7
8
9
10
#update of server
screen -dr dst_server1 -X quit
screen -dr dst_server2 -X quit
cp /home/dst/server_dst/mods/dedicated_server_mods_setup.lua /home/dst/server_dst/mods/dedicated_server_mods_setup.lua.bak
cd /home/dst/steamcmd
./steamcmd.sh +login anonymous +force_install_dir /home/dst/server_dst +app_update 343050 validate +quit
sleep 10
cp /home/dst/server_dst/mods/dedicated_server_mods_setup.lua.bak /home/dst/server_dst/mods/dedicated_server_mods_setup.lua
sh /home/dst/server_dst/bin/restart.sh
sh /home/dst/server_dst/bin/restart2.sh

7. 游戏开服后修改世界配置。

游戏玩的正嗨,发现服务器没有关掉疾病。或者玩的太菜,死的太多,想调整四季的时长。都可以管理员通过在游戏内的按 ~ 控制台来调整,按 Ctrl 键来修改RemoteLocal,以下命令需要在 Remote 中运行。

1
2
# 去掉疾病
TheWorld.topology.overrides.disease_delay = "none"

然后重启服务器即可。

8. 写在最后

由于饥荒只吃单核性能,没有多核优化。随着游戏的进行,建筑、物品、怪物等数量的上升,到100多200天的时候不可避免的会出现卡顿,所以在游戏开始之前最好将游戏地图不要设置过大,资源怪物数量调小等,这样可以延缓卡顿来临的时间。当然最大的难点其实是如何找到和你一块玩饥荒那么多天的的朋友。

9. 参考

SteamCMD使用Wiki
Klei官方服务器教程 其一
Klei官方服务器教程 其二
饥荒联机独立服务器搭建教程(二):Linux篇


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!