From c87f50ced01a1ffcf7e3877f271cfb1d5e4f59db Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 17 Feb 2022 20:01:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9D=EF=BC=9A=E5=8D=8F=E5=8A=A9?= =?UTF-8?q?=E6=AC=A1=E6=95=B0&=E5=8C=B9=E9=85=8D=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app.ts | 1 - .../battle/handler/comBattleHandler.ts | 102 ++++------------ .../servers/connector/handler/entryHandler.ts | 2 +- game-server/app/services/comBattleService.ts | 115 ++++-------------- game-server/app/services/redisService.ts | 66 ++++------ game-server/app/services/warRewardService.ts | 52 -------- shared/db/ComBattleTeam.ts | 17 +-- shared/db/GuildRefine.ts | 2 +- .../domain/battleField/ComBattleTeamField.ts | 31 ++++- shared/pubUtils/data.ts | 37 ++---- shared/pubUtils/dicParam.ts | 3 +- shared/pubUtils/dictionary/DicGoods.ts | 13 -- shared/pubUtils/dictionary/DicJewel.ts | 10 +- shared/resource/jsons/dic_zyz_jewel.json | 108 ++++++++++------ 14 files changed, 205 insertions(+), 354 deletions(-) diff --git a/game-server/app.ts b/game-server/app.ts index edc025465..d65379d60 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -266,7 +266,6 @@ if (app.isMaster()) { // 全部服务器启动完毕后初始化 redis 数据 redisService.checkConnectors(); redisService.readDataBase(); - redisService.clearComBtlQueue(); redisService.clearChannelServers(); updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE); updateTeamStatus(COM_TEAM_STATUS.FIGHTING, COM_TEAM_STATUS.LOOSE); diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index a87dd2ff1..08e93fbc1 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -6,7 +6,7 @@ import { difference } from 'underscore'; * @Last Modified by: 梁桐川 * @Last Modified time: 2021-08-27 17:47:56 */ -import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts'; +import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, MSG_SOURCE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { Application, BackendSession } from 'pinus'; @@ -15,7 +15,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatu import { ItemModel, ItemType } from '../../../db/Item'; import { addItems, handleCost } from '../../../services/rewardService'; import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; -import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, createComTeamData, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService'; +import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService'; import { setAp } from '../../../services/actionPointService'; import { roleLevelup } from '../../../services/normalBattleService'; import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService'; @@ -72,7 +72,7 @@ export class ComBattleHandler { let channel = channelService.getChannel(teamCode, true); // 创建队伍数据结构 - let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, roleId, ceLimit); + let comTeam = new MemComBtlTeam(teamCode, pub, blueprtId, roleId, ceLimit); addRoleToTeam(comTeam, roleInfo, true, false); addUserToChannel(channel, new ChannelUser(roleId, sid)); // 将正在匹配的符合要求的玩家加入队伍,并推送入队消息 @@ -96,50 +96,50 @@ export class ComBattleHandler { /** * @description 匹配队伍 - * @param {{qualityArr: [number]}} msg 要匹配的品质数组列表 + * @param {{ lv: number }} msg 要匹配藏宝图品阶 * @param {BackendSession} session * @returns * @memberof ComBattleHandler */ - async searchTeam(msg: {qualityArr: [number], lvRange: number}, session: BackendSession) { + async searchTeam(msg: { lv: number }, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); - const { qualityArr, lvRange = 1 } = msg; + const { lv = 1 } = msg; const roleInfo = await RoleModel.findByRoleId(roleId, null, true); - const { lv } = roleInfo; + const { lv: playerLv } = roleInfo; let { topLineupCe = 1000 } = roleInfo; if(await checkHasMyTeam(roleId)) { return resResult(STATUS.COM_BATTLE_IS_RUNNING); } - if (comBtlLvInvalid(lv, lvRange)) { + if (comBtlLvInvalid(playerLv, lv)) { return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH); } - if (difference(qualityArr, COM_BTL_QUALITY).length !== 0) { + + if (!gameData.blueprtByLv.has(lv)) { return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR); } - const teams = await ComBattleTeamModel.getOtherTeamByQualityAndSt(roleId, qualityArr, COM_TEAM_STATUS.DEFAULT, lvRange, topLineupCe); + const teams = await ComBattleTeamModel.getOtherTeamByLvAndSt(roleId, lv, COM_TEAM_STATUS.DEFAULT, topLineupCe); const team: ComBattleTeamType = await oneTeamNotInBlack(teams, roleId); if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1 && team.blacklist && team.blacklist.indexOf(roleId) === -1) { return resResult(STATUS.SUCCESS, {teamCode: team.teamCode}); } let teamCode = session.get('teamCode'); - await setTeamSearchReq(roleId, sid, qualityArr, lvRange); + await setTeamSearchReq(roleId, sid, lv); let thiz = this; // 倒计时匹配两个机器人 setTimeout(async () => { - let inQueue = await checkRoleInQueue(roleId, sid, qualityArr, lvRange); + let inQueue = await checkRoleInQueue(roleId, sid, lv); if (!inQueue) return; - await rmRoleFromQueue(roleId, sid, qualityArr, lvRange); + await rmRoleFromQueue(roleId, sid, lv); // 创建队伍 - let blueprtId = getRandBlueprtId(qualityArr, lvRange).pop(); - let comTeam: MemComBtlTeam = createComTeamData(teamCode, false, blueprtId, 'robot', 0) + let blueprtId = getRandBlueprtId(lv).pop(); + let comTeam = new MemComBtlTeam(teamCode, false, blueprtId, 'robot', 0) - let { quality } = gameData.goods.get(blueprtId); - let isFrd = await getFrd(roleId, quality); + let isFrd = await getFrd(roleId); // 将玩家加入队伍 addRoleToTeam(comTeam, roleInfo, false, isFrd); let channelService = thiz.app.get('channelService'); @@ -169,7 +169,7 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let sid = session.get('sid'); - await rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); + await rmRoleFromQueue(roleId, sid); return resResult(STATUS.SUCCESS); } @@ -194,17 +194,16 @@ export class ComBattleHandler { let { lv = 1, head = EXTERIOR.EXTERIOR_FACE, topLineupCe = 0, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE } = await Role.findByRoleId(roleId, null, true); - let { quality } = gameData.goods.get(teamStatus.blueprtId); if (lv < COM_BTL_CONST.ENABLE_LV) { return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH); - } else if (comBtlLvInvalid(lv, teamStatus.lvRange)) { + } else if (comBtlLvInvalid(lv, teamStatus.lv)) { return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH); } else if (topLineupCe < teamStatus.ceLimit) { return resResult(STATUS.COM_BATTLE_CE_LIMIT); } if (!isFrd) { - isFrd = await getFrd(roleId, quality); + isFrd = await getFrd(roleId); } // 加入队伍 @@ -242,7 +241,7 @@ export class ComBattleHandler { if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); if (teamStatus.capId === roleId) return resResult(STATUS.COM_BATTLE_SET_FRD_ERR); if (!isFrd) { - isFrd = await getFrd(roleId, teamStatus.quality); + isFrd = await getFrd(roleId); } if (isFrd !== isFrdPre) { return resResult(STATUS.COM_BATTLE_ASSIST_NOT_ENOUGH); @@ -466,7 +465,7 @@ export class ComBattleHandler { updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap); } }); - await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.quality); + await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.lv); return resResult(STATUS.SUCCESS); } @@ -774,61 +773,4 @@ export class ComBattleHandler { return resResult(STATUS.SUCCESS, { list: result }); } - - /** - * @description 藏宝图合成 - * @param {{original: Array<{id: number, count: number}>}} msg - * @param {BackendSession} session - * @returns - * @memberof ComBattleHandler - */ - async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) { - const roleId = session.get('roleId'); - const roleName = session.get('roleName'); - const sid = session.get('sid'); - const serverId = session.get('serverId'); - - - const { original } = msg; - - // 原材料检查 - let originalQuality: number, originalSum: number = 0; - for(let {id, count} of original) { - const goodInfo = gameData.goods.get(id); - if(!originalQuality) originalQuality = goodInfo.quality; - if(originalQuality != goodInfo.quality) { - return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR); - } - - if(goodInfo.itid == IT_TYPE.BLUEPRT) { - originalSum += count; - } - } - - const dicCompose = gameData.blurprtCompose.get(originalQuality); - if(!dicCompose) { - return resResult(STATUS.COM_BLUEPRT_QUALITY_CANNOT_COMPOSE); - } - if(originalSum != dicCompose.blueprtNum) { - return resResult(STATUS.COM_BLUEPRT_COUNT_ERROR); - } - // 添加寻宝币 - original.push(...dicCompose.coinNum); - // 消耗藏宝图和寻宝币 - - let costResult = await handleCost(roleId, sid, original, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE); - if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - - const targetList = gameData.blueprt.get(dicCompose.targetQuality); - const target = getRandSingleEelm(targetList); - const reward = [{id: target, count: 1}]; - const goods = await addItems(roleId, roleName, sid, reward, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE); - if (dicCompose.targetQuality >= QUALITY_TYPE.ORANGE) { - const { name } = gameData.goods.get(target); - pushNormalItemMsg(roleId, roleName, serverId, MSG_SOURCE.ORANGE_BLUEPRT_COMPOSE, target, name); - } - await checkTask(roleId, sid, TASK_TYPE.COM_BATTLE_BLUEPRT, 1, true, { quality: dicCompose.targetQuality }); - - return resResult(STATUS.SUCCESS, { goods, costGold: 0 }); - } } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 661a77ffc..5a9fec6ef 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -213,7 +213,7 @@ export class EntryHandler { } }); reportTAUserSet(TA_USERSET_TYPE.ADD, roleId, { total_play_time: nowSeconds() - loginTime }); - rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); // 删除redis中寻宝的匹配记录 + rmRoleFromQueue(roleId, sid); // 删除redis中寻宝的匹配记录 let channelService = this.app.get('channelService'); let channel = channelService.getChannel(roleId, true); channel.leave(roleId, sid); diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 252555b1c..73efa67d7 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -1,43 +1,33 @@ import { MemComBtlTeam } from './../domain/battleField/ComBattleTeamField'; import { ItemModel } from './../db/Item'; import { ITEM_CHANGE_REASON, IT_TYPE } from './../consts'; -import { COM_BTL_QUALITY } from './../consts/constModules/itemConst'; import { FriendRelationModel } from './../db/FriendRelation'; import { RoleModel, RoleType } from './../db/Role'; import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop'; -import { FriendPointModel } from './../db/FriendPoint'; import { STATUS } from './../consts/statusCode'; import { COM_TEAM_STATUS, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts'; import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from './../db/ComBattleTeam'; import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo } from "../pubUtils/util"; import { getRandRobot, transBossHpArr } from "./battleService"; -import { difference, omit } from 'underscore'; import { Channel, ChannelService, pinus } from 'pinus'; import { TREASURE, EXTERIOR } from '../pubUtils/dicParam'; import { getFriendLvAdd } from './friendService'; import { getRoleIds } from '../pubUtils/friendUtil'; -import { getTeamSearchByQuality, rmRoleFromQueue } from './redisService'; +import { getTeamSearchByLv, rmRoleFromQueue } from './redisService'; import { addUserToChannel } from './roleService'; import { ChannelUser } from '../domain/ChannelUser'; -import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId } from '../pubUtils/data'; -import { getFriendPointObject } from '../pubUtils/itemUtils'; -import { DicWar } from '../pubUtils/dictionary/DicWar'; +import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data'; import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil'; -import { dispatch } from '../pubUtils/dispatcher'; import { handleCost } from './rewardService'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id - * @param qualityArr 品质数组,在所有给定品质的藏宝图中筛选1 + * @param lv 品质数组,在所有给定品质的藏宝图中筛选1 * @param cnt 返回藏宝图数量 */ -export function getRandBlueprtId(qualityArr: number[], lvRange: number, cnt = 1) { - if (!qualityArr || !qualityArr.length) return null; - let blueprtIdArr: number[] = []; - for (let q of qualityArr) { - blueprtIdArr = blueprtIdArr.concat(gameData.blueprtWithQualityAndStar.get(`${q}_${lvRange}`)); - } - if (blueprtIdArr.length === 0) return null; +export function getRandBlueprtId(lv: number, cnt = 1) { + if (!gameData.blueprtByLv.has(lv)) return null; + let blueprtIdArr: number[] = gameData.blueprtByLv.get(lv)||[]; const res = getRandEelm(blueprtIdArr, cnt); // console.log('******** getRandBlueprtId', blueprtIdArr, cnt, res) @@ -167,37 +157,14 @@ export async function getRealReward(blueprtId: number, roleSt: RoleStatus) { } export async function getAllAssistCnt(roleId: string) { - let cntMap = await getAssistTimesByQuality(roleId); - let cnt = []; - for (let i = 0; i < COM_BTL_QUALITY.length; ++i) { - cnt[i] = cntMap.get(i + 1) || 0; - } - return cnt; + let teams = await ComBattleTeamModel.getAssistTeamsByTime(roleId, getZeroPointD(), true); + return teams.length; } -export async function getAssistTimesByQuality(roleId: string, qualityArr?: number[]) { - let teams = await ComBattleTeamModel.getAssistTeamsByTime(roleId, qualityArr, getZeroPointD(), true); - let cntMap = new Map(); - teams.forEach(team => { - if (team && team.quality && team.roleStatus) { - for (let st of team.roleStatus) { - if (st.roleId !== roleId || st.isFrd) { - continue; - } - let cnt = cntMap.get(team.quality) || 0; - cntMap.set(team.quality, cnt + 1) - } - } - }); - return cntMap; -} - -export async function getFrd(roleId: string, quality: number) { +export async function getFrd(roleId: string) { let isFrd = false; - let assistTimes = await getAssistTimesByQuality(roleId, [quality]); - let assistTime = assistTimes.get(quality); - let { assistanceTime } = gameData.xunbao.get(quality); - if (assistTime >= assistanceTime) isFrd = true; + let cnt = await getAllAssistCnt(roleId); + if (cnt >= TREASURE.TREASURE_ASSIST_TIME) isFrd = true; return isFrd; } @@ -242,7 +209,7 @@ function updateRobotKilled(bossHp: number, roleSt: RoleStatus) { } export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtTimer: Map, teamMap: Map, channel: Channel) { - const { teamCode, roleIds, capId, quality } = teamStatus; + const { teamCode } = teamStatus; // 判断战斗是否结束 let battleSt = checkComBattleResult(teamStatus); teamStatus.status = battleSt; @@ -351,15 +318,15 @@ export function clearRobotHurtTimer(teamStatus, robotHurtTimer: Map max; + return playerLv < min || playerLv > max; } export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map, roleId: string, teamDisTimer: Map, channel) { @@ -501,18 +468,17 @@ async function teammateValid(roleInfo: Partial, roleId: string, roleId * @param {string} roleId 要加入玩家的信息 * @param {string[]} roleIds 队伍中当前玩家列表 * @param {number} ceLimit - * @param {number} quality * @returns */ -export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number, quality: number) { +export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number) { let roleInfo = await RoleModel.findByRoleId(roleId, null, true); - let { roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, topLineupCe, lv } = roleInfo; + let { roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, topLineupCe, lv: playerLv } = roleInfo; const valid = await teammateValid(roleInfo, roleId, roleIds, ceLimit); if (!valid) return null; - let isFrd = await getFrd(roleId, quality); - const result = new RoleStatus(roleId, roleName, false, isFrd, head, frame, spine, topLineupCe, lv); + let isFrd = await getFrd(roleId); + const result = new RoleStatus(roleId, roleName, false, isFrd, head, frame, spine, topLineupCe, playerLv); return result; } @@ -532,36 +498,7 @@ export async function teammateInBlackList(roleId: string, roleIds: string[]) { } export function blueprtIdValid(id: number) { - const goodData = gameData.goods.get(id); - return goodData && goodData.itid === IT_TYPE.BLUEPRT && COM_BTL_QUALITY.indexOf(goodData.quality) !== -1; -} - -/** - * @description 创建 ComBattleTeam 的数据结构 - * @export - * @param {string} teamCode - * @param {boolean} pub - * @param {number} blueprtId - * @param {number} status - * @param {string} capId - * @param {number} ceLimit - * @param {number} bossHp - * @param {number} quality - * @param {BossHp[]} bossHpArr - * @returns - */ -export function createComTeamData(teamCode: string, pub: boolean, blueprtId: number, capId: string, ceLimit: number) { - const { equipLvl, quality } = gameData.goods.get(blueprtId); - const { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId); - const curRnd = 0; - const roleCnt = 1; - const timeout = false; - const bossCurHp = bossHpSum; - const bossHp = bossHpSum; - const status = COM_TEAM_STATUS.DEFAULT; - return { - teamCode, pub, blueprtId, status, capId, ceLimit, bossHp, bossCurHp, quality, bossHpArr: transBossHpArr(bossHpArr), curRnd, roleCnt, timeout, lvRange: equipLvl, blacklist: [] - }; + return gameData.blueprt.has(id); } /** @@ -619,14 +556,14 @@ export function addRoleStToTeam(comTeam: MemComBtlTeam, roleSt: RoleStatus) { * @returns */ export async function addValidSearchingRoles(comTeam: MemComBtlTeam, channelService: ChannelService) { - const { quality, equipLvl } = gameData.goods.get(comTeam.blueprtId); - let teammates = await getTeamSearchByQuality(quality, equipLvl); + const { lv } = getDicBlueprtById(comTeam.blueprtId); + let teammates = await getTeamSearchByLv(lv); if (teammates && teammates.length) { for (let teammate of teammates) { const { roleId: teammateRoleId, sid } = teammate; - const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit, quality); + const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit); if (!st) continue; - await rmRoleFromQueue(teammateRoleId, sid, COM_BTL_QUALITY, null); // 匹配成功后删除redis中该用户的匹配记录 + await rmRoleFromQueue(teammateRoleId, sid); // 匹配成功后删除redis中该用户的匹配记录 addRoleStToTeam(comTeam, st); const channel = channelService.getChannel(comTeam.teamCode, false); addUserToChannel(channel, new ChannelUser(teammateRoleId, sid)); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index cdcb0965c..15f1b1959 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -133,11 +133,10 @@ export async function updateUserInfo(key: string, roleId: string, arr: Array<{fi /** * @description 拼接匹配分组的 key - * @param {number} quality 品质 - * @param {number} lvRange 等级范围 + * @param {number} lv 藏宝图品阶 */ -function getComTeamKey(quality: number, lvRange: number) { - return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${quality}_${lvRange}`; +function getComTeamKey(lv: number) { + return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${lv}`; } /** @@ -159,14 +158,9 @@ function getComTeamValue(roleId: string, sid: string) { * @param {number} lvRange * @returns */ -export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array, lvRange: number) { - let cmds = []; - qualityArr.forEach(quality => { - if (quality) { - cmds.push(['sadd', getComTeamKey(quality, lvRange), getComTeamValue(roleId, sid)]); - } - }); - const res = await redisClient().multi(cmds).execAsync(); +export async function setTeamSearchReq(roleId: string, sid: string, lv: number) { + + const res = await redisClient().saddAsync(getComTeamKey(lv), [getComTeamValue(roleId, sid)]); console.log('setTeamSearchReq: ', res); return res; } @@ -176,21 +170,18 @@ export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: * @export * @param {string} roleId * @param {string} sid - * @param {Array} qualityArr - * @param {number} lvRange + * @param {number} lv 如果不填表示所有品阶 */ -export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array, lvRange: number) { +export async function rmRoleFromQueue(roleId: string, sid: string, lv?: number) { let cmds = []; - for (let q of qualityArr) { - if (lvRange) { - cmds.push(['srem', getComTeamKey(q, lvRange), getComTeamValue(roleId, sid)]); - } else { - for (let range of comBtlRanges()) { - cmds.push(['srem', getComTeamKey(q, range), getComTeamValue(roleId, sid)]); - } + if (lv) { + cmds.push(['srem', getComTeamKey(lv), getComTeamValue(roleId, sid)]); + } else { + for (let range of comBtlRanges()) { + cmds.push(['srem', getComTeamKey(range), getComTeamValue(roleId, sid)]); } - }; + } await redisClient().multi(cmds).execAsync(); } @@ -201,10 +192,10 @@ export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: A * @param {number} lvRange 等级范围 * @returns */ -export async function getTeamSearchByQuality(quality: number, lvRange: number) { +export async function getTeamSearchByLv(lv: number) { // TODO: 操作不具有原子性 - const userInfos = await redisClient().srandmemberAsync(getComTeamKey(quality, lvRange), 2); - console.log('getTeamSearchByQuality: ' + userInfos); + const userInfos = await redisClient().srandmemberAsync(getComTeamKey(lv), 2); + console.log('getTeamSearchByLv: ' + userInfos); if (!userInfos || !userInfos.length) return null; let res = []; @@ -213,7 +204,7 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) { if (decodeData.length !== 2) return null; res.push({roleId: decodeData[0], sid: decodeData[1]}); } - console.log('getTeamSearchByQuality res: ', res); + console.log('getTeamSearchByLv res: ', res); return res; } @@ -222,17 +213,14 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) { * @export * @param {string} roleId * @param {string} sid - * @param {Array} qualityArr - * @param {number} lvRange + * @param {number} lv * @returns */ -export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array, lvRange: number) { - for (let quality of qualityArr) { - let res = await redisClient().sismemberAsync(getComTeamKey(quality, lvRange), `${roleId}:${sid}`); - if (res) { - return true; - } - }; +export async function checkRoleInQueue(roleId: string, sid: string, lv: number) { + let res = await redisClient().sismemberAsync(getComTeamKey(lv), `${roleId}:${sid}`); + if (res) { + return true; + } return false; } @@ -241,11 +229,7 @@ export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: * @export */ export async function clearComBtlQueue() { - for (let q of COM_BTL_QUALITY) { - for (let lvRange of comBtlRanges()) { - await redisClient().delAsync(getComTeamKey(q, lvRange)); - } - } + await delKeys(REDIS_KEY.COM_TEAM_SEARCH_PRE); } export function setRedis(key: string, data: string) { diff --git a/game-server/app/services/warRewardService.ts b/game-server/app/services/warRewardService.ts index f672ba8e0..b02d49635 100644 --- a/game-server/app/services/warRewardService.ts +++ b/game-server/app/services/warRewardService.ts @@ -117,58 +117,6 @@ export class WarReward { } } - private async handlerBlueprtReward(num: number) { - const refTime = getZeroPointD(); - const battleBlueprtDrop = await BattleBlueprtDropModel.findByTime(this.roleId, refTime); - if(battleBlueprtDrop) { - let { getNum = 0, curCostAp = 0, getSum = 0, costAp = 0 } = battleBlueprtDrop; - for(let i = 0; i < num; i ++) { - let flag = false; // 是否可以获得 - if( curCostAp >= BLUEPRT_CONST.PER_AP) { - curCostAp = curCostAp - BLUEPRT_CONST.PER_AP; getNum = 0; - } - costAp += this.costAp; curCostAp += this.costAp; - if(getNum == 0) { - let r = Math.random(); - console.log(r, 1/BLUEPRT_CONST.PER_AP*curCostAp); - if(r <= 1/BLUEPRT_CONST.PER_AP*curCostAp || (curCostAp >= BLUEPRT_CONST.PER_AP) ) { - flag = true; // 独立概率随机 - } - } - if(getSum >= BLUEPRT_CONST.DAILY_CNT) { - flag = false; - } - if(flag) { - getNum ++; getSum++; - const obj = await this.randomBlueprt(); - if(obj) { - this.rewards.push({type: BATTLE_REWARD_TYPE.RANDOM_REWARD, times: i +1, ...obj}); - } - } - } - await BattleBlueprtDropModel.updateByTime(this.roleId, refTime, { - getNum, curCostAp, getSum, costAp - }); - } - } - - private async randomBlueprt() { - const { lv } = await RoleModel.findByRoleId(this.roleId); - const dicPossibility = gameData.blueprtPossibility; - - const result = dicPossibility.find(cur => {return cur.min <= lv && cur.max >= lv}); - - if(result) { - const {dic: {id}} = getRandEelmWithWeight(result.possibility); - - const blueprtList = gameData.blueprt.get(id); - const gid = getRandSingleEelm(blueprtList); - return {id: gid, count:1} - } else { - return null - } - } - public async saveReward(num: number, combine: boolean = false) { this.rewards = new Array(); // let warType = this.warInfo.warType; diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index bd286a6cb..fdc6adf6a 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -143,9 +143,9 @@ export default class ComBattleTeam extends BaseModel { @prop({ required: true }) blueprtId: number; - // 藏宝图品质 + // 藏宝图品阶,用来匹配 @prop({ required: true }) - quality: number; + lv: number; // 战斗状态 0:未开始,1:已开始,2:胜利,3:失败 @prop({ required: true, default: 0 }) @@ -166,10 +166,6 @@ export default class ComBattleTeam extends BaseModel { @prop({ required: true, default: 1 }) roleCnt: number; - // 藏宝图等级所处范围,用来匹配 - @prop({ required: true, default: 1 }) - lvRange: number; - // 单个 boss 血量状态 @prop({ required: false, type: BossHp, default: [] }) bossHpArr: BossHp[]; @@ -293,9 +289,9 @@ export default class ComBattleTeam extends BaseModel { return team; } - public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: number[], status: number, lvRange: number, ce = 0, pub = true, cntLmt = 2, lean = true) { + public static async getOtherTeamByLvAndSt(roleId: string, lv: number, status: number, ce = 0, pub = true, cntLmt = 2, lean = true) { const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前 - const team: ComBattleTeamType[] = await ComBattleTeamModel.find({quality: {$in: qualityArr}, status, lvRange, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean); + const team: ComBattleTeamType[] = await ComBattleTeamModel.find({ lv, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean); return team; } @@ -314,11 +310,8 @@ export default class ComBattleTeam extends BaseModel { return teams; } - public static async getAssistTeamsByTime(roleId: string, qualityArr?: number[], time?: Date, isAssist?: boolean, lean = true) { + public static async getAssistTeamsByTime(roleId: string, time?: Date, isAssist?: boolean, lean = true) { let query = {roleIds: roleId, status: {$in: [0, 1, 2]}}; // 失败不计入助战 - if (qualityArr) { - query = Object.assign(query, {quality: {$in: qualityArr}}); - } if (time) { query = Object.assign(query, {createdAt: {$gte: time}}); } diff --git a/shared/db/GuildRefine.ts b/shared/db/GuildRefine.ts index 115d5ff95..7dd60d3ed 100644 --- a/shared/db/GuildRefine.ts +++ b/shared/db/GuildRefine.ts @@ -3,7 +3,7 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos export class ScienceTree { @prop({ required: true }) - id: number; + id: number; @prop({ required: true }) endTime: number;//科技树研发成功结束事件,时间戳,小于当前时间,说明开发完成 @prop({ required: true, default: [], type: String, _id: false}) diff --git a/shared/domain/battleField/ComBattleTeamField.ts b/shared/domain/battleField/ComBattleTeamField.ts index cd3d7cd4d..0ebfe4b9c 100644 --- a/shared/domain/battleField/ComBattleTeamField.ts +++ b/shared/domain/battleField/ComBattleTeamField.ts @@ -1,2 +1,29 @@ -import { ComBattleTeamParam } from './../../db/ComBattleTeam'; -export type MemComBtlTeam = ComBattleTeamParam & { bossCurHp: number; curRnd: number; bossHp: number }; +import { COM_TEAM_STATUS } from '../../consts'; +import { getBossHpByBlueprtId, getDicBlueprtById } from '../../pubUtils/data'; +import { transBossHpArr } from '../../services/battleService'; +import ComBattleTeam from './../../db/ComBattleTeam'; +export class MemComBtlTeam extends ComBattleTeam { + bossCurHp: number; + curRnd: number; + bossHp: number; + + constructor(teamCode: string, pub: boolean, blueprtId: number, capId: string, ceLimit: number) { + super(); + const { lv } = getDicBlueprtById(blueprtId); + this.lv = lv; + const { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId); + this.bossHpArr = transBossHpArr(bossHpArr); + this.teamCode = teamCode; + this.pub = pub; + this.blueprtId = blueprtId; + this.status = COM_TEAM_STATUS.DEFAULT; + this.capId = capId; + this.ceLimit = ceLimit; + this.curRnd = 0; + this.roleCnt = 1; + this.timeout = false; + this.bossCurHp = bossHpSum; + this.bossHp = bossHpSum; + this.blacklist = []; + } + }; diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index a81262d94..82cc5397c 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -1,5 +1,5 @@ import { dicHero, dicMyHeroes, loadHero } from "./dictionary/DicHero"; -import { dicGoods, blueprtWithQuality, blueprtWithQualityAndStar, figureCondition, loadGoods } from "./dictionary/DicGoods"; +import { dicGoods, figureCondition, loadGoods } from "./dictionary/DicGoods"; import { dicBlueprtCompose, loadBlueprtCompose } from "./dictionary/DicBlueprtCompose"; import { dicBlueprtPossibility, loadBlueprtPossibility } from "./dictionary/DicBlueprtPossibility"; import { dicDaily, loadDaily } from "./dictionary/DicDaily"; @@ -18,7 +18,7 @@ import { dicTowerTask, loadTowerTask } from "./dictionary/DicTowerTask"; import { dicWar, dicWarPvp, dicDailyWarByType, loadWar } from "./dictionary/DicWar"; import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson"; import { dicXunbao, loadXunbao } from "./dictionary/DicXunbao"; -import { AUCTION_TIME, CONSUME_TYPE, ITID, SPECIAL_ATTR } from "../consts"; +import { AUCTION_TIME, CONSUME_TYPE, ITID } from "../consts"; import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions"; import { friendShips, friendShipHidAandIds, loadFriendShip } from "./dictionary/DicFriendShip"; import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./dictionary/DicFriendShipLevel"; @@ -101,7 +101,7 @@ import { dicServerConst, loadServerConst } from './dictionary/DicServerConst'; import { pick } from "underscore"; import _ = require("underscore"); import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictionary/DicEquip"; -import { dicJewel, loadJewel } from "./dictionary/DicJewel"; +import { dicBlueprt, dicBlueprtByLv, dicJewel, loadJewel } from "./dictionary/DicJewel"; import { dicStone, loadStone } from './dictionary/DicStone'; import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength"; import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality"; @@ -141,9 +141,6 @@ export const gameData = { xunbao: dicXunbao, btlBossHpSum: new Map(), btlBossHp: new Map>(), - blueprtToWar: new Map(), - blueprt: blueprtWithQuality, - blueprtWithQualityAndStar: blueprtWithQualityAndStar, fashion: dicFashions, fashionBySkinId: dicFashionsByHeroId, friendShips: friendShips, @@ -270,6 +267,8 @@ export const gameData = { equipSuit: dicEquipSuit, equipSuitByJobClass: dicEquipSuitByJobClass, jewelCondition: dicJewelCondition, + blueprt: dicBlueprt, + blueprtByLv: dicBlueprtByLv, }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 @@ -362,21 +361,6 @@ export function getBossHpByWarId(warId: number) { return { bossHpSum, bossHpArr }; } - -export function getWarIdByBlueprtId(blueprtId: number) { - let warId = gameData.blueprtToWar.get(blueprtId); - if (!warId) { - let blueprt = gameData.goods.get(blueprtId); - if (blueprt) { - const { specialAttr } = blueprt; - warId = specialAttr.get(SPECIAL_ATTR.WAR_ID); - if (warId) - gameData.blueprtToWar.set(blueprtId, warId); - } - } - return warId; -} - export function getBossHpByBlueprtId(blueprtId: number) { let { dispatchJsonId } = getWarByBlueprtId(blueprtId); let bossHpInfo = getBossHpByWarId(dispatchJsonId); @@ -384,8 +368,8 @@ export function getBossHpByBlueprtId(blueprtId: number) { } export function getWarByBlueprtId(blueprtId: number) { - let warId = getWarIdByBlueprtId(blueprtId); - return gameData.war.get(warId); + let dicBlueprt = getDicBlueprtById(blueprtId); + return gameData.war.get(dicBlueprt.gkId); } export function getRewardByBlueprtId(blueprtId: number) { @@ -401,7 +385,7 @@ function parseComBtlLvRange() { } export function comBtlRanges() { - return Array.from(gameData.comBtlLvRange.keys()); + return Array.from(gameData.blueprtByLv.keys()); } @@ -926,6 +910,11 @@ export function getJewelConditionByLvAndSeId(lv: number, randSeId: number) { return gameData.jewelCondition.get(`${lv}_${randSeId}`); } +export function getDicBlueprtById(id: number) { + let jewel = gameData.blueprt.get(id); + return gameData.jewel.get(jewel); +} + // 初始加载 function initDatas() { parseDicParam(); diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index 47f8ad2c8..8c98f2156 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -66,7 +66,8 @@ export const ARMY = { export const TREASURE = { CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数 TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数 - TREASURE_ASSIST_LIMITED: '1&1&999|2&21&999|3&41&999|4&61&999|5&81&999|6&100&999', // 协助寻宝星级开启玩家等级限制 + TREASURE_ASSIST_LIMITED: '1&1&999|2&20&999|3&30&999|4&40&999|5&50&999|6&60&999|7&70&999|8&80&999|9&90&999', // 协助寻宝星级开启玩家等级限制 + TREASURE_ASSIST_TIME: 6, // 协助寻宝总次数 }; export const FRIEND = { FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度 diff --git a/shared/pubUtils/dictionary/DicGoods.ts b/shared/pubUtils/dictionary/DicGoods.ts index fbef2c200..6590ccd1a 100644 --- a/shared/pubUtils/dictionary/DicGoods.ts +++ b/shared/pubUtils/dictionary/DicGoods.ts @@ -109,14 +109,10 @@ const DicGoodsKeys: KeysEnum = { equipLvl: true } export const dicGoods = new Map(); -export const blueprtWithQuality = new Map>(); -export const blueprtWithQualityAndStar = new Map>(); export const figureCondition = new Map(); // type => {params, id, gid} export function loadGoods() { dicGoods.clear(); - blueprtWithQuality.clear(); - blueprtWithQualityAndStar.clear(); figureCondition.clear(); let arr = readFileAndParse(FILENAME.DIC_GOODS); @@ -145,15 +141,6 @@ export function loadGoods() { o.jobLimited = parseNumberList(o.jobLimited); o.charLimited = parseNumberList(o.charLimited); dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); - - if (o.itid == IT_TYPE.BLUEPRT) { - let arr = blueprtWithQualityAndStar.get(`${o.quality}_${o.equipLvl}`) || new Array(); - arr.push(o.good_id); - blueprtWithQualityAndStar.set(`${o.quality}_${o.equipLvl}`, arr); - let arr2 = blueprtWithQuality.get(o.quality) || new Array(); - arr.push(o.good_id); - blueprtWithQuality.set(o.quality, arr2); - } }); arr = undefined; diff --git a/shared/pubUtils/dictionary/DicJewel.ts b/shared/pubUtils/dictionary/DicJewel.ts index 7373bf994..7d7974a1b 100644 --- a/shared/pubUtils/dictionary/DicJewel.ts +++ b/shared/pubUtils/dictionary/DicJewel.ts @@ -24,10 +24,13 @@ export interface DicJewel { readonly mapGoodId: number; // 淬炼消耗 readonly quenchConsume: RewardInter[]; + // 寻宝关卡id + readonly gkId: number; } - export const dicJewel = new Map(); +export const dicBlueprt = new Map(); +export const dicBlueprtByLv = new Map(); export function loadJewel() { dicJewel.clear(); @@ -37,6 +40,11 @@ export function loadJewel() { o.randomEffect = parseNumberList(o.randomEffect); o.quenchConsume = parseGoodStr(o.quenchConsume); dicJewel.set(o.good_id, o); + dicBlueprt.set(o.mapGoodId, o.good_id); + if(!dicBlueprtByLv.has(o.lv)) { + dicBlueprtByLv.set(o.lv, []); + } + dicBlueprtByLv.get(o.lv).push(o.mapGoodId); }); arr = undefined; } \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_jewel.json b/shared/resource/jsons/dic_zyz_jewel.json index dd49035a4..d68212bbb 100644 --- a/shared/resource/jsons/dic_zyz_jewel.json +++ b/shared/resource/jsons/dic_zyz_jewel.json @@ -11,7 +11,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33001, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6001 }, { "id": 2, @@ -25,7 +26,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33002, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6002 }, { "id": 3, @@ -39,7 +41,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33003, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6003 }, { "id": 4, @@ -53,7 +56,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33004, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6004 }, { "id": 5, @@ -67,7 +71,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33005, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6005 }, { "id": 6, @@ -81,7 +86,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33006, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6006 }, { "id": 7, @@ -95,7 +101,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33007, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6007 }, { "id": 8, @@ -109,7 +116,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33008, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6008 }, { "id": 9, @@ -123,7 +131,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089", "mapGoodId": 33009, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6009 }, { "id": 10, @@ -137,7 +146,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33010, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6010 }, { "id": 11, @@ -151,7 +161,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33011, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6011 }, { "id": 12, @@ -165,7 +176,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33012, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6012 }, { "id": 13, @@ -179,7 +191,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33013, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6013 }, { "id": 14, @@ -193,7 +206,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33014, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6014 }, { "id": 15, @@ -207,7 +221,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33015, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6015 }, { "id": 16, @@ -221,7 +236,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33016, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6016 }, { "id": 17, @@ -235,7 +251,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33017, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6017 }, { "id": 18, @@ -249,7 +266,8 @@ "randomEffect": "60032&60034&80001&80012&80033&80047&80075", "mapGoodId": 33018, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6018 }, { "id": 19, @@ -263,7 +281,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33019, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6019 }, { "id": 20, @@ -277,7 +296,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33020, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6020 }, { "id": 21, @@ -291,7 +311,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33021, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6021 }, { "id": 22, @@ -305,7 +326,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33022, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6022 }, { "id": 23, @@ -319,7 +341,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33023, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6023 }, { "id": 24, @@ -333,7 +356,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33024, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6024 }, { "id": 25, @@ -347,7 +371,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33025, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6025 }, { "id": 26, @@ -361,7 +386,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33026, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6026 }, { "id": 27, @@ -375,7 +401,8 @@ "randomEffect": "60032&40035&80001&80019&80033&80047&80082", "mapGoodId": 33027, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6027 }, { "id": 28, @@ -389,7 +416,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33028, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6028 }, { "id": 29, @@ -403,7 +431,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33029, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6029 }, { "id": 30, @@ -417,7 +446,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33030, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6030 }, { "id": 31, @@ -431,7 +461,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33031, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6031 }, { "id": 32, @@ -445,7 +476,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33032, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6032 }, { "id": 33, @@ -459,7 +491,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33033, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6033 }, { "id": 34, @@ -473,7 +506,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33034, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6034 }, { "id": 35, @@ -487,7 +521,8 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33035, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6035 }, { "id": 36, @@ -501,6 +536,7 @@ "randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068", "mapGoodId": 33036, "quenchConsume": "31001&500", - "successConsume": "17057&100" + "successConsume": "17057&100", + "gkId": 6036 } ] \ No newline at end of file