道具:添加礼包字段
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
// 物品表
|
||||
import {decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr} from '../util'
|
||||
import { FILENAME, IT_TYPE, ABI_TYPE , GOOD_TYPE} from '../../consts'
|
||||
import { decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr } from '../util'
|
||||
import { FILENAME, IT_TYPE, ABI_TYPE, GOOD_TYPE } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
const _ = require('lodash');
|
||||
import { findWhere } from 'underscore';
|
||||
|
||||
export interface SpecialMaterial {
|
||||
readonly ids: number[];
|
||||
readonly ids: number[];
|
||||
readonly count: number;
|
||||
}
|
||||
|
||||
@@ -41,9 +41,9 @@ export interface DicGoods {
|
||||
// 将魂对应武将id
|
||||
readonly hid: number;
|
||||
// 属性
|
||||
readonly goodsAbility:Map<number, number>;
|
||||
readonly goodsAbility: Map<number, number>;
|
||||
// 强化属性
|
||||
readonly goodsAbilityUp:Map<number, number>;
|
||||
readonly goodsAbilityUp: Map<number, number>;
|
||||
// 套装id
|
||||
readonly suitId: number;
|
||||
// 特殊属性
|
||||
@@ -52,39 +52,41 @@ export interface DicGoods {
|
||||
readonly value: number;
|
||||
|
||||
readonly count?: number;
|
||||
|
||||
|
||||
readonly nextJewelId?: number;
|
||||
readonly specialCount?: number;
|
||||
readonly nextSpecialId?: number;
|
||||
// 对应的装备id
|
||||
readonly equipId?: number;
|
||||
// 解锁条件
|
||||
readonly condition: {id: number, type: number, params: number[]}[];
|
||||
readonly condition: { id: number, type: number, params: number[] }[];
|
||||
// 时间限制
|
||||
readonly timeLimit: number;
|
||||
// 图片
|
||||
readonly image_id: number;
|
||||
// 礼包id
|
||||
readonly gift: number;
|
||||
}
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicGoodsKeys: KeysEnum<DicGoods> = {
|
||||
good_id: true,
|
||||
name: true,
|
||||
lvLimited: true,
|
||||
pieces: true,
|
||||
good_id: true,
|
||||
name: true,
|
||||
lvLimited: true,
|
||||
pieces: true,
|
||||
composeMaterial: true,
|
||||
specialMaterial: true,
|
||||
decomposeItem: true,
|
||||
quality: true,
|
||||
hole: true,
|
||||
specialMaterial: true,
|
||||
decomposeItem: true,
|
||||
quality: true,
|
||||
hole: true,
|
||||
randomEffect: true,
|
||||
itid: true,
|
||||
itid: true,
|
||||
goodType: true,
|
||||
hid: true,
|
||||
goodsAbility: true,
|
||||
goodsAbilityUp: true,
|
||||
suitId: true,
|
||||
specialAttr: true,
|
||||
hid: true,
|
||||
goodsAbility: true,
|
||||
goodsAbilityUp: true,
|
||||
suitId: true,
|
||||
specialAttr: true,
|
||||
value: true,
|
||||
pieceId: true,
|
||||
count: true,
|
||||
@@ -94,16 +96,17 @@ const DicGoodsKeys: KeysEnum<DicGoods> = {
|
||||
equipId: true,
|
||||
condition: true,
|
||||
timeLimit: true,
|
||||
image_id: true
|
||||
image_id: true,
|
||||
gift: true
|
||||
}
|
||||
export const dicJewel = new Map<number, DicGoods>();
|
||||
export const dicGoods = new Map<number, DicGoods>();
|
||||
export const blueprt = new Map<number, Array<number>>();
|
||||
export const figureCondition = new Map<number, {params: number[], id: number, gid: number}[]>(); // type => {params, id, gid}
|
||||
export const figureCondition = new Map<number, { params: number[], id: number, gid: number }[]>(); // type => {params, id, gid}
|
||||
|
||||
export function loadGoods() {
|
||||
let arr = readFileAndParse(FILENAME.DIC_GOODS);
|
||||
|
||||
|
||||
arr.forEach(o => {
|
||||
o.goodsAbility = parseAbility(o);
|
||||
o.goodsAbilityUp = parseAbilityUp(o);
|
||||
@@ -119,22 +122,22 @@ export function loadGoods() {
|
||||
o.equipId = good.good_id;
|
||||
}
|
||||
let condition = parseConditionStr(o.condition);
|
||||
for(let {id, type, params} of condition) {
|
||||
let mapArr = figureCondition.get(type)||new Array<{params: number[], id: number, gid: number}>();
|
||||
mapArr.push({ params, id: id, gid: o.good_id});
|
||||
for (let { id, type, params } of condition) {
|
||||
let mapArr = figureCondition.get(type) || new Array<{ params: number[], id: number, gid: number }>();
|
||||
mapArr.push({ params, id: id, gid: o.good_id });
|
||||
figureCondition.set(type, mapArr);
|
||||
}
|
||||
o.condition = condition;
|
||||
dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys)));
|
||||
|
||||
|
||||
if (o.itid == IT_TYPE.BLUEPRT) {
|
||||
let arr = blueprt.get(o.quality)||new Array<number>();
|
||||
let arr = blueprt.get(o.quality) || new Array<number>();
|
||||
arr.push(o.good_id);
|
||||
blueprt.set(o.quality, arr);
|
||||
} else if (o.goodType == GOOD_TYPE.JEWEL) {
|
||||
let material = o.composeMaterial[0];
|
||||
if (!!material && !!material.id) {
|
||||
let lastJewel = findWhere(arr,{good_id:material.id});
|
||||
let lastJewel = findWhere(arr, { good_id: material.id });
|
||||
if (!!lastJewel) {
|
||||
lastJewel.count = material.count;
|
||||
lastJewel.nextJewelId = o.good_id;
|
||||
@@ -149,56 +152,56 @@ export function loadGoods() {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseSpecialAttr(str: string) {
|
||||
let specialAttr = new Map<number, number>();
|
||||
if(str) {
|
||||
if (str) {
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [type, count] of decodeArr) {
|
||||
if(isNaN(parseInt(type)) || isNaN(parseInt(count))) {
|
||||
for (let [type, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
|
||||
|
||||
specialAttr.set(parseInt(type), parseInt(count));
|
||||
}
|
||||
}
|
||||
}
|
||||
return specialAttr;
|
||||
}
|
||||
|
||||
function parseAbility(json) {
|
||||
let map = new Map<number, number>();
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp||0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk||0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def||0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef||0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease||0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease||0);
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp || 0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk || 0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def || 0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease || 0);
|
||||
return map
|
||||
}
|
||||
|
||||
function parseAbilityUp(json) {
|
||||
let map = new Map<number, number>();
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp_up||0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk_up||0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def_up||0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef_up||0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up||0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up||0);
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp_up || 0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def_up || 0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up || 0);
|
||||
return map
|
||||
}
|
||||
|
||||
function parseSpecialMaterial(str: string) {
|
||||
let specialAttr = {ids: new Array<number>(), count: 0}
|
||||
if(!str) return specialAttr;
|
||||
let specialAttr = { ids: new Array<number>(), count: 0 }
|
||||
if (!str) return specialAttr;
|
||||
|
||||
let decodeArr = decodeArrayStr(str);
|
||||
if(decodeArr.length >= 2) {
|
||||
if (decodeArr.length >= 2) {
|
||||
let ids = parseNumberList(decodeArr[0]);
|
||||
let count = parseInt(decodeArr[1]);
|
||||
if(isNaN(count)) return specialAttr;
|
||||
if (isNaN(count)) return specialAttr;
|
||||
specialAttr.ids = ids;
|
||||
specialAttr.count = count;
|
||||
}
|
||||
@@ -217,7 +220,7 @@ export function parseConditionStr(str: string) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
let parsedParam = new Array<number>();
|
||||
for(let param of params) {
|
||||
for (let param of params) {
|
||||
if (isNaN(parseInt(param))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user