饥荒联机版

饥荒联机版

56 个评价
Dedicated Server配置项和命令行参数详解
由 Max 制作
  1. 详解Dedicated Server中cluster.ini,server.ini的各配置项作用。
  2. 服务器管理常见问题解答
  3. 服务器命令行启动参数详细说明
   
奖励
收藏
已收藏
取消收藏
内容简介
写在最前:玩饥荒比较久,遇见很多问题,现将官方文档整理翻译,为中文社区做些贡献。文中个别地方加入了个人的理解,对于常见问题也做了记录。

本文分三部分。
  • 如果想对服务器进行更精细的配置,以适应特定需求,请参阅cluster.ini和server.ini配置项详解
  • 如果需要控制服务器用户权限,设置管理员、设置黑白名单、预留空位,加入群组设定,请参阅常见问题解答
  • 如果厌烦了每次建立新服务器都要调整一次配置文件,或是需要频繁的进行服务器参数微调测试,请参阅启动项命令行参数详解,用命令行参数覆盖配置文件中的设定。

如需阅读英文原文,请参考下面的链接:
Dedicated Server结构
饥荒的Dedicated Server采用的是分片结构,平日大家玩耍的地上,洞穴都独立运行,这里我们称之为shard。所有的shard组成了一个完整服务,这里我们称之为cluster。

一个cluster需要一个主shard。一般情况下,地上世界是一个cluster里的主shard,一般称作Master shard;地下世界Caves是普通shard。

由于物理机性能各异,想让游戏流畅运行,需要选择一个合适的部署方式。通常情况下,有以下几个类型:
  1. 单一物理机运行


  2. 单物理机运行多个cluster

  3. 双(多)物理机运行一个cluster

搭建饥荒服务器实际是一个部署的过程。只要按照需求修改配置文件中的配置项,即可完成服务器功能的调整。

注意: 修改配置文件,不可以使用windows记事本。由于记事本采用UTF-8 BOM+的编码,会造成很多问题。
推荐使用Notepad++,Vim,Sublime Text,Editplus等编辑器调整配置文件。
cluster.ini配置项详解
[MISC]
max_snapshots
  • 默认值: 6
  • 快照留存最大值。每次存档会生成一个快照,用于回滚游戏。游戏默认存档动作在天刚亮的时候执行。

console_enabled
  • 默认值: true
  • 允许在游戏控制台或正在运行的server终端中输入命令

[SHARD]
shard_enabled
  • 默认值: false
  • 开启服务器分片。搭建多层世界,此配置项必须设置为true。单层世界可以忽略。
    *每个cluster.ini中的设置必须一致。(见章节末尾说明)

bind_ip
  • 可被server.ini的配置覆盖
  • 默认值: 127.0.0.1
  • 在shard_enabled = true,is_master = true时,必须配置
  • bind_ip指定了主服务器监听分片服务器连接请求的网络地址。当分片服务器向此地址发出连接请求后,主服务器监听到请求,自动连接其他世界。如果你的主服务器和分片服务器都在同一台机器上,此值设为127.0.0.1即可;如果在不同的机器上,此值设为0.0.0.0。此配置项只需要在主服务器端的cluster.ini或server.ini中设定。

master_ip
  • 可被server.ini的配置覆盖
  • 默认值: none
  • 在shard_enabled = true,is_master = false时,必须配置
  • 未配置主服务器的分片服务器,将尝试使用此IP地址连接主服务器。如果一个集群中的所有服务器都在同一机器上,将此地址设置为127.0.0.1

master_port
  • 可被server.ini的配置覆盖
  • 默认值: 10888
  • 主服务器对此UDP端口保持监听状态,未配置主服务器的分片服务器将使用此端口连接主服务器。对于所有分片服务器,应只在cluster.ini中保证唯一配置,或者直接忽略此配置项,采用默认配置。此配置项的值必须与主服务器的server_port值不同。

cluster_key
  • 可被server.ini的配置覆盖
  • 默认值: none
  • 在shard_enabled = true时,必须配置
  • 这是从属服务器连接主服务器时,用于验证的密码。如果主从服务器运行在不同的机器上,每台机器上配置的cluster_key值需保持一致。如果主从服务器在同一机器运行,在cluster.ini中设置一次即可。
    *每个cluster.ini中的设置必须一致。(见章节末尾说明)

[STEAM]
steam_group_only
  • 默认值: false
  • 如果设置为true,服务器将仅允许steam_group_id配置项中所指定steam群组的成员加入。

steam_group_id
  • 默认值: 0
  • 用于给steam_group_only / steam_group_admins指定steam群组id。
    steam群组id获取方法,见本指南“常见问题”部分。

steam_group_admins
  • 默认值: false
  • 如果设置为true,指定steam群组的管理员将自动成为饥荒服务器的管理员。

[NETWORK]
offline_cluster
  • 默认值: false
  • 创建一个离线服务器。此服务器不会在公共服务器列表展示,只有本地用户可以加入,所有steam相关的功能无效。
    *每个cluster.ini中的设置必须一致。(见章节末尾说明)

tick_rate
  • 默认值: 15
  • 这个值表示服务器每秒向客户端刷新状态的次数。加大这个值会使客户端响应更加精确,但同时也会增加网络通讯压力。推荐将此值保持默认值15。如果确实要更改此设定,推荐在局域网环境下进行,取能整除60的值(15,20,30)。

whitelist_slots
  • 默认值: 0
  • 为白名单中的玩家预留的空位数量。要将玩家加入白名单,在whitelist.txt文件(此文件应与cluster.ini放置同一目录)中添加相对应的Klei用户id即可。
    **仅主服务器有效(见章节末尾说明)

cluster_password
  • 默认值: none
  • 玩家进入服务器时所输入的密码。如果不需要密码,将此项留空或忽略设置即可。
    **仅主服务器有效(见章节末尾说明)

cluster_name
  • 服务器名称,在公共房间列表中将显示此名称。
    **仅主服务器有效(见章节末尾说明)

cluster_description
  • 默认值: empty
  • 服务器描述。在公共房间列表中,服务器详细信息一栏将显示设定的内容。
    **仅主服务器有效(见章节末尾说明)

lan_only_cluster
  • 默认值: false
  • 如果设置为true,服务器仅允许同一个局域网的玩家进入。
    **仅主服务器有效(见章节末尾说明)

cluster_intention
  • 默认值: 取决于游戏模式选择
  • 服务器集群的游戏风格。此配置项的功能和游戏中Host Game中选择游戏风格的功能一致。可选值有:cooperative, competitive, social, madness
    **仅主服务器有效(见章节末尾说明)

autosaver_enabled
  • 默认值: true
  • 如果此项设为false,游戏将不会在每天结束时自动存档。相对的,游戏会在关闭服务器时存档。通过c_save()命令手动存档依然可用。

[GAMEPLAY]
max_players
  • 默认值: 16
  • 可用同时连接服务器的玩家数量。
    **仅主服务器有效(见章节末尾说明)

pvp
  • 默认值: false
  • 设置为true时,打开pvp功能

game_mode
  • 默认值: survival
  • 游戏模式。此配置项的功能与Host Game中游戏模式的选项一致(生存、无尽,狂野)。可选值有:survival, endless, wilderness
    *每个cluster.ini中的设置必须一致。(见章节末尾说明)

pause_when_empty
  • 默认值: false
  • 设置为true时,当服务器中无玩家,暂停服务器时间流逝。

vote_enabled
  • 默认值: true
  • 设置为true时,打开玩家投票功能。

补充说明:

如果使用多物理机运行服务器,每个物理机上将有一个cluster.ini文件,且所有cluster.ini文件内容相同。 ** 上文中标记“仅主服务器有效”,表示仅有主服务器中的cluster.ini有效,其他分片服务器中cluster.ini中配置会被忽略。 * 上文中标记“每个cluster.ini中的设置必须一致”,表示所有机器中cluster.ini值必须一致。可忽略配置从而使用默认值。
server.ini配置项详解
[SHARD]
is_master
  • 默认值: none
  • 如果shard_enabled = true时,必须配置
  • 将一个分片服务器设为主服务器。每个服务器集群必须只有一个主分片服务器。在主服务器的server.ini中设置此项为true,其他分片中设为false

name
  • 默认值: none
  • 如果shard_enabled = true, is_master = false时,必须配置
  • 日志中显示的分片服务器名字。主分片服务器会使用[SHDMASTER]作为名字,覆盖此项的设置。

id
  • 默认值: 随机生成的数字
  • 此字段是分片服务器自动生成,用于保持分片服务器的唯一性。当玩家进驻服务器之后,修改或移除这个值,可能会产生程序错误。

[STEAM]
authentication_port
  • 默认值: 8766
  • steam使用的内部端口。同一机器上每个分片服务器,此端口设定不能为同一个。

master_server_port
  • 默认值: 27016
  • steam使用的内部端口。同一机器上每个分片服务器,此端口设定不能为同一个。

[NETWORK]
server_port
  • 默认值: 10999
  • 此服务器用于监听连接的UDP端口。一个多层世界集群,同一机器上各分片的端口设置需不同。如果想让服务器在公共服务器列表页显示,此端口取值范围应是10998~11018。此项实际可取值范围是1-65535,小于1024的端口在一些操作系统上会涉及用户权限问题,不推荐使用。
常见问题处理
  1. 问:如何设置黑名单?

    答:
    • 在cluster.ini同级目录下,添加文件blocklist.txt。blocklist.txt文件支持Klei id和steam64 id。
    • 在服务器的Master目录下,查看server_log.txt文件,找到用户的登录记录,如下

    • 将这个KU开头的Klei UserId拷贝至刚建立的blocklist.txt中,每行一个,保存退出。重启服务器即可。
    • 如果因某种原因,无法查看服务器日志,也可以通过steam64 id来管理列表。关于steam64 id获取,请阅读下文的问答。
    另外,在游戏的UI中,管理员也可以通过图形界面将某人ban掉,以加入这个blocklist.txt列表中。

  2. 问:如何添加管理员?

    答:在cluster.ini同级目录下,添加文件adminlist.txt。adminlist.txt文件支持Klei id和steam64 id。
    将KU开头的Klei UserID逐行加入此文件,保存。重启服务器即可。

  3. 问:如何设置白名单,并预留位置给特定玩家?

    答:在cluster.ini同级目录下,添加文件whitelist.txt。whitelist.txt文件支持Klei id和steam64 id。
    将KU开头的Klei UserID逐行加入此文件,保存。
    在cluster.ini的[NetWork]下,增加whitelist_slots = X,X为需预留的栏位。假设服务器人数上限是6,预留栏位是2,当服务器人数达到4人时,非白名单的玩家将无法加入服务器。

  4. 问:如何获取用于黑名单、白名单,管理员列表的steam64 id?

    答:这里提供两种方法。
    • 方法1:对于未设置自定义URL的steam用户,一般个人资料页的URL最后一段即为steam64 id。比如我的个人资料页URL是https://steamcommunity.com/profiles/76561198107878383/ 我的steam64 id为76561198107878383。
    • 方法2:如果用户设置了自定义URL,无法直接看到id,通过一些第三方网站,可以比较方便的获取steam64 id。将个人资料页的URL填入网站搜索栏,即可获取账户id的详细信息。列举几个可用的网站:
      https://steamid.xyz/
      http://steamrep.com/

  5. 问:如何获取steam_group_id?

    答:通过群组设定,可以更方便的管理游戏成员。
    • 方法1:如果是群组管理员,在群组首页点击右侧的“编辑组资料”。进入管理员页面后,第一行的ID值即为steam_group_id
    • 方法2:对于普通成员,在群组首页点击“邀请好友”,在URL栏取得invitegid的值,如103582791451482449。将这个值减去103582791429521408,即103582791451482449-103582791429521408=21961041,为当前steam群组的id。

  6. 问:服务器性能该如何估算和调整?

    答:饥荒服务器对内存需求较高,对CPU的需求一般。wiki[dontstarve.wikia.com]的参考数据是:网络速度(上传) = 8KB/玩家/秒,内存 = 约 65MBs/玩家。考虑到操作系统运行也会占用一部分内存,对于6人的服务器,单shard(地上或洞穴),应使用至少1G内存,推荐2G以上内存的机器。
    如果物理机配置较差,建议单机器只部署一个shard。
    此外,就是mod的数量控制。在物理机配置有限的情况下,关闭一些消耗系统资源的mod,可以改善服务器工作状况。

  7. 问:地上和洞穴shard不在同一机器上,设置该如何调整?

    答:配置文件需求请参考第二部分中的示意图。
    • 在cluster.ini中,将bing_ip的值修改为0.0.0.0。
    • 将master_ip的值设为地面shard所在物理机的IP地址。如果Master和Caves在同一网络中,master_ip的值也可以为内网地址。
    • 将修改后的cluster.ini拷贝至Caves所在的物理机中。
    • 将cluster_token.txt拷贝至Caves所在的物理机。
    • 在两台机器上分别启动shard即可。


服务器启动命令行参数详解
命令行指的是Don't Starve Together Dedicated Server/bin 中的dontstarve_dedicated_server_nullrenderer

正常情况下,使用命令行启动shard不需要很多参数。但是某些命令行参数可以覆盖配置文件中的设置,可以作为一个备选方案使用。

下面是各参数的作用说明。

-persistent_storage_root
  • 更改配置项的默认存储位置。参数值必须是一个绝对路径。配置文件存储的完整路径为<persistent_storage_root>/<conf_dir>/ ,其中<conf_dir>的值是由参数-conf_dir提供的。在不同的平台上,默认存储位置分别为:
  • Windows: <Your documents folder>/Klei Mac OSX: <Your home folder>/Documents/Klei Linux: ~/.klei

-conf_dir
  • 更改配置目录的指向。参数值不能包含“/”或“\”。配置文件存储的完整路径为<persistent_storage_root>/<conf_dir>,其中<persistent_storage_root>值由参数-persistent_storage_root提供。
  • -conf_dir的默认值为“DoNotStarveTogether”

-cluster
  • 设置游戏服务器cluster所使用的目录。服务器将在以下路径中去寻找cluster.ini文件:<persistent_storage_root>/<conf_dir>/<cluster>/cluster.ini
  • -cluster参数的默认值是:“Cluster_1”

-shard
  • 设置shard服务器所使用的目录。服务器将在以下路径中去寻找server.ini文件:
    Set the name of the shard directory that this server will use. The server will expect to find the server.ini file in the following location:<persistent_storage_root>/<conf_dir>/<cluster>/<shard>/server.ini
  • -shard参数的默认值是: "Master".

-offline
  • 以离线模式启动服务器。服务器启动后,不会在公共服务器列表显示,只有本地局域网玩家可以加入游戏,所有steam相关的功能也不能工作。

-disabledatacollection
  • 关闭数据收集功能。
  • Klei官方会持续收集用户数据来提供在线服务。如果使用此参数,用户数据将不再发送,但服务器将处于离线模式。

-bind_ip <bind_ip>
  • 修改服务器所绑定的,用于监听用户连接请求的IP地址。此特性大多数用户可能不会用到。(对于多物理机的服务器,有机会使用)

-port <port_number>
  • 可用值范围:1~65535
  • 服务器用于监听连接请求的UDP端口。这个参数的值将覆盖server.ini中[NETWORK]分支下的server_port值。如果运行一个多层世界,每层世界的服务器端口设置不能相同。只有在10998~11018范围内的端口设定,才能使游戏服务器在公共服务器列表显示。小于1024的端口在一些操作系统上,会遇到一些权限问题。

-players <max_players>
  • 取值范围:1~64
  • 设置允许加入服务器的最大玩家数。这个参数值将覆盖cluster.ini文件中[GAMEPLAY] / max_players的设定。

-steam_master_server_port <port_number>
  • 取值范围:1~65535
  • steam使用的内部端口。这个参数值将覆盖server.ini文件中 [STEAM] / master_server_port的设定。请确保同一个机器上的服务器使用不同的端口值。

-steam_authentication_port <port_number>
  • 取值范围:1~65535
  • steam使用的内部端口。这个参数将覆盖server.ini文件中 [STEAM] / authentication_port的设定。请确保同一个机器上的服务器使用不同的端口值。

-backup_logs
  • 在每次服务器启动时,创建一个之前log文件的备份。这些备份文件将存储于server.ini同目录下的backup文件夹中。

-tick <tick_rate>
  • 取值范围:15~60
  • 这个数值表示服务器每秒钟与客户端的交互次数。增加此参数值,将增加网络带宽消耗。这个参数的使用,将覆盖cluster.ini中[NETWORK] / tick_rate setting的设定。推荐将此值保持默认值15。如果确实要更改此设定,推荐在局域网环境下进行,取能整除60的值(15,20,30)。

参数使用范例:
运行一个双层世界,使用的命令行形式如下: dontstarve_dedicated_server_nullrenderer -console -cluster MyClusterName -shard Master dontstarve_dedicated_server_nullrenderer -console -cluster MyClusterName -shard Caves

上面两行命令,将使用以下位置的配置文件来运行游戏服务器:

<Klei默认路径>/MyClusterName/cluster.ini
<Klei默认路径>/MyClusterName/Master/server.ini
<Klei默认路径>/MyClusterName/Caves/server.ini
11 条留言
朋也 2023 年 10 月 24 日 上午 1:57 
常见问题第7问回答里的bind_ip写成bing_ip了,作者有空改一下
Max  [作者] 2021 年 9 月 12 日 下午 8:26 
@点滴
以我有限的了解,我觉得Klei id和steam64位id是两个系统,不能直接转换,但是可以间接转换。
Klei id一般是通过日志文件获取,如:某人登录到服务器,日志会记录这个人的Klei id。
steam64位id对应的是steam账号,不是Klei账号。

如果知道日志里的Klei id对应的是哪个人,通过steam个人资料,可以查询到相应的steam64位id。

我目前没有更好的方案。

因为steam id在平台上是一个人的确定标识符,Klei id在重新绑定过程中可能变化。建议管理使用steam64位id为主。
✿半安✿ 2021 年 9 月 7 日 上午 10:06 
请问大佬,如何实现Klei id和steam64 id的自由转换?
Max  [作者] 2020 年 9 月 28 日 上午 11:38 
@verymerry
不用客气。
共同学习。
verymerry 2020 年 9 月 28 日 上午 5:27 
@Max
……高手,您真是专业!我在AWS多申请了一个4G卷当swap分区用,解决。早点留言问你就好了= =免费的AWS内存就800M
多谢!
Max  [作者] 2020 年 9 月 27 日 下午 9:29 
@verymerry
卡在Load BE,有可能是内存被占用过多。
Linux下,可以关注启动过程swap分区的占用情况。如果确认问题,调整swap分区的大小来解决。
verymerry 2020 年 9 月 27 日 上午 9:37 
非常有用的信息!
我这边使用亚马逊云开私服,把Master与Caves的server.ini全部用了不同的端口,但依旧无法开两个服务器。
> 单独开Master 没问题,可以进入游戏,开Caves服务器就会卡死在
Load BE
,必须强行结束进程;
> 单独开Caves看上去也没问题,只是会停留在“等待连接Master"那里,没有卡住,这时候开Master也会卡死……
Mod没有加载

按说如果是云服务器技能不够,应该是开了服务器,进入游戏很卡,但这里开服就卡,怀疑是哪里起了冲突……
周五 2019 年 8 月 30 日 上午 6:46 
好的,感谢,我去试一下是不是少配置了一个endless
Max  [作者] 2019 年 8 月 30 日 上午 3:09 
@不诉离殇 没有日志文件,我无法确定具体原因。建议尝试以下操作:
1.如果是Dedicated Server,在游戏中查看服务器状态,确认是否真正设置成了无尽模式。
2.如果有地洞,检查地面和地洞的两个cluster.ini文件,确认game_mode配置的值一致,且正确设置为endless。
3.检查文件编码,用notepad++,editplus,vim等文本编辑工具,保存成UTF-8模式。别用windows记事本编辑,记事本会默认保存成UTF-8 + BOM格式,造成解析错误。

以上是我能想到的原因,希望能所有帮助。
周五 2019 年 8 月 30 日 上午 2:44 
请问一下,我设置了无尽模式,当世界只有一个玩家,并且这个玩家死亡时还是会重置世界,这是为什么?