寻宝:抽象把玩家数据加入队伍的逻辑

This commit is contained in:
liangtongchuan
2021-02-19 17:04:25 +08:00
parent c7ca97d19d
commit ea5d507983
2 changed files with 50 additions and 22 deletions

View File

@@ -16,7 +16,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from '../../../db/C
import { ItemModel } from '../../../db/Item';
import { handleFixedReward, addItems, handleCost } from '../../../services/rewardService';
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
import { getRandBlueprtId, getRandComBtlRobots, clearComBtlTimer, getAssistTimesByQuality, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId, handleComBtlProgress, getComBattleFriendAdd, getValidTeammateRoleSt, teammateInBlackList, blueprtIdValid, createComTeamData, hasEnoughBlueprt } from '../../../services/comBattleService';
import { getRandBlueprtId, getRandComBtlRobots, clearComBtlTimer, getAssistTimesByQuality, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId, handleComBtlProgress, getComBattleFriendAdd, getValidTeammateRoleSt, teammateInBlackList, blueprtIdValid, createComTeamData, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam } from '../../../services/comBattleService';
import { setAp } from '../../../services/actionPointService';
import { roleLevelup } from '../../../services/normalBattleService';
@@ -39,7 +39,6 @@ export class ComBattleHandler {
*/
async createTeam(msg: {blueprtId: number, pub: boolean, ceLimit: number}, session: BackendSession) {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let sid = session.get('sid');
let teamCode = session.get('teamCode');
const { blueprtId, pub, ceLimit } = msg;
@@ -51,32 +50,26 @@ export class ComBattleHandler {
const enoughBlueprt = await hasEnoughBlueprt(roleId, blueprtId);
if (!enoughBlueprt) return resResult(STATUS.COM_BATTLE_BLUEPRT_NOT_ENOUGH);
let { lv, headHid = 19, topFiveCe = 100, sHid = 19 } = await RoleModel.findByRoleId(roleId);
const roleInfo = await RoleModel.findByRoleId(roleId);
const { lv } = roleInfo;
const topFiveCe = reduceCe(roleInfo.topFiveCe || 100);
if (lv < COM_BTL_CONST.ENABLE_LV) return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
let roleStatus = [];
let roleIds = [];
roleIds.push(roleId);
topFiveCe = reduceCe(topFiveCe);
let capStatus = new RoleStatus(roleId, roleName, true, false, headHid, sHid, topFiveCe, lv);
roleStatus.push(capStatus);
// 创建队伍数据结构
let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, roleId, ceLimit);
addRoleToTeam(comTeam, roleInfo, true, false);
// 检查是否有正在匹配的符合要求的玩家
let teammates = await getTeamSearchByQuality(goodData.quality, comBtlRangeByLv(goodData.lvLimited));
if (teammates && teammates.length) {
for (let teammate of teammates) {
const { roleId: teammateRoleId } = teammate;
const st = await getValidTeammateRoleSt(teammateRoleId, roleIds, ceLimit, goodData.quality);
const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, ceLimit, goodData.quality);
if (!st) continue;
await rmRoleFromQueue(teammateRoleId, sid, COM_BTL_QUALITY, null); // 匹配成功后删除redis中该用户的匹配记录
roleStatus.push(st);
roleIds.push(teammateRoleId);
addRoleStToTeam(comTeam, st);
}
}
// 创建队伍数据结构
let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, roleId, ceLimit);
comTeam.roleStatus = roleStatus;
comTeam.roleIds = roleIds;
this.teamMap.set(teamCode, comTeam);
@@ -127,7 +120,7 @@ export class ComBattleHandler {
}
}
setDismissTimer(teamStatus, thiz.teamMap, roleId, thiz.teamDisTimer, thiz.app);
return resResult(STATUS.SUCCESS, { teamCode, roleStatus });
return resResult(STATUS.SUCCESS, { teamCode, roleStatus: comTeam.roleStatus });
}
/**
@@ -139,10 +132,11 @@ export class ComBattleHandler {
*/
async searchTeam(msg: {qualityArr: [number], lvRange: number}, session: BackendSession) {
let roleId = session.get('roleId');
let roleName = session.get('roleName');
let sid = session.get('sid');
const { qualityArr, lvRange = 1 } = msg;
let { lv, headHid = 19, topFiveCe = 1000, sHid = 19 } = await RoleModel.findByRoleId(roleId);
const roleInfo = await RoleModel.findByRoleId(roleId);
const { lv } = roleInfo;
let { topFiveCe = 1000 } = roleInfo;
topFiveCe = reduceCe(topFiveCe);
if (comBtlLvInvalid(lv, lvRange)) {
@@ -185,9 +179,7 @@ export class ComBattleHandler {
let { quality } = getGoodById(blueprtId);
let isFrd = await getFrd(roleId, quality);
// 将玩家加入队伍
let roleInfo = new RoleStatus(roleId, roleName, false, isFrd, headHid, sHid, topFiveCe, lv);
roleStatus.push(roleInfo);
roleIds.push(roleId);
addRoleToTeam(comTeam, roleInfo, false, isFrd);
// 创建并添加机器人
let { robotStArr, robotIdArr } = getRandComBtlRobots(topFiveCe, comTeam.ceLimit, lv, 2);
roleStatus = roleStatus.concat(robotStArr);