寻宝:机器人分开加入战斗
This commit is contained in:
@@ -11,13 +11,13 @@ import { ComBattleTeamModel, BossHp } from '../../../db/ComBattleTeam';
|
|||||||
import Role, { RoleModel } from '../../../db/Role';
|
import Role, { RoleModel } from '../../../db/Role';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
import { Application, BackendSession } from 'pinus';
|
import { Application, BackendSession } from 'pinus';
|
||||||
import { resResult, getRandomByLen, calculateNum, getRandValue, ratioReward, reduceCe } from '../../../pubUtils/util';
|
import { resResult, getRandomByLen, calculateNum, getRandValue, ratioReward, reduceCe, getRandValueByMinMax } from '../../../pubUtils/util';
|
||||||
import { RoleStatus } from '../../../db/ComBattleTeam';
|
import { RoleStatus } from '../../../db/ComBattleTeam';
|
||||||
import { ItemModel } from '../../../db/Item';
|
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, clearRobotHurtTimer } from '../../../services/comBattleService';
|
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurt, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam } from '../../../services/comBattleService';
|
||||||
import { setAp } from '../../../services/actionPointService';
|
import { setAp } from '../../../services/actionPointService';
|
||||||
import { roleLevelup } from '../../../services/normalBattleService';
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
|
|
||||||
@@ -165,32 +165,26 @@ export class ComBattleHandler {
|
|||||||
channelService.pushMessageByUids('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: comTeam}), uids);
|
channelService.pushMessageByUids('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: comTeam}), uids);
|
||||||
}
|
}
|
||||||
let thiz = this;
|
let thiz = this;
|
||||||
|
|
||||||
// 倒计时一定时间给队长匹配机器人
|
// 倒计时一定时间给队长匹配机器人
|
||||||
setTimeout(async () => {
|
let teamStatus = thiz.teamMap.get(teamCode);
|
||||||
let team = thiz.teamMap.get(teamCode);
|
if (teamStatus && teamStatus.roleIds && teamStatus.status === COM_TEAM_STATUS.DEFAULT && teamStatus.roleIds.length < 3) {
|
||||||
if (team && team.roleIds && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.length < 3) {
|
const robotCnt = 3 - teamStatus.roleIds.length;
|
||||||
let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, team.ceLimit, lv, 3 - team.roleIds.length);
|
for(let robotIdx = 0; robotIdx < robotCnt; robotIdx++) {
|
||||||
team.roleIds = team.roleIds.concat(robotIdArr);
|
const joinTime = getRandValueByMinMax(COM_BTL_CONST.MIN_CAP_TIME, COM_BTL_CONST.MAX_CAP_TIME, 0);
|
||||||
team.roleStatus = team.roleStatus.concat(robotStArr);
|
setTimeout(async () => {
|
||||||
for (let st of robotStArr) {
|
let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, teamStatus.ceLimit, lv, 1);
|
||||||
await ComBattleTeamModel.addRole(teamCode, st);
|
teamStatus.roleIds = teamStatus.roleIds.concat(robotIdArr);
|
||||||
}
|
teamStatus.roleStatus = teamStatus.roleStatus.concat(robotStArr);
|
||||||
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: team}));
|
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);
|
||||||
|
}, joinTime);
|
||||||
}
|
}
|
||||||
// TODO: 代码抽象
|
|
||||||
if (team && team.roleIds && team.roleIds.length === 3) {
|
|
||||||
let timer = setTimeout(async () => {
|
|
||||||
thiz.dismiss({teamCode}, session);
|
|
||||||
}, COM_BTL_CONST.CAP_START_TIME);
|
|
||||||
thiz.teamDisTimer.set(teamCode, timer);
|
|
||||||
}
|
|
||||||
}, COM_BTL_CONST.CAP_TIME);
|
|
||||||
if (team.roleIds && team.roleIds.length === 3) {
|
|
||||||
let timer = setTimeout(async () => {
|
|
||||||
thiz.dismiss({teamCode}, session);
|
|
||||||
}, COM_BTL_CONST.CAP_START_TIME);
|
|
||||||
thiz.teamDisTimer.set(teamCode, timer);
|
|
||||||
}
|
}
|
||||||
|
setDismissTimer(teamStatus, thiz.teamMap, roleId, thiz.teamDisTimer, thiz.app);
|
||||||
return resResult(STATUS.SUCCESS, { teamCode, roleStatus });
|
return resResult(STATUS.SUCCESS, { teamCode, roleStatus });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,13 +323,7 @@ export class ComBattleHandler {
|
|||||||
}
|
}
|
||||||
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: teamStatus}));
|
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: teamStatus}));
|
||||||
|
|
||||||
if (teamStatus.roleIds && teamStatus.roleIds.length === 3) {
|
setDismissTimer(teamStatus, this.teamMap, roleId, this.teamDisTimer, this.app);
|
||||||
let thiz = this;
|
|
||||||
let timer = setTimeout(async () => {
|
|
||||||
thiz.dismiss({teamCode}, session);
|
|
||||||
}, COM_BTL_CONST.CAP_START_TIME);
|
|
||||||
thiz.teamDisTimer.set(teamCode, timer);
|
|
||||||
}
|
|
||||||
return resResult(STATUS.SUCCESS, { teamInfo: teamStatus});
|
return resResult(STATUS.SUCCESS, { teamInfo: teamStatus});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,13 +458,7 @@ export class ComBattleHandler {
|
|||||||
}
|
}
|
||||||
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: team}));
|
channel.pushMessage('onTeamJoin', resResult(STATUS.SUCCESS, {teamInfo: team}));
|
||||||
}
|
}
|
||||||
// TODO: 代码抽象
|
await setDismissTimer(team, thiz.teamMap, roleId, thiz.teamDisTimer, thiz.app);
|
||||||
if (team && team.roleIds && team.roleIds.length === 3) {
|
|
||||||
let timer = setTimeout(async () => {
|
|
||||||
thiz.dismiss({teamCode}, session);
|
|
||||||
}, COM_BTL_CONST.CAP_START_TIME);
|
|
||||||
thiz.teamDisTimer.set(teamCode, timer);
|
|
||||||
}
|
|
||||||
}, COM_BTL_CONST.ASSIST_TIME);
|
}, COM_BTL_CONST.ASSIST_TIME);
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
@@ -492,6 +474,9 @@ export class ComBattleHandler {
|
|||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let { teamCode } = msg;
|
let { teamCode } = msg;
|
||||||
let teamStatus = this.teamMap.get(teamCode);
|
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 (!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);
|
if (roleId !== teamStatus.capId) return resResult(STATUS.COM_BATTLE_CAP_ONLY);
|
||||||
|
|
||||||
|
|||||||
@@ -295,3 +295,31 @@ export function comBtlLvInvalid(lv: number, lvRange: number) {
|
|||||||
const minLv = lvs[0];
|
const minLv = lvs[0];
|
||||||
return lv < minLv;
|
return lv < minLv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function dismissTeam(teamStatus, teamMap: Map<string, any>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, app) {
|
||||||
|
const { teamCode } = teamStatus;
|
||||||
|
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 = teamMap.delete(teamCode);
|
||||||
|
if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR);
|
||||||
|
|
||||||
|
let channelService = app.get('channelService');
|
||||||
|
let channel = channelService.getChannel(teamCode, false);
|
||||||
|
channel.pushMessage('onTeamDismiss', resResult(STATUS.SUCCESS, {teamCode}));
|
||||||
|
channel.destroy();
|
||||||
|
clearComBtlTimer(teamCode, teamDisTimer); // 队伍解散停止解散计时
|
||||||
|
return resResult(STATUS.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setDismissTimer(teamStatus, teamMap: Map<string, any>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, app) {
|
||||||
|
if (teamStatus && teamStatus.roleIds && teamStatus.roleIds.length === 3) {
|
||||||
|
let timer = setTimeout(async () => {
|
||||||
|
await dismissTeam(teamStatus, teamMap, roleId, teamDisTimer, app);
|
||||||
|
}, COM_BTL_CONST.CAP_START_TIME);
|
||||||
|
teamDisTimer.set(teamStatus.teamCode, timer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -139,7 +139,8 @@ export const COM_BTL_CONST = {
|
|||||||
ROBOT_CE_LIMIT_MIN: 1.05, // 有战力限制的情况下机器人战力最小倍数
|
ROBOT_CE_LIMIT_MIN: 1.05, // 有战力限制的情况下机器人战力最小倍数
|
||||||
ROBOT_CE_LIMIT_MAX: 1.15, // 有战力限制的情况下机器人战力最大倍数
|
ROBOT_CE_LIMIT_MAX: 1.15, // 有战力限制的情况下机器人战力最大倍数
|
||||||
ASSIST_TIME: 60 * 1000, // 助战匹配机器人的等待时长
|
ASSIST_TIME: 60 * 1000, // 助战匹配机器人的等待时长
|
||||||
CAP_TIME: 40 * 1000, // 队长匹配机器人的等待时长
|
MIN_CAP_TIME: 40 * 1000, // 队长匹配机器人的等待时长
|
||||||
|
MAX_CAP_TIME: 55 * 1000, // 队长匹配机器人的等待时长
|
||||||
CAP_START_TIME: 60 * 1000, // 人齐后队长开始时长倒计时
|
CAP_START_TIME: 60 * 1000, // 人齐后队长开始时长倒计时
|
||||||
ROBOT_RND_LMT: 10, // 机器人输出伤害的回合数
|
ROBOT_RND_LMT: 10, // 机器人输出伤害的回合数
|
||||||
ROBOT_ACT_LMT: 10, // 机器人输出伤害的次数
|
ROBOT_ACT_LMT: 10, // 机器人输出伤害的次数
|
||||||
|
|||||||
Reference in New Issue
Block a user