两年前在Steam上购买了Don’t Starve Together这个由Klei Entertainment公司开发的独立游戏,画面风格比较卡通,属于2.5D风格游戏,第一次玩这款游戏时,我真的被惊艳到了,本来是抱着随便看看的态度入得坑,这样的2.5d的的生存游戏真的好玩? 哇!实在无法想象这样一款游戏能吸引我,或许是市面上的生存类游戏玩法真的比不上饥荒了吧。

这游戏提供了许多精彩的死亡场景,但要想看到这些难忘瞬间,你每次都需要花费相当长的一段时间进行辛勤劳动。在这款游戏中,你可以花费数小时收集资源,为角色添加装备,为基地加固防御工事,最后只是为了看到你苦心经营的小天堂被一群无法阻挡的阴影怪兽摧毁,其实挺悲哀的,但是游戏的小任务的设计还是弥补了玩家对剧情的需要,但是小任务的完成后又不得不回到那个阴影怪兽支配的世界 最喜欢饥荒的一点是它的多角色化设计,每个角色都有不同的好处也需要完成不同的物品或是任务才能生存下去,在饥荒的世界里阴影才是唯一。

Docker创建容器并配置

DSM上需要使用到Docker,我们要先安装Don’t Starve Together服务器的镜像,我选择了jamesits/dst-server 这个版本的镜像,在Docker的注册表里搜 dst-server 第一个就是这个镜像,

jamesits/dst-server

下载并启动这个镜像的容器,要简单设置下这个容器配置,常规设置这里启动资源限制,cpu优先顺序:中,内存限制2046MB。

点击 高级设置 - 这里添加文件夹,文件夹路径设置为 docker/dst-server/data ,对应的装载路径设置 /data/ ,如下图:

端口设置 依次把本地端口对应设置好端口,本地端口需要做端口映射到外网,不然没有办法外网访问。

这样我们就已经把镜像容器设置好了,启动容器,让容器先运行一遍,我们进入容器的日志上看下,停在了 Your Server Will Not Start 这个地方,我们在停止的日志地方网上检查,发现 [200] Account Failed (6): "E_INVALID_TOKEN" 这个日志。

生成访问令牌

这个错误说明我们需要生成一个访问令牌, cluster_token.txt 这个文件文件,我们需要访问 饥荒官网 来获取这个令牌,实际上令牌就是一串乱码, 类似这样:

# 访问令牌  只是例子这个Token并不能使用
pds-g^KU_SIyM7lzH^MuybiymiTmQf1pVbch0l7G32lBAW65dGnfS2mrrCb0k=

新建个txt文档,把这串Token复制粘贴进去,保存为cluster_token.txt 文本文档,然后把这个文本文档放到DSM的 /docker/dst-server/data/Cluster_1 文件夹下面。

创建服务器独立配置文件

创建个 cluster.ini 文件,具体配置如下:

[NETWORK]
cluster_name = Server
cluster_description = Password:123
cluster_password = 123
cluster_intention = cooperative
offline_server = false
lan_only_cluster = false
tick_rate = 20
autosaver_enabled = true
whitelist_slots = 1

[GAMEPLAY]
game_mode = survival
max_players = 10
pvp = false
pause_when_empty = true
vote_kick_enabled = false

[STEAM]
steam_group_only = false
steam_group_id = 0
steam_group_admins = true 

[MISC]
console_enabled = true
max_snapshots = 6

[SHARD]
shard_enabled = true
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
master_port = 10998
cluster_key = MsAhBOXhhnElO5IPKr4G

服务器独立配置文件分析:

[NETWORK]
cluster_name = My Word             # cluster_name(服务器名称):建议使用英文,使用中文可能会出现乱码
cluster_description =Welcome to my world!  # cluster_description(服务器描述): 建议使用英文,使用中文可能会出现乱码
cluster_intention = cooperative           # cluster_intention(游戏风格):cooperative(合作), competitive(竞争), social(交际), or madness(疯狂),默认cooperative
cluster_password = 1010                       # cluster_password(房间密码):默认为空,无密码              
offline_server = false                    # offline_server(是否离线服务器): true or false,默认false。离线服务器,只有同一局域网的用户才能加入,所有依赖Steam的功能均不可用,比如说礼物掉落
lan_only_cluster = false                  # lan_only_cluster(是否只允许同一局域网加入游戏):true or false,默认false。
tick_rate = 15                            # tick_rate(每秒通信次数):取值范围在15-60之间,次数越多,游戏体验越好,但会加大服务器负担,默认15。
whitelist_slots = 1                       # whitelist_slots(白名单席位):为白名单用户保留的席位,默认是0

[STEAM]
steam_group_only = false                  # steam_group_only(是否只允许某个Steam群组的成员加入):true or false,默认false          
steam_group_id = 28205197                 # steam_group_id(Steam组的id):此次填写你想指定的Steam群组的id               
steam_group_admins = true                 # steam_group_admins(Steam组的管理员是否拥有服务器的管理员权限):true or false,默认false 

[MISC]
console_enabled = true                    # console_enabled(是否开启控制台):true or false,默认true。  
max_snapshots = 6                         # max_snapshots(最大快照数):服务器保留的最大快照数,决定了可回滚的天数

[SHARD]
shard_enabled = true                      # shard_enabled(是否开启服务器共享):true or false,默认true。如果开启洞穴服务器,则必须启用服务器共享。
bind_ip = 127.0.0.1                       # bind_ip(服务器监听的ip地址):当所有实例都运行在同一台机器时,可填写 127.0.0.1,默认127.0.0.1                
master_ip = 127.0.0.1                     # master_ip(Master服务器的ip地址):针对非 master 服务器,若与 master 服务器运行在同一台机器时,可填写 127.0.0.1
master_port = 10000                       # master_port(master 服务器的 UDP 端口):所有连接至 master 服务器的非 master 服务器必须相同
cluster_key = Jianrry                     # cluster_key(服务器连接密码):每台服务器必须相同

Master配置文件(地表世界)

再进入Master文件夹,也创建个server.ini 文件,具体配置如下:

[NETWORK]
server_port = 10999


[SHARD]
is_master = true
name = Master
id = 1


[STEAM]
master_server_port = 12346
authentication_port = 8766


[ACCOUNT]
encode_user_path = true

Master配置文件分析

[SHARD]
is_master = true             # is_master(是否是主世界):true or false,主世界是true,从世界是false,只能存在一个主世界和若干个从世界
name = Master                # name(服务器名):确保每一个实例都不相同
id = 1                       # id(世界id):主世界默认是1,无论是否设置,确保每一个实例都不相同    

[NETWORK]
server_port = 10001          # server_port(服务器端口):取值范围在10998-11018,确保每一个实例都不相同


[STEAM]
master_server_port = 20001   # master_server_port(master服务器端口):取值范围在1-65535,确保每一个实例都不相同
authentication_port = 30001  # authentication_port(认证端口):取值范围在1-65535,确保每一个实例都不相同


[ACCOUNT]
encode_user_path = true

Caves配置文件(洞穴世界)

然后进入Caves文件夹下,创建个 server.ini 文件,具体配置如下:

[NETWORK]
server_port = 11000


[SHARD]
is_master = false
name = Caves
id = 2


[STEAM]
master_server_port = 12346
authentication_port = 8767


[ACCOUNT]
encode_user_path = true

Caves配置文件分析:

[SHARD]
is_master = false          # is_master(是否是主世界):true or false,主世界是true,从世界是false,只能存在一个主世界和若干个从世界
name = Caves               # name(服务器名):确保每一个实例都不相同
id = 2                     # id(世界id):确保每一个实例都不相同


[NETWORK]
server_port = 10002        # server_port(服务器端口):取值范围在10998-11018,确保每一个实例都不相同


[STEAM]
master_server_port = 20002 # master_server_port(master服务器端口):取值范围在1-65535,确保每一个实例都不相同
authentication_port =30002 # authentication_port(认证端口):取值范围在1-65535,确保每一个实例都不相同


[ACCOUNT]
encode_user_path = true

现在饥荒专用的服务器基础配置已经好了,启动之后进入容器的日志里看下,如果显示是如同下图一样,那说明服务器已经启动成功,否则就是服务器设置有问题,需要看具体日志中错误提示来修改设置。

启动并进入游戏

服务器启动之后先别忙着进游戏,我们可以通过Don't Starve Together Server List.

这个网站来查看我们的服务器是否能搜到,如果可以搜到那就说明服务器一切正常,可以进入游戏。

现在我们进入游戏搜下刚启动的专用服务器:

完美的运行,低延迟24小时开机的专用服务器,想什么时候玩就什么时候玩,再也不用忍受卡顿连接不顺畅了。

配置下载的MOD文件

无 Mod,不饥荒。Mod 是玩饥荒必备的东西,所以非常建议开启 Mod 玩耍。饥荒通过一个名为 dedicated_server_mods_setup.lua 的文件确认需要下载哪些 Mod。

首先去创意工坊找些 Mod,并获得其 id,或者找些 Mod 合集,将 Mod id 按以下形式(换行复制粘贴)保存在文件中。以下是完整文件内容:

# --ServerModCollectionSetup("379114180")

-- food value display
ServerModSetup("347079953")

--#Global Position
ServerModSetup("378160973")

--#Ancient Altar
ServerModSetup("481765222")

--#Health Info
ServerModSetup("375859599")

--#Restart
ServerModSetup("462434129")

--#Campfire Respawn
ServerModSetup("569043634")

--#Wormhole Marks
ServerModSetup("362175979")

--#Increased Stack size
ServerModSetup("374550642")

--#Combined Status
ServerModSetup("376333686")

--#Extra Equip Slots
ServerModSetup("375850593")

--#Chinese Pack
ServerModSetup("367546858")


配置Mod文件

之前的 dedicated_server_mods_setup.lua 文件是用于下载 Mod,但是 Mod 是否启用及配置则是 modoverrides.lua 文件的功能。针对上面的文件,直接给出干货:

return 
{ 
["workshop-347079953"] = { enabled = true }, -- food value display
["workshop-378160973"] = { enabled = true }, -- Global Position
["workshop-481765222"] = { enabled = true }, -- Ancient Altar
["workshop-375859599"] = { enabled = true }, -- Health Info
["workshop-462434129"] = { enabled = true }, -- Restart
["workshop-569043634"] = { enabled = true }, -- Campfire Respawn
["workshop-362175979"] = { enabled = true }, -- Wormhole Marks
["workshop-374550642"] = { enabled = true }, -- Increased Stack size
["workshop-376333686"] = { enabled = true }, -- Combined Status
["workshop-375850593"] = { enabled = true }, -- Extra Equip Slots
["workshop-367546858"] = { enabled = true } -- Chinese Pack
}

有一点需要注意,最后不要加逗号。

设置管理员

获取服务器的管理员权限有3种方式:

  1. 访问令牌的所有者默认拥有服务器的管理员权限。
  2. 如果设置了Steam群组,则Steam组的管理员自动拥有服务器的管理员权限(推荐)
[STEAM]
steam_group_only = false                 
steam_group_id = 28205197                                      
steam_group_admins = true

如上所示,id为 28205197的Steam群组的管理员自动拥有服务器的管理员权限,同时允许非群组成员加入服务器。

3. 获取管理员的玩家的用户 id ,将获取的用户 id保存到(一行一个,不需要任何符号隔开)adminlist.txt 文件中。

KU_3N5kE2Zp
KU_BJY3CxYT
KU_DF1orNGA
KU_FAd2Yr8m
KU_vvbUjgIX

创建白名单

为了避免出现服务器人数达到上限后而无法加入的情况,可以设置白名单。白名单席位是为白名单用户准备的,只能白名单用户加入,普通用户无法加入。比如说设置了服务器的最大人数为6人(max_players = 6 ),保留了一个白名单席位(whitelist_slots = 1),则最多可以同时加入5个普通玩家和1个白名单玩家,白名单席位占用最大人数。

blocklist.txt 对应,这个文件是 whitelist.txt,但是里面的内容是以 KU_ 开头的用户 id ,重复上面的步骤(设置管理员)。

创建黑名单

为了防止世界被破坏,为了守护世界的和平,这个时候就轮到黑名单出场了。从日志中找到他的 SteamID64,添加到 blocklist.txt 中,重复上面的步骤(设置管理员)。

文件目录

/root/Klei/DoNotStarveTogether/Cluster_1                               # 所有配置文件的存放目录
/root/Klei/DoNotStarveTogether/Cluster_1/cluster_token.txt             # 访问令牌
/root/Klei/DoNotStarveTogether/Cluster_1/cluster.ini                   # 服务器基本配置文件
/root/Klei/DoNotStarveTogether/Cluster_1/admin.txt                     # 管理员名单
/root/Klei/DoNotStarveTogether/Cluster_1/whitelist.txt                 # 白名单
/root/Klei/DoNotStarveTogether/Cluster_1/blocklist.txt                 # 黑名单

/root/Klei/DoNotStarveTogether/Cluster_1/Master                        # Master服务器的配置文件存放目录
/root/Klei/DoNotStarveTogether/Cluster_1/Master/server.ini             # Master服务器的配置文件
/root/Klei/DoNotStarveTogether/Cluster_1/Master/leveldataoverride.lua  # Master服务器的地形配置文件
/root/Klei/DoNotStarveTogether/Cluster_1/Master/modoverrides.lua       # Master服务器的Mod配置文件

/root/Klei/DoNotStarveTogether/Cluster_1/Caves                         # Caves服务器的配置文件存放目录                         
/root/Klei/DoNotStarveTogether/Cluster_1/Caves/server.ini              # Caves服务器的配置文件
/root/Klei/DoNotStarveTogether/Cluster_1/Caves/leveldataoverride.lua   # Caves服务器的地形配置文件
/root/Klei/DoNotStarveTogether/Cluster_1/Caves/modoverrides.lua        # Caves服务器的Mod配置文件

/root/Klei/DoNotStarveTogether/Cluster_1/mods/dedicated_server_mods_setup.lua     # 下载和更新Mod的配置文件

/opt/steamcmd                                    # SteamCMD的安装目录

快速连接服务器

打开“库——饥荒联机版——属性——常规——设置启动选项”,输入下面的代码,登录游戏后通过ip自动加入指定的服务器。

+connect 你的ip:你的端口                       # 无密码
+connect 你的ip:11000 +password "你的密码"    # 有密码

登录游戏后,输入`打开控制台,输入下面的代码,可通过ip直连指定的服务器。

c_connect("你的ip",你的端口)                   # 无密码

常用的服务器命令

当你为服务器管理员时,在游戏中按 ~ 呼出控制台,再按 Ctrl 键即可转换为“远程”  模式,会出现 “远程” 字样。然后在控制台里输入 DebugSpawn("ragonfly") 回车,物品就会出现在鼠标的位置,ragonfly是龙蝇,你会看到一直龙蝇在鼠标位置。

c_sethealth(percent)
#设置血量,括号里填百分比,0.9=90%
c_setsanity(percent)
#设置san值,括号里填百分比,0.9=90%
c_sethunger(percent)
#设置饱食度,括号里填百分比,0.9=90%
c_godmode()
#上帝模式
c_supergodmode()
#超级上帝模式
c_speedmult(multiplier)
#设置移动速度,一般1.2足够
c_reset()
#在不保存世界的情况下重载,会导致掉线
c_regenerateworld()
#删除当前世界并生成新世界
c_save()
#手动保存
c_shutdown(true | false)
#c_shutdown(true)或c_shutdown()保存游戏并关闭服务器,c_shutdown(false)不保存游戏直接关闭服务器
c_rollback(count)
#回档,count从1开始计算,回到之前保存的状态

更多的服务器命令可以在官方wiki查阅,也可以转到《 饥荒联机版控制台代码大全》查阅。

参考文章