diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index e59b116c1..079808ce5 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -1,5 +1,5 @@ import { ComBattleInvitation, MemComBtlTeam } from './../../../domain/battleField/ComBattleTeamField'; -import { difference } from 'underscore'; +import { difference, pick } from 'underscore'; /* * @Author: 梁桐川 * @Date: 2020-11-30 15:05:48 @@ -560,6 +560,31 @@ export class ComBattleHandler { return resResult(STATUS.SUCCESS, { battleGoods: goods, teamInfo: {status, teamCode, roleStatus, bossHpArr} }); } + async retreat(msg: {teamCode: string}, session: BackendSession) { + let roleId = session.get('roleId'); + let sid = session.get('sid'); + + let { teamCode } = msg; + let teamStatus = this.teamMap.get(teamCode); + if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) { + checkTeamStatusAndSend(teamCode, roleId, sid); + return resResult(STATUS.SUCCESS); + } + if(teamStatus.roleStatus.length > 1) { + return resResult(STATUS.COM_BATTLE_RETREAT_ERR) + } + + clearRobotHurtTimer(teamStatus, this.robotHurtTimer); + + let team = await ComBattleTeamModel.syncTeamData({ teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr, endTime: Date.now() }, false, true); + if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR); + sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_COMPLETE, { teamCode, result: false }); + + this.teamMap.delete(teamCode); + + return resResult(STATUS.SUCCESS, { teamInfo: pick(team, ['status', 'teamCode', 'roleStatus', 'bossHpArr']) }); + } + async getComBtlStatus(msg: {teamCode: string}, session: BackendSession) { let { teamCode } = msg; let roleStatus: RoleStatus[], status: number, bossHpArr: BossHp[], timeout: boolean, endTime = 0; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 57480b1c2..ce6e4288a 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -157,6 +157,7 @@ export const STATUS = { COM_BATTLE_IS_RUNNING: { code: 20637, simStr: '您有队伍正在进行中' }, COM_BATTLE_INVITE_LV_NOT_ENOUGH: { code: 20638, simStr: '对方队伍等级不足,无法邀请' }, COM_BATTLE_INVITE_CE_LIMIT: { code: 20639, simStr: '对方队伍战力不足,无法邀请' }, + COM_BATTLE_RETREAT_ERR: { code: 20640, simStr: '队伍不止单人,不允许撤退' }, // 共斗藏宝图合成 COM_BLUEPRT_QUALITY_CANNOT_COMPOSE: { code: 20650, simStr: '该品质藏宝图不可合成' }, COM_BLUEPRT_COUNT_ERROR: { code: 20651, simStr: '材料数量不足' }, diff --git a/shared/db/ComBattleTeam.ts b/shared/db/ComBattleTeam.ts index 92b799e40..eac6a3cea 100644 --- a/shared/db/ComBattleTeam.ts +++ b/shared/db/ComBattleTeam.ts @@ -196,10 +196,14 @@ export default class ComBattleTeam extends BaseModel { @prop({ required: false, type: BossHp, default: [], _id: false }) bossHpArr: BossHp[]; - // 队伍是否开放加入 + // 是否超时 @prop({ required: true, default: false }) timeout: boolean; + // 是否撤退 + @prop({ required: true, default: false }) + retreat: boolean; + // 黑名单 blacklist: string[] = []; @@ -272,9 +276,9 @@ export default class ComBattleTeam extends BaseModel { return team; } - public static async syncTeamData(teamData: {teamCode: string, status: number, roleStatus: RoleStatus[], bossHpArr: BossHp[], endTime?: number}, timeout = false, lean = true) { + public static async syncTeamData(teamData: {teamCode: string, status: number, roleStatus: RoleStatus[], bossHpArr: BossHp[], endTime?: number}, timeout = false, retreat = false) { // console.log('syncTeamData bossHpArr: ', teamData.bossHpArr); - const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleStatus.length, timeout}}, {new: true}).lean(lean); + const team: ComBattleTeamType = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData, roleCnt: teamData.roleStatus.length, timeout, retreat}}, {new: true}).lean(); return team; }