饥荒联机版Don‘t Starve本地服务器搭建+原理+mod等疑杂问题解决

目录

引言

一、饥荒服务器搭建原理

1.运作原理

2.搭建的大致过程

二、开始搭建饥荒服务器(Don't Starve Server)

1.新建游戏存档

2.获取密钥

3.创建本地服务器存档

4.添加密钥

5.添加mod

6.修改服务器启动脚本(第一次加载世界)

7.添加洞穴mod(主世界之外的mod需手动添加)

8.第二次加载世界

9.启动服务器,进入游戏

三、服务器的管理操作以及注意事项

1.服务器的开启和关闭

2.服务器的配置文档及作用说明

3.默认op及添加管理员

4.世界多开

5.脚本路径更改&mod更新简化

6.多世界独立ugc_mods文件夹(这只会看起来更好看,或许有点用?)

四、mod添加、修改、更新、删除

1.mod管理文件及配置文件的作用、使用方法及注意事项,mod文件保存和调用说明:

2.mod添加

3.mod修改

4.mod删除

5.mod更新

五、各种疑难杂症解决方法

1.服务器类问题

2.mod类问题

3.权限类问题

六、总结


引言

        放假了,朋友说要玩饥荒。想着自己搭建一个服务器不会卡。就在网上找了很多攻略,但是没有很完整的那种,总是在东拼西凑。

        所以,将我这段时间学习到的从服务器的搭建原理、搭建过程、以及运行原理和各种疑难杂症解决方案,等方面经验写成文章,供大家参考。(编程软件为Notepad++,系统为Window10)

注:以下教程,凡是加“”的,小白可略过,只针对有一定编程和网络基础的人讲解。)


辅助工具

  • Notepad++(可用vscode替代)

百度网片分享:npp.7.5.8.bin.x64.zip
链接: https://pan.baidu.com/s/1epE9nDMM-_6WSWZ6hS4EuQ 提取码: ctwp


视频教学

懒~暂时没做~~


一、饥荒服务器搭建原理

1.运作原理

        饥荒联机版服务器运作,是依靠Klei的令牌服务器(Authorization Server)颁发的服务器令牌进行验证登录。

  • 首先是玩家,也就是饥荒联机版客户端(Client),在进入饥荒服务器(Resource Server)时,优先发送访问请求给Klei令牌服务器(Authorization Server)
  • 接着令牌服务器(Authorization Server)给玩家(Client)下发访问令牌,玩家就可以通过访问令牌访问受保护的饥荒服务器(Resource Server),也就是进入饥荒服务器的过程。
  • 期间饥荒服务器(Resource Server)也会和Klei令牌服务器(Authorization Server)交互,验证访问令牌。
  • 最后验证通过,饥荒服务器(Resource Server)就会给玩家回应,让玩家(Client)进入游戏。

大致原理图如下:

        另外,其他资源访问也会进行本序列操作,不过会相应简化验证过程,这个就是服务器在网络方面的运作原理,网上教程基本都是基于此原理做的饥荒服务器搭建教程。


2.搭建的大致过程

        了解了服务器的运作机制,下面直接切入主题,如何搭建本地饥荒服务器(Don't Starve Server)。由上面运作原理可知,搭建本地服务器只需要搭建一个饥荒资源服务器(Resource Server)就可以。

        因为令牌服务器只是用于验证玩家的合法性(支持正版啊喂!),所以只要时正常的联机版都可以免费获取官方给的令牌服务。

        本地饥荒服务器(Don't Starve Server)搭建大致过程如下:

  1. 新建游戏存档(如果有心仪的存档可省略这步)
  2. 获取密钥
  3. 创建本地服务器存档
  4. 添加密钥
  5. 添加mod
  6. 修改服务器启动脚本加载世界
  7. 添加洞穴mod(有洞穴的存档,此步骤不可省略!
  8. 再次加载世界
  9. 启动服务器,进入游戏

一共9个步骤。另外本篇文章全都是在本地操作,如果想搭建云服务器的也可以先看看本篇文章,因为操作原理基本相同。有基础且想搭建云服务器的话,可以观看另一篇文章。

再次强调!本文章搭建服务器为本地服务器,主机既是玩家(Client)又是资源服务器(Resource Server)。


二、开始搭建饥荒服务器(Don't Starve Server)

1.新建游戏存档

本篇共一步:

新的游戏新的开始,那么就开始新的存档把!当然!如果有心仪的存档,也可以不重新开始,这一步也理所应当的舍弃。


详细操作如下:

创建一个新的世界,在这里可以设置你的所有配置,但是无论如何都需要生成世界不是么?

为了讲解方便,这里添加了一个服务器mod和诺干个本地mod。

这里选人进入游戏,然后直接退出就行。服务器搭建需要这个生成的世界存档且不会保留玩家信息,所以不影响后续选人游玩!!!


2.获取密钥

本篇共三步:

  1. 在饥荒主页点击账号进入网页,然后点击网页中的游戏选项,之后点击饥荒服务器,自定义服务器名称,然后点击创建服务器。
  2. 点击配置刚刚创建的服务器,然后点击下载服务器配置,自定义文件存储位置和名称后,点击保存即可。
  3. 之后找到保存到本地的服务器压缩包,解压过后,在MyDediServer文件夹中找到cluster_token.txt即为本次服务器配置所需要的令牌服务器文本。

详细操作如下:

首先在主页中点击账号:

点击网页中的游戏:

点击《饥荒:联机版》的游戏服务器:

输入一个名称,然后点击创建服务器:

最后一步就是将这个服务器令牌给下载下来:

找到刚下载的服务器配置文件,然后点击解压,红框标注的为本次配置所需要的令牌文件。


3.创建本地服务器存档

本篇共一步:

  1. 将想要当作服务器存档的本地存档向上移动一个文档路径,然后修改服务器存档的文件夹名称。

详细过程及解释说明:

打开我的电脑,依次点开文件夹——文档--KIei--DoNotStarveTogether--ID文件夹(本地世界存档文件夹)。然后找到我们想要的存档文件,一般存档文件都是按照创建世界的先后顺序排列的。

本地存档文件格式为:

Cluster_[number]。number:代表创建的世界个数。


将想要当作服务器存档的世界向上移一个文档路径,然后修改服务器存档文件的文件夹名称为“Cluster_1”。

注:启动饥荒服务器(Don't Starve Together Dedicate Server)时,索取的存档路径为本路径。启动时若本路径下没有存档文件,将会创建一个新的空存档文件,文件名称为“Cluster_1”)


详细操作如下:

首先打开KIei文件夹:

接着进入DoNotStarveTogether文件夹下的ID文件夹:

将想要的存档(Cluster_[number])复制到上一层目录,并修改存档的文件名为"Cluster_1":

Cluster_1

复制好后的服务器存档文件如下:

本存档用作映射,后续mod的增删改和更新都有可能用到,建议本地存档不要删除。


4.添加密钥

本篇共一步:

  1. 将之前下载好的服务器令牌文件(密钥)复制到服务器存档文件夹中。

详细操作如下:


5.添加mod

本篇共一步:

  1. 在mods文件夹中的dedicated_server_mods_setup.lua文件内添加modID。

详细过程及解释说明:

  • 打开之前创建好的服务器存档文件夹(Cluster_1),再打开Master或者Caves,找到modoverrides.lua文件并打开备用。

  • 打开steam库找到饥荒服务器(Don't Starve Together Dedicate Server),右键点击管理游览本地文件夹。(如果steam库中没有饥荒服务器:打开库中显示工具的选项)。接着打开mods文件夹找到dedicated_server_mods_setup.lua文件并打开。

  •  将modoverrides.lua文件中的modID拷贝并应用到dedicated_server_mods_setup.lua文件中。

————以下将提到饥荒服务器文件夹的时候都会写为:饥荒服务器(Don't Starve Together Dedicate Server)。以此和饥荒服务器存档文件夹(Cluster_1)(路径为:..\Documents\Klei\DoNotStarveTogether\Cluster_1)作为区分。————


详细操作如下:

首先打开饥荒服务器(Don't Starve Together Dedicate Server)目录:

接着打开mods文件夹:

然后用编程工具Notepad++打开dedicated_server_mods_setup.lua文件:

找到之前的饥荒服务器存档文件夹(Cluster_1),打开Master文件夹下的modoverrides.lua文件:

将两个文件对照操作,将dedicated_server_mods_setup.lua文件内的以下代码,

ServerModSetup("")
--下载mod
ServerModCollectionSetup("")
--下载mod集合
--行前添加“--”为注释项。

复制到文本的最下方,如图所示:


注意事项:

  • mod下载和集合下载都要添加,防止出现无法下载的情况。
  • mod下载代码ServerModSetup("")。
  • mod集合下载代码ServerModCollectionSetup("")。
  • 每添加一个mod,就需要在mod管理文件中添加上面两行下载代码,更改为相应的modID。

————详情参考第四章第一篇《mod添加》中的“自动更新”————

注:

  • 文本上方链接为mod更新链接,可用于mod的自动更新。
  • modoverrides.lua文件为mod的管理文件,游戏中mod配置文件为modoverrides.lua文件。
  • dedicated_server_mods_setup.lua文件负责下载mod,以供modoverrides.lua文件调用配置。)

6.修改服务器启动脚本(第一次加载世界)

准备工作已经接近尾声,让我们启动服务器,加载一次我们配置好的服务器文档!!!(目的是为了让其余的文件自动补全、mod更新、排查错误。)


本篇共一步:

  1. 启动饥荒服务器(Don't Starve Together Dedicate Server),加载出ugc_mods文件夹,并排查错误。

详细操作如下:

在steam库中启动饥荒服务器(Don't Starve Together Dedicated Server):

启动成功后使用“Ctrl+C”退出服务器。(或者在命令行中输入"c_shutdown()"也可以实现关闭服务器。注意不要直接点击右上角关闭按钮,否则会有存档丢失之类的问题!!!)

注:Server registered via geo DNS in ap-east-1说明成功通过geo DNS在ap区域注册,还记得之前的服务器令牌验证吗,说明已经通过服务器令牌的验证。

Sim paused表示服务器暂停,这个饥荒服务器在没有人进入的时候是暂停时间的,防止物品过期,也说明这个服务器启动成功,如今正在暂停。可以通过修改cluster.ini文件来关闭服务器无人自动暂停。)


接着修改服务器启动的脚本文件,详细步骤如下:

第一步:

        依次打开饥荒服务器(Don't Starve Together Dedicate Server)下路径。

..\Don't Starve Together Dedicated Server\bin\scripts\launch_preconfigured_servers.bat

第二步:

        launch_preconfigured_servers.bat文件最后两行文本如下:

start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -conf_dir DoNotStarveTogther_EasyConfigOverword -console
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -conf_dir DoNotStarveTogther_EasyConfigCaves -console

        修改为:

start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -Cluster_1-shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -Cluster_1-shard Caves

修改后如图:

注:将文本最后两行末尾部分,修改为指向我们创建的服务器文档的地上世界和洞穴世界。)


————launch_preconfigured_servers.bat脚本是我们以后启动服务器的脚本,可以创建一个快捷方式放到桌面,方便以后快速启动服务器。————


最后让我们启动一下服务器启动脚本:

脚本启动会分别开启两个部分,分别为地上和洞穴,需要两个都开启成功。(存档没有选择洞穴的只用看地上世界“Master”是否开启成功)

————本写法为最简化的写法,详情请参考第三章《世界多开》。————


7.添加洞穴mod(主世界之外的mod需手动添加)

上一步启动服务器成功后,关闭服务器。因为有些mod需要手动添加,所以这里需要关闭服务器,对服务器的mod存档做一些修改。

输入按键“Ctrl+C”或者命令行输入“c_shutdown()”关闭服务器。注意两个窗口都要执行此操作!!!

本篇共一步:

  1. 更新ugc_mods文件中,洞穴世界的mod文件夹(Caves)。

详细过程及解释说明:

打开ugc_mods文件夹,将Cluster_1径下的Master文件复制到此路径下,并更改文件名称为Caves


————新下载饥荒服务器(Don't Starve Together Dedicate Server)可能没有ugc_mods文件夹问题

的只有在第5步添加mod的步骤中,新添加modID并启动饥荒服务器(Don't Starve Together Dedicate Server)下载过mod后,系统才会自动加载出ugc_mods文件夹以其中的配置文件。————


注:由于新制作的mod可能不在mods内调用,而是存在于ugc_mods文件夹中,但是服务器在更新mod时有可能不会将mod添加到ugc_mods文件夹,导致部分mod不可用,或者部分mod在洞穴中不可用

详细操作如下:

打开饥荒服务器(Don't Starve Together Dedicate Server)根目录,找到我们之前创建的ugc_mods文件夹,并在Cluster_1路径下复制Master文件夹,更改名称为Caves:

修改过后如图:

————此步骤可简化,详情参考第三章《脚本路径更改&mod更新简化》。————


8.第二次加载世界

我们已经把所有需要修改文件的操作全部都完成了!!!现在只需要加载一次饥荒服务器(Don't Starve Together Dedicate Server)验证完整性就可以启动你搭建的服务器世界了!!!

本篇共一步:

  1. 启动饥荒服务器(Don't Starve Together Dedicate Server)!!!

详细操作如下:

成功!!!

9.启动服务器,进入游戏

现在关闭饥荒服务器(Don't Starve Together Dedicate Server),正式打开你的服务器启动脚本(launch_preconfigured_servers.bat )启动你的服务器吧!!!


本篇共一步:

  1. 启动服务器,载入世界!!!

详细操作如下:

启动服务器启动脚本(launch_preconfigured_servers.bat ):

在饥荒联机版中输入你创建的世界名称找到并进入你的世界:


三、服务器的管理操作以及注意事项

1.服务器的开启和关闭

之前操作步骤中都有特别提醒服务器的关闭项,这里特别说明一下,服务器不能直接点击右上角的关闭窗口按钮,否则有可能导致存档丢失等问题。

正确的关闭方式为:

  • 组合键Ctrl+C:鼠标选中窗口并按组合键即可,但是有些时候没有选中窗口,需要按住Ctrl连续按两次C键才能关闭
  • 命令c_shutdown():依旧是鼠标选中窗口,并在其中输入命令c_shutdown()然后按下回车即可。

注意事项:

  1. 想要游玩服务器存档时,需要先启动服务器脚本。如果不启动服务器,在浏览世界中就没有办法搜到你搭建的服务器。
  2. 关闭服务器的时候,需要同时关闭地上和洞穴两个窗口,不能只关闭一个。
  3. 关闭窗口时,会有关闭指令弹出,具体如下:

可以看出从最后Saving Dedicated Server data命令刷新出来时,服务器就开始了世界的保存和Shard集群的关闭和服务器的关闭。


2.服务器的配置文档及作用说明

服务器的配置文档为cluster.ini,也就是服务器世界存档(Cluster_1)内,其文件路径为:

...\Documents\Klei\DoNotStarveTogether\Cluster_1\cluster.ini

与总配置文档关联的两个世界(地上、洞穴)文档server.ini,其路径为:

Cluster_1/
├── Master/  -- 地面世界
│   ├── server.ini
│   └── modoverrides.lua
├── Caves/  -- 洞穴世界
│   ├── server.ini
│   └── modoverrides.lua

分片世界的服务器配置文档(server.ini)基本维持默认即可,只有多开世界的情况需要修改端口号,所以不做详细解释。

服务器配置文件如图:

具体作用如下:

[GAMEPLAY]
game_mode = survival  ; 游戏模式,survival 表示生存模式
max_players = 6       ; 最大玩家数量,设置为 6
pvp = false           ; 是否开启玩家对战(PvP),false 表示关闭
pause_when_empty = true  ; 当服务器没有玩家时是否暂停游戏,true 表示暂停

[NETWORK]
lan_only_cluster = false  ; 是否仅限局域网连接,false 表示允许外网连接
cluster_password = 147258369  ; 集群密码,连接服务器时需要输入
cluster_description = 这是第二个世界了!!!  ; 集群描述信息
cluster_name = yexingxing的本地服务器  ; 集群名称,显示在服务器列表中
offline_cluster = false  ; 是否为离线集群,false 表示需要在线验证
cluster_language = zh  ; 集群语言,zh 表示中文
cluster_cloud_id = D96C7EC30D00E000  ; 集群的云 ID,用于云端服务器标识

[MISC]
console_enabled = true  ; 是否启用控制台,true 表示启用

[SHARD]
shard_enabled = true  ; 是否启用分片(Shard),true 表示启用
bind_ip = 127.0.0.1  ; 绑定 IP 地址,127.0.0.1 表示本地
master_ip = 127.0.0.1  ; 主服务器 IP 地址,127.0.0.1 表示本地
master_port = 10888  ; 主服务器端口号,设置为 10888
cluster_key = defaultPass  ; 集群密钥,用于分片之间的通信验证

server.ini的作用:

  • 定义分片配置server.ini 文件用于配置单个分片的网络、身份验证、日志等设置。

  • 分片类型:通过 server.ini 可以指定分片的类型(例如主分片或从分片)。

  • 端口绑定:定义分片绑定的 IP 地址和端口号。


cluster.ini文件下基本可以更改所有的世界设置,因为服务器世界不能像本地世界一样,到饥荒联机版中选择创建世界的页面更改存档的世界设置,所以只能从这里更改世界设置。

当然,如果没有特殊的配置,也可以从本地已创建的世界中拷贝cluster.ini的配置,将其覆盖到服务器文档中。

————以下为部分为说明设置的值,布尔值仅为true(开启)flase(关闭)。————

cluster.ini文件的设置分为四大类:

  1. 世界设置
  2. 网络设置
  3. 控制设置
  4. 集群设置

————

(1.世界设置

游戏模式(game_mode):

survival:生存模式,玩家需要在饥饿、生病和怪物的威胁下生存。
endless:无尽模式,没有任何限制和目标,玩家可以尽情探索和建造。
wilderness:荒野模式,没有玩家人数限制,每个玩家都在自己的孤岛上生存。
caves:洞穴模式,玩家需要在地下洞穴中生存,并面对洞穴特有的挑战。

————


————

(2.网络设置

局域网连接(lan_only_cluster):

        1.什么是 lan_only_cluster

  • 作用lan_only_cluster 用于控制服务器是否仅允许局域网内的设备连接。

  • 取值

    • true:服务器仅允许局域网内的设备连接。

    • false:服务器允许局域网和互联网上的设备连接。


        2. 使用场景

  • 局域网游戏

    • 如果你只想与同一局域网内的朋友一起玩游戏,可以将 lan_only_cluster 设置为 true

    • 这样,服务器不会暴露在互联网上,只有局域网内的设备可以连接。

lan_only_cluster = true
  • 互联网游戏

    • 如果你想与互联网上的朋友一起玩游戏,可以将 lan_only_cluster 设置为 false

    • 这样,服务器可以通过互联网访问,任何知道服务器 IP 地址和端口的玩家都可以连接。


服务器密码、描述信息、名称:

  • cluster_password
  • cluster_description
  • cluster_name


(3.控制设置

        启用控制台(console_enabled):仅管理员可操作。

(4.集群设置

[SHARD]
shard_enabled = true  ; 是否启用分片(Shard),true 表示启用
bind_ip = 127.0.0.1  ; 绑定 IP 地址,127.0.0.1 表示本地
master_ip = 127.0.0.1  ; 主服务器 IP 地址,127.0.0.1 表示本地
master_port = 10888  ; 主服务器端口号,设置为 10888
cluster_key = defaultPass  ; 集群密钥,用于分片之间的通信验证

————本文案都是本地操作,所以服务器的ip地址(master_ip)和绑定ip(bind_ip)都为指向本机的ip(127.0.0.1)。————


————

集群分片(shard_enabled = true)通常用于分布式服务器或集群环境中,它用于控制是否启用 分片(Shard) 功能。


        1. 什么是分片(Shard)?

  • 分片是一种将服务器分割成多个独立部分的技术,每个部分可以运行不同的任务或处理不同的数据。

  • 分片通常用于将游戏世界划分为多个独立的部分(例如地面世界和洞穴世界),每个部分由一个独立的服务器进程(Shard)处理。

  • 分片之间可以通过网络通信,共享数据和状态。


        2. shard_enabled 的作用

  • 启用分片:当 shard_enabled 设置为 true 时,表示当前服务器将作为分片运行,并与其他分片协同工作。

  • 禁用分片:当 shard_enabled 设置为 false 时,表示当前服务器是一个独立的服务器,不参与分片集群。

         3.注意事项

         主分片和从分片

  • 主分片(Master Shard)通常负责地面世界。

  • 从分片(Caves Shard)通常负责洞穴世界。

  • 主分片和从分片需要通过 master_ip 和 master_port 进行通信。

        集群密钥

  • 所有分片必须使用相同的 cluster_key,否则无法加入同一个集群。

        网络配置:        

  • 确保 bind_ip 和 master_ip 配置正确,否则分片之间无法通信。

如果关闭集群分片(shard_enabled = false),就会出现以下情况:

两个世界同时连接DNS成功,并且搜索游戏就会发现:

唉?怎么出现了两个世界?这其实就是不分片,导致的地上世界和洞穴世界独立运行了,进去就会发现,一个是只有地上世界,一个是只有洞穴世界。

————


————

主世界端口号(master_port),它用于指定 主服务器(Master Shard) 的端口号,以便其他分片(Shard)能够连接到主服务器。


        1. 什么是 master_port

  • 作用master_port 定义了主服务器监听的端口号,其他分片(如洞穴世界)通过该端口与主服务器通信。

  • 默认值:主服务器的默认端口通常是 10888

  • 取值范围:端口号可以是 1024 到 65535 之间的任意未被占用的端口。


        2. 使用场景

  • 主分片(Master Shard)

    • 主分片通常是地面世界,负责管理整个集群的核心逻辑。

    • 主分片的 master_port 是其他分片连接的入口。

  • 从分片(Caves Shard)

    • 从分片(如洞穴世界)需要知道主分片的 IP 地址和端口号(master_port),以便连接到主分片。

        3. 注意事项

  • 端口一致性

    • 所有从分片的 master_port 必须与主分片的 master_port 一致,否则无法连接到主分片。

  • 端口冲突

    • 确保 master_port 没有被其他程序占用,否则服务器无法启动。

  • 多分片配置

    • 如果有多个从分片(如洞穴世界和额外世界),每个分片的 bind_ip 和 bind_port 必须不同(本地服务器都为127.0.0.1),但 master_ip 和 master_port 必须与主分片一致。

具体情况如下:

端口的使用使相对的,服务端使用10888,与之相对的是游戏端的10998,但是由于使用了分片,所以服务端可以对应游戏端的两个端口,分别为10998、10999:

————


————

集群密钥(cluster_key),一般为默认值(defaultPass),但是这样并不安全,需要更改,这样需要同时将世界中的集群密钥更改为相同的值。


        1.什么是集群密钥

  • 集群密钥是一个字符串,用于验证服务器之间的通信。

  • 在分布式服务器环境中,多个服务器(分片)需要协同工作,集群密钥用于确保只有合法的服务器可以加入集群。

  • 如果集群密钥不匹配,服务器将无法加入集群,也无法与其他服务器通信。


   2.cluster_key 的作用

  • 身份验证:集群密钥用于验证服务器的身份,确保只有知道密钥的服务器可以加入集群。

  • 安全性:通过设置集群密钥,可以防止未经授权的服务器加入集群,提高服务器的安全性。

  • 通信加密:在某些实现中,集群密钥还可能用于加密服务器之间的通信。

        3. 注意事项

  • 密钥一致性

    • 所有分片的 server.ini 文件中的 cluster_key 必须与 cluster.ini 中的密钥完全一致。

    • 如果密钥不匹配,分片将无法加入集群,导致服务器无法正常运行。

  • 分片类型

    • 地面世界通常是主分片(Master Shard),洞穴世界是从分片(Caves Shard)。

    • 主分片和从分片的 server.ini 配置可能略有不同,但 cluster_key 必须一致。

  • 端口配置

    • 地面世界和洞穴世界的 server_port 通常不同,以避免端口冲突。

    • 例如,地面世界使用 10888,洞穴世界使用 10889

————未更改前,使用默认密钥,每个世界内的server.in文档中是没有cluster_key配置的,也就是默认数值。————


更改cluster_key,server.ini也要保持相同的值:

————


————

(5.server.ini文件内容说明

server.ini 文件的内容通常包括以下配置项:

[NETWORK] 部分
  • server_port

    • 作用:指定分片绑定的端口号。

    • 示例:server_port = 11000

  • bind_ip

    • 作用:指定分片绑定的 IP 地址。

    • 示例:bind_ip = 127.0.0.1(绑定到本地回环地址)。

  • master_ip

    • 作用:指定主分片的 IP 地址(仅适用于从分片)。

    • 示例:master_ip = 127.0.0.1

  • master_port

    • 作用:指定主分片的端口号(仅适用于从分片)。

    • 示例:master_port = 10999

  • cluster_key

    • 作用:指定集群密钥,用于分片之间的通信验证。

    • 示例:cluster_key = MyClusterKey

[SHARD] 部分
  • shard_enabled

    • 作用:指定是否启用分片功能。

    • 示例:shard_enabled = true

  • is_master

    • 作用:指定当前分片是否为主分片。

    • 示例:is_master = true(主分片)或 is_master = false(从分片)。

  • name

    • 作用:指定分片的名称。

    • 示例:name = Master(主分片)或 name = Caves(从分片)。

[STEAM] 部分
  • authentication_port

    • 作用:指定身份验证端口。

    • 示例:authentication_port = 8766

  • master_server_port

    • 作用:指定主服务器端口。

    • 示例:master_server_port = 27016

[ACCOUNT] 部分
  • encode_user_path

    • 作用:指定是否对用户路径进行编码。

    • 示例:encode_user_path = true

配置示例

主分片(地面世界):

[NETWORK]
server_port = 10999
bind_ip = 127.0.0.1
cluster_key = MyClusterKey

[SHARD]
shard_enabled = true
is_master = true
name = Master

[STEAM]
authentication_port = 8766
master_server_port = 27016

[ACCOUNT]
encode_user_path = true

从分片(洞穴世界):

[NETWORK]
server_port = 11000
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
master_port = 10999
cluster_key = MyClusterKey

[SHARD]
shard_enabled = true
is_master = false
name = Caves

[STEAM]
authentication_port = 8767
master_server_port = 27017

[ACCOUNT]
encode_user_path = true
注意事项
  • 端口冲突

    • 确保每个分片的 server_port 和 master_port 不冲突。

  • 集群密钥

    • 所有分片的 cluster_key 必须一致,否则无法加入同一个集群。

  • 主从分片配置

    • 主分片的 is_master 必须设置为 true,从分片的 is_master 必须设置为 false

  • IP 地址

    • 如果服务器运行在远程主机上,确保 bind_ip 和 master_ip 配置正确。

总结
  • server.ini 用于配置单个分片的网络、身份验证、日志等设置。

  • 每个分片都有自己的 server.ini 文件。

  • 通过 server.ini 可以定义分片的类型(主分片或从分片)和端口绑定。

————


3.默认op及添加管理员

管理员项:

[MISC]
console_enabled = true

建议关闭,也就是值为false(这对管理员并没有影响,因为管理员为最高权限。)


  1. 默认op:创建世界使用的玩家密钥为指定的op,且为无法更改项,但是密钥项可供更改。
  2. 添加管理员(共三步):
    1. 在服务器世界存档(Cluster_1)内添加空白文本文档(adminlist.txt)。
    2. 然后进入游戏,在控制台输入(c_listallplayers())。
    3. 再然后退到桌面查看服务器启动脚本窗口,那里会显示玩家ID(一定是玩家ID而不是游戏ID)。
    4. 将想要添加管理员的玩家ID以单独一行的格式写入刚创建好的(adminlist.txt)文本中文档中。

        具体操作如下:

        添加空白文档(adminlist.txt):

进入游戏在控制台输入查看命令(一定要指定的玩家在服务器中才可以):

注:由于创建的本地饥荒服务器相当于独立的服务器,在tab中可看到服务器属于独立出来的一个个体,我们在游戏中属于默认op玩家,也就是服务器底下的成员,所以控制台操作要选择远程。)

退到桌面,查看服务器启动脚本窗口,找到指定游戏ID的玩家ID,然后以单独一行的格式输入到adminlist.txt文本文档中:

  • 输入命令的时候是地上世界,所以要在地上世界的窗口中(Overworld)中查看玩家ID
  • 游戏ID为游戏中按tab键看到的游戏ID,于此对应的是查询到的玩家ID。

        玩家ID格式为:(KU_xxxxx)

接着我们重新启动服务器,看玩家是否为管理员:


4.世界多开

世界的多开涉及以下内容:

  1. 脚本的设置内容。
  2. 各个世界端和服务器端使用的端口占用。
  3. 密钥(cluster_token.txt)文件的占用。

本章第二篇《服务器的配置文档及作用说明》,我们可以得到一个有趣的现象。只要开启分片,端口不冲突,那么启动脚本可以随意指定地上世界和洞穴的结合,或者世界的多开。

结合本篇对脚本参数应用的补充,完全可以玩转本地服务器的存档。

同理!!!其他的进阶应用请自行探索。


对脚本参数应用的补充如下:

 参数使用:

  • 使用 -conf_dir 指定配置文件目录。
  • 使用-console开启控制台。
  • 使用-config指定服务器配置文件(cluster.ini)路径。
  • 使用-cluster指定启动世界文件夹名称(默认Cluster_1)。
  • 使用 -shard 指定启动的世界(如 Master 或 Caves(必加项)

假设你有以下文件结构:

C:\Documents\Klei\DoNotStarveTogether\Cluster_1
├── cluster.ini
├── cluster_token.txt
├── Master/
│   ├── server.ini
│   └── modoverrides.lua
└── Caves/
    ├── server.ini
    └── modoverrides.lua


  • 使用 -conf_dir 指定配置文件目录。(默认项,不需要添加,如果添加,必须添加目录项。不然会导致服务器启动失败)。

使用方法:

  • -conf_dir

    • 指定配置文件所在的文件夹名称(相对于 Documents/Klei/DoNotStarveTogether/)。

    • 例如:-conf_dir DoNotStarveTogether

-conf_dir DoNotStarveTogether -Cluster_1 -shard Master
-conf_dir DoNotStarveTogether -Cluster_1 -shard Caves

  • 使用-console开启控制台。(使用时,一定要在参数最前面,不然会导致服务器端口错误)。

使用方法:

  • -console

    • -console 参数应放在命令的开头。

    • -conf_dir 和 -shard 参数必须正确指定。

-console -Cluster_1 -shard Master
-console -Cluster_1 -shard Caves

  • 使用-config指定服务器配置文件(cluster.ini)路径。(默认路径,不需要添加。添加后可以不添加路径项。)

使用方法:

  • -config
    • -config参数可以不加值。

    • 默认情况下,服务器会从 Documents/Klei/DoNotStarveTogether/ 文件夹中加载配置文件。

启动地面世界(Master Shard)的命令:

-config C:\path\to\your\config\folder\ -Cluster_1 -shard Master

启动洞穴世界(Caves Shard)的命令:

-config C:\path\to\your\config\folder\ -Cluster_1 -shard Caves

  •  使用-cluster指定启动世界文件夹名称(默认Cluster_1)。

使用方法:

  • -cluster

    • 指定要启动的集群名称。

    • 默认值:如果不使用 -cluster 参数,服务器会默认启动 Cluster_1

    • 多集群配置:如果你运行的是多集群服务器(例如地面世界和洞穴世界),确保每个集群的端口号不同。

    • 多开配置:如果涉及到多开世界,此项为必选项。例如启动世界(Cluster_2)必须添加此项。

-cluster Cluster_2 -shar Master
-cluster Cluster_2 -shar Caves

  • 使用 -shard 指定启动的世界(如 Master 或 Caves(必加项)

使用方法:

  • -shard

    • 用于指定当前启动的世界(Shard)。

    • 例如,启动地面世界时使用 -shard Master,启动洞穴世界时使用 -shard Caves-console -Cluster_1 Master -console -Cluster_1 Caves

-Cluster_1 -shard Master
-Cluster_1 -shard Caves

指定(配置文件、路径、存档文件)的完整写法为(含有存档路径,请自行更改为自己的路径):

start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -console -conf_dir DoNotStarveTogether -config C:\Users\admin\Documents\Klei\DoNotStarveTogether\Cluster_1 -cluster Cluster_1 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -console -conf_dir DoNotStarveTogether -config C:\Users\admin\Documents\Klei\DoNotStarveTogether\Cluster_1 -cluster Cluster_1 -shard Caves

————

        (1.服务器集群的应用

  •  cluster_token.txt 文件存在与多个服务器集群(Cluster)。

  • 一个服务器集群可以包含多个世界(Shard),例如地面世界(Master)和洞穴世界(Caves)。

  • 如果你有多个独立的服务器集群(例如,两个完全独立的服务器,每个服务器有自己的地面和洞穴世界),那么每个集群都可拷贝同一个 cluster_token.txt 文件。


       (2. 服务器集群(Cluster)的概念

  • 一个服务器集群由多个世界(Shard)组成,例如:

    • 地面世界(Master)

    • 洞穴世界(Caves)

    • 其他自定义世界(如火山、月亮岛等)


        (3. 多个服务器集群的情况

  • 如果你运行多个独立的服务器集群(例如,为不同的玩家群体或不同的游戏模式),每个集群都可拷贝同一个 cluster_token.txt 文件。

  • 但是每个集群的 cluster_token.txt 文件必须放在对应的集群文件夹中,路径为:

    Documents/Klei/DoNotStarveTogether/Cluster_X/cluster_token.txt

    其中 Cluster_X 是集群文件夹的名称(例如 Cluster_1Cluster_2 等)。


        (4. 如何生成 cluster_token.txt

  1. 打开《饥荒联机版》游戏。

  2. 进入“账户”页面。

  3. 点击“生成服务器令牌”按钮。

  4. 将生成的 cluster_token.txt 文件保存到集群文件夹中。


        (5. 示例

  • 单集群服务器

    • 文件夹:Cluster_1

    • 包含:

      • Master/(地面世界)

      • Caves/(洞穴世界)

      • xxx/ (其他世界)

      • cluster_token.txt

  • 多集群服务器

    • 文件夹:Cluster_1

      • Master/

      • Caves/

      • cluster_token.txt

    • 文件夹:Cluster_2

      • Master/

      • Caves/

      • cluster_token.txt

    • cluster_token.txt是相同的,因为密钥文件仅用来检测玩家的合法性。


       (6. 注意事项

  •  cluster_token.txt 文件用于客户端验证,主要验证其合法性,可共享使用。

  • 确保 cluster_token.txt 文件放置在正确的集群文件夹中。

  • 如果服务器无法启动或提示令牌无效,请检查 cluster_token.txt 文件是否正确生成并放置。


总结

  • cluster_token.txt 文件可共享到多个集群。

  • 一个服务器集群可以包含多个世界(如地面和洞穴)。

  • 如果需要运行多个独立的服务器集群,可将cluster_token.txt 文件复制到其他集群中。

————


————

具体操作如下:

        (7.cluster_token.txt共享

创建两个服务器世界存档:

将之前创建的cluster_token.txt文件,复制到另一个服务器存档中:

————


————

        (8.重新编写服务器启动脚本

  • 启动cluster_1脚本示例:
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Caves
  • 将参数Cluster_1改为Cluster_2我们就可以启动服务器Cluster_2。
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_2 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_2 -shard Caves

————

如果运行出现报错或者无法运行脚本的问题可能原因:

  • 命令格式编写错误。
  • 路径编写错误。

两种错误都可以尝试本篇开头的补全命令。

————

接着将启动两个服务器的命令全部都添加进一个启动脚本中,如下所示:

@ECHO OFF

set SteamAppId=322330
set SteamGameId=322330

cd ..
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Caves

start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_2 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_2 -shard Caves

————


————

        (9.设置端口号

涉及端口的配置文件:

  • cluster.ini
  • server.ini

        路径为:

..\Documents\Klei\DoNotStarveTogether\Cluster_1\cluster.ini
..\Documents\Klei\DoNotStarveTogether\Cluster_1\Master\server.ini
..\Documents\Klei\DoNotStarveTogether\Cluster_1\Caves\server.ini

————端口详解,请参考本篇第二章《服务器的配置文档及作用说明》中,第四节“(4.集群设置”中的“主世界端口号(master_port)”项————


具体操作如下:

配置两个世界,使用不同的端口,配置如下:

Cluster_1
    cluster.ini
        ﹂master_port:10888
    Master:
         ﹂server.ini:
            ﹂server:10998
    Caves:
        ﹂server.ini:
            ﹂server:10999
-------------------------------------
Cluster_2
    cluster.ini
        ﹂master_port:11000
    Master:
         ﹂server.ini:
            ﹂server:11001
    Caves:
        ﹂server.ini:
            ﹂server:11002

————


————

        (10.启动验证

最后,启动世界(成功!!!):

打开游戏搜索(在cluster.ini中未做名称的修改,所以两个服务器名称一样):

        (11.世界混开

操作步骤:

  • 将想要的世界分片加入到服务器存档文件夹。
  • 删除存档中相同的世界分片。
  • 更改端口号,防止端口号冲突。

注意事项:

  • 每个世界分片都相当于一个独立的世界。
  • 需要注意的时,多分片的世界需要有一个世界为主世界。
  • 一个独立服务器的所有分片世界只能在同一个存档文件夹下启动。

————


————

总结:

  • 多开服务器需要注意服务器开启设备的配置,是否支持运行。
  • 注意修改端口号,防止端口冲突。
  • 注意启动的文件指向,参数-cluster的使用,防止异线同步加载。
  • cluster_token.txt文档可多集群共享。

————


————

5.脚本路径更改&mod更新简化

前言:

其实ugc_mods的更新还可以在简化?

饥荒已经是一款老游戏了,新的ugcmod也是很早的事情了。但是每次更新mod还都要对比主世界(Master)进行mod的复制粘贴?并且如果有新的分片,如火山,还需要在创建新的mod文件?

在更新mod的时候突然发现一件事,那就是更新的时候打开的是饥荒服务器(Don't Starve Together Dedicated Server),然而启动的却是bin下的launch_preconfigured_servers.bat脚本。

作用:

  • 不在需要创建ugc_mods文件夹中分片世界文件夹。
  • 启动脚本可直接执行更新mod文件的操作,不再需要分步操作。

文件结构大致如下:

steam\steamapps\common\Don't Starve Together Dedicated Server:
├── bin/
│   └── dontstarve_dedicated_server_nullrenderer.exe
│   └── scripts/
                └── launch_preconfigured_servers.bat

├── bin64/
│   └── dontstarve_dedicated_server_nullrenderer_x64.exe
│   └── scripts/
                └── launch_preconfigured_servers.bat

仔细对比发现,脚本项启动的确确实实是启动了bin下的饥荒服务器,但是更新确实bin64下的饥荒服务器。

示例如下:

所以,我们是不是可以将脚本启动项的指向,从bin中指向到bin64中?

这样不仅解决了自动更新还要先启动服务器在启动脚本的问题。

还解决了分片世界创建的时候,手动创建的问题。

(再也不用麻烦的启动关闭在启动了!!!)


具体操作如下:

直接将脚本文件(scripts)移动到bin64,并更改脚本启动项指向的文件名:

更改前后对比:

更改后代码:

@ECHO OFF

set SteamAppId=322330
set SteamGameId=322330

cd ..
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -Cluster_1 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -Cluster_1 -shard Caves

--行前添加“--”为注释行。

验证脚本可用性:

将mods中的mod文件全部删除,删除ugc_mods文件夹(只有启动脚本时mods文件中有mod的下载,ugc_mods文件夹才会更新):

然后启动bin64中的脚本:

同样的启动成功,然后看mod文件:

查看ugc_mods文件内结构:

两个文件均存在,无需在手动添加!!!

————


————

6.多世界独立ugc_mods文件夹(这只会看起来更好看,或许有点用?

前言:

上面已经将自动更新变得更简洁,以下是让你mod管理看起来更像那回事(但是可能作用不大)。

关于所有mod文件见和mod文件:

  • modoverrides.lua:决定了这个世界使用那些mod,且mod是如何配置的。
  • dedicated_server_mods_setup.lua:自动更新、下载和安装mod文件。
  • mods:mod文件的存放文件夹。
  • ugc_mods:mod文件的另一个存放文件夹。

————

mod的使用是由modoverrides.lua文件控制的,所以和mod文件夹mod的数量无关。

————

作用:

  • 自定义mod文件下载的ugc_mods文件夹。
  • 自定义启动服务器时,调用的ugc_mods文件夹。

使用脚本参数:

  • 使用-ugc_directory指定ugcmod的文件下载路径。

使用方法:

  • -ugc_directory:

    • -ugc_directory参数可不加值。

    • 默认情况下,服务器会将ugcmod下载到ugc_mods\Cluster_1。

    • 如果添加参数,不加值,则服务器会将ugcmod下载到data\Cluster_1。

添加参数示例:

start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -ugc_directory ../ugc_mods/Cluster_2/Master -cluster Cluster_2 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -ugc_directory ../ugc_mods/Cluster_2/Caves -cluster Cluster_2 -shard Caves

注意事项:

  • 使用不同名称的存档时,需要添加参数-cluster作为脚本识别存档的依据。

具体操作如下:

  • 只有mod文件更新时,才会重新加载生成ugc_mods文件夹,以及里面的配置文件。

然后启动服务器脚本,加载世界:


总结:

  • -ugc_directory 参数用于指定模组的下载和存储路径。

  • 通过该参数,你可以将模组存储到自定义文件夹中,并在调用时,指定该文件夹。而不是默认的cluster_1 文件夹。

  • 使用除默认存档文件夹名称时,需要使用参数-cluster指定存档文件夹名称。

  • 不同的世界分片需要使用不同的路径。

————


四、mod添加、修改、更新、删除

本章详细讲解mod的增、删、改、更新。关于mod的管理方法分为两种,分别是手动的更新和自动的更新。

  • 自动更新的mod管理:
  1. 优点:方便,快捷。
  2. 缺点:不稳定,有可能加载不上。(根据up查到的信息,是因为早期启动脚本是覆盖式的,添加的modID会被覆盖导致不更新。另外就是新的mod使用ugc_mods文件夹,此文件夹只能自动更新地上世界,导致洞穴世界不能正常添加mod)
  • 手动更新的mod管理:
  1. 优点:稳定,百分百能添加上mod。
  2. 缺点:对比自动更新有一点麻烦。

建议:自动更新太容易掉mod了,建议改为手动。

————作为之前创建世界时,在饥荒联机版中创建的世界蓝本,在这里作为mod配置的映射使用,没有编程基础的玩家,会给予这种mod的修改方法。 ————


1.mod管理文件及配置文件的作用、使用方法及注意事项,mod文件保存和调用说明:


————

        (1.modoverrides.lua文件(mod的配置文件)

作用:

  • 启用或禁用模组:指定哪些模组会被加载。

  • 配置模组参数:为每个模组设置自定义参数。

  • 优先级控制:控制模组的加载顺序和依赖关系。

路径modoverrides.lua 文件位于每个集群的配置文件夹中。

Documents\Klei\DoNotStarveTogether\
├── Cluster_1\
│   ├── cluster.ini
│   ├── Master
│   ├── Caves
│   └── modoverrides.lua
├── Cluster_2\
│   ├── cluster.ini
│   ├── Master
│   ├── Caves
│   └── modoverrides.lua

文件结构:

modoverrides.lua 是一个 lua 脚本文件,其基本结构如下:

return {
    ["workshop-模组ID"] = {
        enabled = true,  -- 是否启用模组
        configuration_options = {
            -- 模组的配置参数
        },
    },
    ["workshop-另一个模组ID"] = {
        enabled = false,  -- 禁用模组
    },
}

配置示例:

假设你启用了两个模组,并为其中一个模组设置了自定义参数:

return {
    ["workshop-350811795"] = {  -- 模组 1
        enabled = true,  -- 启用模组
        configuration_options = {
            max_items = 20,  -- 自定义参数
            spawn_rate = 2,
        },
    },
    ["workshop-376333686"] = {  -- 模组 2
        enabled = true,  -- 启用模组
    },
    ["workshop-378160973"] = {  -- 模组 3
        enabled = false,  -- 禁用模组
    },
}

如何编辑 modoverrides.lua:

  1. 手动编辑

    • 使用文本编辑器(如 Notepad++、VS Code)打开 modoverrides.lua 文件。

    • 按照上述结构添加或修改模组配置。

  2. 通过游戏界面生成

    • 在本地游戏中启用模组并设置参数。

    • 将生成的 modoverrides.lua 文件复制到服务器配置文件夹中。


注意事项:

  1. 模组 ID

    • 模组 ID 是 Steam 创意工坊中的唯一标识符,可以在模组的 Workshop 页面 URL 中找到。

    • 例如:http://steamcommunity.com/sharedfiles/filedetails/?id=350811795 的模组 ID 是 350811795

  2. 配置文件一致性

    • 确保 modoverrides.lua 中的模组 ID 与 dedicated_server_mods_setup.lua 中的模组 ID 一致。

  3. 模组依赖

    • 如果某个模组依赖其他模组,确保所有依赖模组都已启用(建议自动下载时添加mod集合的下载)。


集合中不同分片世界的模组配置:

假设你运行的是地面世界和洞穴世界,可以为每个集群配置不同的模组:

Cluster_1(地面世界)

return {
    ["workshop-350811795"] = {  -- 模组 1
        enabled = true,
        configuration_options = {
            max_items = 20,
        },
    },
    ["workshop-376333686"] = {  -- 模组 2
        enabled = true,
    },
}

Cluster_2(洞穴世界)

return {
    ["workshop-350811795"] = {  -- 模组 1
        enabled = true,
        configuration_options = {
            max_items = 10,  -- 不同的参数
        },
    },
    ["workshop-378160973"] = {  -- 模组 3
        enabled = true,
    },
}

总结:

  • modoverrides.lua 用于配置和管理服务器中的模组。

  • 每个集群中的分片都有自己的 modoverrides.lua 文件。

  • 通过该文件,可以启用或禁用模组,并设置模组的自定义参数。

————


————

        (2.dedicated_server_mods_setup.lua文件(mod的管理文件)

作用:

  • 下载模组:指定服务器启动时需要从 Steam 创意工坊下载的模组。

  • 安装模组:将下载的模组安装到服务器的模组目录(ugc_mods、mods)中。

  • 支持单个模组和模组集合

    • 使用 ServerModSetup("WorkshopID") 下载单个模组。

    • 使用 ServerModCollectionSetup("WorkshopID") 下载模组集合中的所有模组。

    • 自动下载中两个同时使用,防止有些依赖文件出现漏下的情况。

路径:dedicated_server_mods_setup.lua 文件通常位于服务器的根目录下的 mods 文件夹中。

Don't Starve Together Dedicated Server\
├── mods\
│   └── dedicated_server_mods_setup.lua
├── bin64\
├── bin\
├── ugc_mods\

文件结构:

dedicated_server_mods_setup.lua 是一个 lua 脚本文件,其基本结构如下:

-- 下载单个模组
ServerModSetup("WorkshopID1")

-- 下载模组集合
ServerModCollectionSetup("WorkshopID1")

配置示例:

-- 下载单个模组
ServerModSetup("350811795")  -- 模组 1
ServerModSetup("376333686")  -- 模组 2

-- 下载模组集合
ServerModCollectionSetup("379114180")  -- 模组集合

如何编辑 dedicated_server_mods_setup.lua:

  1. 使用文本编辑器(如 Notepad++、VS Code)打开 dedicated_server_mods_setup.lua 文件。
  2. 模组 ID 是 Steam 创意工坊中的唯一标识符,可以在模组的 Workshop 页面 URL 中找到。
  3. 例如:http://steamcommunity.com/sharedfiles/filedetails/?id=350811795 的模组 ID 是 350811795
  4. 对照mod配置文档modoverrides.lua ,或者创意工坊中的模组ID添加或删除 ServerModSetup 和 ServerModCollectionSetup 调用。

 注意事项:

  1. 模组下载目录

    1. 下载的模组会存储到 ugc_mods 文件夹和mods文件夹中。

    2. 如果需要自定义模组存储路径,可以使用 -ugc_directory 参数。

    3. dedicated_server_mods_setup.lua只会下载服务器模组,如果添加本地模组的modID,则不会下载模组文件

  2. 模组启用

    • dedicated_server_mods_setup.lua 仅负责下载模组,模组的启用和配置需要在 modoverrides.lua 文件中设置。

  3. 模组集合

    • 使用 ServerModCollectionSetup 下载模组集合时,会下载集合中的所有模组。

  4. 模组冲突和下:

    • dedicated_server_mods_setup.lua 只能下载服务器模组,本地模组添加不给予下载。

    • 确保模组之间没有冲突。

    • 确保模组在新日期能够正常使用。

 总结:

  • dedicated_server_mods_setup.lua 用于配置服务器启动时需要下载和安装的模组。

  • 通过 ServerModSetup 下载单个模组,通过 ServerModCollectionSetup 下载模组集合。

  • 下载的模组会存储到 ugc_mods 文件夹中。

  • 模组下载时建议将modID添加进mod下载和集合下载中各一份,防止依赖文件没有下载导致的mod不可用。

————


————

        (3.mods文件和ugc_mods文件夹的作用说明,以及服务器模组和本地模组的区别。

  • 服务器中,服务器模组和本地模组的共性和区别。
    • 共性:
      • 服务器模组和本地模组的配置信息和参数设置都在modoverrides.lua文档中。
      • 无论是服务器模组还是本地模组,都需要确保依赖模组已加载。

      • 玩家可以使用服务器modoverrides.lua文档中未添加的本地模组模组。

    • 区别:
      • 下载方式:
        • 服务器模组的下载文件夹为mods和ugc_mods中。
        • 本地模组的下载文件夹路径为:..\steam\steamapps\workshop\content\322330
      • 加载方式:
        • 服务器模组被所有进入服务器的玩家加载。
        • 本地模组仅对使用模组的玩家生效,不影响其他玩家。
      • 更新方式:
        • 服务器模组需要服务器自行更新。
        • 本地模组只需要玩家更新。
      • 管理方式:
        • 服务器模组由管理员控制开启和关闭,以及参数的设置。
        • 本地模组由玩家控制开启和关闭,可自行设置参数。
      • 运行范围:
        • 服务器模组负责管理整个世界和所有玩家,一些模组还能改变世界的玩法。
        • 本地模组只会在本地运行,仅对玩家生效。
    • 注意事项:
      • 大多数时候,本地玩家希望有改变世界的本地模组,因此有些模组从服务器中剥离,成为能够影响其他玩家的本地模组。
      • 这类模组即使在饥荒联机版中开启,但是服务器中没有添加相应的管理项,这类模组也是不会被加载的。
  • mods文件夹和ugc_mods文件夹的作用说明,以及本地mods的存档位置。
    • mods文件夹:较早开发的mod,调用的是本文件夹中的mod文件。
    • ugc_mods文件夹:较新开发的mods会转移到本文件夹中使用。
    • 本地mod文件夹:在steam订阅的所有mod,包括服务器mod。订阅之后都会储存到此文件夹中。
    • mods和ugc_mods文件夹本质上都是服务器文件夹,只负责下载和调用服务器mod。
    • 本地mod文件夹路径为:..\steam\steamapps\workshop\content\322330

————


2.mod添加

(1.自动更新

        共三步:

  1. 在modoverrides.lua文档中添加modID。
  2. 在dedicated_server_mods_setup.lua文档中添加modID。
  3. 更新mod文件,并在ugc_mods的Caves中添加已更新的mod。
  • 使用了第三章《5.脚本路径更改&mod更新简化》,可省略第三步。

————

步骤一:

        ————

                        本步骤的方法有两种,自行选择!!!

                                                                                        ————

  • 方法一:直接在modoverrides.lua文件添加modID。

        具体操作如下:

        在steam的创意工坊中,找到想添加的mod,点进主页,上面的链接中显示的ID为modID:

        打开服务器存档文件夹(Cluster_1)中的modoverrides.lua文档(地上、洞穴共两个,只演示一个)将modID按下面格式复制到文档中:

  ["workshop-modID"]={
    enabled=true 
  } 

  • 方法二:在本地游戏添加mod并拷贝生成的modoverrides.lua文档。

        具体操作如下:

        在steam的创意工坊中,找到并订阅想要的mod。然后返回游戏,将mod添加进之前作为服务器存档而创建的世界蓝本中:

接着进入这个世界,让mod的配置成功在世界中加载:

然后找到这个世界的其中一个modoverrides.lua文档,将其替换我们服务器存档文件夹(Cluster_1)的两个modoverrides.lua文档:

————


————

步骤二:

  • 在dedicated_server_mods_setup.lua文档中添加modID。

        具体操作如下:

        在饥荒服务器(Don't Starve Together Dedicate Server)的根目录下的mods文件夹中,打开dedicated_server_mods_setup.lua文档。

并将之前添加到modoverrides.lua文档中的modID按格式添加进dedicated_server_mods_setup.lua文档中:

        注意事项:

  • 编写mod的作者有时候不会将mod和mod集合的情况说的很清楚,所以在mod管理文档中添加modID的时候,需要将modID添加进两种下载方式中去。

————


————

步骤三:

  • 更新mod文件,并在ugc_mods的Caves中添加已更新的mod。

        具体操作如下:

        在steam启动饥荒服务器(Don't Starve Together Dedicate Server),更新mod文件:

关闭饥荒服务器(Don't Starve Together Dedicate Server),并打开ugc_mods文件夹,将Master中更新的mod添加到Caves中:

————


(2.手动更新

        共三步:

  1. 在modoverrides.lua文件中添加modID。
  2. 在mods文件夹中添加想要的mod文件。
  3. 删除dedicated_server_mods_setup.lua文档中所有内容。(第一次操作时删除即可)
  4. 在ugc_mods文件夹下的两个世界文件夹中添加相同的mod文件。

————

步骤一:

  • 在modoverrides.lua文件中添加modID。

        同自动更新类方法一样,详情参考上方自动更新类步骤一。

————


————

步骤二:

  • 在mods文件夹中添加想要的mod文件。

        具体操作如下:

        在steam的创意工坊中订阅想要的mod。

打开steam根目录下的路径:steam\steamapps\workshop\content\322330

(这是饥荒联机版订阅的mod存放文件夹,32230为饥荒的游戏ID):

找到之前订阅的modID,并将其复制到饥荒服务器(Don't Starve Together Dedicate Server)的mods文件夹中:

文件夹名称格式为:

workshop-modID

————


————

步骤三:

  • 删除dedicated_server_mods_setup.lua文档中所有内容。(第一次操作时删除即可)

        具体操作如下:

        将mods文件夹中的dedicated_server_mods_setup.lua文档中所有内容删除(第一次操作时删除即可,防止自动更新导致mod不可用):

————


————

步骤四:

  • 在ugc_mods文件夹下的两个世界文件夹中添加相同的mod文件。

        具体操作如下:

        继续将mods文件夹中新增的mod文件复制到ugc_mods文件夹中的Master和Caves下的mod文件中:

文件夹名称格式为:

modID

————


3.mod修改

本篇不含mod的更新内容,所以不需要进行自动和手动更新的区分。

修改mod配置的方法有两种:

  • 直接修改modoverrides.lua文档。
  • 在联机版中修改本地存档的mod配置并拷贝到服务器mod配置中。

————

(1.方法一

  • 直接修改modoverrides.lua文档。

        具体操作如下:

        打开服务器存档文件夹(Cluster_1)下,Master中的modoverrides.lua文档。并按照想要的需求修改:

["workshop-2078243581"] = {  -- 这是一个 Steam 创意工坊的模组 ID,2078243581 是模组的唯一标识符
    configuration_options = {  -- 模组的配置选项
        Blue = 0,              -- 蓝色值,用于颜色配置(范围通常为 0-1 或 0-255)
        Display = "target",    -- 显示模式,设置为 "target" 表示目标显示方式
        Green = 0,             -- 绿色值,用于颜色配置
        Projectile = true,     -- 是否启用投射物效果,true 表示启用
        Red = 1,               -- 红色值,用于颜色配置
        Type = "hit"           -- 类型,设置为 "hit" 表示命中效果
    },
    enabled = true             -- 是否启用该模组,true 表示启用
}

————


————

(2.方法二

  • 在联机版中修改本地存档的mod配置并拷贝到服务器mod配置中。

        具体操作如下:

        在饥荒联机版中,打开我们之前作为服务器存档而创建的世界蓝本,然后修改里面的mod配置:

进入游戏,加载世界配置信息:

然后找到本地存档中的modoverrides.lua文档,将其覆盖到饥荒服务器存档文件夹(Cluster_1)下的两个世界中去:

本地世界存档路径:...\Klei\DoNotStarveTogether\12[ID]60\Cluster_2\Master

服务器世界存档路径:...\Klei\DoNotStarveTogether\Cluster_1\Master

————


4.mod删除

本篇不含mod的更新内容,所以不需要进行自动和手动更新的区分。

删除mod的方法有两种:

  • 方法一:关闭世界中mod配置存档中,不需要的mod开关。
  • 方法二:彻底删除mod(mod文件,mod配置文件中的modID)。

————

(1.方法一

  • 关闭世界中mod配置存档中,不需要的mod开关。

————本篇涉及文档的mod文档的修改。

同样,如果不想修改这里面的内容,或者找不到相应的modID。也可以去本地存档中修改,然后将本地存档中的modoverrides.lua文档覆盖到服务器存档中。

详情参考本章第二篇《2.mod修改》————

        具体操作如下:

        打开饥荒服务器存档文件夹(Cluster_1),在Master中找到modoverrides.lua文档:

找到不想使用的mod,将开关属性(enabled)的值改为false:

enabled=false

最后将Master中修改好的modoverrides.lua文档覆盖到Caves中:

————


————

(2.方法二

  • 彻底删除mod(mod文件,mod配置文件中的modID)。

        此方法针对过期mod和相互冲突的mod。

        具体操作如下:

        删除modoverrides.lua文档中不需要的modID及其所有配置:

 ["workshop-modID"]={
    ##配置内容
    enabled=true 
  } 
在return{}中,每一个此格式的文档都为一个mod文件的配置信息,需要全部删除。

删除mods文件中的mod文件:

删除mods文件dedicated_server_mods_setup.lua文档中的modID:

删除ugc_mods文件中地上、洞穴的mod文件:

————


————

5.mod更新

参考上方操作,将旧的mod删除,然后添加新的mod即可。

————


五、各种疑难杂症解决方法

————仅个人在游玩中遇到的各种问题解析,以及延伸出的问题解决方法,不会适用所有情况,请酌情参考。————


1.服务器类问题

引言:

        服务器类问题包含,在服务器启动时,命令窗口有报错提示的,均被成为服务器类问题。可查看、可观测、可解决。

服务器类问题可能有以下几种情况:

  • 无法匹配密钥文件(cluster_token.txt)。
  • 端口被占用。

————

(1.无法匹配密钥文件(cluster_token.txt)

示例

服务器两个命令窗口显示启动失败,并且都提示缺少cluster_token.txt文件(密钥文件)。

[00:00:09]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[00:00:09]: !!!! Your Server Will Not Start !!!!
[00:00:09]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

问题原因
  • 缺少cluster_token.txt文件。
  • 服务器脚本编写错误,即指向错误、文件名错误、路径错误、参数错误。
  • 服务器存档存放位置错误。
解决方法
  • 向服务器存档中添加cluster_token.txt文件。详细方法参考第二章《2.获取密钥》。

cluster_token.txt文件应在以下路径中:

Documents\Klei\DoNotStarveTogether\
├── Cluster_x\
│   ├── cluster.ini
│   ├── Caves
│   └── Master
  • 查看服务器文档是否在正确的路径下,脚本是否编写错误。详情参考第三章的《4.世界多开》。

正确服务器文件路径为:

C:\Documents\Klei\DoNotStarveTogether\Cluster_x
├── cluster.ini
├── cluster_token.txt
├── Master/
│   ├── server.ini
│   └── modoverrides.lua
└── Caves/
    ├── server.ini
    └── modoverrides.lua

基础的脚本格式为:

bin下:

@ECHO OFF

set SteamAppId=322330
set SteamGameId=322330

cd ..
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Master
--start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer.exe" -cluster Cluster_1 -shard Caves

bin64下:

@ECHO OFF

set SteamAppId=322330
set SteamGameId=322330

cd ..
start "Don't Starve Together Overworld" /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -cluster Cluster_1 -shard Master
start "Don't Starve Together Caves"     /D "%~dp0.." "%~dp0..\dontstarve_dedicated_server_nullrenderer_x64.exe" -cluster Cluster_1 -shard Caves

————


————

(2.端口被占用

引言

一般来说,饥荒的默认端口10888和10998-10999不会被本地进程占用,可自行查看本地端口是否占用这个进程。

使用命令提示符

        打开命令提示符(CMD),运行以下命令,查看占用端口的程序:

netstat -ano | findstr :<端口号>

        例如,查看端口 10999

netstat -ano | findstr :10999

        输出示例:

TCP    0.0.0.0:10999          0.0.0.0:0              LISTENING       1234

        其中 1234 是占用端口的进程 ID(PID)。

查找进程名称

        使用以下命令查找进程名称:

tasklist /FI "PID eq <PID>"

        例如:

tasklist /FI "PID eq 1234"

结束进程

使用以下命令结束占用端口的进程:

taskkill /PID <PID> /F

例如:

taskkill /PID 1234 /F
示例

服务器启动窗口加载失败,提示端口被占用。

问题原因
  • 多开世界指向同一个世界,即脚本指向错误。
  • 本地饥荒正在运行。
  • 有软件占用饥荒游戏端口。
  • 世界分片的端口相互冲突。
解决方法
  • 查找是否有软件占用服务器端口,找到并结束软件的进程,方法如上所示。
  • 查看饥荒联机版是否正在游戏中,如果是就退出世界。
    (服务器端口使用默认端口时,会出现的问题。)
  • 查看脚本的世界指向,是否为同一个世界。(是否存在参数-cluster)。
    详情参考第三章的《4.世界多开》。

  • 查看服务器的cluster.ini和所有分片的server.ini文件中端口参数是否有相同的。
    详情参考第三章的《2.服务器的配置文档及作用说明》。

————


————

2.mod类问题

引言:

        mod类的问题比较复杂,因为涉及多mod冲突的关系、旧mod无法适配新版本、本地mod和服务器mod冲突、mod依赖文件不全等。着些都会一笔带过,更多的是让本人结合mod的情况自行尝试。

        讲解的更多是服务器mod使用的问题。

mod类问题可能有以下几种情况:

  • 无法匹配mod文件路径。
  • 无法加载mod,或者mod缺失。

————

(1.无法匹配mod文件路径

示例
  • 启动服务器时,不会加载失败,只会在命令窗口显示出这个错误信息。
  • 无法匹配mod的文件路径,启动时会自动匹配相应的mod文件路径。但是在启动成功查看服务器时,相应的mod未被加载。

问题原因
  • mod文件夹(mods和ugc_mods)下没有自动更新或者手动添加modoverrides.lua文档中以应用的mod。
  • 启动脚本中mod文件夹指向错误。
  • 各种mod冲突。
  • mod老旧。
  • mod依赖加载不全。
解决方法
  • 查看脚本中“-ugc_directory”、“-server_mods”项的参数是否正确。
  • 查看mod文件是否被添加。
    自动下载的mod需要添加mod集合的下载。
    使用bin启动脚本的需要手动添加分片世界的ugc_mod。
    ————详情参考第四章————

ServerModSetup("2078243581")
--mod下载
ServerModCollectionSetup("2078243581")
--mod集合下载

--两项需同时添加。
  • 在steam的创意工坊中,找到该mod,进入主页查看是否有其他依赖项,或者mod停更。
  • 查看mod评论区是否有其他问题。
  • 删除有问题的mod,看是否会和其他mod冲突。

————


————

(2.无法加载mod,或者mod缺失

示例

启动服务器后,在浏览界面查找游戏,查看是否添加mod,或者添加的mod是否有缺失。

问题原因
  • 问题原因同上。
解决方法
  • 解决方法同上。

————


3.权限类问题

引言:

        默认管理员权限仅限提供服务器密钥(cluster_token.txt)的玩家。其他玩家需要管理员手动添加管理员权限。

权限类问题可能有以下几种情况:

  • 管理员无法使用命令。

————

(1.管理员无法使用命令

本地服务器的本质为独立的两个系统:

  • 由服务器占据的本地ip(127.0.0.1)作为服务器端,实际上还是在本地运行。
  • 玩家在本地游玩的饥荒联机版。

管理员在游戏中使用命令时,就是在向服务端发送指令,所以需要远端才能发送:

————


六、总结

(1.本地服务器的网络拓扑如下。

  • 作为本地服务器,优点是方便管理,服务器成本为零。
  • 缺点为,玩家即作为服务端也作为客户端,因为没有专业的服务端设置和网络带宽,导致同城之外的玩家加入游戏会造成卡断。

(2.本篇文章详细讲解了本地服务器的通信原理和运行原理。并尝试搭建了一个完整的本地服务器。

其中详细讲解包括:

  • 运行原理和搭建过程。
  • mod文件存储和mod添加。
  • 启动脚本参数设置。
  • 服务器端口。
  • 疑难问题解决。

最后

        作为耗时了这么长时间,从开始找教程搭建,到最后各种方向各种问题的延伸。

        对于网络层面和端口的应用,和服务器的运行原理,以及令牌服务器的验证过程,本地服务器搭建的过程都有了较为清晰的认识。

希望这篇文章能帮助到你~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值