From 50aee50e5ead4871beccdc53894edb003118bd6e Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Sat, 23 Jan 2021 20:55:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9D=EF=BC=9A=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E4=BA=BA=E4=BC=A4=E5=AE=B3=E6=97=B6=E8=A6=81=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=88=98=E6=96=97=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/comBattleHandler.ts | 34 ++++-------------- game-server/app/services/comBattleService.ts | 35 +++++++++++++++++-- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index b10fa1130..cd627b904 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -17,7 +17,7 @@ import { ItemModel } from '../../../db/Item'; 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, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId } from '../../../services/comBattleService'; +import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId, handleComBtlProgress } from '../../../services/comBattleService'; import { setAp } from '../../../services/actionPointService'; import { roleLevelup } from '../../../services/normalBattleService'; @@ -489,6 +489,7 @@ export class ComBattleHandler { */ async startBattle(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) return resResult(STATUS.COM_BATTLE_TEAM_INVALID); @@ -520,7 +521,7 @@ export class ComBattleHandler { }, COM_BTL_CONST.BTL_TIME_LMT); teamStatus.roleStatus.forEach((st, idx) => { if (st.isRobot === true) { - updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer); + updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap, sid); } }); return resResult(STATUS.SUCCESS); @@ -585,31 +586,8 @@ export class ComBattleHandler { let channel = channelService.getChannel(teamCode, false); const roleStatus = teamStatus.roleStatus.map(st => {return {roleId: st.roleId, totalDmg: st.totalDmg, killed: st.killed}}); channel.pushMessage('onTeammateAct', resResult(STATUS.SUCCESS, { teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus, actRoleId: roleId, actBossHurts })); - // 判断战斗是否结束 - let battleSt = checkComBattleResult(teamStatus); - teamStatus.status = battleSt; - if (battleSt === COM_TEAM_STATUS.WIN || battleSt === COM_TEAM_STATUS.LOOSE) { - let result = battleSt === COM_TEAM_STATUS.WIN; - if (result) { - teamStatus.bossHpArr.forEach(bs => { - bs.curHp = 0; - }); - for (let st of teamStatus.roleStatus) { - st.fixReward = await getRealReward(teamStatus.blueprtId, st); - }; - } - let team = await ComBattleTeamModel.syncTeamData({teamCode, status: battleSt, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr}); - if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR); - - // 战斗胜利队长扣减藏宝图 - if (result && teamStatus.capId != 'robot') { - let res = await decreaseItems(teamStatus.capId, sid, [{id: teamStatus.blueprtId, count: 1}]); - if (res === true) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH); - } - clearRobotHurtTimer(teamStatus, this.robotHurtTimer); - channel.pushMessage('onTeamComplete', resResult(STATUS.SUCCESS, {teamCode, result})); - this.teamMap.delete(teamCode); - } + const result = await handleComBtlProgress(teamStatus, sid, this.robotHurtTimer, this.teamMap, channel); + if (result && result.code !== 0) return result; return resResult(STATUS.SUCCESS); } @@ -655,8 +633,8 @@ export class ComBattleHandler { let sid = session.get('sid'); let { teamCode } = msg; let team = await ComBattleTeamModel.getTeamByCode(teamCode); - if (!team || team.status !== COM_TEAM_STATUS.WIN) return resResult(STATUS.COM_BATTLE_REWARD_ERR); clearRobotHurtTimer(team, this.robotHurtTimer); + if (!team || team.status !== COM_TEAM_STATUS.WIN) return resResult(STATUS.COM_BATTLE_REWARD_ERR); let { roleStatus, blueprtId, status, bossHpArr } = team; let roleSt: RoleStatus = null; roleStatus.forEach(st => { diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 0ebac0354..0725f77c0 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -9,6 +9,7 @@ import { getRandRobot } from "./battleService"; import { difference, omit } from 'underscore'; import { Channel } from 'pinus'; import { TREASURE } from '../pubUtils/dicParam'; +import { decreaseItems } from './rewardService'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id @@ -215,6 +216,35 @@ function updateRobotKilled(bossHp: number, roleSt: RoleStatus) { } } +export async function handleComBtlProgress(teamStatus, sid: string, robotHurtTimer: Map, teamMap: Map, channel: Channel) { + const { teamCode } = teamStatus; + // 判断战斗是否结束 + let battleSt = checkComBattleResult(teamStatus); + teamStatus.status = battleSt; + if (battleSt === COM_TEAM_STATUS.WIN || battleSt === COM_TEAM_STATUS.LOOSE) { + let result = battleSt === COM_TEAM_STATUS.WIN; + if (result) { + teamStatus.bossHpArr.forEach(bs => { + bs.curHp = 0; + }); + for (let st of teamStatus.roleStatus) { + st.fixReward = await getRealReward(teamStatus.blueprtId, st); + }; + } + let team = await ComBattleTeamModel.syncTeamData({teamCode, status: battleSt, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr}); + if (!team) return resResult(STATUS.COM_BATTLE_RESULT_ERR); + + // 战斗胜利队长扣减藏宝图 + if (result && teamStatus.capId != 'robot') { + let res = await decreaseItems(teamStatus.capId, sid, [{id: teamStatus.blueprtId, count: 1}]); + if (res === true) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH); + } + clearRobotHurtTimer(teamStatus, robotHurtTimer); + channel.pushMessage('onTeamComplete', resResult(STATUS.SUCCESS, {teamCode, result})); + teamMap.delete(teamCode); + } +} + /** * @description 更新机器人对 boss 的伤害 * @export @@ -254,12 +284,13 @@ export function updateRobotHurt(teamStatus, roleSt: RoleStatus, channel: Channel * @param {Channel} channel * @param {Map} robotHurtTimer */ -export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel, robotHurtTimer: Map) { +export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel, robotHurtTimer: Map, teamMap: Map, sid: string) { const timerKey = `${teamStatus.teamCode}_${roleSt.roleId}`; const robotTimer = setInterval(() => { const robotTotalHurt = teamStatus.bossHp * COM_BTL_CONST.ROBOT_HURT_RATIO; - if (roleSt.totalDmg < robotTotalHurt) { + if (roleSt.totalDmg < robotTotalHurt && teamStatus.bossCurHp > 0) { updateRobotHurt(teamStatus, roleSt, channel); + handleComBtlProgress(teamStatus, sid, robotHurtTimer, teamMap, channel); } else { clearInterval(robotTimer); }