Linux 饥荒服务器搭建
服务器搭建使用 Ubuntu 20.04 版本,其他版本未经测试。
安装 SteamCMD 及 Don’t Strave Together Dedicated Server
为方便管理,首先新建用户
dst,并切换至新建的用户。sudo useradd dst -m -d /home/dst -s /bin/bash #新建 dst 用户,并设置用户家目录/home/dst,设置用户登录 shell 为 bash sudo passwd dst #修改 dst 用户的登录密码 sudo usermod -aG sudo dst #将新建的 dst 用户加入 sudo 组 su - dst #切换至 dst 用户并切换目录至 dst 用户家目录
安装 SteamCMD 及 Don’t Strave Together Dedicated Server,参考 https://developer.valvesoftware.com/wiki/SteamCMD#Ubuntu。
mkdir ~/steamcmd #在当前用户 dst 家目录下创建 steamcmd 文件夹 cd ~/steamcmd #进入 steamcmd 文件夹内 sudo apt-get install lib32gcc-s1 && sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get install lib32stdc++6 && sudo apt-get install libcurl4-gnutls-dev:i386 #安装 SteamCMD 所需的依赖,以上命令为 64 位系统命令,若位 32 位系统,将 apt-get install lib32stdc++6 修改为 apt-get install libgcc1 wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz #下载 Linux 版 SteamCMD tar -xvzf steamcmd_linux.tar.gz #解压 Linux 版 SteamCMD ./steamcmd.sh +force_install_dir ~/dst +login anonymous +app_update 343050 validate +quit #安装 SteamCMD,其中: #./steamcmd.sh:为运行 SteamCMD #force_install_dir ~/dst:指定安装目录为当前用户家目录下的 dst 文件夹,若不指定,在安装目录为~/Steam/steamapps/common/ #login anonymous:为以匿名的方式登录 steam 服务器 #app_update 343050:安装 ID 为 343050 的游戏,该游戏为 Don't Starve Together Dedicated Server,可在 https://developer.valvesoftware.com/wiki/Zh/Dedicated_Servers_List 查看 #validate:验证已安装文件的完整性 #quit:在完成所有操作后退出 SteamCMD

运行 Don’t Strave Together Dedicated Server 并检查依赖
cd ~/dst/bin
#切换到 Don’t Strave Together Dedicated Server 的 bin 安装目录
ldd dontstarve_dedicated_server_nullrenderer
#查看是否缺失依赖
#若缺失依赖,如下图中缺失对应依赖,重新执行第一部分中步骤 2 中安装 SteamCMD 所需的依赖命令即可安装
#若存在步骤 2 中安装 SteamCMD 所需的依赖命令中未涉及到的依赖,apt-get install <对应依赖>
./dontstarve_dedicated_server_nullrenderer
#执行启动饥荒服务器执行启动饥荒服务器命令后,若出现 Your Server Will Not Start 字样表明服务器安装成功,按 CTRL+C 停止服务器。



配置启动世界
启动森林、洞穴
cd ~/dst/bin
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Master
#启动森林,其中:
#./dontstarve_dedicated_server_nullrenderer:启动饥荒服务器
#-console:启用控制台模式
#-cluster MyDstServer_001:指定服务器集群名称
#-shard Master:指定当前启动的是森林服务器
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Caves
#启动洞穴
#-shard Caves:指定当前启动的是洞穴服务器执行以上命令时,先执行启动森林命令,当日志中出现 Your Server Will Not Start 时,表明启动成功,随后按 CTRL+C 停止服务器后再次执行启动洞穴命令,当日志中出现 Your Server Will Not Start 时,表明启动成功,随后按 CTRL+C 停止服务器。
此时,查看 ~/.klei/DoNotStarveTogether/ 下的文件即可查看到创建的存档集群文件。
ls ~/.klei/DoNotStarveTogether/
ls ~/.klei/DoNotStarveTogether/MyDstServer_001/
配置存档(包括存档内各文件介绍)
在本地创建存档,注意要添加想要安装服务器 mod,生成世界后在选人界面即可退出;

此时打开创建的存档的文件夹,如此处显示的存档文件夹为
Cluster_3;

此时,在存档文件夹中,存在三个文件或文件夹,其中
Caves文件夹为洞穴存档,Master文件夹为森林存档,cluster.ini为服务器集群相关配置文件,在该文件夹中可自行创建如下文件以补充相关配置:cluster_token.txt(必须):用于保存 Klei 服务器令牌,获取该令牌方式如下:在该 游戏 页面中点击 《饥荒联机版》的游戏服务器;

在该页面添加新服务器,并获取到对应的 Klei 服务器令牌。

adminlist.txt:用于保存服务器管理员 Klei_ID,每行一个 Klei_ID,Klei_ID 获取方式如下:在用户信息页面即可获取到 Klei_ID。

blocklist.txt:用于保存被拉黑的成员的黑名单 Klei_ID,每行一个 Klei_ID,用于 Ban 用户。whitelist.txt:用于保存服务器白名单 Klei_ID,每行一个 Klei_ID。
cluster.ini:集群配置[GAMEPLAY] ;游戏模式,可以选择survival(生存)、endless(无尽)、wilderness(荒野) game_mode = survival ;最大玩家数量 max_players = 6 ;是否开启玩家对战 pvp = false ;服务器内没有玩家时是否暂停 pause_when_empty = true [NETWORK] ;是否仅通过局域网访问,设置为false表明服务器可以通过互联网访问 lan_only_cluster = false ;设置服务器密码 cluster_password = ;服务器描述 cluster_description = ;服务器名称 cluster_name = test_world ;服务器是否离线,设为false可在在线服务器列表发现,设为true则只能通过直连IP连接 offline_cluster = false ;服务器默认语言 cluster_language = zh ;云存档ID,每个新世界自动随机生成,是存档的唯一标识符 cluster_cloud_id = 603A4A7966A869E3 [MISC] ;是否运行游戏内使用管理员控制台,true表示允许 console_enabled = true ;以下配置是使得森林、洞穴协同工作的配置 [SHARD] ;true表示允许运行多层世界,若为false表示只运行森林 shard_enabled = true ;服务器进程监听本地IP bind_ip = 127.0.0.1 ;主世界的IP地址 master_ip = 127.0.0.1 ;主世界监听端口 master_port = 10888 ;世界之间内部通信的密码 cluster_key = defaultPassMaster文件夹,Caves文件夹backup:自动备份文件夹。save:存档文件夹。leveldataoverride.lua:世界生成配置文件,可以控制世界生成预设。modoverrides.lua:世界模组配置。server.ini:世界服务器配置。[NETWORK] ;世界端口 server_port = 10999 [SHARD] ;标识是否是主世界 is_master = true [ACCOUNT] ;是否编码用户路径,设置为true可防止因玩家名称包含特殊字符导致的路径问题 encode_user_path = trueserver_chat_log.txt:服务器的聊天日志文件。server_log.txt:服务器日志。
上传存档
打开本地存档,将存档放入
~/.klei/DoNotStarveTogether/MyDstServer_001/文件夹下;记得之前配置启动世界的命令吗,以启动森林世界命令为例:
./dontstarve_dedicated_server_nullrenderer -console -cluster MyDstServer_001 -shard Master该命令中的参数
-cluster MyDstServer_001中,MyDstServer_001为自定义的集群,或者说是存档的文件夹名,若直接将整个存档文件上传到~/.klei/DoNotStarveTogether/文件夹下,假设此时存档的文件夹名为Cluster_1,那么需要修改命令为:./dontstarve_dedicated_server_nullrenderer -console -cluster Cluster_1 -shard Master若是云服务器,可以使用官方上传方式或 scp、sftp 等方式上传;
使用 scp 上传存档到目标位置;
cd C:\Users\<userName>\Documents\Klei\DoNotStarveTogether\一串数字\存档名 scp -r .\* UserName@服务器IP:/home/dst/.klei/DoNotStarveTogether/MyDstServer_001 #以上命令为使用密码上传 scp -i "本地存放私钥位置" -r .\* UserName@服务器IP:/home/dst/.klei/DoNotStarveTogether/MyDstServer_001 #以上命令为使用密钥登录上传 #scp -i "本地存放私钥位置" -r 源文件 目标文件 #-i "本地存放私钥位置":使用私钥登录 #-r:迭代上传 #源文件:指定要复制的源文件 #目标文件:要上传的文件的位置 #对于源文件和目标文件,若文件位置在本地,则直接填写文件在本地的路径,若为远程服务器,则格式为 UserName@服务器 IP: 要上传到位置
使用 sftp 上传存档到目标位置,推荐使用 WinSCP 工具,该工具亦可使用 scp 等上传,下载地址为:https://winscp.net/eng/index.php;
登录

上传文件,左边为本地文件,右边为服务器文件,将左边本地文件拖入到右边对应的文件夹内即可。

上传 mod
dedicated_server_mods_setup.lua:DST 专服务器的 mod 自动下载配置文件(该文件需要上传至服务器mods目录下,如此处的目录为~/dst/mods/dedicated_server_mods_setup.lua):ServerModSetup("id") --配置一个特定的mod,id需修改为该mod的WorkshopID,每行一个 --ServerModCollectionSetup("id") --配置一个合集的mod,id需修改为该mod合集的WorkshopID,每行一个 --若使用mod集合,去掉前面的"--",若不使用则无需去掉,特定mod同理访问要添加的 mod 的创意工坊;
查看对应的 URL 中参数 id 的值。

获取 mod 或 mod 合集的 WorkshopID 方式二:
再创建存档时,选定了 mod;
查看存档中
Master文件夹或Caves文件夹中的modoverrides.lua文件;modoverrides.lua文件中存在添加的 mod 的 WorkshopID。
最后形成文件如下:

将该文件以上传存档同样的方式上传至服务器 mods 文件夹内。
然而该方式因为网络波动等因素,存在有些 mod 无法下载或下载慢,可以在本地下载好后上传至目标文件夹内:
在本地 steam 安装目录中找到文件夹
steam安装目录/steamapps/workshop/content/322330,该目录下即为本地中下载的 mod。mod 对应的代码可以在
modoverrides.lua文件中获取。在
mods文件夹中,将第一步中本地 mod 中存档要使用的 mod 上传至该目录下(注意,要修改mod文件夹的名字,文件夹数字名之前需要增加workshop-)。find . -maxdepth 1 -type d -regex './[0-9]+' | while read dir; do mv "$dir" "workshop-${dir#./}"; done

使用脚本一键启动服务器
在服务器中创建文件
dst_screen.sh,写入脚本内容(脚本使用 AI 生成,未完全测试稳定性);授予脚本执行权限并使用脚本。
chmod +x dst_screen.sh ./dst_screen.sh start #启动服务器
控制台命令
直连代码:
c_connect("ip",端口,"密码")
#没密码可以不填密码,格式为 c_connect("ip", 端口, "")
#端口为 Master 文件夹内 server.ini 文件显示的端口
全体复活:
for k,v in pairs(AllPlayers) do v:PushEvent('respawnfromghost') end单人复活:
for _, v in ipairs(AllPlayers) do if v.name == '待复活玩家名字' and v:HasTag('playerghost') then v:PushEvent('respawnfromghost') end end回档:
c_rollback(待回档的天数)保存:
c_save()
评论区