diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index bf903a039..024dd70ec 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -14,8 +14,8 @@ import { resResult, getRandSingleEelm, cal } from '../../../pubUtils/util'; import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam'; import { ItemModel, ItemType } from '../../../db/Item'; import { addItems, handleCost } from '../../../services/role/rewardService'; -import { checkRoleInQueue, getServerName, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; -import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv } from '../../../services/comBattleService'; +import { checkRoleInQueue, getServerName, rmCreatedTeamFromRedis, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; +import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam, checkTeamStatusAndSend, getComBtlLvByPlayerLv, addToSearchingTeams } from '../../../services/comBattleService'; import { setAp } from '../../../services/actionPointService'; import { roleLevelup } from '../../../services/normalBattleService'; import { getSimpleRoleInfo } from '../../../services/roleService'; @@ -122,6 +122,10 @@ export class ComBattleHandler { } let teamCode = session.get('teamCode'); + + let hasAdd = await addToSearchingTeams(roleId, sid, lvs); + if(hasAdd) return(STATUS.SUCCESS); + await setTeamSearchReq(roleId, sid, lvs); let thiz = this; // 倒计时匹配两个机器人 @@ -408,6 +412,7 @@ export class ComBattleHandler { let team = await ComBattleTeamModel.updateStatusByCode(teamCode, teamStatus.status, teamStatus.startTime, teamStatus.endTime, teamStatus.hasTimeExtraReward); if (!team) return resResult(STATUS.COM_BATTLE_START_ERR); + rmCreatedTeamFromRedis(teamCode, teamStatus.lv); clearComBtlTimer(teamCode, this.teamDisTimer); // 战斗开始停止解散计时 await getComBattleFriendAdd(teamStatus.roleStatus); sendMessageToTeam(teamCode, PUSH_ROUTE.COMBATTLE_START, {teamCode, roleStatus: teamStatus.roleStatus}); diff --git a/game-server/app/servers/battle/remote/comBattleRemote.ts b/game-server/app/servers/battle/remote/comBattleRemote.ts index 4bccde468..e93eb30de 100644 --- a/game-server/app/servers/battle/remote/comBattleRemote.ts +++ b/game-server/app/servers/battle/remote/comBattleRemote.ts @@ -1,7 +1,7 @@ import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, pinus, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; -import { handleComBtlProgress } from '../../../services/comBattleService'; +import { handleComBtlProgress, _addToSearchingTeams } from '../../../services/comBattleService'; import { MemComBtlTeam } from '../../../domain/battleField/ComBattleTeamField'; import { errlogger } from '../../../util/logger'; @@ -34,4 +34,14 @@ export class ComBattleRemote { errlogger.error(`remote ${__filename} \n ${e.stack}`); } } + + + public async addToSearchingTeams(teamCode: string, roleId: string, sid: string) { + try { + await _addToSearchingTeams(teamCode, roleId, sid); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } + } \ No newline at end of file diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 6c2d2c69d..5d76dd5fa 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -13,7 +13,7 @@ import { Channel, ChannelService, pinus } from 'pinus'; import { TREASURE, EXTERIOR, FRIEND } from '../pubUtils/dicParam'; import { getFriendLvAdd } from './friendService'; import { getRoleIds } from '../pubUtils/friendUtil'; -import { getTeamSearchByLv, rmRoleFromQueue } from './redisService'; +import { getComTeamSidByCode, getCreatedTeamByLv, getTeamSearchByLv, rmCreatedTeamFromRedis, rmRoleFromQueue, setCreatedTeamToRedis } from './redisService'; import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data'; import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil'; import { addItems, getFriendPointObject, handleCost } from './role/rewardService'; @@ -392,6 +392,7 @@ export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map, teamDisTimer: Map) { const teamStatus = comTeam; - const { teamCode } = teamStatus; + const { teamCode, lv: blueprtLv } = teamStatus; const { roleId, lv } = roleInfo; let { topLineupCe = 1000 } = roleInfo; - if (validToJoin(teamStatus)) { + if (validToJoin(teamStatus)) { // 如果可以匹配 + await setCreatedTeamToRedis(teamCode, blueprtLv); + const robotCnt = 3 - teamStatus.roleIds.length; for (let robotIdx = 0; robotIdx < robotCnt; robotIdx++) { const joinTime = getRandValueByMinMax(COM_BTL_CONST.MIN_CAP_TIME, COM_BTL_CONST.MAX_CAP_TIME, 0); diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index fa98562b1..77dfdae20 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -226,6 +226,19 @@ export async function rmRoleFromQueue(roleId: string, sid: string, lvs?: number[ await redisClient().multi(cmds).execAsync(); } +function getComCreateTeamKey(lv: number) { + return `${REDIS_KEY.COM_TEAM_CREATED_TEAM}:${lv}`; +} + +export async function setCreatedTeamToRedis(teamCode: string, lv: number) { + let sid = pinus.app.getCurServer().id; + await redisClient().hsetAsync(getComCreateTeamKey(lv), teamCode, sid); +} + +export async function rmCreatedTeamFromRedis(teamCode: string, lv: number) { + await redisClient().hdelAsync(getComCreateTeamKey(lv), teamCode); +} + /** * @description 在寻宝匹配队列中随机两个玩家 * @export @@ -249,6 +262,20 @@ export async function getTeamSearchByLv(lv: number) { return res; } +export async function getCreatedTeamByLv(lvs: number[]) { + let team: {lv: number, teamCode: string}[] = []; + for(let lv of lvs) { + let teams = await redisClient().hkeysAsync(getComCreateTeamKey(lv)); + team.push(...teams.map(teamCode => ({ lv, teamCode }))); + } + return team; +} + +export async function getComTeamSidByCode(lv: number, teamCode: string) { + let sid = await redisClient().hgetAsync(getComCreateTeamKey(lv), teamCode); + return sid +} + /** * @description 检查玩家是否在某个队列中等待寻宝匹配 * @export @@ -274,6 +301,7 @@ export async function checkRoleInQueue(roleId: string, sid: string, lvs: number[ */ export async function clearComBtlQueue() { await delKeys(REDIS_KEY.COM_TEAM_SEARCH_PRE); + await delKeys(REDIS_KEY.COM_TEAM_CREATED_TEAM); } export function setRedis(key: string, data: string) { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 108068588..c7e7ca004 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -209,6 +209,7 @@ export enum REDIS_KEY { USER_INFO ="userInfo", // 玩家缓存信息 TOWER_RANK ="towerRank", // 天梯排行榜 COM_TEAM_SEARCH_PRE ='comTeamSerQ', // 匹配中的玩家,按品质分 + COM_TEAM_CREATED_TEAM ='comTeamCreate', // 匹配中的队伍,按品质分 PVP_RANK ="pvpRank", // pvp排行榜 GUILD_INFO ="guildInfo", // 公会信息 GUILD_ACTIVE_RANK ="guildActiveRank", // 公会周活跃排行榜 diff --git a/shared/pubUtils/redis.ts b/shared/pubUtils/redis.ts index dd1638e04..9aa2071e8 100644 --- a/shared/pubUtils/redis.ts +++ b/shared/pubUtils/redis.ts @@ -78,6 +78,8 @@ declare module 'redis' { subscribeAsync(...channels: string[]): Promise; // 返回hash字段数量 hlenAsync(key: string): Promise; + // 返回hash键 + hkeysAsync(key: string): Promise; } export interface Multi extends Commands { execAsync(...args: any[]): Promise;