跳到主要内容

WukongMP SDK 0.4.0 发布

· 阅读需 5 分钟
ReadyM 团队
WukongMP 和 OblivionMP 的开发者

本次发布的大部分工作都花在了服务器端 API 上。服务器端模组可以在任意作用域中创建实体、订阅服务器事件、踢出玩家,以及读取自己的配置文件。我们把这些全都用上了,重写了对战模式。

模组包也换了新的结构。联机合作的修复解决了 0.3.1 的三个已知问题,以及大家碰得最多的那些 bug。

模组作者请注意:本版本有实质性的破坏性变更。重新构建之前,请先阅读升级

打包

现在一个模组就是一个文件夹,两半都装在里面:

WukongMp.Coop/
manifest.json
client/
server/

服务器把 client/ 提供给玩家,自己加载 server/,所以服务器端模组现在是一个正常的模组,而不再是 server_mods/ 里散落的 DLL。任何你不会交给玩家的东西,都属于 server/

模组模板已经更新为生成这种结构,用它的构建脚本是最省事的做法。服务器如何读取它,请参见模组管理

模组还可以附带一个或多个 JSON 配置文件,并把它们映射到配置类上。仅供服务器使用的配置文件不会离开服务器。

服务器 API

服务器端模组在 0.3.0 中登场时,已经可以注册组件、tick 系统和响应 RPC。0.4.0 补上了此前缺失的大部分内容:

  • 服务器事件。 覆盖玩家、区域,以及整个会话期间以世界为作用域的组件。
  • 实体创建。 EcsApi 可以在任意作用域中创建并持有实体,从全局一直到仅服务器,而不再只能读取服务器已创建的那些。实体之间也可以建立父子关系。
  • 玩家。 踢出某个玩家,或者查出某个会话背后的 ReadyM 账号。
  • 一次调用完成注册。 RegisterArchetypes 方法取代了你以前需要在两侧各写一遍的注册类。
  • 服务器 RPC 在游戏线程上运行,因此系统和 RPC 处理程序不会并发访问内存。

文档中的服务器端模组一节讲了全部内容,完整的 API 面则在 API 参考中。

联机合作修复

0.3.1 的三个已知问题全部修复,同时也修掉了大家反馈最多的那些:

  • Boss 在战斗开始前就瞬间死亡。
  • 敌人在你靠近之前是不可见的,然后才突然出现。
  • 敌人移动持续卡顿。现在怪物的插值正常了。
  • HP 缩放看起来会给 Boss 回血,并且在重连后和反复战斗时会出错,比如与阴虎的战斗。
  • 敌人在复活后死亡,以及在持有它的玩家离开区域时对其他所有人也死亡。
  • 漂移到不同步状态的怪物现在会被纠正,所有权也会跟随最近的玩家。
  • 重连不会再让隐藏的植物敌人以植物形态进行战斗。

对战模式重写

对战模式此前基本上是客户端逻辑,服务器只做中继。谁先进入竞技场,谁就负责运行全部匹配逻辑。

现在它是一个服务器端模组。回合流程、出生点和队伍分配都在服务器上运行,客户端只负责渲染结果,这一路上也顺带修掉了一长串回合和大厅的 bug。0.2.0 引入的临时 IWukongPvpApiIWukongCheatsApi 已经移除,正如我们在 0.3.0 中承诺的那样。

已知问题

阴虎可能软锁。 如果一名玩家死亡,而另一名玩家打完了这个 Boss,战斗可能会卡在过场动画的软锁里。阴虎的其他几个问题都在本版本中修复了,这一个我们会晚些处理。

升级

  • 把 SDK 包升到 0.4.0 还在用旧模板的 DLL 引用?请先改用 NuGet 包,做法见开源公告
  • 按上面的结构重新打包你的模组。 散落的 server_mods/ 目录不再会被读取。
  • 原型注册方式变了。 IArchetypeRegistration 现在是 internal 的,请改为在模组的 Initialize 中调用 RegisterArchetypes
  • WukongArchetypes 现在是静态的。 请直接引用它的成员,而不是从依赖注入容器中解析它。
  • 对战 API 和作弊 API 已经移除。 对战模组就是把同样的事情放到服务器端来做的现成例子。
  • EntityBuilderBase 已移除。
  • UpdateTick 的成员改为 PascalCase。 tick.deltaTime 现在是 tick.DeltaTime
  • 聊天默认关闭,可以通过编辑客户端 SDK 的配置文件在你的服务器上启用。

0.2.40.3.0 升级过来?请先过一遍 0.3.0 的迁移指南0.3.1 中关于 NativeString256 的说明