名将擂台:排行榜细节
This commit is contained in:
@@ -1,15 +1,16 @@
|
|||||||
import { ITEM_CHANGE_REASON, LADDER_OPP_STATUS, LADDER_STATUS, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY } from "../consts";
|
import { ITEM_CHANGE_REASON, LADDER_OPP_STATUS, LADDER_STATUS, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY } from "../consts";
|
||||||
import { HeroType } from "../db/Hero";
|
import { HeroType } from "../db/Hero";
|
||||||
import { LadderMatchModel, LadderMatchType, LadderUpdateInter } from "../db/LadderMatch";
|
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 { 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 { RoleAndGuildRankInfo, RoleRankInfo } from "../domain/rank";
|
||||||
import { gameData, getDicLadderMatchByMyRank, getLadderRankReward } from "../pubUtils/data";
|
import { gameData, getDicLadderMatchByMyRank, getLadderRankReward } from "../pubUtils/data";
|
||||||
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 { sendMailByContent } from "./mailService";
|
import { sendMailByContent } from "./mailService";
|
||||||
|
import { getHeroesAttributes } from "./playerCeService";
|
||||||
import { sendMessageToUserWithSuc } from "./pushService";
|
import { sendMessageToUserWithSuc } from "./pushService";
|
||||||
import { Rank } from "./rankService";
|
import { Rank } from "./rankService";
|
||||||
import { addItems } from "./role/rewardService";
|
import { addItems } from "./role/rewardService";
|
||||||
@@ -94,7 +95,7 @@ async function getOppPlayerDetailByDb(serverId: number, oppPlayers: LadderOppPla
|
|||||||
|
|
||||||
// 获取redis当中的玩家排名数据
|
// 获取redis当中的玩家排名数据
|
||||||
export async function getLadderMatchByRank(serverId: number, max: number|'+inf', min: number|'-inf') {
|
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);
|
let rawResults = await r.getRankByRangeRaw(max, min, false);
|
||||||
return rawResults.map(cur => ({ rank: cur.scores[0], roleId: cur.field }))
|
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|| curOppPlayer.rank != rank) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE };
|
||||||
|
|
||||||
if(curOppPlayer.isRobot) {
|
if(curOppPlayer.isRobot) {
|
||||||
let hisLadderData = await LadderMatchModel.checkByRank(rank);
|
if(rank <= 3000) {
|
||||||
if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE };
|
let hisLadderData = await LadderMatchModel.checkByRank(rank);
|
||||||
|
if(hisLadderData) return { status: LADDER_OPP_STATUS.OPP_RANK_CHANGE };
|
||||||
|
}
|
||||||
|
|
||||||
return { status: LADDER_OPP_STATUS.BATTLE, isRobot: true };
|
return { status: LADDER_OPP_STATUS.BATTLE, isRobot: true };
|
||||||
} else {
|
} else {
|
||||||
@@ -336,4 +339,22 @@ export async function sendLadderDailyReward(serverId: number) {
|
|||||||
await sendMailByContent(MAIL_TYPE.LADDER, roleId, { params: [`${rank}`], goods: dicRankReward.reward });
|
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;
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ export default class LadderMatch extends BaseModel {
|
|||||||
public static async findAll(serverId: number) {
|
public static async findAll(serverId: number) {
|
||||||
let result: LadderMatchType[] = [], latestTime = new Date();
|
let result: LadderMatchType[] = [], latestTime = new Date();
|
||||||
while(latestTime) {
|
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 })
|
.sort({ createdAt: -1 })
|
||||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
|
.populate('role', 'roleId roleName head frame spine heads frames spines title lv updatedAt')
|
||||||
.limit(1000);
|
.limit(1000);
|
||||||
|
|||||||
@@ -52,11 +52,5 @@
|
|||||||
"rankMin": 2000,
|
"rankMin": 2000,
|
||||||
"rankMax": 3000,
|
"rankMax": 3000,
|
||||||
"reward": "31002&100|31001&1000"
|
"reward": "31002&100|31001&1000"
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 10,
|
|
||||||
"rankMin": 3000,
|
|
||||||
"rankMax": -1,
|
|
||||||
"reward": "31002&100|31001&500"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user