diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index e30374c6b..d198504c7 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -1,11 +1,12 @@ +import { difference } from 'underscore'; /* * @Author: 梁桐川 * @Date: 2020-11-30 15:05:48 * @Last Modified by: 梁桐川 * @Last Modified time: 2020-12-03 21:36:00 */ -import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, GOOD_QUALITY, CONSUME_TYPE } from './../../../consts'; -import { getGoodById, getBossHpByBlueprtId, getComBtlSetByQuality, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId, comBtlRangeInfo, comBtlRangeByLv } from '../../../pubUtils/gamedata'; +import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, QUALITY_TYPE } from './../../../consts'; +import { getGoodById, getBossHpByBlueprtId, getBlueprtComposeByQuality, getBluePrtByQuality, getWarById, getWarIdByBlueprtId, comBtlRangeInfo, comBtlRangeByLv } from '../../../pubUtils/gamedata'; import { ComBattleTeamModel, BossHp } from '../../../db/ComBattleTeam'; import Role, { RoleModel } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; @@ -96,7 +97,7 @@ export class ComBattleHandler { console.log('createTeam msg: ', msg); // 检查藏宝图Id是否合法 let goodData = getGoodById(blueprtId); - if (!goodData || goodData.itid !== IT_TYPE.BLUEPRT) return resResult(STATUS.COM_BATTLE_BLUEPRT_INVALID); + if (!goodData || goodData.itid !== IT_TYPE.BLUEPRT || COM_BTL_QUALITY.indexOf(goodData.quality) === -1) return resResult(STATUS.COM_BATTLE_BLUEPRT_INVALID); // 检查藏宝图是否足够 let { lv, headHid = 19, topFiveCe = 100, sHid = 19 } = await RoleModel.findByRoleId(roleId); @@ -211,6 +212,9 @@ export class ComBattleHandler { if (comBtlLvInvalid(lv, lvRange)) { return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH); } + if (difference(qualityArr, COM_BTL_QUALITY).length !== 0) { + return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR); + } const team = await ComBattleTeamModel.getOtherTeamByQualityAndSt(roleId, qualityArr, COM_TEAM_STATUS.DEFAULT, lvRange, topFiveCe); // TODO: 有匹配的队伍还需要重新 joinTeam 加入,有失败可能,体验不好,需优化 @@ -274,7 +278,7 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let sid = session.get('sid'); - await rmRoleFromQueue(roleId, sid, GOOD_QUALITY, null); + await rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); return resResult(STATUS.SUCCESS); } @@ -713,7 +717,9 @@ export class ComBattleHandler { if (memTeam) { ({ roleStatus, status, bossHpArr } = memTeam); } else { - ({ roleStatus, status, bossHpArr } = await ComBattleTeamModel.getTeamByCode(teamCode)); + let dbTeam = await ComBattleTeamModel.getTeamByCode(teamCode); + if (!dbTeam) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); + ({ roleStatus, status, bossHpArr } = dbTeam); } return resResult(STATUS.SUCCESS, { teamInfo: {status, teamCode, roleStatus, bossHpArr} }); } @@ -763,7 +769,7 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let cntMap = await getAssistTimesByQuality(roleId); let cnt = []; - for (let i = 0; i < 5; ++i) { + for (let i = 0; i < COM_BTL_QUALITY.length; ++i) { cnt[i] = cntMap.get(i + 1) || 0; } return resResult(STATUS.SUCCESS, {cnt}); @@ -779,7 +785,7 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let cntMap = await getAssistTimesByQuality(roleId); let cnt = []; - for (let i = 0; i < 5; ++i) { + for (let i = 0; i < COM_BTL_QUALITY.length; ++i) { cnt[i] = cntMap.get(i + 1) || 0; } const blueprts = await ItemModel.findByRoleAndType(roleId, CONSUME_TYPE.BLUEPRT); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 05dd7ac42..1d4a5e85c 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -1,4 +1,4 @@ -import { GOOD_QUALITY, REDIS_RANK_TO_INFO } from './../consts'; +import { GOOD_QUALITY, REDIS_RANK_TO_INFO, COM_BTL_QUALITY } from './../consts'; import { RoleModel, RoleType } from "../db/Role"; import * as Redis from 'redis'; import {REDIS_KEY} from '../consts' @@ -274,7 +274,7 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) { if (decodeData.length !== 2) return null; res.push({roleId: decodeData[0], sid: decodeData[1]}); - GOOD_QUALITY.forEach((q) => { + COM_BTL_QUALITY.forEach((q) => { cmds.push(['srem', getComTeamKey(q, lvRange), userInfo]); }) const multiClient = client.multi(cmds) as Redis.Multi; @@ -298,7 +298,7 @@ export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: export async function clearComBtlQueue() { const client: Redis.RedisClient = pinus.app.get('redis'); - for (let q of GOOD_QUALITY) { + for (let q of COM_BTL_QUALITY) { for (let lvRange of comBtlRanges()) { await client.delAsync(getComTeamKey(q, lvRange)); } diff --git a/shared/consts/constModules/itemConst.ts b/shared/consts/constModules/itemConst.ts index 28af09002..2b2c51959 100644 --- a/shared/consts/constModules/itemConst.ts +++ b/shared/consts/constModules/itemConst.ts @@ -172,6 +172,7 @@ export enum QUALITY_TYPE { } export const GOOD_QUALITY = [QUALITY_TYPE.BLUE, QUALITY_TYPE.PURPLE, QUALITY_TYPE.ORANGE, QUALITY_TYPE.RED, QUALITY_TYPE.GOLD]; +export const COM_BTL_QUALITY = [QUALITY_TYPE.BLUE, QUALITY_TYPE.PURPLE, QUALITY_TYPE.ORANGE, QUALITY_TYPE.RED]; // 各品质随机属性条数 quality => number export const RANDOM_SE_COUNT = new Map([