📚 游戏服务器

在 沙盘引擎 游戏过程中,服务器是一个非常关键的概念,引擎采用全程服务器同步模式

全程服务器同步模式:即使只有主机在线(1人),底层仍然是服务器联机的模式。

简单来说,沙盘引擎 理论上不存在真正的“单机游戏”

更多情况下,玩家所游玩的是不同的本地服务器、单人服务器、多人服务器等。

每次服务器启动时,模组自动加载开发者提前设计好的地图、脚本,因此展示出不同的功能和内容。

📒 创建服务器

沙盘引擎 支持玩家以多种方式创建服务器。

通常情况下,创建服务器的方式分为主机服务器专用服务器两种模式:

  • 主机服务器:以当前游戏作为主机创建服务器
    • 特点:可以正常游玩游戏,但是主机断开(关闭游戏)则自动关闭服务器
  • 专用服务器:通过CMD+DOS无头模式创建
    • 特点:无法正常作为游戏游玩,仅作为服务器运行,无需显卡硬件,更适合24小时不断线服务器

无论哪种方式创建的服务器,玩家理论上都可以多开游戏,实现自己进入自己的服务器。

注意:由于 沙盘引擎 的设计开放性,不同模组的 创建服务器 方式可能有所不同(完全取决于模组作者的设计)。

📘 主机服务器

通常情况下,模组作者会根据自己游戏的玩法设计,可能为玩家提供游戏主菜单创建游戏相关按钮或功能,玩家可根据具体模组方式来尝试创建。

在特殊情况下,模组作者可能不希望提供玩家创建服务器的功能(例如:仅允许游玩官方服务器),这可能导致模组在打包时缺乏创建主机的代码,因此部分模组可能无法创建服务器,仅允许作为玩家游玩。

📘 专用服务器

如果希望创建一个长期运行、更稳定的联机服务器,多数游戏均采用专用服务器的方式来创建服务器,最终托管至Windows Server (VPS)服务器(7x24)。

专用服务器与游戏内常规主机服务器的创建方式有所不同,此方法更适合没有显卡的Windows 服务器系统,通过DOS控制台的方式直接创建服务器,没有游戏画面,且占用要求更低

沙盘引擎 程序目录内置DedicatedServer文件夹,内置了基础的创建专用服务器快捷工具及方式。

📘 DedicatedServer.bat

专用服务器目录(DedicatedServer)中,使用文本编辑器打开DedicatedServer.bat,最终得到标准的bat命令:

start ..\SandtableEngine.exe @modPackage -nographics -batchmode -serverbuild -frame_128 -logfile .\ServerLog.txt
start ..\SandtableEngine.exe @%param% -nographics -batchmode -serverbuild -frame_128 -logfile .\ServerLog.txt

代码解释:启动SandtableEngine.exe文件,以@xxx.xxx.xxx模组启动,命令-nographics -batchmode -serverbuild表示服务端模式启动,-frame128表示最高帧数限制为128,输出相关日志到文件ServerLog.txt

注意:命令行参数-frame_128关键影响服务器性能和同步效率,省缺默认为-frame_60,数值越高服务器越流畅(占用CPU更高)。

📘 专用服务器模组配置

由于 沙盘引擎 的设计开放性,不同模组的 创建专用服务器 方式可能有所不同(完全取决于模组作者的设计)

通常情况下,初始模组不能直接创建专用服务器,因为专用服务器并没有游戏画面,引擎不知道下一步该如何操作(例如:点击创建服务器)。

由此得知,创建专用服务器的功能必须得到模组作者的适配。

如果模组希望支持创建专用服务器模组作者应该编写关于IsServerMode()的相关代码,以此允许玩家创建专用服务器。

总结:如果模组作者没有为模组实现这方面的代码,玩家将无法创建此模组的专用服务器。

📒 加入服务器

通常情况下,玩家可以通过多人游戏浏览器[~]打开控制台指令来加入想游玩的服务器。

如果游戏版本相同、未被服务器封禁等前提正常,玩家会在与服务器同步完毕后进入服务器。

如果连接的服务器是其他模组,沙盘引擎 将自动下载最新的服务器模组,并最终由玩家决定方式:

  • 仅游玩(默认):只进行正常游玩,不进行额外保存
  • 下载并游玩:进行正常游玩,并将模组放置到下载目录,允许下次直接从模组菜单启动
    • 此方法更适合长期游玩的模组,或者希望对模组内容进行探索和研究

📒 常见问题

📘 分享服务器?

通常情况下,当服务器创建\加载完毕后,就可以将服务器的房间代码\IP地址分享给其他人。

如果出现本地玩家进入正常,但其他人无法连接的情况,通常是因为防火墙、端口映射等常规问题,与其他联机游戏一样,这里不做过多说明。

📘 Linux服务器?

《沙盘引擎》是一款Windows系统游戏,因此默认不适用于Linux系统。

根据社区的反馈,可考虑使用Linux Wine尝试运行Windows版服务器。

📘 多开服务器?

有些时候,可能希望开设多个服务器(或不同模组的服务器),沙盘引擎支持多个应用程序同时运行,因此可以直接开启。

如果出现网络端口\服务被占用(或模组占用相同端口),这需要为bat命令添加-port_81938193是示例端口号)来强制指定其他网络端口。

📘 专用服务器:配置规则\存档?

模组目录下的文件Mod\StartUp.json是一个自定义配置文件,通常模组作者会使用此文件设计专用服务器配置

不同模组的专用服务器配置可能完全不同,这需要根据模组开发者的提示来修改和使用,已达到期望的效果。

有些情况下,玩家也可以指定命令行参数-startup_fileName来选择重定向StartUp.json文件。

📘 专用服务器:DX支持问题?

默认情况下,专用服务器不使用GPU相关资源,但可能有概率需要调用DX相关库。

如果运行系统(通常是Windows Server)不存在DX库并弹出相关提示,考虑安装基础DX运行库

📒 服务器分类

📘 收藏列表(本地保存的服务器)

在您本地存储的,由玩家收藏的服务器列表。

📘 互联网服务器(公开的网络服务器)

在此项下检索到的服务器由 沙盘引擎 服务器列表提供。

沙盘引擎一直秉承开放、合作、共赢的态度。

因此即使是普通玩家架设的联机服务器,也会被正常检索并公开到《沙盘引擎》服务器列表。

基于以上情况,沙盘引擎 无法对所有私人架设的专用服务器予以完全监督,玩家需要自行斟酌不同服务器的玩法和保障。

📘 认证服务器(受信任的网络服务器)

在此项下检索到的服务器为受《沙盘引擎》项目组认证的服务器

为了避免长期稳定、可靠、新颖的服务器与一些短期开放或不稳定的服务器产生混淆及争议。

我们对服务器是否应该加入认证服务器做出如下基础标准(满足任一条件)

  • 服务器开发组至少包含一名成员来自于 沙盘引擎 项目组

  • 服务器稳定运行时间超过120天,且不存在任何令人不适的恶意内容及玩法

  • 服务器具有相当新颖的玩法或创意,并受相当一部分玩家的喜爱及认可

  • 服务器来源于某个社区、公共团体、主播,由某社区创立的公益服务器且稳定运行

如开设的服务器满足以上标准,欢迎访问 沙盘引擎 社区联系我们!

📘 SteamP2P(Steam联机服务器)

目前尚未开放,在 沙盘引擎 于Steam平台上正式开放后可检索来自Steam的联机服务器。

📘 LAN(局域网服务器)

在您本地网络下的其他设备开设的服务器,可在此处检索。

📘 通过地址连接

进入此项,您可输入对应的 沙盘引擎 服务器代码\IP地址来连接服务器。

📒 数据服务器(DataServer)

沙盘引擎 游戏服务器附带额外的数据服务器(UDP),此功能仅在每次Socket模式服务器建立时开启(Steam服务器无效),主要用于除游戏逻辑外的其他网络交互。

📘 服务器查询(Query)

当数据服务器开启后,将允许接收来自外部的UDP数据报,并自动验证是否为Gamespy协议信息。

如果开发者希望实现外部查询服务器信息等功能,可以使用Gamespy的简单查询机制,也就是向服务器发送特定格式的UDP数据报\querystats\,即可接收到当前服务器的最新信息(Json格式)。

📘 接受外部UDP数据报

当数据服务器开启后,除引擎内置的Gamespy相关指令被内部拦截外,其他数据内容将提交至World.OnServerQueryReceive()事件中,同时服务端也可使用World.SendSocketData()方法进行UDP交互。

📘 注意事项

  • 服务器内置指令(如\querystats\)将会被引擎直接处理,不会下发到事件。
  • 服务器事件只会接受以\xxx\(反斜杠)包围格式的数据信息。