diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index ac42a0a61..ca23037d5 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -144,10 +144,15 @@ export class ComBattleHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); - let teamCode = session.get('teamCode'); const { qualityArr } = msg; let { lv, headHid = 19, topFiveCe = 1000, sHid = 19 } = await RoleModel.findByRoleId(roleId); + const team = await ComBattleTeamModel.getOneTeamByQualityAndSt(qualityArr, COM_TEAM_STATUS.DEFAULT, topFiveCe); + // TODO: 有匹配的队伍还需要重新触发加入 + if (team) { + return resResult(STATUS.SUCCESS, {teamCode: team.teamCode}); + } + let teamCode = session.get('teamCode'); await setTeamSearchReq(roleId, sid, qualityArr); let thiz = this; setTimeout(async () => { @@ -211,23 +216,21 @@ export class ComBattleHandler { let roleStatus = new RoleStatus(roleId, roleName, false, isFrd, headHid, sHid, topFiveCe, lv); const team = await ComBattleTeamModel.addRole(teamCode, roleStatus); - if (!team) { - return resResult(STATUS.COM_BATTLE_CREATE_ERR); + if (!team || team.roleIds.length === 3) { + return resResult(STATUS.COM_BATTLE_JOIN_ERR); } let channelService = this.app.get('channelService'); let channel = channelService.getChannel(teamCode, false); + teamStatus.roleIds.push(roleId); + teamStatus.roleStatus.push(roleStatus); + channel.pushMessage('onTeamJoin', {teamInfo: teamStatus}); let users = channel.getMembers(); if (users.indexOf(roleId) === -1) { channel.add(roleId, sid); } - channel.pushMessage('onTeamJoin', {teamCode, roleInfo: roleStatus}); - teamStatus.roleIds.push(roleId); - teamStatus.roleStatus.push(roleStatus); - return resResult(STATUS.SUCCESS, { teamInfo: { - teamCode, roleStatus: teamStatus.roleStatus, capId: teamStatus.capId, ceLimit: teamStatus.ceLimit - }}); + return resResult(STATUS.SUCCESS, { teamInfo: teamStatus}); } async getTeams(msg: { blueprtIds: Array }, session: BackendSession) { diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 2f954ffb6..7dfa2a81a 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -59,7 +59,7 @@ export class RoleStatus { @index({ teamCode: 1 }) @index({ roleIds: 1 }) -@index({ blueprtId: 1, status: 1, pub: 1}) +@index({ status: 1, blueprtId: 1, pub: 1}) export default class ComBattleTeam extends BaseModel { // 队伍唯一编号 @@ -158,6 +158,11 @@ export default class ComBattleTeam extends BaseModel { return teams; } + public static async getOneTeamByQualityAndSt(qualityArr: Array, status: number, ce = 0, pub = true, lean = true) { + const team = await ComBattleTeamModel.findOne({quality: {$in: qualityArr}, status, ceLimit: {$lte: ce}, pub}).lean(lean); + return team; + } + public static async getTeamByRoleAndTime(roleId: string, quality?: number, time?: Date, isAssist?: boolean, limitCnt = 50, lean = true) { let query = {roleIds: roleId}; if (quality) {