本文介绍了如何部署 Don't Starve Together(饥荒联机版)专用服务器多层世界,已经在 Windows 10 和 Ubuntu 20.04 上通过测试。
前言
Don't Starve Together(饥荒联机版)专用服务器多层世界(不止一个森林或洞穴) 和 双层世界(一个森林和一个洞穴)相比,服务器配置文件 和 脚本文件 都发生了变化。
服务器的配置文件需要增加 配置文件夹 和 修改一部分参数,而脚本文件需要增加对应的启动项。
以我创建的多层世界为例,其中 Master(主世界)和 Master2 是森林(地表世界),Caves 和 Caves2 是洞穴(地下世界)。
服务器配置文件
同一台机器
假设只有一台机器,Master(主世界)和 Master2 、Caves 和 Caves2 都运行在同一台机器上。
将 "Master" 文件夹复制并黏贴,最后重命名为 "Master2"。以此类推,又得到了 "Caves2" 文件夹。
每一个文件夹对应一个相应的世界,Master 和 Master2 、Caves 和 Caves2 共同使用同一个 "cluster_token.txt(访问令牌)" 和 "cluster.ini(服务器配置文件)"。
cluster.ini(服务器配置文件):
[GAMEPLAY]
game_mode = survival
max_players = 6
pvp = false
pause_when_empty = true
[NETWORK]
lan_only_cluster = false
cluster_intention = social
cluster_password =
cluster_description =
cluster_name = Jianrry的世界
offline_cluster = false
cluster_language = zh
[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
shard_enabled:true。是否开启共享。默认值是 false。如果开启多层世界,值只能是 true 。
bind_ip:127.0.0.1。默认值是 127.0.0.1。所有的世界都运行在同一台机器上,值只能是 127.0.0.1。
master_ip:127.0.0.1。主世界的 ip,默认值是空。所有的世界都运行在同一台机器上,值只能是 127.0.0.1。
master_port :10888。主服务器监听的 UDP 端口,默认值是 10888。所有的机器上的 master_port 必须保持一致,而且不能和同一台机器上的 server_port 相同。
cluster_key:defaultPass。服务器认证密码,默认值是空。所有的世界都运行在同一台机器上,值只需要设置一次。
Master(森林1) 中的 "server.ini(服务器配置文件)" :
[NETWORK]
server_port = 10999
[SHARD]
is_master = true
name = Master
id = 1
[ACCOUNT]
encode_user_path = true
[STEAM]
master_server_port = 27014
authentication_port = 8764
Master2(森林2) 中的 "server.ini(服务器配置文件)" :
[NETWORK]
server_port = 11000
[SHARD]
is_master = false
name = Master2
id = 2
[ACCOUNT]
encode_user_path = true
[STEAM]
master_server_port = 27015
authentication_port = 8765
Cave(洞穴1) 中的 "server.ini(服务器配置文件)" :
[NETWORK]
server_port = 11001
[SHARD]
is_master = false
name = Caves
id = 3
[ACCOUNT]
encode_user_path = true
[STEAM]
master_server_port = 27016
authentication_port = 8766
Cave2(洞穴2) 中的 "server.ini(服务器配置文件)" :
[NETWORK]
server_port = 11002
[SHARD]
is_master = false
name = Caves2
id = 4
[ACCOUNT]
encode_user_path = true
[STEAM]
master_server_port = 27017
authentication_port = 8767
其中 Master(主世界)的 is_master 只能是 true,其他的只能是 false。
每一个世界的 server_port(服务器端口)都是唯一的,不能和现有的端口相同。
不同的机器
假设有多台机器,Master(主世界)和 Master2 、Caves 和 Caves2 分别运行在不同的机器上。
Master(主世界)运行在 机器 A 上,Master2 运行在 机器 B 上,Caves 运行在 机器 C 上,Caves2 运行在 机器 D 上。
每一台机器上要求 一个 "cluster_token.txt(访问令牌)" 和 "cluster.ini(服务器配置文件)" 以及 至少一个 "Master" 或 "Caves" 文件夹,否则专用服务器无法启动。
cluster.ini(服务器配置文件):
[GAMEPLAY]
game_mode = survival
max_players = 6
pvp = false
pause_when_empty = true
[NETWORK]
lan_only_cluster = false
cluster_intention = social
cluster_password =
cluster_description =
cluster_name = Jianrry的世界
offline_cluster = false
cluster_language = zh
[MISC]
console_enabled = true
[SHARD]
shard_enabled = true
bind_ip = 0.0.0.0
master_ip = ?
master_port = 10888
cluster_key = defaultPass
shard_enabled:true。是否开启共享。默认值是 false。如果开启多层世界,值只能是 true 。
bind_ip:0.0.0.0。默认值是 127.0.0.1。所有的世界运行在不同的机器上,值只能是 0.0.0.0。
master_ip:?。主世界的 ip,默认值是空。所有的世界运行在不同的机器上,值只能是 运行主世界的那台机器的公网 ip。
master_port :10888。主服务器监听的 UDP 端口,默认值是 10888。所有的机器上的 master_port 必须保持一致,而且不能和同一台机器上的 server_port 相同。
cluster_key:defaultPass。服务器认证密码,默认值是空。所有的世界运行在不同的机器上,值只能保持一致。
Master 和 Master2 、Caves 和 Caves2 只是所在的机器不同,配置文件没有发生变化,不需要修改。
脚本文件
Windows
修改前:
c:\steamcmd\steamcmd.exe +login anonymous +app_update 343050 validate +quit
cd /D "c:\steamcmd\steamapps\common\Don't Starve Together Dedicated Server\bin"
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves
修改后
c:\steamcmd\steamcmd.exe +login anonymous +app_update 343050 validate +quit
cd /D "c:\steamcmd\steamapps\common\Don't Starve Together Dedicated Server\bin"
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master2
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves
start dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves2
Linux
修改前:
#!/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: /'
修改后
#!/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 Caves | sed 's/^/Caves2: /' &
"${run_shared[@]}" -shard Master | sed 's/^/Master: /' &
"${run_shared[@]}" -shard Master | sed 's/^/Master2: /'
"Master2" 和 "Caves2" 分别对应 Master2(森林2)和 Caves2(洞穴2),脚本文件中增加了 Master2(森林2)和 Caves2(洞穴2)的启动项。
以此类推,你如果想启动/停止一个世界,就需要增加/删除一个 "Master" 或 "Caves" 文件夹,还需要修改脚本文件中对应的启动项。
Matic 朋友之门 (旅行机器)
Step1:进入游戏
启动客户端,进入游戏。
Step2:打开控制台
切换到英文输入法,按下 `
打开控制台。
然后按下 Ctrl
键,切换到远程模式。
Step3:生成 Matic 朋友之门 (旅行机器)
在鼠标指向的地方,生成一个 "Matic 朋友之门 (旅行机器)"
c_spawn("migration_portal")
靠近 "Matic 朋友之门",设置 "Matic 朋友之门" 连接的世界
c_find("migration_portal").components.worldmigrator:SetDestinationWorld("1",true)
1 为 世界的 id,主世界的 id 默认是 1,其他世界的 id 可以在 "server.ini(服务器配置文件)" 中设置。