环境准备
饥荒的服务器项目为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 之间,确保每个实例都不相同