寻宝:先创建在匹配真人的匹配
This commit is contained in:
@@ -14,8 +14,8 @@ import { resResult, getRandSingleEelm, cal } from '../../../pubUtils/util';
|
|||||||
import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam';
|
import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam';
|
||||||
import { ItemModel, ItemType } from '../../../db/Item';
|
import { ItemModel, ItemType } from '../../../db/Item';
|
||||||
import { addItems, handleCost } from '../../../services/role/rewardService';
|
import { addItems, handleCost } from '../../../services/role/rewardService';
|
||||||
import { checkRoleInQueue, getServerName, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
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 } 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, checkTeamStatusAndSend, getComBtlLvByPlayerLv, addToSearchingTeams } from '../../../services/comBattleService';
|
||||||
import { setAp } from '../../../services/actionPointService';
|
import { setAp } from '../../../services/actionPointService';
|
||||||
import { roleLevelup } from '../../../services/normalBattleService';
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
import { getSimpleRoleInfo } from '../../../services/roleService';
|
import { getSimpleRoleInfo } from '../../../services/roleService';
|
||||||
@@ -122,6 +122,10 @@ export class ComBattleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let teamCode = session.get('teamCode');
|
let teamCode = session.get('teamCode');
|
||||||
|
|
||||||
|
let hasAdd = await addToSearchingTeams(roleId, sid, lvs);
|
||||||
|
if(hasAdd) return(STATUS.SUCCESS);
|
||||||
|
|
||||||
await setTeamSearchReq(roleId, sid, lvs);
|
await setTeamSearchReq(roleId, sid, lvs);
|
||||||
let thiz = this;
|
let thiz = this;
|
||||||
// 倒计时匹配两个机器人
|
// 倒计时匹配两个机器人
|
||||||
@@ -408,6 +412,7 @@ export class ComBattleHandler {
|
|||||||
let team = await ComBattleTeamModel.updateStatusByCode(teamCode, teamStatus.status, teamStatus.startTime, teamStatus.endTime, teamStatus.hasTimeExtraReward);
|
let team = await ComBattleTeamModel.updateStatusByCode(teamCode, teamStatus.status, teamStatus.startTime, teamStatus.endTime, teamStatus.hasTimeExtraReward);
|
||||||
if (!team) return resResult(STATUS.COM_BATTLE_START_ERR);
|
if (!team) return resResult(STATUS.COM_BATTLE_START_ERR);
|
||||||
|
|
||||||
|
rmCreatedTeamFromRedis(teamCode, teamStatus.lv);
|
||||||
clearComBtlTimer(teamCode, this.teamDisTimer); // 战斗开始停止解散计时
|
clearComBtlTimer(teamCode, this.teamDisTimer); // 战斗开始停止解散计时
|
||||||
await getComBattleFriendAdd(teamStatus.roleStatus);
|
await getComBattleFriendAdd(teamStatus.roleStatus);
|
||||||
sendMessageToTeam(teamCode, PUSH_ROUTE.COMBATTLE_START, {teamCode, roleStatus: teamStatus.roleStatus});
|
sendMessageToTeam(teamCode, PUSH_ROUTE.COMBATTLE_START, {teamCode, roleStatus: teamStatus.roleStatus});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, pinus, } from 'pinus';
|
import { Application, ChannelService, FrontendSession, RemoterClass, HandlerService, pinus, } from 'pinus';
|
||||||
import { resResult } from '../../../pubUtils/util';
|
import { resResult } from '../../../pubUtils/util';
|
||||||
import { STATUS } from '../../../consts';
|
import { STATUS } from '../../../consts';
|
||||||
import { handleComBtlProgress } from '../../../services/comBattleService';
|
import { handleComBtlProgress, _addToSearchingTeams } from '../../../services/comBattleService';
|
||||||
import { MemComBtlTeam } from '../../../domain/battleField/ComBattleTeamField';
|
import { MemComBtlTeam } from '../../../domain/battleField/ComBattleTeamField';
|
||||||
import { errlogger } from '../../../util/logger';
|
import { errlogger } from '../../../util/logger';
|
||||||
|
|
||||||
@@ -34,4 +34,14 @@ export class ComBattleRemote {
|
|||||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
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}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ import { Channel, ChannelService, pinus } from 'pinus';
|
|||||||
import { TREASURE, EXTERIOR, FRIEND } from '../pubUtils/dicParam';
|
import { TREASURE, EXTERIOR, FRIEND } from '../pubUtils/dicParam';
|
||||||
import { getFriendLvAdd } from './friendService';
|
import { getFriendLvAdd } from './friendService';
|
||||||
import { getRoleIds } from '../pubUtils/friendUtil';
|
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 { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data';
|
||||||
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
||||||
import { addItems, getFriendPointObject, handleCost } from './role/rewardService';
|
import { addItems, getFriendPointObject, handleCost } from './role/rewardService';
|
||||||
@@ -392,6 +392,7 @@ export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string
|
|||||||
let rmSt = teamMap.delete(teamCode);
|
let rmSt = teamMap.delete(teamCode);
|
||||||
if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR);
|
if (!rmSt) return resResult(STATUS.COM_BATTLE_DISSMISS_ERR);
|
||||||
|
|
||||||
|
rmCreatedTeamFromRedis(teamCode, teamStatus.lv);
|
||||||
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_DISMISS, { teamCode });
|
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_DISMISS, { teamCode });
|
||||||
delTeamChannel(teamCode);
|
delTeamChannel(teamCode);
|
||||||
clearComBtlTimer(teamCode, teamDisTimer); // 队伍解散停止解散计时
|
clearComBtlTimer(teamCode, teamDisTimer); // 队伍解散停止解散计时
|
||||||
@@ -533,6 +534,10 @@ export function addRoleStToTeam(comTeam: MemComBtlTeam, roleSt: RoleStatus) {
|
|||||||
const { roleStatus = [], roleIds = [] } = comTeam;
|
const { roleStatus = [], roleIds = [] } = comTeam;
|
||||||
comTeam.roleStatus = [roleSt, ...roleStatus];
|
comTeam.roleStatus = [roleSt, ...roleStatus];
|
||||||
comTeam.roleIds = [roleSt.roleId, ...roleIds];
|
comTeam.roleIds = [roleSt.roleId, ...roleIds];
|
||||||
|
|
||||||
|
if(!validToJoin(comTeam)) { // 无人可匹配时,删除存在redis中的匹配信息
|
||||||
|
rmCreatedTeamFromRedis(comTeam.teamCode, comTeam.lv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -558,6 +563,31 @@ export async function addValidSearchingRoles(comTeam: MemComBtlTeam) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function addToSearchingTeams(roleId: string, sid: string, lvs: number[]) {
|
||||||
|
let teamCodes = await getCreatedTeamByLv(lvs);
|
||||||
|
if(teamCodes.length <= 0) return false;
|
||||||
|
|
||||||
|
let {lv, teamCode} = getRandSingleEelm(teamCodes);
|
||||||
|
let battleServer = await getComTeamSidByCode(lv, teamCode);
|
||||||
|
if(!battleServer) return false;
|
||||||
|
|
||||||
|
return await pinus.app.rpc.battle.comBattleRemote.addToSearchingTeams.toServer(battleServer, teamCode, roleId, sid);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function _addToSearchingTeams(teamCode: string, roleId: string, sid: string) {
|
||||||
|
let teamMap = pinus.app.get('teamMap');
|
||||||
|
let teamStatus: MemComBtlTeam = teamMap && teamMap.get(teamCode);
|
||||||
|
if(!teamStatus) return false;
|
||||||
|
if(!validToJoin(teamStatus, roleId)) return false;
|
||||||
|
const st = await getValidTeammateRoleSt(roleId, teamStatus.roleIds, teamStatus.ceLimit, sid);
|
||||||
|
if (!st) return false;
|
||||||
|
|
||||||
|
addRoleStToTeam(teamStatus, st);
|
||||||
|
await rmRoleFromQueue(roleId, sid); // 匹配成功后删除redis中该用户的匹配记录
|
||||||
|
addUserToTeamChannel(teamCode, false, roleId, sid);
|
||||||
|
sendMessageToTeam(teamCode, PUSH_ROUTE.TEAM_JOIN, { teamInfo: teamStatus });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 判断队伍是否处于可加入状态
|
* @description 判断队伍是否处于可加入状态
|
||||||
* @export
|
* @export
|
||||||
@@ -613,11 +643,13 @@ export async function addRobotsToTeam(comTeam: MemComBtlTeam, roleId: string, ro
|
|||||||
*/
|
*/
|
||||||
export async function addRobotsLater(comTeam: MemComBtlTeam, roleInfo: RoleType, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>) {
|
export async function addRobotsLater(comTeam: MemComBtlTeam, roleInfo: RoleType, teamMap: Map<string, MemComBtlTeam>, teamDisTimer: Map<string, NodeJS.Timer>) {
|
||||||
const teamStatus = comTeam;
|
const teamStatus = comTeam;
|
||||||
const { teamCode } = teamStatus;
|
const { teamCode, lv: blueprtLv } = teamStatus;
|
||||||
const { roleId, lv } = roleInfo;
|
const { roleId, lv } = roleInfo;
|
||||||
let { topLineupCe = 1000 } = roleInfo;
|
let { topLineupCe = 1000 } = roleInfo;
|
||||||
|
|
||||||
if (validToJoin(teamStatus)) {
|
if (validToJoin(teamStatus)) { // 如果可以匹配
|
||||||
|
await setCreatedTeamToRedis(teamCode, blueprtLv);
|
||||||
|
|
||||||
const robotCnt = 3 - teamStatus.roleIds.length;
|
const robotCnt = 3 - teamStatus.roleIds.length;
|
||||||
for (let robotIdx = 0; robotIdx < robotCnt; robotIdx++) {
|
for (let robotIdx = 0; robotIdx < robotCnt; robotIdx++) {
|
||||||
const joinTime = getRandValueByMinMax(COM_BTL_CONST.MIN_CAP_TIME, COM_BTL_CONST.MAX_CAP_TIME, 0);
|
const joinTime = getRandValueByMinMax(COM_BTL_CONST.MIN_CAP_TIME, COM_BTL_CONST.MAX_CAP_TIME, 0);
|
||||||
|
|||||||
@@ -226,6 +226,19 @@ export async function rmRoleFromQueue(roleId: string, sid: string, lvs?: number[
|
|||||||
await redisClient().multi(cmds).execAsync();
|
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 在寻宝匹配队列中随机两个玩家
|
* @description 在寻宝匹配队列中随机两个玩家
|
||||||
* @export
|
* @export
|
||||||
@@ -249,6 +262,20 @@ export async function getTeamSearchByLv(lv: number) {
|
|||||||
return res;
|
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 检查玩家是否在某个队列中等待寻宝匹配
|
* @description 检查玩家是否在某个队列中等待寻宝匹配
|
||||||
* @export
|
* @export
|
||||||
@@ -274,6 +301,7 @@ export async function checkRoleInQueue(roleId: string, sid: string, lvs: number[
|
|||||||
*/
|
*/
|
||||||
export async function clearComBtlQueue() {
|
export async function clearComBtlQueue() {
|
||||||
await delKeys(REDIS_KEY.COM_TEAM_SEARCH_PRE);
|
await delKeys(REDIS_KEY.COM_TEAM_SEARCH_PRE);
|
||||||
|
await delKeys(REDIS_KEY.COM_TEAM_CREATED_TEAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setRedis(key: string, data: string) {
|
export function setRedis(key: string, data: string) {
|
||||||
|
|||||||
@@ -209,6 +209,7 @@ export enum REDIS_KEY {
|
|||||||
USER_INFO ="userInfo", // 玩家缓存信息
|
USER_INFO ="userInfo", // 玩家缓存信息
|
||||||
TOWER_RANK ="towerRank", // 天梯排行榜
|
TOWER_RANK ="towerRank", // 天梯排行榜
|
||||||
COM_TEAM_SEARCH_PRE ='comTeamSerQ', // 匹配中的玩家,按品质分
|
COM_TEAM_SEARCH_PRE ='comTeamSerQ', // 匹配中的玩家,按品质分
|
||||||
|
COM_TEAM_CREATED_TEAM ='comTeamCreate', // 匹配中的队伍,按品质分
|
||||||
PVP_RANK ="pvpRank", // pvp排行榜
|
PVP_RANK ="pvpRank", // pvp排行榜
|
||||||
GUILD_INFO ="guildInfo", // 公会信息
|
GUILD_INFO ="guildInfo", // 公会信息
|
||||||
GUILD_ACTIVE_RANK ="guildActiveRank", // 公会周活跃排行榜
|
GUILD_ACTIVE_RANK ="guildActiveRank", // 公会周活跃排行榜
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ declare module 'redis' {
|
|||||||
subscribeAsync(...channels: string[]): Promise<number>;
|
subscribeAsync(...channels: string[]): Promise<number>;
|
||||||
// 返回hash字段数量
|
// 返回hash字段数量
|
||||||
hlenAsync(key: string): Promise<number>;
|
hlenAsync(key: string): Promise<number>;
|
||||||
|
// 返回hash键
|
||||||
|
hkeysAsync(key: string): Promise<string[]>;
|
||||||
}
|
}
|
||||||
export interface Multi extends Commands<Multi> {
|
export interface Multi extends Commands<Multi> {
|
||||||
execAsync(...args: any[]): Promise<any>;
|
execAsync(...args: any[]): Promise<any>;
|
||||||
|
|||||||
Reference in New Issue
Block a user