[游戏] Linux 上搭建饥荒联机版 Don't Starve Together服务器


安装依赖

Ubuntu 64位环境:

1
sudo apt-get install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386

安装SteamCMD和DST

下载SteamCMD:

1
2
3
mkdir ~/steamcmd
cd ~/steamcmd
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz

解压并运行安装

1
2
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

在 steam > 模式下,登录及安装游戏包

1
2
3
4
login anonymous
force_install_dir ../DST
app_update 343050 validate
quit

在上面的命令中,第一行以匿名方式登录,当然你可以登陆你自己的steamID;第二行是指定安装路径,将程序安装到steamcmd的同级目录下;第三行的343050 是Don’t Starve Together 在 Steam 平台中的 ID。

配置Don’t Starve Together

生成默认配置文件

1
2
cd ~/DST/bin
./dontstarve_dedicated_server_nullrenderer

当看到一下提示

1
2
3
4
[200] Account Failed (6): "E_INVALID_TOKEN"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!! Your Server Will Not Start !!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

按Ctrl+C中断,然后完善生成的默认配置

之前查看很多资料都是需要在~/.klei/DoNotStarveTogether路径下写配置文件,现在该路径已经更改为~/.klei/DoNotStarveTogether/Cluster_1

依照以下文件结构新建文件夹及文件

1
2
3
4
5
6
7
8
9
10
11
Cluster_1
├── cluster.ini
├── cluster_token.txt
├── Caves
│ ├── modoverrides.lua
│ ├── server.ini
│ └── worldgenoverride.lua
└── Master
├── modoverrides.lua
├── server.ini
└── worldgenoverride.lua #重写世界具体物品数量等参数配置

设置Token

点击个人资料

点击Generate Server Token的按钮,将生成游戏令牌,将该Token复制到cluster_token.txt中

设置服务器全局变量

1
2
cd ~/.klei/DoNotStarveTogether/Cluster_1
sudo vi cluster.ini

填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[GAMEPLAY]
game_mode = survival # Endless无尽模式;Wildern荒野模式;Survival生存模式
max_players = 6 # 最大玩家数,1-64任意一个数
pvp = false #
pause_when_empty = true # 世界没人时是否自动暂停
enable_snapshots = true
enable_autosaver = true
[NETWORK]
cluster_description = Live it # 游戏房间描述
cluster_name = LiveIt007 # 游戏名称
cluster_intention = cooperative # 游戏模式
cluster_password = 123123123 # 密码
[MISC]
console_enabled = true # 控制台
[SHARD]
shard_enabled = true # 地下世界是否启动
bind_ip = 127.0.0.1 # 固定IP
master_ip = 127.0.0.1 # 地上世界IP
master_port = 10889 # 地上世界端口
cluster_key = supersecretkey # 地下世界连接地上世界的钥匙

按ESC,输入:wq 保存并退出vi编辑器。

设置局部配置

1
2
cd ~/.klei/DoNotStarveTogether/Cluster_1/Master
sudo vi server.ini

填入

1
2
3
4
5
6
7
8
9
[NETWORK]
server_port = 11000
[SHARD]
is_master = true
[STEAM]
master_server_port = 27018
authentication_port = 8768

设置地下世界的配置

1
2
cd ~/.klei/DoNotStarveTogether/Cluster_1/Caves
sudo vi server.ini

填入

1
2
3
4
5
6
7
8
9
10
[NETWORK]
server_port = 11001
[SHARD]
is_master = false
name = Caves
[STEAM]
master_server_port = 27019
authentication_port = 8769

配置世界资源生成

1
2
cd ~/.klei/DoNotStarveTogether/Cluster_1/Caves
sudo vi worldgenoverride.lua

填入

1
2
3
4
return {
override_enabled = true,
preset = "DST_CAVE",
}

启动服务器

创建启动服务器脚本

1
2
cd ~/
sudo vi runDST.sh

填入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/DST"
cluster_name="Cluster_1"
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_dir/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/steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit
check_for_file "$install_dir/bin"
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
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: /'

给脚本赋予执行权限

1
sudo chmod u+x ~/runDST.sh

执行脚本,开启服务器

1
sudo ~/runDST.sh

当出现下面的日志时,说明服务器启动成功了

success

此时在客户端搜索在cluster.ini文件中配置的房间名,你就能找到你所创建的房间了

success

进阶技能

增加Mod

饥荒通过/DST/mods路径下的dedicated_server_mods_setup.lua文件确认需要下载那些mod。
首先去创意工坊找些 Mod,并获得其 id,或者找些 Mod 合集,将 Mod id 按以下形式(换行复制粘贴)保存在文件中。以下是完整文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--There are two functions that will install mods, ServerModSetup and ServerModCollectionSetup. Put the calls to the functions in this file and they will be executed on boot.
--ServerModSetup takes a string of a specific mod's Workshop id. It will download and install the mod to your mod directory on boot.
--The Workshop id can be found at the end of the url to the mod's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=350811795
--ServerModSetup("350811795")
--ServerModCollectionSetup takes a string of a specific mod's Workshop id. It will download all the mods in the collection and install them to the mod directory on boot.
--The Workshop id can be found at the end of the url to the collection's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=379114180
--ServerModCollectionSetup("379114180")
ServerModSetup("345692228") --"Minimap HUD"
ServerModSetup("347079953") --"Display food values"
ServerModSetup("351325790") --"Geometric Placement"
ServerModSetup("367546858") --"Chinese Language Pack"
ServerModSetup("375850593") --"Extra Equip Slots"
ServerModSetup("375859599") --"Health Info"
ServerModSetup("376333686") --"Combined Status"
ServerModSetup("378160973") --"Global Positions"
ServerModSetup("444438334") --"DJPaul's Sort Inventory"
ServerModSetup("458587300") --"Fast Travel"
ServerModSetup("458940297") --"Food Values - Item Tooltips (Server and Client)"
ServerModSetup("462434129") --"Restart"
ServerModSetup("556027744") --"SUMMON BIGFOOT( With Old Bell)"
ServerModSetup("572538624") --"Chinese Plus"
ServerModSetup("623749604") --" Storeroom"
ServerModSetup("928706300") --"To Do Chores"
ServerModSetup("949822556") --"Egg Pain Together"
--ServerModCollectionSetup("id")

上面是我常用的几个Mod。但是dedicated_server_mods_setup.lua只是用于下载Mod,至于Mod是否启用以及配置则是modoverrides.lua 文件的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
return {
["workshop-345692228"] = { enabled = true },
["workshop-347079953"] = { enabled = true },
["workshop-351325790"] = { enabled = true },
["workshop-367546858"] = { enabled = true },
["workshop-375850593"] = { enabled = true },
["workshop-375859599"] = { enabled = true },
["workshop-376333686"] = { enabled = true },
["workshop-378160973"] = { enabled = true },
["workshop-444438334"] = { enabled = true,
configuration_options =
{
keybind = 103,
maxLights = 2,
backpackCategory = "food"
}
},
["workshop-458587300"] = { enabled = true },
["workshop-458940297"] = { enabled = true },
["workshop-462434129"] = { enabled = true },
["workshop-556027744"] = { enabled = true },
["workshop-572538624"] = { enabled = true },
["workshop-623749604"] = { enabled = true },
["workshop-928706300"] = { enabled = true },
["workshop-949822556"] = { enabled = true }
}

要注意,这两个文件的Mod Id是一一对应的。同时,将modoverrides.lua分别复制到Master和Caves文件下。

设定管理员

在~/.klei/DoNotStarveTogether/Cluster_1路径下创建adminlist.txt文件,然后将想成为管理员的玩家的用户ID一行一个写入其中。
获取用户ID的两种方法:

1. 让该玩家加入游戏,再查看日志,你会在日志中找到 KU_ 开头的一串用户 id
2. 让该玩家点击游戏主页面的 Account 按钮(和获得 token 一样),在页面中会有用户 id

下面是例子

1
2
3
4
5
6
KU_3N5kE2Zp
KU_BJY3CxYT
KU_DF1orNGA
KU_FAd2Yr8m
KU_vvbUjgIX

用户黑名单,用户白名单

同设定管理员操作一样,在~/.klei/DoNotStarveTogether/Cluster_1路径下分别创建blocklist.txt、whitelist.txt,然后将用户ID写入即可。

下面是最终的文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Cluster_1
├── cluster.ini
├── cluster_token.txt
├── adminlist.txt
├── blocklist.txt
├── whitelist.txt
├── Caves
│ ├── modoverrides.lua
│ ├── server.ini
│ └── worldgenoverride.lua
└── Master
├── modoverrides.lua
├── server.ini
└── worldgenoverride.lua #重写世界具体物品数量等参数配置

参考&引用

关于启动参数的引用
SteamCMD 使用方法
关于ini文件里面参数的引用
官方论坛,关于linux的开服
Klei 建议的 Don’t Strave Together Dedicated Server 搭建指南

更新时间

发布时间 : 2017-07-15

看你的了!