meta data for this page
  •  

📚 差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
manual:gameserver [2025/07/17 16:05] – 移除 - 外部编辑 (Unknown date) 127.0.0.1manual:gameserver [2025/07/19 03:17] (当前版本) bibiboxs
行 1: 行 1:
 +<markdown>
 +# 游戏服务器
  
 +在 沙盘引擎 游戏过程中,**服务器**是一个非常关键的概念,引擎采用**全程服务器同步模式**。
 +
 +> 全程服务器同步模式:即使只有主机在线(1人),底层仍然是服务器联机的模式。
 +>
 +> 简单来说,沙盘引擎 理论上不存在真正的**“单机游戏”**。
 +
 +更多情况下,玩家所游玩的是不同的**本地服务器、单人服务器、多人服务器**等。
 +
 +每次服务器启动时,模组**自动加载**被**开发者**提前设计好的**地图、脚本**,因此展示出不同的功能和内容。
 +
 +
 +
 +## 创建服务器
 +
 +沙盘引擎 支持玩家以**多种方式**创建服务器。
 +
 +通常情况下,创建服务器的方式分为**主机服务器**、**专用服务器**两种模式:
 +
 +- **主机服务器:**以当前游戏作为主机创建服务器
 +  - 特点:可以正常游玩游戏,但是主机断开(关闭游戏)则自动关闭服务器
 +- **专用服务器:**通过`CMD+DOS`无头模式创建
 +  - 特点:无法正常作为游戏游玩,仅作为服务器运行,无需显卡硬件,更适合24小时不断线服务器
 +
 +无论哪种方式创建的服务器,玩家理论上都可以**多开游戏**,实现自己进入自己的服务器。
 +
 +==**注意:**由于 沙盘引擎 的设计开放性,不同模组的 **创建服务器** 方式可能有所不同(完全取决于**模组作者**的设计)。==
 +
 +
 +
 +### 主机服务器
 +
 +通常情况下,模组作者会根据自己游戏的玩法设计,可能为玩家提供**游戏主菜单**的**创建游戏**相关按钮或功能,玩家可根据具体模组方式来尝试创建。
 +
 +在特殊情况下,模组作者可能**不希望**提供玩家创建服务器的功能(例如:仅允许游玩官方服务器),这可能导致模组在打包时缺乏创建主机的代码,因此部分模组可能无法创建服务器,仅允许作为玩家游玩。
 +
 +
 +
 +
 +### 专用服务器
 +
 +如果希望创建一个**长期运行、更稳定**的联机服务器,多数游戏均采用**专用服务器**的方式来创建服务器,最终托管至**Windows Server (VPS)**服务器(7x24)。
 +
 +**专用服务器**与游戏内常规**主机服务器**的创建方式有所不同,此方法更适合没有显卡的**Windows 服务器系统**,通过**DOS控制台**的方式直接创建服务器,**没有游戏画面,且占用要求更低**。
 +
 +> 沙盘引擎 程序目录内置`DedicatedServer`文件夹,内置了基础的**创建专用服务器**快捷工具及方式。
 +
 +
 +
 +### DedicatedServer.bat
 +
 +在**专用服务器**目录(`DedicatedServer`)中,使用文本编辑器打开`DedicatedServer.bat`,最终得到标准的`bat`命令:
 +
 +```javascript
 +start ..\SandtableEngine.exe @modPackage -nographics -batchmode -serverbuild -frame_128 -logfile .\ServerLog.txt
 +```
 +
 +```javascript
 +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_8193`(`8193`是示例端口号)来强制指定其他网络端口。
 +
 +
 +
 +###专用服务器:配置规则\存档?
 +
 +模组目录下的文件`Mod\StartUp.json`是一个**自定义配置文件**,通常模组作者会使用此文件设计**专用服务器配置**。
 +
 +不同模组的专用服务器配置可能完全不同,这需要根据模组开发者的提示来修改和使用,已达到期望的效果。
 +
 +有些情况下,玩家也可以指定**命令行参数**`-startup_fileName`来选择重定向`StartUp.json`文件。
 +
 +
 +
 +### 专用服务器:DX支持问题?
 +
 +默认情况下,专用服务器不使用GPU相关资源,但可能有概率需要调用DX相关库。
 +
 +如果运行系统(通常是Windows Server)不存在DX库并弹出相关提示,考虑安装[基础DX运行库](http://support.microsoft.com/kb/179113)。
 +
 +
 +
 +## 服务器分类
 +
 +### 收藏列表(本地保存的服务器)
 +
 +在您本地存储的,由玩家收藏的服务器列表。
 +
 +
 +
 +### 互联网服务器(公开的网络服务器)
 +
 +在此项下检索到的服务器由 沙盘引擎 服务器列表提供。
 +
 +沙盘引擎一直秉承**开放、合作、共赢**的态度。
 +
 +因此即使是普通玩家架设的联机服务器,也会被正常检索并公开到《沙盘引擎》服务器列表。
 +
 +基于以上情况,沙盘引擎 无法对所有私人架设的专用服务器予以完全监督,玩家需要自行斟酌不同服务器的玩法和保障。
 +
 +
 +
 +### 认证服务器(受信任的网络服务器)
 +
 +在此项下检索到的服务器为**受《沙盘引擎》项目组认证的服务器**。
 +
 +为了避免长期**稳定、可靠、新颖**的服务器与一些**短期开放或不稳定**的服务器产生混淆及争议。
 +
 +我们对服务器是否应该加入**认证服务器**做出如下**基础标准(满足任一条件)**:
 +
 +- 服务器开发组至少包含一名成员来自于 沙盘引擎 项目组
 +
 +- 服务器稳定运行时间超过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\`(反斜杠)包围格式的数据信息。
 +
 +
 +
 +
 +
 +
 +
 +</markdown>