✨ feat(离线icon): 到8110dd75c
This commit is contained in:
@@ -6,7 +6,7 @@ import { STATUS } from '../../../consts/statusCode';
|
|||||||
import { arrToMap, resResult } from '../../../pubUtils/util';
|
import { arrToMap, resResult } from '../../../pubUtils/util';
|
||||||
import { getTimeFunM } from '../../../pubUtils/timeUtil';
|
import { getTimeFunM } from '../../../pubUtils/timeUtil';
|
||||||
import { LadderMatchModel, LadderUpdateInter } from '../../../db/LadderMatch';
|
import { LadderMatchModel, LadderUpdateInter } from '../../../db/LadderMatch';
|
||||||
import { battleEndWhenChange, checkRank, generateInitRecInfo, generateOppPlayers, getBuyCntCost, getLadderData, getLadderEnemies, getLadderOppDetailData, getLadderOppStatus, getNumberArr, ladderBattleEndReward, refreshLadderDaily, refreshLadderEnemies, sendLadderDailyReward, uniqueArr } from '../../../services/ladderService';
|
import { battleEndWhenChange, checkRank, generateInitRecInfo, generateOppPlayers, getBuyCntCost, getLadderData, getLadderEnemies, getLadderOppDetailData, getLadderOppStatus, getNumberArr, ladderBattleEndReward, pushLadderIconShow, refreshLadderDaily, refreshLadderEnemies, sendLadderDailyReward, uniqueArr } from '../../../services/ladderService';
|
||||||
import { LadderDataReturn, LadderDefense, LadderDefenseHero, LadderOppDetailReturn, LadderOppLineupReturn, LadderOppPlayerHeroInfo, LadderOppPlayerReturn } from '../../../domain/battleField/ladder';
|
import { LadderDataReturn, LadderDefense, LadderDefenseHero, LadderOppDetailReturn, LadderOppLineupReturn, LadderOppPlayerHeroInfo, LadderOppPlayerReturn } from '../../../domain/battleField/ladder';
|
||||||
import { LadderMatchRecModel } from '../../../db/LadderMatchRec';
|
import { LadderMatchRecModel } from '../../../db/LadderMatchRec';
|
||||||
import { HeroModel } from '../../../db/Hero';
|
import { HeroModel } from '../../../db/Hero';
|
||||||
@@ -234,6 +234,8 @@ export class LadderHandler {
|
|||||||
let { battleGoods = [], breakGoods = [] } = rewardResult||{};
|
let { battleGoods = [], breakGoods = [] } = rewardResult||{};
|
||||||
|
|
||||||
await checkTaskInLadderEnd(serverId, roleId, sid, isSuccess, historyRank, atkLadderMatch.rank);
|
await checkTaskInLadderEnd(serverId, roleId, sid, isSuccess, historyRank, atkLadderMatch.rank);
|
||||||
|
|
||||||
|
if (isSuccess || !rec.defenseInfo?.isRobot) await pushLadderIconShow(rec.roleId2, true);
|
||||||
return resResult(STATUS.SUCCESS, {...pick(result, ['rank', 'historyRank', 'challengeCnt','status', 'time', 'oppPlayers']), battleGoods, breakGoods});
|
return resResult(STATUS.SUCCESS, {...pick(result, ['rank', 'historyRank', 'challengeCnt','status', 'time', 'oppPlayers']), battleGoods, breakGoods});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ export class EntryHandler {
|
|||||||
session.set('channel', user.channelInfo?.platformAppid||'pc');
|
session.set('channel', user.channelInfo?.platformAppid||'pc');
|
||||||
session.set('isNewUser', user['isNewUser']||false);
|
session.set('isNewUser', user['isNewUser']||false);
|
||||||
session.set('version', version);
|
session.set('version', version);
|
||||||
|
session.set('quitTime', role.quitTime ? (role.quitTime * 1000) : Date.now())
|
||||||
session.push('userid', () => { });
|
session.push('userid', () => { });
|
||||||
session.push('sid', () => { });
|
session.push('sid', () => { });
|
||||||
session.push('roleId', () => { });
|
session.push('roleId', () => { });
|
||||||
@@ -173,6 +174,8 @@ export class EntryHandler {
|
|||||||
session.push('channel', () => { });
|
session.push('channel', () => { });
|
||||||
session.push('version', () => { });
|
session.push('version', () => { });
|
||||||
session.push('isNewUser', () => { });
|
session.push('isNewUser', () => { });
|
||||||
|
session.push('quitTime', () => { })
|
||||||
|
|
||||||
assignServer(role.roleId, session);
|
assignServer(role.roleId, session);
|
||||||
|
|
||||||
// console.log('#####', role.serverId, role.guildCode)
|
// console.log('#####', role.serverId, role.guildCode)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import { GVG } from "../../../pubUtils/dicParam";
|
|||||||
import { RewardInter, pvpEndParamInter } from "../../../pubUtils/interface";
|
import { RewardInter, pvpEndParamInter } from "../../../pubUtils/interface";
|
||||||
import { parseGoodStr, resResult } from "../../../pubUtils/util";
|
import { parseGoodStr, resResult } from "../../../pubUtils/util";
|
||||||
import { isHeroHidden } from "../../../services/dataService";
|
import { isHeroHidden } from "../../../services/dataService";
|
||||||
import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getDayKeyInfo, getMyVestigeRank, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeRank, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, saveScoreToRank, updateMyVestigeRank, saveVestigeRankSchedule, calVestigeLeagueBoxRewards, checkFightTime, savePlayerRank } from "../../../services/gvg/gvgFightService";
|
import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getDayKeyInfo, getMyVestigeRank, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeRank, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, saveScoreToRank, updateMyVestigeRank, saveVestigeRankSchedule, calVestigeLeagueBoxRewards, checkFightTime, savePlayerRank, pushGvgFightIconShow } from "../../../services/gvg/gvgFightService";
|
||||||
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||||
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
||||||
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService";
|
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService";
|
||||||
@@ -378,6 +378,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
await saveScoreToRank(rec);
|
await saveScoreToRank(rec);
|
||||||
addVestigeBattleEndRec(rec);
|
addVestigeBattleEndRec(rec);
|
||||||
|
if (isSuccess && !rec.defenseInfo?.isRobot) await pushGvgFightIconShow(rec.defenseRoleId, battleCode);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
vestigeId: rec.vestigeId,
|
vestigeId: rec.vestigeId,
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import { recentGuildMsgs, recentLeagueMsgs, recentPrivateChatInfos, recentServer
|
|||||||
import { getCurTask, getPvpTask } from './task/taskService';
|
import { getCurTask, getPvpTask } from './task/taskService';
|
||||||
|
|
||||||
import { RoleModel, RoleType } from '../db/Role';
|
import { RoleModel, RoleType } from '../db/Role';
|
||||||
import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
|
import { Application, BackendSession, FrontendOrBackendSession, pinus, RpcClient } from 'pinus';
|
||||||
import { compareVersion, getRandEelmWithWeight, resResult } from '../pubUtils/util';
|
import { compareVersion, getRandEelmWithWeight, resResult } from '../pubUtils/util';
|
||||||
import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE, ARTIFACT_SELECT, ACTIVITYITEM_SELECT, SNS_LINK_TYPE } from '../consts';
|
import { STATUS, PUSH_BATCH, PUSH_INTERVAL, CONSUME_TYPE, HERO_SELECT, ENTERY_ROLE_PICK, JEWEL_SELECT, ITEM_SELECT, SKIN_SELECT, PUSH_ROUTE, ARTIFACT_SELECT, ACTIVITYITEM_SELECT, SNS_LINK_TYPE, VESTIGE_STATUS } from '../consts';
|
||||||
import { getAllShopList } from './shopService';
|
import { getAllShopList } from './shopService';
|
||||||
import { getGeneralRank, getRankFirstReward } from './rankService';
|
import { getGeneralRank, getRankFirstReward } from './rankService';
|
||||||
import { getFriendList, getApplyList } from './friendService';
|
import { getFriendList, getApplyList } from './friendService';
|
||||||
@@ -17,7 +17,7 @@ import { getExpeditionStatus } from './expeditionService';
|
|||||||
import { getTowerStatus, getHungupRewards, getTasks } from './battleService';
|
import { getTowerStatus, getHungupRewards, getTasks } from './battleService';
|
||||||
import { getAllAssistCnt, getCapExtraCnt, getComBtlLvByPlayerLv } from './battle/comBattleService';
|
import { getAllAssistCnt, getCapExtraCnt, getComBtlLvByPlayerLv } from './battle/comBattleService';
|
||||||
import { getDungeonData } from './dungeonService';
|
import { getDungeonData } from './dungeonService';
|
||||||
import { nowSeconds, getZeroPoint } from '../pubUtils/timeUtil';
|
import { nowSeconds, getZeroPoint, getTimeFunM } from '../pubUtils/timeUtil';
|
||||||
import { getGachaList, getVisitedHeroList } from './activity/gachaService';
|
import { getGachaList, getVisitedHeroList } from './activity/gachaService';
|
||||||
import { getSchoolList } from './roleService';
|
import { getSchoolList } from './roleService';
|
||||||
import { addRoleToGuildChannel } from './chatChannelService';
|
import { addRoleToGuildChannel } from './chatChannelService';
|
||||||
@@ -55,6 +55,10 @@ import { getHiddenData } from './memoryCache/hiddenData';
|
|||||||
import { AuthorBookModel } from '../db/AuthorBook';
|
import { AuthorBookModel } from '../db/AuthorBook';
|
||||||
import { gameData } from '../pubUtils/data';
|
import { gameData } from '../pubUtils/data';
|
||||||
import { getRougeData } from './battle/rougeService';
|
import { getRougeData } from './battle/rougeService';
|
||||||
|
import { LadderMatchRecModel } from '../db/LadderMatchRec';
|
||||||
|
import { GVGVestigeRecModel, GVGVestigeRecUpdate } from '../db/GVGVestigeRec';
|
||||||
|
import { getVestigeRecStatus } from './gvg/gvgFightService';
|
||||||
|
import { getRemoteRplPrefix } from '../pubUtils/battleUtils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init: 初始的时候是否推送 true-推 false-不推
|
* init: 初始的时候是否推送 true-推 false-不推
|
||||||
@@ -91,6 +95,8 @@ const modules = [
|
|||||||
{ id: 27, type: 'ladder', init: false, refresh: true, guild: false },
|
{ id: 27, type: 'ladder', init: false, refresh: true, guild: false },
|
||||||
{ id: 28, type: 'hiddenData', init: true, refresh: true, guild: false },
|
{ id: 28, type: 'hiddenData', init: true, refresh: true, guild: false },
|
||||||
{ id: 29, type: 'rouge', init: true, refresh: true, guild: false },
|
{ id: 29, type: 'rouge', init: true, refresh: true, guild: false },
|
||||||
|
{ id: 30, type: 'iconShow', init: true, refresh: true, guild: false },
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') {
|
export async function pushData(hasInit: boolean, role: RoleType, session: FrontendOrBackendSession, pushType: 'entry' | 'refresh' = 'entry') {
|
||||||
@@ -233,6 +239,8 @@ export async function getModuleData(type: string, data: { role: RoleType, sessio
|
|||||||
return getHiddenData();
|
return getHiddenData();
|
||||||
case 'rouge':
|
case 'rouge':
|
||||||
return await getRougeData(role.roleId);
|
return await getRougeData(role.roleId);
|
||||||
|
case 'iconShow':
|
||||||
|
return await getIconShow(role.roleId, session);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -449,3 +457,26 @@ async function getAuthorBook(roleId: string) {
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getIconShow(roleId: string, session:FrontendOrBackendSession) {
|
||||||
|
let quitTime = session.get('quitTime');
|
||||||
|
if (!roleId) return;
|
||||||
|
let ladderIconShow = await LadderMatchRecModel.findRecByRoleId(roleId, quitTime);
|
||||||
|
|
||||||
|
let list = await GVGVestigeRecModel.findRecCurDay(roleId, Math.max(quitTime, getZeroPoint()*1000));
|
||||||
|
let result: (GVGVestigeRecUpdate & { rplFileUrl: string })[] = [];
|
||||||
|
for (let rec of list) {
|
||||||
|
const { attackRoleId, battleCode, hasRpl, remoteUrl } = rec;
|
||||||
|
const rplFileUrl = battleCode && hasRpl ? remoteUrl : '';
|
||||||
|
const obj = getVestigeRecStatus(rec);
|
||||||
|
if (obj.status == VESTIGE_STATUS.COMPLETE && result.length < 10) result.push({ ...rec, endTime: obj.time, rplFileUrl });
|
||||||
|
}
|
||||||
|
let gvgFightRecs = { list: result, rplPrefixUrl: getRemoteRplPrefix(pinus.app.get('env')) };
|
||||||
|
|
||||||
|
return { ladderIconShow, gvgFightRecs }
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function pushIconShow(roleId: string, ladderIconShow?: boolean, gvgFightRecs?) {
|
||||||
|
if (!roleId) return;
|
||||||
|
sendMessageToUserWithSuc(roleId, PUSH_ROUTE.LADDER_OR_GVG_ICON_SHOW, { ladderIconShow, gvgFightRecs });
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ import { GVGVestigeModel } from "../../db/GVGVestige";
|
|||||||
import { GVGVestigeLeagueRankModel, GVGVestigeLeagueRankType } from "../../db/GVGVestigeLeagueRank";
|
import { GVGVestigeLeagueRankModel, GVGVestigeLeagueRankType } from "../../db/GVGVestigeLeagueRank";
|
||||||
import { GVGVestigeLockModel } from "../../db/GVGVestigeLock";
|
import { GVGVestigeLockModel } from "../../db/GVGVestigeLock";
|
||||||
import { GVGVestigeRankModel, GVGVestigeRankType, GVGVestigeRankUpdate } from "../../db/GVGVestigeRank";
|
import { GVGVestigeRankModel, GVGVestigeRankType, GVGVestigeRankUpdate } from "../../db/GVGVestigeRank";
|
||||||
import { GVGVestigeRecType } from "../../db/GVGVestigeRec";
|
import { GVGVestigeRecModel, GVGVestigeRecType, GVGVestigeRecUpdate } from "../../db/GVGVestigeRec";
|
||||||
import { GVGVestigeSumRankModel, GVGVestigeSumRankType } from "../../db/GVGVestigeSumRank";
|
import { GVGVestigeSumRankModel, GVGVestigeSumRankType } from "../../db/GVGVestigeSumRank";
|
||||||
import { HeroModel, HeroType } from "../../db/Hero";
|
import { HeroModel, HeroType } from "../../db/Hero";
|
||||||
import { RoleModel } from "../../db/Role";
|
import { RoleModel } from "../../db/Role";
|
||||||
@@ -34,6 +34,9 @@ import { calFighterContribute } from "./gvgPrepareService";
|
|||||||
import { addVestigeLeagueRankRec, addVestigeRankMessage } from "./gvgRecService";
|
import { addVestigeLeagueRankRec, addVestigeRankMessage } from "./gvgRecService";
|
||||||
import { getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService";
|
import { getGroupKey, getGVGServerType, getPeriodByTime } from "./gvgService";
|
||||||
import { Combo } from "../../domain/battleField/pvp";
|
import { Combo } from "../../domain/battleField/pvp";
|
||||||
|
import { getRemoteRplPrefix } from "../../pubUtils/battleUtils";
|
||||||
|
import { pinus } from "pinus";
|
||||||
|
import { pushIconShow } from "../connectorService";
|
||||||
|
|
||||||
let gvgFightTime = undefined;
|
let gvgFightTime = undefined;
|
||||||
|
|
||||||
@@ -531,3 +534,15 @@ export function calVestigeLeagueBoxRewards(canReceiveRanks: { rank: number }[],
|
|||||||
leagueReward, rewards, boxPreview, canReceiveBox: canReceiveRanks.length > 0 || canReceivePlayerRanks.length > 0
|
leagueReward, rewards, boxPreview, canReceiveBox: canReceiveRanks.length > 0 || canReceivePlayerRanks.length > 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function pushGvgFightIconShow(roleId: string, battleCode: string) {
|
||||||
|
const rec = await GVGVestigeRecModel.findByBattleCode(battleCode);
|
||||||
|
let result: (GVGVestigeRecUpdate & { rplFileUrl: string })[] = [];
|
||||||
|
const { attackRoleId, hasRpl, remoteUrl } = rec;
|
||||||
|
const rplFileUrl = battleCode && hasRpl ? remoteUrl : '';
|
||||||
|
const obj = getVestigeRecStatus(rec);
|
||||||
|
if (obj.status == VESTIGE_STATUS.COMPLETE) result.push({ ...rec, endTime: obj.time, rplFileUrl });
|
||||||
|
let gvgFightRecs = { list: result, rplPrefixUrl: getRemoteRplPrefix(pinus.app.get('env')) };
|
||||||
|
|
||||||
|
await pushIconShow(roleId, false, gvgFightRecs)
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ import { gameData, getDicLadderMatchByMyRank, getLadderRankReward } from "../pub
|
|||||||
import { EXTERIOR, LADDER } from "../pubUtils/dicParam";
|
import { EXTERIOR, LADDER } from "../pubUtils/dicParam";
|
||||||
import { ItemInter, RewardInter } from "../pubUtils/interface";
|
import { ItemInter, RewardInter } from "../pubUtils/interface";
|
||||||
import { getRandValueByMinMax, shouldRefresh } from "../pubUtils/util";
|
import { getRandValueByMinMax, shouldRefresh } from "../pubUtils/util";
|
||||||
|
import { pushIconShow } from "./connectorService";
|
||||||
import { sendMailByContent } from "./mailService";
|
import { sendMailByContent } from "./mailService";
|
||||||
import { getHeroesAttributes } from "./playerCeService";
|
import { getHeroesAttributes } from "./playerCeService";
|
||||||
import { sendMessageToUserWithSuc } from "./pushService";
|
import { sendMessageToUserWithSuc } from "./pushService";
|
||||||
@@ -440,3 +441,10 @@ export async function getLadderOppDetailData(rec: LadderMatchRecType) {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function pushLadderIconShow(roleId: string, ladderIconShow:boolean) {
|
||||||
|
console.log('-x-11111x--x-x-x-x-x-xx- roleId', roleId)
|
||||||
|
console.log('-x-x--x11111-x-x-x-x-xx- ladderIconShow', ladderIconShow)
|
||||||
|
if (!roleId) return;
|
||||||
|
await pushIconShow(roleId, ladderIconShow);
|
||||||
|
}
|
||||||
@@ -214,5 +214,5 @@ export const PUSH_ROUTE = {
|
|||||||
GVG_REC_ADD: 'onGVGRecAdd', // 动态更新
|
GVG_REC_ADD: 'onGVGRecAdd', // 动态更新
|
||||||
ROUGE_COLLECT_UPDATE: 'onRougeCollectUpdate', // 更新图鉴
|
ROUGE_COLLECT_UPDATE: 'onRougeCollectUpdate', // 更新图鉴
|
||||||
ROUGE_CHALLENGE_UPDATE: 'onRougeChallengeUpdate', //更新学宫挑战进度
|
ROUGE_CHALLENGE_UPDATE: 'onRougeChallengeUpdate', //更新学宫挑战进度
|
||||||
|
LADDER_OR_GVG_ICON_SHOW: 'onLadderOrGvgIconShow', //名将擂台icon提示
|
||||||
}
|
}
|
||||||
@@ -127,6 +127,23 @@ export default class GVGVestigeRec extends BaseModel {
|
|||||||
}).select({ battleCode: 1, attackRoleId: 1, defenseRoleId: 1, _id: 0, endTime: 1, attackInfo: 1, defenseInfo: 1, hasRpl: 1, remoteUrl: 1 }).limit(1000).lean();
|
}).select({ battleCode: 1, attackRoleId: 1, defenseRoleId: 1, _id: 0, endTime: 1, attackInfo: 1, defenseInfo: 1, hasRpl: 1, remoteUrl: 1 }).limit(1000).lean();
|
||||||
return recs;
|
return recs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async findRecCurDay(roleId: string, startMs:number) {
|
||||||
|
const pipeline = [
|
||||||
|
{ $match: {endTime: { $gt: startMs }, $or: [{ attackRoleId: roleId }, { defenseRoleId: roleId }]} },
|
||||||
|
{ $sort: { endTime: -1 } },
|
||||||
|
// { $limit: 1000 },
|
||||||
|
];
|
||||||
|
let result:GVGVestigeRecType[] = []
|
||||||
|
const recs: GVGVestigeRecType[] = await GVGVestigeRecModel.aggregate(pipeline);
|
||||||
|
if (recs.length > 0) {
|
||||||
|
for(const obj of recs){
|
||||||
|
if(obj.defenseRoleId == roleId && (!obj.defenseInfo.isSuccess)) result.push(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const GVGVestigeRecModel = getModelForClass(GVGVestigeRec);
|
export const GVGVestigeRecModel = getModelForClass(GVGVestigeRec);
|
||||||
|
|||||||
@@ -122,6 +122,31 @@ export default class LadderMatchRec extends BaseModel {
|
|||||||
return recs;
|
return recs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找包含roleId最新一条记录
|
||||||
|
* @param roleId
|
||||||
|
* @returns true--表示查到最新一条roleId作为守方失败
|
||||||
|
*/
|
||||||
|
// public static async findOneRecByRoleId(roleId: string) {
|
||||||
|
// let recs: LadderMatchRecType = await LadderMatchRecModel.findOne({ $or: [{ roleId1: roleId }, { roleId2: roleId }], status: LADDER_STATUS.COMPLETE }).sort({ endTime: -1 }).limit(1).lean();
|
||||||
|
// if (recs && recs.roleId2 == roleId && (!recs.defenseInfo.isSuccess)) return true;
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
public static async findRecByRoleId(roleId: string, quitTime: number) {
|
||||||
|
const pipeline = [
|
||||||
|
{ $match: { endTime: { $gt: quitTime }, $or: [{ roleId1: roleId }, { roleId2: roleId }], status: LADDER_STATUS.COMPLETE } },
|
||||||
|
{ $sort: { endTime: -1 } },
|
||||||
|
// { $limit: 1 },
|
||||||
|
{ $project: { _id: 0, roleId2: 1, "defenseInfo.isSuccess": 1 } }
|
||||||
|
];
|
||||||
|
const recs: LadderMatchRecType[] = await LadderMatchRecModel.aggregate(pipeline);
|
||||||
|
for (let obj of recs) {
|
||||||
|
if (obj.roleId2 === roleId && !obj.defenseInfo.isSuccess) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static async checkByRank(serverId: number, roleId2: string) {
|
public static async checkByRank(serverId: number, roleId2: string) {
|
||||||
const result = await LadderMatchRecModel.exists({ serverId, roleId2, status: { $in: [LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK] } });
|
const result = await LadderMatchRecModel.exists({ serverId, roleId2, status: { $in: [LADDER_STATUS.BATTLE, LADDER_STATUS.CHECK] } });
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user