装备:升星
This commit is contained in:
29
shared/pubUtils/dictionary/DicEquipQualityExtra.ts
Normal file
29
shared/pubUtils/dictionary/DicEquipQualityExtra.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicEquipQualityExtra {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 品质
|
||||
readonly quality: number;
|
||||
// 限制星级
|
||||
readonly star: number;
|
||||
// 天晶石
|
||||
readonly jewelCnt: number;
|
||||
// 地玉石
|
||||
readonly stoneCnt: number;
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipQualityExtra = new Map<number, DicEquipQualityExtra>();
|
||||
|
||||
export function loadEquipQualityExtra() {
|
||||
dicEquipQualityExtra.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_QUALITY_EXTRA);
|
||||
|
||||
arr.forEach(o => {
|
||||
dicEquipQualityExtra.set(o.quality, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
74
shared/pubUtils/dictionary/DicEquipStar.ts
Normal file
74
shared/pubUtils/dictionary/DicEquipStar.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquipStar {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 装备id
|
||||
readonly equipId: number;
|
||||
// 装备星级
|
||||
readonly star: number;
|
||||
// 装备的武将职业大类
|
||||
readonly jobClass: number;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// 一共有多少点
|
||||
readonly count: number;
|
||||
// 主属性
|
||||
readonly mainAttr: Map<number, {id: number, num: number}[]>;
|
||||
// 次级属性
|
||||
readonly subAttr: {id: number, num: number}[];
|
||||
// 一次升点消耗
|
||||
readonly mainConsume: RewardInter[];
|
||||
// 升星消耗
|
||||
readonly subConsume: RewardInter[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipStar = new Map<number, DicEquipStar>();
|
||||
export const dicEquipStarIdByEquipId = new Map<string, number>(); // equipId&point => id
|
||||
|
||||
export function loadEquipStar() {
|
||||
dicEquipStar.clear();
|
||||
dicEquipStarIdByEquipId.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_STAR);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.mainConsume = parseGoodStr(o.mainConsume);
|
||||
o.subConsume = parseGoodStr(o.subConsume);
|
||||
o.mainAttr = parseAttrMap(o.mainAttr);
|
||||
o.subAttr = parseAttr(o.subAttr);
|
||||
dicEquipStarIdByEquipId.set(`${o.equipId}_${o.star}`, o.id);
|
||||
dicEquipStar.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseAttrMap(str: string) {
|
||||
let result = new Map<number, {id: number, num: number}[]>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let i = 0; i < decodeArr.length; i++) {
|
||||
let [id, num] = decodeArr[i];
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.set(i + 1, [{id: parseInt(id), num: parseInt(num)}]);
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function parseAttr(str: string) {
|
||||
let result = new Array<{id: number, num: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, num] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), num: parseInt(num)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -11,34 +11,33 @@ export interface DicEquipSuit {
|
||||
readonly equips: number[];
|
||||
// 按星级可解锁的属性
|
||||
readonly effect: { star: number, seid: number }[];
|
||||
// 解锁条件索引
|
||||
readonly effectCondition: Map<number, number>
|
||||
}
|
||||
|
||||
export const dicEquipSuit = new Map<number, DicEquipSuit>();
|
||||
export const dicEquipSuitByJobClass = new Map<number, number>();
|
||||
export function loadEquipSuit() {
|
||||
dicEquipSuit.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP);
|
||||
dicEquipSuitByJobClass.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_SUIT);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.equips = parseNumberList(o.equips);
|
||||
parseRandomEffect(o, o.effect);
|
||||
dicEquipSuit.set(o.jobClass, o);
|
||||
o.effect = parseEffect(o.effect);
|
||||
dicEquipSuit.set(o.id, o);
|
||||
dicEquipSuitByJobClass.set(o.jobClass, o.id);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseRandomEffect(o: any, str: string) {
|
||||
if (!str) return null;
|
||||
function parseEffect(str: string) {
|
||||
let result = new Array<{star: number, seid: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
let effect: number[] = [], effectCondition = new Map<number, number>();
|
||||
for (let [star, seid] of decodeArr) {
|
||||
if (isNaN(parseInt(star)) || isNaN(parseFloat(seid))) {
|
||||
for(let [star, seid] of decodeArr) {
|
||||
if(isNaN(parseInt(star)) || isNaN(parseInt(seid))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
effect.push(parseInt(seid));
|
||||
effectCondition.set(parseInt(seid), parseInt(star));
|
||||
result.push({star: parseInt(star), seid: parseInt(seid)});
|
||||
}
|
||||
o.effect = effect;
|
||||
o.effectCondition = effectCondition;
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user