添加字典表解析
This commit is contained in:
72
shared/pubUtils/dictionary/DicTowerTask.ts
Normal file
72
shared/pubUtils/dictionary/DicTowerTask.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
// 镇念塔派遣任务表
|
||||
import {parseReward, decodeArrayListStr, decodeArrayStr, readJsonFile} from '../util'
|
||||
import { FILENAME } from '../../consts/consts';
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
interface SuitFloor {
|
||||
min: number;
|
||||
max?: number;
|
||||
}
|
||||
|
||||
export interface DicTowerTask {
|
||||
// 任务id
|
||||
readonly taskId: number;
|
||||
// 任务名称
|
||||
readonly taskName: string;
|
||||
// 任务品质
|
||||
readonly quality: number;
|
||||
// 任务奖励
|
||||
readonly reward: Array<RewardInter>;
|
||||
// 额外奖励
|
||||
readonly additionalReward: Array<RewardInter>;
|
||||
// 达成额外奖励需要的武将条件
|
||||
readonly termsForAdd: Array<{type: number, param: number, count: number}>;
|
||||
// 完成任务所需的武将数
|
||||
readonly actorNeeded: number;
|
||||
// 完成时间(秒)
|
||||
readonly completeTime: number;
|
||||
// 适用层数
|
||||
readonly suitFloor: SuitFloor;
|
||||
// 权重
|
||||
readonly weight: number;
|
||||
|
||||
}
|
||||
|
||||
const str = readJsonFile(FILENAME.DIC_TOWER_TASK);
|
||||
let arr = JSON.parse(str);
|
||||
|
||||
export const dicTowerTask = new Map<number, DicTowerTask>();
|
||||
|
||||
arr.forEach(o => {
|
||||
o.reward = parseReward(o.reward);
|
||||
o.additionalReward = parseReward(o.additionalReward);
|
||||
o.termsForAdd = parseTermsForAdd(o.termsForAdd);
|
||||
o.suitFloor = parseSuitFloor(o.suitFloor as string);
|
||||
dicTowerTask.set(o.taskId, o);
|
||||
});
|
||||
|
||||
function parseTermsForAdd(str: string) {
|
||||
let result = new Array<{type: number, param: number, count: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [type, param, count] of decodeArr) {
|
||||
if(isNaN(parseInt(type)) || isNaN(parseInt(param)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({type: parseInt(type), param: parseInt(param), count: parseInt(count)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function parseSuitFloor(str: string) {
|
||||
if(!str) return {min: 0}
|
||||
let decodeArr = decodeArrayStr(str, '&');
|
||||
let [min, max] = decodeArr;
|
||||
if(max) {
|
||||
if(isNaN(parseInt(min)) || isNaN(parseInt(max))) throw new Error('data table format wrong');
|
||||
return {min: parseInt(min), max: parseInt(max)};
|
||||
} else { // 最大值如果不存在则表示 >= min
|
||||
if(isNaN(parseInt(min))) throw new Error('data table format wrong');
|
||||
return {min: parseInt(min)};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user