diff --git a/game-server/app/services/ladderService.ts b/game-server/app/services/ladderService.ts index d8bc0c1c7..d97772840 100644 --- a/game-server/app/services/ladderService.ts +++ b/game-server/app/services/ladderService.ts @@ -1,15 +1,16 @@ import { ITEM_CHANGE_REASON, LADDER_OPP_STATUS, LADDER_STATUS, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY } from "../consts"; import { HeroType } from "../db/Hero"; import { LadderMatchModel, LadderMatchType, LadderUpdateInter } from "../db/LadderMatch"; -import { LadderMatchRecModel } from "../db/LadderMatchRec"; +import { LadderMatchRecModel, LadderMatchRecType } from "../db/LadderMatchRec"; import { RoleModel, RoleType } from "../db/Role"; -import { LadderDataReturn, LadderDefense, LadderOppPlayerHeroInfo, LadderOppPlayerInDB, LadderOppPlayerInfo, LadderOppPlayerReturn } from "../domain/battleField/ladder"; +import { LadderDataReturn, LadderDefense, LadderOppDetailReturn, LadderOppPlayerHeroInfo, LadderOppPlayerInDB, LadderOppPlayerInfo, LadderOppPlayerReturn } from "../domain/battleField/ladder"; import { RoleAndGuildRankInfo, RoleRankInfo } from "../domain/rank"; import { gameData, getDicLadderMatchByMyRank, getLadderRankReward } from "../pubUtils/data"; import { EXTERIOR, LADDER } from "../pubUtils/dicParam"; import { ItemInter, RewardInter } from "../pubUtils/interface"; import { getRandValueByMinMax, shouldRefresh } from "../pubUtils/util"; import { sendMailByContent } from "./mailService"; +import { getHeroesAttributes } from "./playerCeService"; import { sendMessageToUserWithSuc } from "./pushService"; import { Rank } from "./rankService"; import { addItems } from "./role/rewardService"; @@ -94,7 +95,7 @@ async function getOppPlayerDetailByDb(serverId: number, oppPlayers: LadderOppPla // 获取redis当中的玩家排名数据 export async function getLadderMatchByRank(serverId: number, max: number|'+inf', min: number|'-inf') { - let r = new Rank(REDIS_KEY.LADDER, { serverId }, false, 3000); + let r = new Rank(REDIS_KEY.LADDER, { serverId }, false, 4000); let rawResults = await r.getRankByRangeRaw(max, min, false); return rawResults.map(cur => ({ rank: cur.scores[0], roleId: cur.field })) } @@ -204,8 +205,10 @@ export async function getLadderOppStatus(ladderData: LadderMatchType, targetRole if(!curOppPlayer|| curOppPlayer.rank != rank) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE }; if(curOppPlayer.isRobot) { - let hisLadderData = await LadderMatchModel.checkByRank(rank); - if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE }; + if(rank <= 3000) { + let hisLadderData = await LadderMatchModel.checkByRank(rank); + if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE }; + } return { status: LADDER_OPP_STATUS.BATTLE, isRobot: true }; } else { @@ -336,4 +339,22 @@ export async function sendLadderDailyReward(serverId: number) { await sendMailByContent(MAIL_TYPE.LADDER, roleId, { params: [`${rank}`], goods: dicRankReward.reward }); } } +} + +export async function getLadderOppDetailData(rec: LadderMatchRecType) { + let isRobot = rec.defenseInfo.isRobot; + let dicLadderDifficultRatio = gameData.ladderDifficultRatio.get(rec.defenseInfo.oldRank); + let result = new LadderOppDetailReturn(rec); + if(isRobot) { + result.setByRobot(dicLadderDifficultRatio); + } else { + let hisLadderData = await LadderMatchModel.findByRoleIdAndInclude(rec.roleId2); + let dicWarJson = gameData.warJson.get(dicLadderDifficultRatio.gkId) + result.setByPlayer(hisLadderData, dicWarJson); + let attrByHid = await getHeroesAttributes(rec.roleId2); + for(let [hid, attribute] of attrByHid) { + result.setAttribute(hid, attribute.getAttributesToString()); + } + } + return result; } \ No newline at end of file diff --git a/shared/db/LadderMatch.ts b/shared/db/LadderMatch.ts index e3533d6f1..0972a92bc 100644 --- a/shared/db/LadderMatch.ts +++ b/shared/db/LadderMatch.ts @@ -78,7 +78,7 @@ export default class LadderMatch extends BaseModel { public static async findAll(serverId: number) { let result: LadderMatchType[] = [], latestTime = new Date(); while(latestTime) { - let ladderMatch = await LadderMatchModel.find({ serverId, rank: { $gt: 0, $lte: 3000 }, createdAt: { $lt: latestTime } }) + let ladderMatch = await LadderMatchModel.find({ serverId, rank: { $gt: 0 }, createdAt: { $lt: latestTime } }) .sort({ createdAt: -1 }) .populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt') .limit(1000); diff --git a/shared/resource/jsons/dic_zyz_ladder_rankReward.json b/shared/resource/jsons/dic_zyz_ladder_rankReward.json index 695ab65f2..268480362 100644 --- a/shared/resource/jsons/dic_zyz_ladder_rankReward.json +++ b/shared/resource/jsons/dic_zyz_ladder_rankReward.json @@ -52,11 +52,5 @@ "rankMin": 2000, "rankMax": 3000, "reward": "31002&100|31001&1000" - }, - { - "id": 10, - "rankMin": 3000, - "rankMax": -1, - "reward": "31002&100|31001&500" } ] \ No newline at end of file