# 任务系统

## 概述

任务系统实现任务配置的读入、监控任务的完成情况、显示任务列表、领取任务奖励等流程

## 目录结构

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)
        }
    }
}
```
