// 任务 import { RewardInter } from '../interface'; import { readFileAndParse, parseNumberList, parseGoodStr } from '../util'; import { FILENAME, TASK_FUN_TYPE } from '../../consts'; const _ = require('lodash'); type KeysEnum = { [P in keyof Required]: true }; interface DicTaskBase { // id readonly id: number; // 任务类型 readonly taskType: number; // 类型下面的分组 readonly group: number; // 任务参数 readonly taskParam: number[]; // 条件 readonly condition: number; } const DicTaskKeys: KeysEnum = { id: true, taskType: true, group: true, taskParam: true, condition: true }; // 主线任务 export interface DicMainTask extends DicTaskBase { // 奖励 readonly taskReward: RewardInter[]; // 任务阶段 readonly taskStage: number; } const DicMainTaskKeys: KeysEnum = { id: true, taskType: true, group: true, taskParam: true, condition: true, taskStage: true, taskReward: true }; // 每日任务 export interface DicDailyTask extends DicTaskBase { // 奖励 readonly taskReward: RewardInter[]; // 活跃 readonly point: number; // 经验基数 readonly exp: RewardInter; // 获得积分关联的活动id readonly addPointActivityId: number; } const DicDailyTaskKeys: KeysEnum = { id: true, taskType: true, group: true, taskParam: true, condition: true, taskReward: true, point: true, exp: true, addPointActivityId: true }; // 成就 export interface DicAchievement extends DicTaskBase { // 奖励 readonly taskReward: RewardInter[]; // 活跃 readonly point: number; } const DicAchievementKeys: KeysEnum = { id: true, taskType: true, group: true, taskParam: true, condition: true, taskReward: true, point: true }; export type DicTask = DicTaskBase & { type: number }; export const dicMainTask = new Map(); // 主线任务 export const dicDailyTask = new Map(); // 每日任务 export const dicAchievement = new Map(); // 成就 export const taskMap = new Map>(); taskMap.set(TASK_FUN_TYPE.MAIN, dicMainTask); taskMap.set(TASK_FUN_TYPE.DAILY, dicDailyTask); taskMap.set(TASK_FUN_TYPE.ACHIEVEMENT, dicAchievement); export const dicTaskType = new Map(); export function loadTask() { dicMainTask.clear(); dicDailyTask.clear(); dicAchievement.clear(); const arrMainTask = readFileAndParse(FILENAME.DIC_MAIN_TASK); arrMainTask.forEach(o => { o.taskParam = parseNumberList(o.taskParam); o.taskReward = parseGoodStr(o.taskReward); dicMainTask.set(o.id, _.pick(o, Object.keys(DicMainTaskKeys))); pushDicTaskType(o.taskType, TASK_FUN_TYPE.MAIN, o); }); const arrDailyTask = readFileAndParse(FILENAME.DIC_DAILY_TASK); arrDailyTask.forEach(o => { o.taskParam = parseNumberList(o.taskParam); o.taskReward = parseGoodStr(o.taskReward); o.exp = parseExp(o.exp); dicDailyTask.set(o.id, _.pick(o, Object.keys(DicDailyTaskKeys))); pushDicTaskType(o.taskType, TASK_FUN_TYPE.DAILY, o); }); const arrAchievement = readFileAndParse(FILENAME.DIC_ACHIEVEMENT); arrAchievement.forEach(o => { o.taskParam = parseNumberList(o.taskParam); o.taskReward = parseGoodStr(o.taskReward); dicAchievement.set(o.id, _.pick(o, Object.keys(DicAchievementKeys))); pushDicTaskType(o.taskType, TASK_FUN_TYPE.ACHIEVEMENT, o); }); } function pushDicTaskType(taskType: number, type: number, o: any) { if (!dicTaskType.has(taskType)) { dicTaskType.set(taskType, new Array()); } let newObj = _.pick(o, Object.keys(DicTaskKeys)); newObj.type = type; dicTaskType.get(taskType).push(newObj) } function parseExp(exp: string) { let [ id, count ] = parseNumberList(exp); return {id, count} }