Ubuntu饥荒开服
记录一下自己使用Ubuntu 22.04开饥荒联机版服务器的过程。
1. 下载steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
2. 安装依赖
如果直接运行./steamcmd.sh
一般会报下面的错:
./steamcmd.sh: line 37: /root/games/steamcmd/linux32/steamcmd: No such file or directory
我使用的是Ubuntu 22.04, 安装依赖如下:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libstdc++6 libgcc1 libcurl4-gnutls-dev:i386 lib32z1
3. 运行
./steamcmd.sh
如果运行成功,会自动开始下载更新,下载完成后会出现Steam>
提示符。
接着输入下面的命令:
force_install_dir ../dontstarvetogether
login anonymous
app_update 343050 validate
quit
app_update 343050 validate
表示安装饥荒联机版,343050是饥荒联机版的appid。
注意先用force_install_dir
指定安装目录,然后login anonymous
登录,不然会出现警告:
Steam>force_install_dir ../dontstarvetogether
Please use force_install_dir before logon!
如果后面需要更新饥荒服务端,重新执行这几个命令即可。
4. 创建世界
进入饥荒联机版创建一个世界,然后退出游戏,会在C:/Users/{用户名}/Documents/Klei/DoNotStarveTogether/{id}/
目录下生成一个cluster_1
文件夹,将这个文件夹拷贝到服务器上的~/.klei/DoNotStarveTogether/
目录下。可以使用任意文件传输工具,我使用的是vscode的remote ssh插件,直接拖拽文件即可。也可以用scp命令:
scp -r cluster_1 root@{服务器ip}:~/.klei/DoNotStarveTogether/
5. 获取服务器令牌和klie账号id
从饥荒联机版游戏首页左下角的账号进入到klei的账号界面,然后进入饥荒游戏服务器页面,或者直接访问https://accounts.klei.com/account/game/servers?game=DontStarveTogether
创建服务器,然后复制服务器票据。
6. 修改配置文件
进入服务器的~/.klei/DoNotStarveTogether/cluster_1
目录。
- 在该目录下创建一个
cluster_token.txt
文件,内容为上一步获取的服务器票据。 - 在该目录下创建一个
adminlist.txt
文件,内容为你的klei账号id。如果需要添加多个管理员,其他人的klei账号id也同样方式获取,然后一行一个id写入adminlist.txt
文件。 获取方式为:从饥荒联机版游戏首页左下角的账号进入到klei的账号界面,或者直接访问https://accounts.klei.com/account/info获取服务器令牌。 - 修改
cluster.ini
文件,修改cluster_name
(服务器名称)、cluster_password
(服务器密码)、max_players
(最大玩家数)等参数。 ```ini [GAMEPLAY] game_mode = survival max_players = 6 pvp = false pause_when_empty = true
[NETWORK] lan_only_cluster = false cluster_password = my_password cluster_description = cluster_name = 饥荒服务器名称 offline_cluster = false cluster_language = zh cluster_cloud_id = CCF1ED350800900F
[MISC] console_enabled = true
[SHARD] shard_enabled = true bind_ip = 127.0.0.1 master_ip = 127.0.0.1 master_port = 10888 cluster_key = defaultPass
## 7. 创建启动脚本
可以直接获取官网的启动脚本:
```shell
wget https://accounts.klei.com/assets/gamesetup/linux/run_dedicated_servers.sh
内容如下:
#!/bin/bash
steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dontstarvetogether_dedicated_server"
cluster_name="MyDediServer"
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"
function fail()
{
echo Error: "$@" >&2
exit 1
}
function check_for_file()
{
if [ ! -e "$1" ]; then
fail "Missing file: $1"
fi
}
cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"
check_for_file "steamcmd.sh"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit
check_for_file "$install_dir/bin64"
cd "$install_dir/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
"${run_shared[@]}" -shard Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" -shard Master | sed 's/^/Master: /'
修改前面四个变量值为自己设置的目录,比如我的是:
# steamcmd安装目录
steamcmd_dir="$HOME/games/steamcmd"
# 饥荒服务器安装目录
install_dir="$HOME/games/dontstarvetogether"
# 存档目录名称
cluster_name="Cluster_1"
# 存档位置
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"
然后给脚本添加执行权限:
chmod +x run_dedicated_servers.sh
注意,官方给的脚本每次启动时都会检查更新,如果不想检查更新,可以把执行./steamcmd.sh
的那一行注释掉,然后手动更新一次即可。注意更新的时候如果加了模组,那么模组设置文件dedicated_server_mods_setup.lua
会被覆盖。所以我对这部分稍微修改了一下:
# 检查更新
if [ $# -ge 1 ] && [ "$1" -eq 1 ]; then
# 备份dedicated_server_mods_setup.lua文件
if [ -f "$install_dir/mods/dedicated_server_mods_setup.lua" ]; then
cp "$install_dir/mods/dedicated_server_mods_setup.lua" "$install_dir/mods/dedicated_server_mods_setup.lua.bak"
fi
# 执行steamcmd.sh
./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit
# 恢复备份的dedicated_server_mods_setup.lua文件
if [ -f "$install_dir/mods/dedicated_server_mods_setup.lua.bak" ]; then
mv "$install_dir/mods/dedicated_server_mods_setup.lua.bak" "$install_dir/mods/dedicated_server_mods_setup.lua"
fi
fi
可以在执行脚本时加上参数1
,表示检查更新,不加参数表示不检查更新。更新时候会先备份dedicated_server_mods_setup.lua
文件,然后更新完成后再恢复备份的文件。
8. 添加模组
找到自己存档的modoverrides.lua
文件,比如我的是~/.klei/DoNotStarveTogether/cluster_1/
目录下的Master
和Caves
目录下的modoverrides.lua
文件,如果创建世界的时候添加了模组,里面会有模组的配置信息,比如我这里添加了两个模组:
return {
["workshop-1998081438"]={ configuration_options={ StackMode=true, StackRadius=10 }, enabled=true },
["workshop-378160973"]={
configuration_options={
ENABLEPINGS=true,
FIREOPTIONS=2,
OVERRIDEMODE=false,
SHAREMINIMAPPROGRESS=true,
SHOWFIREICONS=true,
SHOWPLAYERICONS=true,
SHOWPLAYERSOPTIONS=2
},
enabled=true
}
}
这里面的1998081438
和378160973
是模组的id,也可以在https://steamcommunity.com/app/322330/workshop/搜索模组,然后在url中找到模组的id。
然后进入到饥荒服务器安装目录~/games/dontstarvetogether/mods
目录,修改dedicated_server_mods_setup.lua
文件,添加模组id:
ServerModSetup("1998081438")
ServerModSetup("378160973")
注意, 如果加了模组,那么Master
和Caves
目录下的modoverrides.lua
文件中的模组配置都要配置好,不然在切换世界的时候会直接卡死。
9. 启动服务器
./run_dedicated_servers.sh
一般来说需要给服务器开放以下端口:
- udp 10999 主世界, 在
Master/server.ini
文件中设置 - udp 10998 洞穴, 在
Caves/server.ini
文件中设置 - udp+tcp 10888 洞穴连接主世界, 在
cluster.ini
文件中设置
经过我自己测试,只开放10999
和10998
两个端口似乎也可以正常运行。
服务器的命令可以在(https://dontstarve.huijiwiki.com/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0)[https://dontstarve.huijiwiki.com/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0]找到。
常用命令:
c_shutdown(是否保存)
关闭服务器,true
表示保存存档。c_save()
保存进度。c_rollback(天数)
回滚存档。c_reset()
相当于c_rollabck(0)
,回滚到30秒前保存的存档。c_regenerateshard()
重新生成本世界c_regenerateworld()
重新生成服务器的所有世界c_skip(天数)
跳过天数
10. 连接服务器
可以直接在服务器列表中搜索到自己的服务器,名称就是上面在cluster.ini
文件中设置的cluster_name
。
如果想直接通过ip连接,可以用下面几种方式(端口号是主世界的端口号):
- 在游戏中按
~
键打开控制台,然后输入c_connect("xx.xx.xx.xx", 10999, "000")
,其中xx.xx.xx.xx
是服务器ip,10999
是主世界端口,000
是服务器密码。 - 也可以在steam启动时添加启动参数+connect xx.xx.xx.xx:10999 +password “000”
- 找到电脑上饥荒的启动路径,比如我的是
E:\games\Steam\steamapps\common\Don't Starve Together\bin64\dontstarve_steam_x64.exe
,然后把这个exe创建快捷方式,然后右键属性,在目标后面添加+connect 47.120.61.78:10999 +password "000"
,然后双击这个快捷方式就可以直接连接到服务器了。这种方法记得要先启动steam。