跳到主要内容

Engine 模块

禅与摩托车维修艺术

设计理念

Engine 模块其实并不是一个比较高层次的模块,该模块提供了一层实现游戏某些功能的薄封装,解耦了游戏和登录器之间的直接依赖。所有 SEAC 的其他高级模块没有覆盖到的部分都放在该模块下。

该模块除了 function 类外,功能是应该是原子的,无其他模块依赖的。此外因为这些封装都特化于特定游戏功能,可复用程度很低,与其一开始提供一个臃肿的实现,不如开放扩展接口,以便外部自行封装并复用需要的功能。

engine 命名空间

engine命名空间实质就是一个对象,提供了一个扩展方法 extend 和四大类功能:

  • ui:ui 控制相关
  • query:查询玩家信息相关
  • mutate:修改玩家信息相关
  • function:高级功能集

engine.extend

函数签名:

engine.extend(func: AnyFunction | Record<string, AnyFunction>): void

传入一个函数或者包含若干方法的对象,这些函数将以函数名作为键被复制到engine上,然后engine上就可以调用这些函数了。

function 类

提供由一组功能组成的高级功能。

engine.lowerHp

自动使用谱尼第三封印进行压血,需要调用方保证第三封印已经开启,同时确保ct的合法性。

function lowerHp(pets: number[], healPotionId?: ValueOf<typeof PotionId>, hpLimit?: number): Promise<void>;
  • pets: 精灵的ct数组,压血目标,若长度超过6则截断。会自动进行背包的切换。
  • healPotionId: 回血药的id,默认使用50血药。
  • hpLimit: 压血上限,该功能执行完毕后保证精灵血量小于此数值,默认200。

注意该方法会自动进行若干次对战,且会调用core中的战斗调度器。同时还会对进行自动使用中级活力药剂进行pp的回复并且关闭自动治疗等。

返回一个 Promise,该 Promise 会在压血全部完成后 resolve。

engine.switchBag

切换背包,需要调用方确保ct的合法性。

function switchBag(pets: number[] | Pet[]): Promise<void>;
  • pets: 精灵的ct数组,压血目标,若长度超过6则截断。

需要注意两点:

  1. 数组的第一个元素不一定会设置为首发
  2. 执行该功能会在一个开始先清空现有背包,因此除了指定精灵外,背包内不会有其他精灵。如果传入数组长度为0则可以起到清空背包的效果。

socket 命名空间

请参阅收发包教程了解如何使用 socket 进行收发包。

socket.sendByQueue

socket.multiValues

socket.bitSet

socket.playerInfo