// 物品表 import { decodeArrayListStr, readFileAndParse, parseGoodStr } from '../util' import { FILENAME, ABI_TYPE} from '../../consts' import { RewardInter } from '../interface'; 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 mainAttrMax: Map; // 最大强化加成 id => value 18围内的id readonly mainAttrUp: Map; // 每次强化加成 id => value 18围内的id readonly criRate: number; readonly criEffect: number; readonly upMaterial:Array; readonly assiAttrValue:Map; // 次级属性 readonly upGradeMaterial:Array; } export const dicTeraph = new Map(); export function loadTeraph() { let arr = readFileAndParse(FILENAME.DIC_TERAPH); type KeysEnum = { [P in keyof Required]: true }; const DicTeraphKeys: KeysEnum = { id: true, index: true, grade: true, mainAttrMax: true, mainAttrUp: true, criRate: true, criEffect: true, upMaterial: true, assiAttrValue: true, upGradeMaterial: true, } arr.forEach(o => { o.assiAttrValue = parseAttr(o.assiAttrValue); o.upGradeMaterial = parseGoodStr(o.upGradeMaterial); o.upMaterial = parseGoodStr(o.upMaterial); o.mainAttrMax = parseMainAttrMax(o); o.mainAttrUp = parseMainAttrUp(o); dicTeraph.set(o.index + '_' + o.grade, _.pick(o, Object.keys(DicTeraphKeys))); }); arr = undefined; } function parseAttr(str: string) { let result = new Map(); 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.set(parseInt(id), parseInt(number)); } return result } function parseMainAttrMax(elem) { let result = new Map(); result.set(ABI_TYPE.ABI_HP, elem.hpMax); result.set(ABI_TYPE.ABI_ATK, elem.atkMax); result.set(ABI_TYPE.ABI_DEF, elem.defMax); result.set(ABI_TYPE.ABI_MDEF, elem.mdefMax); return result } function parseMainAttrUp(elem) { let result = new Map(); result.set(ABI_TYPE.ABI_HP, elem.hpUp); result.set(ABI_TYPE.ABI_ATK, elem.atkUp); result.set(ABI_TYPE.ABI_DEF, elem.defUp); result.set(ABI_TYPE.ABI_MDEF, elem.mdefUp); return result }