// 物品表 import { decodeArrayListStr, readJsonFile, parseGoodStr } from '../util' import { FILENAME} from '../../consts' const _ = require('lodash'); export interface SpecialMaterial { readonly ids: number[]; readonly count: number; } export interface DicTeraph { // 等级 readonly id: number; readonly index: number; readonly grade: number; readonly hpMax: number; readonly atkMax: number; readonly defMax: number; readonly mdefMax: number; readonly agiMax: number; readonly lukMax: number; readonly hp; readonly atk; readonly def; readonly mdef; readonly agi; readonly luk; readonly criRate; readonly criEffect; readonly upMaterial:Array<{id: number, number: number}>; readonly assiAttrValue:Array<{id: number, number: number}>; readonly upGradeMaterial:Array<{id: number, number: number}>; } const str = readJsonFile(FILENAME.DIC_TERAPH); let arr = JSON.parse(str); type KeysEnum = { [P in keyof Required]: true }; const DicTeraphKeys: KeysEnum = { id: true, index: true, grade: true, hpMax: true, atkMax: true, defMax: true, mdefMax: true, agiMax: true, lukMax: true, hp: true, atk: true, def: true, mdef: true, agi: true, luk: true, criRate: true, criEffect: true, upMaterial: true, assiAttrValue: true, upGradeMaterial: true, } export const dicTeraph = new Map(); arr.forEach(o => { o.assiAttrValue = parseAttr(o.assiAttrValue); o.upGradeMaterial = parseGoodStr(o.upGradeMaterial); o.upMaterial = parseGoodStr(o.upMaterial); o.hp = o.hpUp; o.atk = o.atkUp; o.def = o.defUp; o.mdef = o.mdefUp; o.agi = o.agiUp; o.luk = o.lukUp; dicTeraph.set(o.index + '_' + o.grade, _.pick(o, Object.keys(DicTeraphKeys))); }); arr = undefined; function parseAttr(str: string) { let result = new Array<{id: number, number: number}>(); if(!str) return result; let decodeArr = decodeArrayListStr(str); for(let [id, number] of decodeArr) { if(isNaN(parseInt(id)) || isNaN(parseInt(number))) { throw new Error('data table format wrong'); } result.push({id: parseInt(id), number: parseInt(number)}); } return result }