gamecloud
Version:
game logic server over cloud
91 lines (74 loc) • 2.74 kB
Markdown
任务系统实现任务配置的读入、监控任务的完成情况、显示任务列表、领取任务奖励等流程
1. 任务管理类
任务管理类是 assistant 类的子类:
facade/model/assistant/task.js
```js
const facade = require('gamecloud');
class task extends facade.Assistant {
/**
* 构造函数
* @param {BaseUserEntity} parent 代表用户的角色对象
*/
constructor(parent) {
//指定角色表中的'task'字段为任务管理的持久化字段
super(parent, 'task');
}
}
```
如果 user 是角色类的实例,那么 user.baseMgr.task 将指向任务管理类的实例:
```js
//在逻辑流程的合适地方,调用 user.baseMgr.task 的接口方法 Execute,为用户登记任务完成记录:'达成通关新的关卡'
user.baseMgr.task.Execute(em_Condition_Type.gateMaxNo, 1, em_Condition_Checkmode.add);
```
2. 任务配置表: config/data/task.json
```json
{
"1001": //任务编号
{
"id":"1001", //任务编号
"condition":"20,3", //任务条件设定,格式为"条件类型,条件阈值[;条件类型,条件阈值]"
"bonus":"1,10", //任务奖励设定,格式为"奖励类型,奖励数量[;奖励类型,奖励数量]"
"front":"0", //任务的前置任务设定,直接引用任务编号(逗分字符串)
"layer":"0" //任务的嵌套层次
}
}
```
注: facade.const.em_Condition_Type 定义了所有的可引用任务类型,可使用如下语句增添新的定义:
```js
//用户自定义任务类型取值范围 9001~9999
let newCondition = ['condition001', 9001];
facade.const.AddConditionType(...newCondition);
```
注: facade.const.ResType 定义了所有的可用奖励类型,可使用如下语句增添新的定义:
```js
//用户自定义资源类型取值范围 9001~9999
let newRes = ['res001', 9001];
facade.const.AddResType(...newRes);
```
3. 任务管理控制器
facade/control/CoreOfLogic/task.js
```js
class task extends baseCtl {
async list(user, objData){
return {
code: ReturnCode.Success,
data: user.baseMgr.task.getList(objData.type, objData.status)
}
}
async getBonus(user, objData){
return {
code: ReturnCode.Success,
data: user.baseMgr.task.getBonus(objData.id)
}
}
async getInfo(user,objData){
return {
code: ReturnCode.Success,
data: user.baseMgr.task.getTaskObj(objData.id)
}
}
}
```