寻宝:协助次数&匹配范围修改
This commit is contained in:
@@ -6,7 +6,7 @@ import { difference } from 'underscore';
|
||||
* @Last Modified by: 梁桐川
|
||||
* @Last Modified time: 2021-08-27 17:47:56
|
||||
*/
|
||||
import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts';
|
||||
import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, MSG_SOURCE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts';
|
||||
import Role, { RoleModel } from '../../../db/Role';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import { Application, BackendSession } from 'pinus';
|
||||
@@ -15,7 +15,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatu
|
||||
import { ItemModel, ItemType } from '../../../db/Item';
|
||||
import { addItems, handleCost } from '../../../services/rewardService';
|
||||
import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, createComTeamData, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService';
|
||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService';
|
||||
import { setAp } from '../../../services/actionPointService';
|
||||
import { roleLevelup } from '../../../services/normalBattleService';
|
||||
import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService';
|
||||
@@ -72,7 +72,7 @@ export class ComBattleHandler {
|
||||
let channel = channelService.getChannel(teamCode, true);
|
||||
|
||||
// 创建队伍数据结构
|
||||
let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, roleId, ceLimit);
|
||||
let comTeam = new MemComBtlTeam(teamCode, pub, blueprtId, roleId, ceLimit);
|
||||
addRoleToTeam(comTeam, roleInfo, true, false);
|
||||
addUserToChannel(channel, new ChannelUser(roleId, sid));
|
||||
// 将正在匹配的符合要求的玩家加入队伍,并推送入队消息
|
||||
@@ -96,50 +96,50 @@ export class ComBattleHandler {
|
||||
|
||||
/**
|
||||
* @description 匹配队伍
|
||||
* @param {{qualityArr: [number]}} msg 要匹配的品质数组列表
|
||||
* @param {{ lv: number }} msg 要匹配藏宝图品阶
|
||||
* @param {BackendSession} session
|
||||
* @returns
|
||||
* @memberof ComBattleHandler
|
||||
*/
|
||||
async searchTeam(msg: {qualityArr: [number], lvRange: number}, session: BackendSession) {
|
||||
async searchTeam(msg: { lv: number }, session: BackendSession) {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
const { qualityArr, lvRange = 1 } = msg;
|
||||
const { lv = 1 } = msg;
|
||||
const roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
||||
const { lv } = roleInfo;
|
||||
const { lv: playerLv } = roleInfo;
|
||||
let { topLineupCe = 1000 } = roleInfo;
|
||||
|
||||
if(await checkHasMyTeam(roleId)) {
|
||||
return resResult(STATUS.COM_BATTLE_IS_RUNNING);
|
||||
}
|
||||
|
||||
if (comBtlLvInvalid(lv, lvRange)) {
|
||||
if (comBtlLvInvalid(playerLv, lv)) {
|
||||
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
||||
}
|
||||
if (difference(qualityArr, COM_BTL_QUALITY).length !== 0) {
|
||||
|
||||
if (!gameData.blueprtByLv.has(lv)) {
|
||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR);
|
||||
}
|
||||
|
||||
const teams = await ComBattleTeamModel.getOtherTeamByQualityAndSt(roleId, qualityArr, COM_TEAM_STATUS.DEFAULT, lvRange, topLineupCe);
|
||||
const teams = await ComBattleTeamModel.getOtherTeamByLvAndSt(roleId, lv, COM_TEAM_STATUS.DEFAULT, topLineupCe);
|
||||
const team: ComBattleTeamType = await oneTeamNotInBlack(teams, roleId);
|
||||
if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1 && team.blacklist && team.blacklist.indexOf(roleId) === -1) {
|
||||
return resResult(STATUS.SUCCESS, {teamCode: team.teamCode});
|
||||
}
|
||||
|
||||
let teamCode = session.get('teamCode');
|
||||
await setTeamSearchReq(roleId, sid, qualityArr, lvRange);
|
||||
await setTeamSearchReq(roleId, sid, lv);
|
||||
let thiz = this;
|
||||
// 倒计时匹配两个机器人
|
||||
setTimeout(async () => {
|
||||
let inQueue = await checkRoleInQueue(roleId, sid, qualityArr, lvRange);
|
||||
let inQueue = await checkRoleInQueue(roleId, sid, lv);
|
||||
if (!inQueue) return;
|
||||
await rmRoleFromQueue(roleId, sid, qualityArr, lvRange);
|
||||
await rmRoleFromQueue(roleId, sid, lv);
|
||||
// 创建队伍
|
||||
let blueprtId = getRandBlueprtId(qualityArr, lvRange).pop();
|
||||
let comTeam: MemComBtlTeam = createComTeamData(teamCode, false, blueprtId, 'robot', 0)
|
||||
let blueprtId = getRandBlueprtId(lv).pop();
|
||||
let comTeam = new MemComBtlTeam(teamCode, false, blueprtId, 'robot', 0)
|
||||
|
||||
let { quality } = gameData.goods.get(blueprtId);
|
||||
let isFrd = await getFrd(roleId, quality);
|
||||
let isFrd = await getFrd(roleId);
|
||||
// 将玩家加入队伍
|
||||
addRoleToTeam(comTeam, roleInfo, false, isFrd);
|
||||
let channelService = thiz.app.get('channelService');
|
||||
@@ -169,7 +169,7 @@ export class ComBattleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let sid = session.get('sid');
|
||||
|
||||
await rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null);
|
||||
await rmRoleFromQueue(roleId, sid);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -194,17 +194,16 @@ export class ComBattleHandler {
|
||||
|
||||
let { lv = 1, head = EXTERIOR.EXTERIOR_FACE, topLineupCe = 0, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE } = await Role.findByRoleId(roleId, null, true);
|
||||
|
||||
let { quality } = gameData.goods.get(teamStatus.blueprtId);
|
||||
if (lv < COM_BTL_CONST.ENABLE_LV) {
|
||||
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
||||
} else if (comBtlLvInvalid(lv, teamStatus.lvRange)) {
|
||||
} else if (comBtlLvInvalid(lv, teamStatus.lv)) {
|
||||
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
||||
} else if (topLineupCe < teamStatus.ceLimit) {
|
||||
return resResult(STATUS.COM_BATTLE_CE_LIMIT);
|
||||
}
|
||||
|
||||
if (!isFrd) {
|
||||
isFrd = await getFrd(roleId, quality);
|
||||
isFrd = await getFrd(roleId);
|
||||
}
|
||||
|
||||
// 加入队伍
|
||||
@@ -242,7 +241,7 @@ export class ComBattleHandler {
|
||||
if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
if (teamStatus.capId === roleId) return resResult(STATUS.COM_BATTLE_SET_FRD_ERR);
|
||||
if (!isFrd) {
|
||||
isFrd = await getFrd(roleId, teamStatus.quality);
|
||||
isFrd = await getFrd(roleId);
|
||||
}
|
||||
if (isFrd !== isFrdPre) {
|
||||
return resResult(STATUS.COM_BATTLE_ASSIST_NOT_ENOUGH);
|
||||
@@ -466,7 +465,7 @@ export class ComBattleHandler {
|
||||
updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap);
|
||||
}
|
||||
});
|
||||
await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.quality);
|
||||
await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.lv);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -774,61 +773,4 @@ export class ComBattleHandler {
|
||||
|
||||
return resResult(STATUS.SUCCESS, { list: result });
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 藏宝图合成
|
||||
* @param {{original: Array<{id: number, count: number}>}} msg
|
||||
* @param {BackendSession} session
|
||||
* @returns
|
||||
* @memberof ComBattleHandler
|
||||
*/
|
||||
async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) {
|
||||
const roleId = session.get('roleId');
|
||||
const roleName = session.get('roleName');
|
||||
const sid = session.get('sid');
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
|
||||
const { original } = msg;
|
||||
|
||||
// 原材料检查
|
||||
let originalQuality: number, originalSum: number = 0;
|
||||
for(let {id, count} of original) {
|
||||
const goodInfo = gameData.goods.get(id);
|
||||
if(!originalQuality) originalQuality = goodInfo.quality;
|
||||
if(originalQuality != goodInfo.quality) {
|
||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR);
|
||||
}
|
||||
|
||||
if(goodInfo.itid == IT_TYPE.BLUEPRT) {
|
||||
originalSum += count;
|
||||
}
|
||||
}
|
||||
|
||||
const dicCompose = gameData.blurprtCompose.get(originalQuality);
|
||||
if(!dicCompose) {
|
||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_CANNOT_COMPOSE);
|
||||
}
|
||||
if(originalSum != dicCompose.blueprtNum) {
|
||||
return resResult(STATUS.COM_BLUEPRT_COUNT_ERROR);
|
||||
}
|
||||
// 添加寻宝币
|
||||
original.push(...dicCompose.coinNum);
|
||||
// 消耗藏宝图和寻宝币
|
||||
|
||||
let costResult = await handleCost(roleId, sid, original, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE);
|
||||
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||
|
||||
const targetList = gameData.blueprt.get(dicCompose.targetQuality);
|
||||
const target = getRandSingleEelm(targetList);
|
||||
const reward = [{id: target, count: 1}];
|
||||
const goods = await addItems(roleId, roleName, sid, reward, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE);
|
||||
if (dicCompose.targetQuality >= QUALITY_TYPE.ORANGE) {
|
||||
const { name } = gameData.goods.get(target);
|
||||
pushNormalItemMsg(roleId, roleName, serverId, MSG_SOURCE.ORANGE_BLUEPRT_COMPOSE, target, name);
|
||||
}
|
||||
await checkTask(roleId, sid, TASK_TYPE.COM_BATTLE_BLUEPRT, 1, true, { quality: dicCompose.targetQuality });
|
||||
|
||||
return resResult(STATUS.SUCCESS, { goods, costGold: 0 });
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user