寻宝:清理匹配成功的玩家信息;修复机器人和匹配条件等bug

This commit is contained in:
liangtongchuan
2020-12-01 21:12:09 +08:00
parent b55bfcbcbd
commit 15cf434d73
6 changed files with 42 additions and 17 deletions

View File

@@ -2,7 +2,7 @@
* @Author: 梁桐川
* @Date: 2020-11-30 15:05:48
* @Last Modified by: 梁桐川
* @Last Modified time: 2020-12-01 14:59:45
* @Last Modified time: 2020-12-01 21:11:33
*/
import { COM_BATTLE_ASSIST_TIME, COM_BATTLE_ROBOT_ROUND_LMT, COM_BATTLE_ROBOT_HURT_RATIO, COM_BATTLE_ROBOT_HURT_CH_RATIO, COM_TEAM_STATUS } from './../../../consts/consts';
import { IT_TYPE, GOLD_COST_RATIO, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_BATTLE_CAP_TIME, COM_BATTLE_TIME_LMT } from './../../../consts/consts';
@@ -16,7 +16,7 @@ import { resResult, getRandomByLen, calculateNum, getRandValue } from '../../../
import { RoleStatus } from '../../../db/ComBattleTeam';
import { ItemModel } from '../../../db/Item';
import { handleReward } from '../../../services/rewardService';
import { checkRoleInQueue, getTeamSearchByQuality, setTeamSearchReq } from '../../../services/redisService';
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
import { transBossHpArr } from '../../../services/battleService';
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult } from '../../../services/comBattleService';
@@ -51,7 +51,8 @@ class ComTeam {
quality: number;
// 当前回合
curRnd: number;
// 队伍中人数
roleCnt: number;
constructor(teamCode: string, pub: boolean, blueprtId: number, status: number, capId: string, ceLimit: number, bossHp: number, quality: number, bossHpArr:Array<{dataId: number, hp: number, curHp: number}> ) {
this.teamCode = teamCode;
this.pub = pub;
@@ -64,6 +65,7 @@ class ComTeam {
this.quality = quality;
this.bossHpArr = bossHpArr;
this.curRnd = 0;
this.roleCnt = 1;
}
}
export class ComBattleHandler {
@@ -141,6 +143,7 @@ export class ComBattleHandler {
}
}
let uids = [];
uids.push({roleId, sid});
if (teammates) {
for (let teammate of teammates) {
let { roleId, sid } = teammate;
@@ -152,15 +155,15 @@ export class ComBattleHandler {
// 倒计时一定时间给队长匹配机器人
setTimeout(async () => {
let team = thiz.teamMap.get(teamCode);
if (team.roleIds.length < 3) {
if (team && team.roleIds && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.length < 3) {
let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, lv, 3 - team.roleIds.length);
team.roleIds = team.roleIds.concat(robotIdArr);
team.roleStatus = team.roleStatus.concat(robotStArr);
for (let st of robotStArr) {
await ComBattleTeamModel.addRole(teamCode, st);
}
channel.pushMessage('onTeamJoin', {teamInfo: team});
}
channelService.pushMessageByUids('onTeamJoin', {teamInfo: team}, uids);
}, COM_BATTLE_CAP_TIME);
return resResult(STATUS.SUCCESS, { teamCode, roleStatus });
@@ -188,7 +191,7 @@ export class ComBattleHandler {
const team = await ComBattleTeamModel.getOneTeamByQualityAndSt(qualityArr, COM_TEAM_STATUS.DEFAULT, topFiveCe);
// TODO: 有匹配的队伍还需要重新 joinTeam 加入,有失败可能,体验不好,需优化
if (team) {
if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1) {
return resResult(STATUS.SUCCESS, {teamCode: team.teamCode});
}
let teamCode = session.get('teamCode');
@@ -198,6 +201,7 @@ export class ComBattleHandler {
setTimeout(async () => {
let inQueue = await checkRoleInQueue(roleId, sid, qualityArr);
if (!inQueue) return;
await rmRoleFromQueue(roleId, sid, qualityArr);
let roleStatus = [];
let roleIds = [];
@@ -228,6 +232,11 @@ export class ComBattleHandler {
if (users.indexOf(roleId) === -1) {
channel.add(roleId, sid);
}
// 机器人队伍 3 秒直接开战
setTimeout(async () => {
await ComBattleTeamModel.updateStatus(teamCode, COM_TEAM_STATUS.FIGHTING);
channelService.pushMessageByUids('onComBtlStart', {teamCode, roleStatus: comTeam.roleStatus}, [{uid: roleId, sid}]);
}, 3000);
}, COM_BATTLE_ASSIST_TIME);
return resResult(STATUS.SUCCESS);
}
@@ -243,10 +252,9 @@ export class ComBattleHandler {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let sid = session.get('sid');
console.log('teamMap:' + JSON.stringify(this.teamMap));
let { teamCode, isFrd } = msg;
let teamStatus = this.teamMap.get(teamCode);
if (!teamStatus || teamStatus.status !== 0 || teamStatus.roleIds.length === 3) return resResult(STATUS.COM_BATTLE_MEMBER_LIMIT);
if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT || teamStatus.roleIds.length === 3) return resResult(STATUS.COM_BATTLE_MEMBER_LIMIT);
if (teamStatus.roleIds.indexOf(roleId) !== -1) return resResult(STATUS.COM_BATTLE_DUP_ENTER);
let { lv = 1, headHid = 19, topFiveCe = 0, sHid = 19 } = await Role.findByRoleId(roleId);
let { quality } = getGoodById(teamStatus.blueprtId);