From 7743e1036b391730273948184ed3322b97c0f6b4 Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Tue, 19 Jan 2021 16:20:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9D=EF=BC=9A=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E9=87=8D=E5=90=AF=E6=97=B6=E6=B8=85=E7=90=86=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E6=88=98=E6=96=97=E7=9A=84=E7=8A=B6=E6=80=81=EF=BC=9B?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E6=97=B6=E6=A3=80=E6=9F=A5=E9=98=9F=E4=BC=8D?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app.ts | 3 +++ .../app/servers/battle/handler/comBattleHandler.ts | 4 ++-- game-server/app/services/comBattleService.ts | 11 +++++++++++ shared/db/ComBattleTeam.ts | 10 ++++++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/game-server/app.ts b/game-server/app.ts index b94c5ff33..8b61978d5 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -1,3 +1,4 @@ +import { COM_TEAM_STATUS } from './app/consts/consts'; import { createTcpAcceptor, createTcpMailBox, @@ -19,6 +20,7 @@ import * as redlockCacheService from './app/services/redlockCacheService'; import * as redLockService from './app/services/redLockService'; // TODO 需要整理。 import _pinus = require('pinus'); +import { updateTeamStatus } from './app/services/comBattleService'; const filePath = (_pinus as any).FILEPATH; filePath.MASTER = '/config/master'; @@ -68,6 +70,7 @@ app.configure(function() { if (app.serverId === 'master-server-1') { redisService.initAllRank(); redisService.clearComBtlQueue(); + updateTeamStatus(COM_TEAM_STATUS.DEFAULT, 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 74b3a004a..0f4b0d562 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -256,7 +256,7 @@ export class ComBattleHandler { } // 机器人队伍 3 秒直接开战 setTimeout(async () => { - await ComBattleTeamModel.updateStatus(teamCode, COM_TEAM_STATUS.FIGHTING); + await ComBattleTeamModel.updateStatusByCode(teamCode, COM_TEAM_STATUS.FIGHTING); comTeam.status = COM_TEAM_STATUS.FIGHTING; channelService.pushMessageByUids('onComBtlStart', resResult(STATUS.SUCCESS, {teamCode, roleStatus: comTeam.roleStatus}), [{uid: roleId, sid}]); }, 3000); @@ -523,7 +523,7 @@ export class ComBattleHandler { teamStatus.status = COM_TEAM_STATUS.FIGHTING; - let team = await ComBattleTeamModel.updateStatus(teamCode, COM_TEAM_STATUS.FIGHTING); + let team = await ComBattleTeamModel.updateStatusByCode(teamCode, COM_TEAM_STATUS.FIGHTING); if (!team) return resResult(STATUS.COM_BATTLE_START_ERR); clearComBtlTimer(teamCode, this.teamDisTimer); // 战斗开始停止解散计时 diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 0a72334b6..a0672294d 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -167,3 +167,14 @@ export async function getFrd(roleId: string, quality: number) { if (assistTime >= assistanceTime) isFrd = true; return isFrd; } + +/** + * @description 更新队伍状态 + * @export + * @param {number} preStatus 更新前状态,作为筛选条件 + * @param {number} newStatus 要设置的新状态 + */ +export async function updateTeamStatus(preStatus: number, newStatus: number) { + if (preStatus === newStatus) return; + await ComBattleTeamModel.updateStatusByStatus(preStatus, newStatus); +} \ No newline at end of file diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 4f359cf5d..9b7ffedac 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -166,11 +166,16 @@ export default class ComBattleTeam extends BaseModel { return team; } - public static async updateStatus(teamCode: string, status: number, lean = true) { + public static async updateStatusByCode(teamCode: string, status: number, lean = true) { const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamCode }, {status}, {new: true}).lean(lean); return team; } + public static async updateStatusByStatus(preStatus: number, newStatus: number, lean = true) { + const team = await ComBattleTeamModel.updateMany({ status: preStatus }, {status: newStatus}, {new: true}).lean(lean); + return team; + } + public static async updateResult(teamCode: string, roleId: string, isSuccess: boolean, _lean = true) { let team = await ComBattleTeamModel.findOne({teamCode}).select('status roleStatus'); if(!team) return; @@ -214,7 +219,8 @@ export default class ComBattleTeam extends BaseModel { } public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: Array, status: number, ce = 0, pub = true, cntLmt = 2, lean = true) { - const team: ComBattleTeamType = await ComBattleTeamModel.findOne({quality: {$in: qualityArr}, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}}).lean(lean); + const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前 + const team: ComBattleTeamType = await ComBattleTeamModel.findOne({quality: {$in: qualityArr}, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean); return team; }