解析修改:playerCeService

This commit is contained in:
luying
2020-12-15 19:54:32 +08:00
parent 9fe95f2a4e
commit 7f256c996e
8 changed files with 89 additions and 193 deletions

View File

@@ -57,7 +57,7 @@ export class HeroHandler {
// createHero
let curHero = await HeroModel.createHero({
roleId, serverId, roleName, hid, hName, star, quality, job
}, false);
});
await calPlayerCeAndSave(sid, roleId, [curHero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
return resResult(STATUS.SUCCESS, {curHero});
}
@@ -78,7 +78,7 @@ export class HeroHandler {
return resResult(STATUS.ROLE_HERO_LV_TYPE_ERROR);
}
// 计算武将可以升的级数
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
let {lv: playerLv} = await RoleModel.findByRoleId(roleId);
let {lv: oldLv, exp: oldExp} = hero;
@@ -88,7 +88,7 @@ export class HeroHandler {
let newExp = oldExp;
// 计算得材料可转换的经验
let originalConsumes: Array<any> = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.EXP);
let originalConsumes = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.EXP);
let material = new Array<RewardInter>();
for(let {id, count} of originalConsumes) {
let dicGoods = gameData.goods.get(id);
@@ -134,7 +134,7 @@ export class HeroHandler {
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
let {pieceId} = dicHero;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
let {star: oldStar, starStage: oldStarStage, quality} = hero;
@@ -177,7 +177,7 @@ export class HeroHandler {
// 根据dic_hero 获得 碎片id
let {pieceId} = dicHero;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
let {quality: oldQuality, star} = hero;
if(quality != oldQuality) {
@@ -219,7 +219,7 @@ export class HeroHandler {
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
let {pieceId} = dicHero;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if(!hero) return resResult(STATUS.ROLE_HERO_NOT_EXISTS);
let {colorStar: oldColorStar, colorStarStage: oldColorStarStage, star, quality} = hero;
@@ -269,7 +269,7 @@ export class HeroHandler {
let roleId: string = session.get('roleId');
let sid: string = session.get('sid');
let { hid } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
let heroJob = gameData.job.get(hero.job);
@@ -300,7 +300,7 @@ export class HeroHandler {
let roleId: string = session.get('roleId');
let sid: string = session.get('sid');
let { hid } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
let curJob = hero.job;
@@ -355,7 +355,7 @@ export class HeroHandler {
for (let hid of hids) {
if (hid == shipHidAndLevel.actorId)
continue;
let member = await HeroModel.findByHidAndRole(hid, roleId, false);
let member = await HeroModel.findByHidAndRole(hid, roleId);
if (!member)
return resResult(STATUS.ROLE_SHORT_HERO_CONECTION);
if (member.star < friendShip.level)
@@ -375,7 +375,7 @@ export class HeroHandler {
let roleId: string = session.get('roleId');
let sid: string = session.get('sid');
let { hid, items } = msg;
let hero = await HeroModel.findByHidAndRole(hid, roleId, false);
let hero = await HeroModel.findByHidAndRole(hid, roleId);
let lastLv = hero.favourLv;
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
@@ -423,11 +423,11 @@ export class HeroHandler {
let skinInfo = gameData.fashion.get(id);
if (!skinInfo)
return resResult(STATUS.HERO_SKIN_NOT_FIND);
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId, false);
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId);
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
let result = false;
let lastSkinId;
let lastSkinId: number;
for (let skin of hero.skins) {
if (skin.id == id) {
if (!!skin.enable) {

View File

@@ -7,18 +7,19 @@ import { pinus } from 'pinus';
import { STATUS } from '../consts/statusCode';
import { resResult, deepCopy } from '../pubUtils/util';
import Hero from '../db/Hero';
import { HeroModel, HeroType } from '../db/Hero';
import { RoleModel } from '../db/Role';
import { CeAttrData, CeAttr } from '../db/generalField';
import { getFashionsById, getJobInfoById, getJobByGradeAndClass, getHeroInfoById, getHeroStar, getHeroWake, getFiendShipLevel, getFriendShipById, getHeroSkillById, getSeidById } from '../pubUtils/gamedata';
import { getAttrNameByJobStage, getAttrCeRatio, getAtrrNameById, ABI_TYPE_TO_STAGE, ABI_STAGE, SEID_TYPE, HERO_ATTR} from '../consts';
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById } from '../pubUtils/data';
import { Attributes } from '../pubUtils/interface';
const HERO_CE_RATIO = 100;
const _ = require('underscore');
//战力计算TODO
export function calPlayerCe(hero: any, type: number, args: Array<number>) {
export function calPlayerCe(hero: HeroType, type: number, args: Array<number>) {
let incCe = 0;
let incArr = {};
let reIncAttr = {}; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
let incArr: Attributes = {};
let reIncAttr: CeAttr = {}; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
let addSeidList = new Array<number>();
let removeSeidList = new Array<number>();
@@ -54,15 +55,15 @@ export function calPlayerCe(hero: any, type: number, args: Array<number>) {
}
//修改并下发战力
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<any>, type?: number, args?: Array<number>) {
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
let incPlayerCe = 0;
let pushHeros = [];
let pushHeros = new Array<{hid: number, ce: number, incHeroCe: number}>();
for (let hero of heros) {
let incHeroCe = calPlayerCe(hero, type, args);
incPlayerCe += incHeroCe;
await hero.save();
await HeroModel.updateHeroInfo(roleId, hero.hid, hero );
pushHeros.push({
hid: hero.hid,
ce: hero.ce,
@@ -78,10 +79,10 @@ export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Arr
return heros;
}
export function calHeroStarIncAttr (hero: Hero, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
export function calHeroStarIncAttr (hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
let res = {};
const dicHero = getHeroInfoById(hero.hid);
let res: CeAttr = {};
const dicHero = gameData.hero.get(hero.hid);
const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1
if(isWake) {
@@ -89,7 +90,7 @@ export function calHeroStarIncAttr (hero: Hero, args: Array<number>, addSeidList
} else {
if(starStage == ABI_STAGE.START) star = star -1;
}
const dicStar = isWake? getHeroWake(quality, colorStar): getHeroStar(quality, star); // 星级表
const dicStar = isWake? getHeroWakeByQuality(quality, colorStar): getHeroStarByQuality(quality, star); // 星级表
for(let stage of args) {
@@ -107,7 +108,7 @@ export function calHeroStarIncAttr (hero: Hero, args: Array<number>, addSeidList
// 解锁技能
if(dicHero.skill){
let {starSeidArr, colorStarSeidArr} = getHeroSkillById(dicHero.skill);
let {starSeidArr, colorStarSeidArr} = gameData.heroSkill.get(dicHero.skill);
if(isWake) {
for(let {star, value} of starSeidArr){
if(hero.star == star){
@@ -134,14 +135,14 @@ export function getAllAttrStage () {
return attrs;
}
//训练
export function calHeroTrainIncAttr(hero: any) {
let res = {};
export function calHeroTrainIncAttr(hero: HeroType) {
let res: CeAttr = {};
let attrName: string = getAttrNameByJobStage(hero.jobStage);
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp};
let currentJob = getJobInfoById(hero.job);
let currentJob = gameData.job.get(hero.job);
if (currentJob.grade > 1) {
let jobGradeAndClass = getJobByGradeAndClass(currentJob.job_class, currentJob.grade - 1);
let lastJob = getJobInfoById(jobGradeAndClass.jobid);
let lastJob = gameData.job.get(jobGradeAndClass.jobid);
res[attrName].fixUp += (currentJob[attrName] - lastJob[attrName]) * HERO_CE_RATIO;
} else {
res[attrName].fixUp += currentJob[attrName] * HERO_CE_RATIO;
@@ -149,13 +150,13 @@ export function calHeroTrainIncAttr(hero: any) {
return res;
}
//进阶
export function calHeroJobStageUpIncAttr(hero: any, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number> ) {
let res = {};
let lastJob = getJobInfoById(args[0]);
let currentJob = getJobInfoById(hero.job);
addSeidList.concat(deepCopy(currentJob.seids));
for (let seid of lastJob.seids) {
let index = _.indexOf(currentJob.seids, seid);
export function calHeroJobStageUpIncAttr(hero: HeroType, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number> ) {
let res: CeAttr = {};
let lastJob = gameData.job.get(args[0]);
let currentJob = gameData.job.get(hero.job);
addSeidList.concat(deepCopy(currentJob.seid));
for (let seid of lastJob.seid) {
let index = _.indexOf(currentJob.seid, seid);
if (index > 0) {
addSeidList.splice(index, 1);
} else {
@@ -165,17 +166,17 @@ export function calHeroJobStageUpIncAttr(hero: any, args: Array<number>, addSeid
return res;
}
//穿戴时装
export function calWaerHeroSkinIncAttr(hero: any, args: Array<number>) {
let res = {};
let addSkin = getFashionsById(args[0]);
let delSkin = getFashionsById(args[1]);
let attrName;
for (let attr of delSkin.actorAttrs) {
export function calWaerHeroSkinIncAttr(hero: HeroType, args: Array<number>) {
let res: CeAttr = {};
let addSkin = gameData.fashion.get(args[0]);
let delSkin = gameData.fashion.get(args[1]);
let attrName: string;
for (let attr of delSkin.actorAttr) {
attrName = getAtrrNameById(attr.id);
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp};
res[attrName].fixUp += attr.number * HERO_CE_RATIO;
}
for (let attr of addSkin.actorAttrs) {
for (let attr of addSkin.actorAttr) {
attrName = getAtrrNameById(attr.id);
res[attrName] = {fixUp: hero.ceAttr[attrName].fixUp, base: hero.ceAttr[attrName].base, ratioUp: hero.ceAttr[attrName].ratioUp};
res[attrName].fixUp -= attr.number * HERO_CE_RATIO;
@@ -184,12 +185,12 @@ export function calWaerHeroSkinIncAttr(hero: any, args: Array<number>) {
}
//羁绊解锁
export function calHeroConectIncAttr(hero: any, args: Array<number>) {
let res = {};
let fiendShipLevel = getFiendShipLevel(hero.favourLv);
export function calHeroConectIncAttr(hero: HeroType, args: Array<number>) {
let res: CeAttr = {};
let fiendShipLevel = gameData.friendShipLevelMap.get(hero.favourLv);
let shipId = args[0];//当前升级的羁绊序号
let level = args[1];//当前升级的羁绊等级
let attrName;
let attrName: string;
let currentShip = getFriendShipById(shipId, level);
for (let attr of currentShip.attributes) {
attrName = getAtrrNameById(attr.id);
@@ -208,15 +209,15 @@ export function calHeroConectIncAttr(hero: any, args: Array<number>) {
}
//好感升级
export function calHeroFavourUpIncAttr(hero: any, args: Array<number>) {
let res = {};
let currentFiendShipLevel = getFiendShipLevel(hero.favourLv);
export function calHeroFavourUpIncAttr(hero: HeroType, args: Array<number>) {
let res: CeAttr = {};
let currentFiendShipLevel = gameData.friendShipLevelMap.get(hero.favourLv);
let difAdd = currentFiendShipLevel.add;
if (!!args[0]) {
let lastFiendShipLevel = getFiendShipLevel(args[0]);
let lastFiendShipLevel = gameData.friendShipLevelMap.get(args[0]);
difAdd -= lastFiendShipLevel.add;
}
let attrName;
let attrName: string;
for (let connect of hero.connections) {
let heroShip = getFriendShipById(connect.shipId, connect.level);
for (let attr of heroShip.attributes) {
@@ -234,7 +235,7 @@ function getFieldByStage(stage: number, jobid: number) {
if(typeof targetAttrId === 'number') {
return targetAttrId
} else {
const dicJob = getJobInfoById(jobid);
const dicJob = gameData.job.get(jobid);
return targetAttrId(dicJob.type);
}
}
@@ -250,7 +251,7 @@ function addSeidEffect(reIncAttr: CeAttr, addSeidList: Array<number>, removeSeid
for(let {list, multi} of otiginalSeidList) {
let effectList = new Array<any>(); // any: dic_zyz_se表内容
for(let seid of list) {
let dicSeid = getSeidById(seid);
let dicSeid = gameData.se.get(seid);
if(dicSeid && dicSeid.id > 0){
addSeid(effectList, dicSeid.id, dicSeid.gainValueArr)
}
@@ -272,7 +273,7 @@ function addSeidEffect(reIncAttr: CeAttr, addSeidList: Array<number>, removeSeid
// 获取dic_zyz_se内容
function addSeid(effectList: Array<any>, seidId:number, seidValue = new Array<number>()){
// console.log('addSeidEffect', seidId, seidValue)
let curSeid = getSeidById(seidId);
let curSeid = gameData.se.get(seidId);
if(!curSeid) {console.log("seidId not found:"+seidId);return;}
if(!seidValue) seidValue = curSeid.gainValueArr;

View File

@@ -124,11 +124,11 @@ export const ABI_TYPE_TO_STAGE = new Map<number, number | ((jobType: number) =>
[ABI_STAGE.LUK, ABI_TYPE.ABI_LUK]
]);
export function getAtrrNameById(attrId: number) {
export function getAtrrNameById(attrId: number):string {
return HERO_ATTR[attrId];
};
export function getAttrCeRatio(attr: string) {
export function getAttrCeRatio(attr: string):number {
return CE_RATIO[attr];
};

View File

@@ -21,7 +21,7 @@ import { dicXunbao } from "./dictionary/DicXunbao";
import { SPECIAL_ATTR } from "../consts/consts";
import { dicFashions } from "./dictionary/DicFashions";
import { friendShips, friendShipHidAandIds } from "./dictionary/DicFriendShip";
import { dicFriendShipLevel } from "./dictionary/DicFriendShipLevel";
import { dicFriendShipLevel, dicFriendShipLevelMap } from "./dictionary/DicFriendShipLevel";
import { dicHeroQualityUp } from "./dictionary/DicHeroQualityUp";
import { dicHeroStar } from "./dictionary/DicHeroStar";
import { dicHeroWake } from "./dictionary/DicHeroWake";
@@ -59,7 +59,8 @@ export const gameData = {
fashion: dicFashions,
friendShips: friendShips,
friendShipHidAandIds: friendShipHidAandIds,
friendShipLevel: dicFriendShipLevel
friendShipLevel: dicFriendShipLevel,
friendShipLevelMap: dicFriendShipLevelMap
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据

View File

@@ -8,9 +8,9 @@ export interface DicFashions {
// 增加的被动技能
readonly seid: Array<number>;
// 全局加成
readonly globalAttr: Array<{type: number, value: number}>;
readonly globalAttr: Array<{id: number, number: number}>;
// 单体加成
readonly actorAttr: Array<{type: number, value: number}>;
readonly actorAttr: Array<{id: number, number: number}>;
// 角色id
readonly actorId: number;
}
@@ -27,14 +27,14 @@ arr.forEach(o => {
});
function parseAttr(str: string) {
let result = new Array<{type: number, value: number}>();
let result = new Array<{id: number, number: number}>();
if(!str) return result;
let decodeArr = decodeArrayListStr(str);
for(let [type, value] of decodeArr) {
if(isNaN(parseInt(type)) || isNaN(parseInt(value))) {
for(let [id, number] of decodeArr) {
if(isNaN(parseInt(id)) || isNaN(parseInt(number))) {
throw new Error('data table format wrong');
}
result.push({type: parseInt(type), value: parseInt(value)});
result.push({id: parseInt(id), number: parseInt(number)});
}
return result
}

View File

@@ -16,7 +16,7 @@ export interface DicFriendShip {
// 羁绊武将ID
readonly hids: Array<number>;
// 属性加成
readonly attribute: Array<{id: number, number: number}>
readonly attributes: Array<{id: number, number: number}>
// 消耗铜币
readonly costCoin: number;
}
@@ -27,7 +27,7 @@ let arr = JSON.parse(str);
export const friendShips = new Map<string, DicFriendShip>();
export const friendShipHidAandIds = new Map<number, {actorId: number, level:number}>();
arr.forEach(o => {
o.attribute = parseAttribute(o.attribute);
o.attributes = parseAttribute(o.attribute);
o.hids = parseNumberList(o.memberId);
friendShips.set(o.shipId + '_' + o.level, o);
let fiendShipHidAandId = friendShipHidAandIds.get(o.shipId);

View File

@@ -15,8 +15,10 @@ const str = readJsonFile(FILENAME.DIC_FRIEND_SHIP_LEVEL);
let arr = JSON.parse(str);
export const dicFriendShipLevel = new Array<DicFriendShipLevel>();
export const dicFriendShipLevelMap = new Map<number, DicFriendShipLevel>();
arr.forEach(o => {
dicFriendShipLevel.push(o);
dicFriendShipLevelMap.set(o.level, o);
});
dicFriendShipLevel.sort(function(a, b) {
return a.level - b.level;

View File

@@ -7,13 +7,7 @@
"level": 1,
"memberId": "2&3&4&5",
"attribute": "1&200|2&300",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 2,
@@ -23,13 +17,7 @@
"level": 2,
"memberId": "2&3&4&5",
"attribute": "1&300|2&400",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 3,
@@ -39,13 +27,7 @@
"level": 3,
"memberId": "2&3&4&5",
"attribute": "1&400|2&500",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 4,
@@ -55,13 +37,7 @@
"level": 4,
"memberId": "2&3&4&5",
"attribute": "1&600|2&700",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 5,
@@ -71,13 +47,7 @@
"level": 5,
"memberId": "2&3&4&5",
"attribute": "1&800|2&900",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 6,
@@ -87,13 +57,7 @@
"level": 6,
"memberId": "2&3&4&5",
"attribute": "1&1000|2&1000",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 7,
@@ -103,13 +67,7 @@
"level": 1,
"memberId": "6&7",
"attribute": "1&200|2&300",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 8,
@@ -119,13 +77,7 @@
"level": 2,
"memberId": "6&7",
"attribute": "1&300|2&400",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 9,
@@ -135,13 +87,7 @@
"level": 3,
"memberId": "6&7",
"attribute": "1&400|2&500",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 10,
@@ -151,13 +97,7 @@
"level": 4,
"memberId": "6&7",
"attribute": "1&600|2&700",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 11,
@@ -167,13 +107,7 @@
"level": 5,
"memberId": "6&7",
"attribute": "1&800|2&900",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 12,
@@ -183,13 +117,7 @@
"level": 6,
"memberId": "6&7",
"attribute": "1&1000|2&1000",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 13,
@@ -199,13 +127,7 @@
"level": 1,
"memberId": "8&",
"attribute": "1&200|2&300",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 14,
@@ -215,13 +137,7 @@
"level": 2,
"memberId": "8&",
"attribute": "1&300|2&400",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 15,
@@ -231,13 +147,7 @@
"level": 3,
"memberId": "8&",
"attribute": "1&400|2&500",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 16,
@@ -247,13 +157,7 @@
"level": 4,
"memberId": "8&",
"attribute": "1&600|2&700",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 17,
@@ -263,13 +167,7 @@
"level": 5,
"memberId": "8&",
"attribute": "1&800|2&900",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
},
{
"id": 18,
@@ -279,12 +177,6 @@
"level": 6,
"memberId": "8&",
"attribute": "1&1000|2&1000",
"costCoin": 5000,
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
"costCoin": 0
}
]