66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
// 物品表
|
|
import { decodeArrayListStr, readFileAndParse, parseGoodStr } from '../util'
|
|
import { FILENAME, ABI_TYPE} from '../../consts'
|
|
const _ = require('lodash');
|
|
|
|
export interface SpecialMaterial {
|
|
readonly ids: number[];
|
|
readonly count: number;
|
|
}
|
|
|
|
export interface DicTitle {
|
|
readonly id: number;
|
|
// 等级
|
|
readonly mainAttrValue: Map<number, number>; // id => value 这里的值是上一级的基础上增加的值
|
|
readonly assiAttrValue: Map<number, number>; // id => value
|
|
// 等级现在
|
|
readonly lvLimited: number;
|
|
// 升级消耗
|
|
readonly material:Array<{id: number, number: number}>;
|
|
}
|
|
|
|
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
|
const DicTitleKeys: KeysEnum<DicTitle> = {
|
|
id: true,
|
|
mainAttrValue: true,
|
|
assiAttrValue: true,
|
|
lvLimited: true,
|
|
material: true
|
|
}
|
|
export const dicTitle = new Map<number, DicTitle>();
|
|
export function loadTitle() {
|
|
dicTitle.clear();
|
|
|
|
let arr = readFileAndParse(FILENAME.DIC_TITLE);
|
|
|
|
arr.forEach(o => {
|
|
o.mainAttrValue = parseMainAttr(o);
|
|
o.assiAttrValue = parseAttr(o.assiAttrValue);
|
|
o.material = parseGoodStr(o.material);
|
|
dicTitle.set(o.id, _.pick(o, Object.keys(DicTitleKeys)));
|
|
});
|
|
|
|
arr = undefined;
|
|
}
|
|
|
|
function parseAttr(str: string) {
|
|
let result = new Map<number, number>();
|
|
if(!str) return result;
|
|
let decodeArr = decodeArrayListStr(str);
|
|
for(let [id, value] of decodeArr) {
|
|
if(isNaN(parseInt(id)) || isNaN(parseInt(value))) {
|
|
throw new Error('data table format wrong');
|
|
}
|
|
result.set(parseInt(id), parseInt(value));
|
|
}
|
|
return result
|
|
}
|
|
|
|
function parseMainAttr(elem) {
|
|
let result = new Map<number, number>();
|
|
result.set(ABI_TYPE.ABI_HP, elem.hp);
|
|
result.set(ABI_TYPE.ABI_ATK, elem.atk);
|
|
result.set(ABI_TYPE.ABI_DEF, elem.def);
|
|
result.set(ABI_TYPE.ABI_MDEF, elem.mdef);
|
|
return result;
|
|
} |