寻宝:战斗结束清理机器人攻击计时器
This commit is contained in:
@@ -17,7 +17,7 @@ import { ItemModel } from '../../../db/Item';
|
|||||||
import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService';
|
import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService';
|
||||||
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||||
import { transBossHpArr } from '../../../services/battleService';
|
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 { setAp } from '../../../services/actionPointService';
|
||||||
import { roleLevelup } from '../../../services/normalBattleService';
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
|
|
||||||
@@ -538,6 +538,7 @@ export class ComBattleHandler {
|
|||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
let teamStatus = thiz.teamMap.get(teamCode);
|
let teamStatus = thiz.teamMap.get(teamCode);
|
||||||
if (teamStatus && teamStatus.status === COM_TEAM_STATUS.FIGHTING) {
|
if (teamStatus && teamStatus.status === COM_TEAM_STATUS.FIGHTING) {
|
||||||
|
clearRobotHurtTimer(teamStatus, this.robotHurtTimer);
|
||||||
let channelService = thiz.app.get('channelService');
|
let channelService = thiz.app.get('channelService');
|
||||||
let channel = channelService.getChannel(teamCode, false);
|
let channel = channelService.getChannel(teamCode, false);
|
||||||
let team = await ComBattleTeamModel.syncTeamData({teamCode, status: COM_TEAM_STATUS.LOOSE, roleStatus: teamStatus.roleStatus, bossHpArr: teamStatus.bossHpArr});
|
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);
|
}, COM_BTL_CONST.BTL_TIME_LMT);
|
||||||
teamStatus.roleStatus.forEach((st, idx) => {
|
teamStatus.roleStatus.forEach((st, idx) => {
|
||||||
if (st.isRobot === true) {
|
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);
|
return resResult(STATUS.SUCCESS);
|
||||||
@@ -682,6 +683,7 @@ export class ComBattleHandler {
|
|||||||
let { teamCode } = msg;
|
let { teamCode } = msg;
|
||||||
let team = await ComBattleTeamModel.getTeamByCode(teamCode);
|
let team = await ComBattleTeamModel.getTeamByCode(teamCode);
|
||||||
if (!team || team.status !== COM_TEAM_STATUS.WIN) return resResult(STATUS.COM_BATTLE_REWARD_ERR);
|
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 { roleStatus, blueprtId, status, bossHpArr } = team;
|
||||||
let roleSt: RoleStatus = null;
|
let roleSt: RoleStatus = null;
|
||||||
roleStatus.forEach(st => {
|
roleStatus.forEach(st => {
|
||||||
|
|||||||
@@ -241,7 +241,6 @@ export function updateRobotHurt(teamStatus, roleSt: RoleStatus, channel: Channel
|
|||||||
roleSt.totalDmg += robotTotalHurt;
|
roleSt.totalDmg += robotTotalHurt;
|
||||||
updateRobotKilled(teamStatus.bossHp, roleSt);
|
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 }));
|
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 {Channel} channel
|
||||||
* @param {Map<string, NodeJS.Timer>} robotHurtTimer
|
* @param {Map<string, NodeJS.Timer>} robotHurtTimer
|
||||||
*/
|
*/
|
||||||
export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel) {
|
export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval: number, channel: Channel, robotHurtTimer: Map<string, NodeJS.Timer>) {
|
||||||
|
const timerKey = `${teamStatus.teamCode}_${roleSt.roleId}`;
|
||||||
const robotTimer = setInterval(() => {
|
const robotTimer = setInterval(() => {
|
||||||
const robotTotalHurt = teamStatus.bossHp * COM_BTL_CONST.ROBOT_HURT_RATIO;
|
const robotTotalHurt = teamStatus.bossHp * COM_BTL_CONST.ROBOT_HURT_RATIO;
|
||||||
if (roleSt.totalDmg < robotTotalHurt) {
|
if (roleSt.totalDmg < robotTotalHurt) {
|
||||||
@@ -262,8 +262,33 @@ export function updateRobotHurtByTime(teamStatus, roleSt: RoleStatus, interval:
|
|||||||
clearInterval(robotTimer);
|
clearInterval(robotTimer);
|
||||||
}
|
}
|
||||||
}, interval * 1000);
|
}, interval * 1000);
|
||||||
|
if (!robotHurtTimer.has(timerKey)) {
|
||||||
|
robotHurtTimer.set(timerKey, robotTimer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 清理机器人伤害的 timer
|
||||||
|
* @export
|
||||||
|
* @param {*} teamStatus 寻宝队伍状态
|
||||||
|
* @param {Map<string, NodeJS.Timer>} robotHurtTimer
|
||||||
|
*/
|
||||||
|
export function clearRobotHurtTimer(teamStatus, robotHurtTimer: Map<string, NodeJS.Timer>) {
|
||||||
|
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) {
|
export function comBtlLvInvalid(lv: number, lvRange: number) {
|
||||||
const lvs = comBtlRangeInfo(lvRange);
|
const lvs = comBtlRangeInfo(lvRange);
|
||||||
if (!lvs) return true;
|
if (!lvs) return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user