环境配置
sudo -i # 切换到root用户
apt update -y # 升级packages
apt install wget curl sudo vim git -y # 安装常用的软件
apt-get install lib32gcc1 screen
安装饥荒
创建新用户
创建新用户,在新用户权限下进行所有操作,避免使用root用户所带来的风险。
adduser steam
su steam
切换用户
su steam
cd ~
安装steamcmd
mkdir steamcmd #新建一个目录来安装steamcmd
cd steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz #下载steamcmd并解压
tar -zxvf steamcmd_linux.tar.gz
安装饥荒
./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit # 指定安装至为用户家目录下的dst目录
ln -s /usr/lib/libcurl.so.4 ~/dst/bin/lib32/libcurl-gnutls.so.4 # 创建一个软链接
创建房间
创建地图
首先使用饥荒联机版创建游戏,选择好地图设置以及mod选项后创建世界。
获取存档文件
存档文件位置
C:\Documents\Klei\DoNotStarveTogether\Cluster_X
根据创建世界生成顺序,X对应1、2、3……
请自行根据生成时间判断对应存档。
获取cluster_token
选择下方的游戏选项。
进入如下网页(需要选择网页上的游戏选项)。
点击《饥荒:联机版》的游戏服务器。
选择添加新服务器,添加完成后选择配置服务器,进入如下界面,配置完成后,下载设置。
得到配置文件。解压后放入存档文件夹。
添加管理员
创建adminlist.txt
文件,文件内容填入科雷id,即KU_
开头的一串字符。
上传文件
上传存档
使用ftp工具将上面配置好的饥荒存档文件夹上传至~/.klei/DoNotStarveTogether/
路径下。
我使用的Winscp,你可以使用其他工具。自行在网上下载。
上传mod
将你创建游戏时所有勾选的服务器mod上传至~/dst/mods
路径下,并将每个mod文件夹的名字前加上workshop-
前缀。
创建启动文件
cd ~/dst/bin/
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster XXXX -shard Master > dst_master.sh
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster XXXX -shard Caves > dst_caves.sh
XXXX为你的存档文件夹的名字
为文件添加可执行权限
chmod +x dst_master.sh dst_cave.sh
启动服务器
分屏执行dst_master.sh和dst_caves.sh
screen -S master #新建分屏master
./dst_master.sh
Ctrl+A,D退出分屏
screen -S cave #新建分屏cave
./dst_cave.sh
启动后就可以搜到自己的房间了。
关闭房间
screen -ls|awk 'NR>=2&&NR<=20{print $1}'|awk '{print "screen -S "$1" -X quit"}'|sh
更新饥荒服务端
./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
mod更新
饥荒服务端mod更新有两种方式:
- 手动下载后,上传至饥荒服务器
- 使用
dedicated_server_mods_setup.lua
文件自动更新mod
这里介绍第二种。
下面是生成dedicated_server_mods_setup.lua
文件内容的python脚本,根据modoverrides.lua
文件内容生成。
modoverrides.lua
是该存档使用的mod配置。
import re
ServerModSetup_list = []
ServerModCollectionSetup_list = []
Str = ''
#文件路径需要自己改一下
with open('./modoverrides.lua','r',encoding='utf8') as f:
p = f.readlines()
#章节名正则匹配
partten = u'\d?'
for line in p:
if '"workshop-' in line :
for i in line :
if(re.match(partten,i).group() != ''):
Str = Str + i
if i == ']':
break
ServerModSetup = '\n'+'ServerModSetup("' + Str + '")'
ServerModCollectionSetup = '\n'+'ServerModCollectionSetup("' + Str + '")'
ServerModSetup_list.append(ServerModSetup)
ServerModCollectionSetup_list.append(ServerModCollectionSetup)
Str = ''
with open('./dedicated_server_mods_setup.lua','a',encoding='utf8') as fp:
for i in ServerModSetup_list:
fp.write(i)
for i in ServerModCollectionSetup_list:
fp.write(i)
将文件放在存档文件夹下,和modoverrides.lua
文件在平级位置,运行脚本,生成dedicated_server_mods_setup.lua
文件,放入~/dst/mods
路径下。
注意使用了上述方法就无需手动上传mod文件。
启动饥荒服务器,会自动下载并更新mod。