136 lines
3.7 KiB
TypeScript
136 lines
3.7 KiB
TypeScript
// 任务
|
|
import { RewardInter } from '../interface';
|
|
import { readJsonFile, 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[]>();
|
|
|
|
const mainTask = readJsonFile(FILENAME.DIC_MAIN_TASK);
|
|
let arrMainTask = JSON.parse(mainTask);
|
|
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);
|
|
});
|
|
arrMainTask = undefined;
|
|
|
|
const dailyTask = readJsonFile(FILENAME.DIC_DAILY_TASK);
|
|
let arrDailyTask = JSON.parse(dailyTask);
|
|
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);
|
|
});
|
|
arrDailyTask = undefined;
|
|
|
|
const achievement = readJsonFile(FILENAME.DIC_ACHIEVEMENT);
|
|
let arrAchievement = JSON.parse(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);
|
|
});
|
|
arrAchievement = undefined;
|
|
|
|
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)
|
|
} |