diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 632bf1f9d..89c2f49a1 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -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 = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.EXP); + let originalConsumes = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.EXP); let material = new Array(); 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) { diff --git a/game-server/app/services/playerCeService.ts b/game-server/app/services/playerCeService.ts index d947d6c23..538533c76 100644 --- a/game-server/app/services/playerCeService.ts +++ b/game-server/app/services/playerCeService.ts @@ -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) { +export function calPlayerCe(hero: HeroType, type: number, args: Array) { 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(); let removeSeidList = new Array(); @@ -54,15 +55,15 @@ export function calPlayerCe(hero: any, type: number, args: Array) { } //修改并下发战力 -export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array, type?: number, args?: Array) { +export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array, type?: number, args?: Array) { 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, addSeidList: Array, removeSeidList: Array) { +export function calHeroStarIncAttr (hero: HeroType, args: Array, addSeidList: Array, removeSeidList: Array) { 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, 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, 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, addSeidList: Array, removeSeidList: Array ) { - 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, addSeidList: Array, removeSeidList: Array ) { + 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, addSeid return res; } //穿戴时装 -export function calWaerHeroSkinIncAttr(hero: any, args: Array) { - 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) { + 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) { } //羁绊解锁 -export function calHeroConectIncAttr(hero: any, args: Array) { - let res = {}; - let fiendShipLevel = getFiendShipLevel(hero.favourLv); +export function calHeroConectIncAttr(hero: HeroType, args: Array) { + 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) { } //好感升级 -export function calHeroFavourUpIncAttr(hero: any, args: Array) { - let res = {}; - let currentFiendShipLevel = getFiendShipLevel(hero.favourLv); +export function calHeroFavourUpIncAttr(hero: HeroType, args: Array) { + 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, removeSeid for(let {list, multi} of otiginalSeidList) { let effectList = new Array(); // 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, removeSeid // 获取dic_zyz_se内容 function addSeid(effectList: Array, seidId:number, seidValue = new Array()){ // 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; diff --git a/shared/consts/constModules/abilityConst.ts b/shared/consts/constModules/abilityConst.ts index 68bef509a..95b485d67 100644 --- a/shared/consts/constModules/abilityConst.ts +++ b/shared/consts/constModules/abilityConst.ts @@ -124,11 +124,11 @@ export const ABI_TYPE_TO_STAGE = new Map [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]; }; diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index ae6dee11f..426dca7d9 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -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数据 diff --git a/shared/pubUtils/dictionary/DicFashions.ts b/shared/pubUtils/dictionary/DicFashions.ts index 75306891c..9eb4bed73 100644 --- a/shared/pubUtils/dictionary/DicFashions.ts +++ b/shared/pubUtils/dictionary/DicFashions.ts @@ -8,9 +8,9 @@ export interface DicFashions { // 增加的被动技能 readonly seid: Array; // 全局加成 - 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 } \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicFriendShip.ts b/shared/pubUtils/dictionary/DicFriendShip.ts index 18954c97a..ec1c6a121 100644 --- a/shared/pubUtils/dictionary/DicFriendShip.ts +++ b/shared/pubUtils/dictionary/DicFriendShip.ts @@ -16,7 +16,7 @@ export interface DicFriendShip { // 羁绊武将ID readonly hids: Array; // 属性加成 - 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(); export const friendShipHidAandIds = new Map(); 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); diff --git a/shared/pubUtils/dictionary/DicFriendShipLevel.ts b/shared/pubUtils/dictionary/DicFriendShipLevel.ts index 1744d5800..da223e524 100644 --- a/shared/pubUtils/dictionary/DicFriendShipLevel.ts +++ b/shared/pubUtils/dictionary/DicFriendShipLevel.ts @@ -15,8 +15,10 @@ const str = readJsonFile(FILENAME.DIC_FRIEND_SHIP_LEVEL); let arr = JSON.parse(str); export const dicFriendShipLevel = new Array(); +export const dicFriendShipLevelMap = new Map(); arr.forEach(o => { dicFriendShipLevel.push(o); + dicFriendShipLevelMap.set(o.level, o); }); dicFriendShipLevel.sort(function(a, b) { return a.level - b.level; diff --git a/shared/resource/jsons/dic_zyz_friend_ship.json b/shared/resource/jsons/dic_zyz_friend_ship.json index 7adfee0d1..cf31d15f1 100644 --- a/shared/resource/jsons/dic_zyz_friend_ship.json +++ b/shared/resource/jsons/dic_zyz_friend_ship.json @@ -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 } ] \ No newline at end of file