Files
ZYZ/shared/pubUtils/dictionary/DicTask.ts
2021-05-12 18:56:47 +08:00

133 lines
3.7 KiB
TypeScript

// 任务
import { RewardInter } from '../interface';
import { readFileAndParse, parseNumberList, parseGoodStr } from '../util';
import { FILENAME, TASK_FUN_TYPE} from '../../consts';
const _ = require('lodash');
type KeysEnum<T> = { [P in keyof Required<T>]: true };
interface DicTaskBase {
// id
readonly id: number;
// 任务类型
readonly taskType: number;
// 类型下面的分组
readonly group: number;
// 任务参数
readonly taskParam: number[];
// 条件
readonly condition: number;
}
const DicTaskKeys: KeysEnum<DicTaskBase> = {
id: true,
taskType: true,
group: true,
taskParam: true,
condition: true
};
// 主线任务
export interface DicMainTask extends DicTaskBase {
// 奖励
readonly taskReward: RewardInter[];
// 任务阶段
readonly taskStage: number;
}
const DicMainTaskKeys: KeysEnum<DicMainTask> = {
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: number;
}
const DicDailyTaskKeys: KeysEnum<DicDailyTask> = {
id: true,
taskType: true,
group: true,
taskParam: true,
condition: true,
taskReward: true,
point: true,
exp: true
};
// 成就
export interface DicAchievement extends DicTaskBase {
// 奖励
readonly taskReward: RewardInter[];
// 活跃
readonly point: number;
}
const DicAchievementKeys: KeysEnum<DicAchievement> = {
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<number, DicMainTask>(); // 主线任务
export const dicDailyTask = new Map<number, DicDailyTask>(); // 每日任务
export const dicAchievement = new Map<number, DicAchievement>(); // 成就
export const taskMap = new Map<number, Map<number, DicMainTask|DicDailyTask|DicAchievement>>();
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<number, DicTask[]>();
export function loadTask() {
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);
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<DicTask>());
}
let newObj = _.pick(o, Object.keys(DicTaskKeys));
newObj.type = type;
dicTaskType.get(taskType).push(newObj)
}