From 3cc71d6e8960a111788b45488098a3b8971a8a9d Mon Sep 17 00:00:00 2001 From: liangtongchuan Date: Wed, 20 Jan 2021 18:32:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BB=E5=AE=9D=EF=BC=9A=E6=88=98=E6=96=97?= =?UTF-8?q?=E7=BB=93=E6=9D=9F=E6=B8=85=E7=90=86=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E6=94=BB=E5=87=BB=E8=AE=A1=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../battle/handler/comBattleHandler.ts | 6 ++-- game-server/app/services/comBattleService.ts | 29 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 72460a26e..26f772592 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 } 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 } from '../../../services/comBattleService'; +import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurt, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer } from '../../../services/comBattleService'; import { setAp } from '../../../services/actionPointService'; import { roleLevelup } from '../../../services/normalBattleService'; @@ -538,6 +538,7 @@ export class ComBattleHandler { setTimeout(async () => { let teamStatus = thiz.teamMap.get(teamCode); if (teamStatus && teamStatus.status === COM_TEAM_STATUS.FIGHTING) { + clearRobotHurtTimer(teamStatus, this.robotHurtTimer); let channelService = thiz.app.get('channelService'); let channel = channelService.getChannel(teamCode, false); let team = await ComBattleTeamModel.syncTeamData({teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr}); @@ -548,7 +549,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); + updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer); } }); return resResult(STATUS.SUCCESS); @@ -682,6 +683,7 @@ export class ComBattleHandler { 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); 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 487a58e30..4690632e9 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -241,7 +241,6 @@ export function updateRobotHurt(teamStatus, roleSt: RoleStatus, channel: Channel roleSt.totalDmg += robotTotalHurt; updateRobotKilled(teamStatus.bossHp, roleSt); channel.pushMessage('onTeammateAct', resResult(STATUS.SUCCESS, { teamCode: teamStatus.teamCode, bossCurHp: teamStatus.bossCurHp, bossHpArr: teamStatus.bossHpArr, roleStatus: teamStatus.roleStatus, actRoleId: roleSt.roleId, actBossHurts })); - } /** @@ -253,7 +252,8 @@ export function updateRobotHurt(teamStatus, roleSt: RoleStatus, channel: Channel * @param {Channel} channel * @param {Map} robotHurtTimer */ -export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel) { +export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel, robotHurtTimer: Map) { + const timerKey = `${teamStatus.teamCode}_${roleSt.roleId}`; const robotTimer = setInterval(() => { const robotTotalHurt = teamStatus.bossHp * COM_BTL_CONST.ROBOT_HURT_RATIO; if (roleSt.totalDmg < robotTotalHurt) { @@ -262,8 +262,33 @@ export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: clearInterval(robotTimer); } }, interval * 1000); + if (!robotHurtTimer.has(timerKey)) { + robotHurtTimer.set(timerKey, robotTimer); + } } +/** + * @description 清理机器人伤害的 timer + * @export + * @param {*} teamStatus 寻宝队伍状态 + * @param {Map} robotHurtTimer + */ +export function clearRobotHurtTimer(teamStatus, robotHurtTimer: Map) { + teamStatus.roleStatus.forEach(st => { + const timerKey = `${teamStatus.teamCode}_${st.roleId}`; + if (st.isRobot === true && robotHurtTimer.has(timerKey)) { + clearInterval(robotHurtTimer.get(timerKey)); + } + }); +} + +/** + * @description 检查寻宝等级是否合法 + * @export + * @param {number} lv 玩家等级 + * @param {number} lvRange 藏宝图等级范围 + * @returns + */ export function comBtlLvInvalid(lv: number, lvRange: number) { const lvs = comBtlRangeInfo(lvRange); if (!lvs) return true;