diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index efa03714d..fea0c7ee2 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -14,7 +14,7 @@ import { Application, BackendSession } from 'pinus'; import { resResult, getRandomByLen, calculateNum, getRandValue, ratioReward, reduceCe, getRandValueByMinMax } from '../../../pubUtils/util'; import { RoleStatus } from '../../../db/ComBattleTeam'; import { ItemModel } from '../../../db/Item'; -import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService'; +import { handleFixedReward, addItems, handleCost, decreaseItems } from '../../../services/rewardService'; import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; import { transBossHpArr } from '../../../services/battleService'; import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurt, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam } from '../../../services/comBattleService'; @@ -173,14 +173,16 @@ export class ComBattleHandler { for(let robotIdx = 0; robotIdx < robotCnt; robotIdx++) { const joinTime = getRandValueByMinMax(COM_BTL_CONST.MIN_CAP_TIME, COM_BTL_CONST.MAX_CAP_TIME, 0); setTimeout(async () => { - let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, teamStatus.ceLimit, lv, 1); - teamStatus.roleIds = teamStatus.roleIds.concat(robotIdArr); - teamStatus.roleStatus = teamStatus.roleStatus.concat(robotStArr); - for (let st of robotStArr) { - await ComBattleTeamModel.addRole(teamCode, st); + if (teamStatus.status === COM_TEAM_STATUS.DEFAULT && teamStatus.roleIds.length < 3) { + let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, teamStatus.ceLimit, lv, 1); + teamStatus.roleIds = teamStatus.roleIds.concat(robotIdArr); + teamStatus.roleStatus = teamStatus.roleStatus.concat(robotStArr); + for (let st of robotStArr) { + await ComBattleTeamModel.addRole(teamCode, st); + } + channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: teamStatus})); + setDismissTimer(teamStatus, thiz.teamMap, roleId, thiz.teamDisTimer, thiz.app); } - channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: teamStatus})); - setDismissTimer(teamStatus, thiz.teamMap, roleId, thiz.teamDisTimer, thiz.app); }, joinTime); } } @@ -476,22 +478,6 @@ export class ComBattleHandler { let teamStatus = this.teamMap.get(teamCode); let result = await dismissTeam(teamStatus, this.teamMap, roleId, this.teamDisTimer, this.app); return result; - - if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); - if (roleId !== teamStatus.capId) return resResult(STATUS.COM_BATTLE_CAP_ONLY); - - let team = await ComBattleTeamModel.removeTeam(teamCode); - if (!team) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR); - - let rmSt = this.teamMap.delete(teamCode); - if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR); - - let channelService = this.app.get('channelService'); - let channel = channelService.getChannel(teamCode, false); - channel.pushMessage('onTeamDismiss', resResult(STATUS.SUCCESS, {teamCode})); - channel.destroy(); - clearComBtlTimer(teamCode, this.teamDisTimer); // 队伍解散停止解散计时 - return resResult(STATUS.SUCCESS); } /** @@ -549,6 +535,7 @@ export class ComBattleHandler { */ async action(msg: {teamCode: string, bossHurts: Array<{dataId: number, hurtHp: number}>, killed: Array, curRnd: number}, session: BackendSession) { let roleId = session.get('roleId'); + let sid = session.get('sid'); let { teamCode, killed, bossHurts, curRnd } = msg; let teamStatus = this.teamMap.get(teamCode); if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); @@ -616,8 +603,8 @@ export class ComBattleHandler { // 战斗胜利队长扣减藏宝图 if (result && teamStatus.capId != 'robot') { - let res = await ItemModel.decreaseItems(teamStatus.capId, [{id: teamStatus.blueprtId, count: 1}]); - if (res.hasError) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH); + let res = await decreaseItems(teamStatus.capId, sid, [{id: teamStatus.blueprtId, count: 1}]); + if (res === true) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH); } channel.pushMessage('onTeamComplete', resResult(STATUS.SUCCESS, {teamCode, result})); this.teamMap.delete(teamCode); diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 264fec50e..58c428e03 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -1,3 +1,4 @@ +// import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop'; import { FriendPointModel } from './../db/FriendPoint'; import { STATUS } from './../consts/statusCode'; import { COM_BATTLE_ROBOT_ID_NAME, COM_TEAM_STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts'; @@ -299,6 +300,7 @@ export function comBtlLvInvalid(lv: number, lvRange: number) { export async function dismissTeam(teamStatus, teamMap: Map, roleId: string, teamDisTimer: Map, app) { const { teamCode } = teamStatus; if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); + if (teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR); if (roleId !== teamStatus.capId) return resResult(STATUS.COM_BATTLE_CAP_ONLY); let team = await ComBattleTeamModel.removeTeam(teamCode); @@ -316,7 +318,7 @@ export async function dismissTeam(teamStatus, teamMap: Map, roleId: } export function setDismissTimer(teamStatus, teamMap: Map, roleId: string, teamDisTimer: Map, app) { - if (teamStatus && teamStatus.roleIds && teamStatus.roleIds.length === 3) { + if (teamStatus && teamStatus.roleIds && teamStatus.roleIds.length === 3 && teamStatus.status === COM_TEAM_STATUS.DEFAULT) { let timer = setTimeout(async () => { await dismissTeam(teamStatus, teamMap, roleId, teamDisTimer, app); }, COM_BTL_CONST.CAP_START_TIME); diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 3e6a0e6cf..861f00b11 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -216,4 +216,5 @@ export async function decreaseItems(roleId: string, sid: string, bags: Array<{id if(hasError) return true; pinus.app.get('channelService').pushMessageByUids('onItemUpdate', resResult(STATUS.SUCCESS, {goods: result} ), uids); } + return false; } \ No newline at end of file