环境准备

饥荒的服务器项目为32位,如果系统为64位则需要执行下面的代码,如果是32位只需要安装screen即可

#安装32位支持库
yum -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen

安装完毕之后,检查是否存在/usr/lib/libcurl.so.4文件,后面会用到。

新增一个用户dst并设置他的密码,使用新用户登录

useradd dst
passwd dst

在服务器端下载steam命令行版本

mkdir ~/steamcmd && cd ~/steamcmd
wget "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz"
tar -zxvf steamcmd_linux.tar.gz

匿名登录steam并设置饥荒服务器的游戏文件夹,查看更多steamcmd命令点击这里

./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit

修复依赖问题

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

创建启动脚本

cd ~/dst/bin/
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master > dst_overworld.sh
#创建世界运行脚本
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves > dst_caves.sh
#创建洞穴运行脚本

sh dst_overworld.sh
#待出现Your Server Will Not Start后,按Ctrl+C终止进程
sh dst_caves.sh
#待出现Your Server Will Not Start后,按Ctrl+C终止进程
rm -rf ~/.klei/DoNotStarveTogether/Cluster_*
#删除之前创建的默认文件

运行完成上述的命令之后,在 ~/.klei/DoNotStarveTogether/ 会生成一个MyDediServer文件夹。

在MyDediServer目录创建adminlist.txt(管理员名单)和banlist.txt(黑名单),名单中填写klei id以KU_开头,可在klei官方网站查询。

后续需要对该文件夹进行配置最终完成下图的目录结构

  • Caves(洞穴配置文件夹),Master(世界地图配置文件夹)
  • leveldataoverride.lua(地图配置文件),modoverrides.lua(mod配置文件)
  • server.ini(独立配置文件)参数设置参考附录
  • adminlist.txt(管理员名单),banlist.txt(黑名单)
  • cluster.ini(全局配置文件)参数设置参考附录
  • cluster_token.txt(Token配置文件)

上传游戏配置

打开游戏,创建世界,在创建世界过程中,选择自己需要设置的选项、是否添加是山洞、服务器mod等,直到角色选择界面,选择退出

在主界面点击游戏数据

在弹出的文件管理界面找到自己的存档文件夹(以Cluster_开头的)

将Caves中的leveldataoverride.lua和modoverrides.lua拷贝到服务器的拷贝到服务器的~/.klei/DoNotStarveTogether/MyDediServer/Caves/中

将Master中的leveldataoverride.lua和modoverrides.lua拷贝到服务器的拷贝到服务器的~/.klei/DoNotStarveTogether/MyDediServer/Master/中

配置Token及独立配置文件

登录klei官方网站,按照下面图片的步骤一步步来。

最后得到了一个MyDediServer的文件夹,对文件中的cluster.ini进行配置(参考附录),将文件夹中的文件按照下图上传到服务器中。

配置mod

找到存档中/Master/modoverrides.lua文件以文本形式打开。

文件内容中的[workshop-9位数字],这9位数字为mod的id,记录下全部的mod id

在服务器~/dst/mods/文件夹中找到dedicated_server_mods_setup.lua文件,在文件末尾以ServerModSetup(“9位数字id”)的形式追加内容,如下图所示。

运行服务器

使用screen运行脚本

cd ~/dst/bin/
screen
sh dst_overworld.sh

当出现下面的日志时即为成功

Caves:  [00:20:50]: Registering slave in EU lobby

按Ctrl + a 然后按 d 将程序切换到后台执行,重复上面的步骤执行 dst_caves.sh

后台执行的程序可以通过screen -ls 命令 查看后台执行的虚拟终端id(四位数字),使用 screen -r id  命令进入虚拟终端 ,在虚拟终端输入c_shutdown()结束服务器运行。

下面是screen常用命令及释义:

  • screen 创建新的虚拟终端
  • screen -ls 查看所有正在运行的虚拟终端
  • screen -r id 进入某一个虚拟终端
  • ctrl + a d 退出虚拟终端(不关闭) 需要在虚拟终端里输入
  • exit 退出虚拟终端(关闭) 需要在虚拟终端里输入

附录

cluster.ini

[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 = ttionya test        # 游戏房间名称
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          # 投票踢人

server.ini

[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 之间,确保每个实例都不相同