From 190897d7118f1e144cbcc71e000f466e2151095c Mon Sep 17 00:00:00 2001 From: luying Date: Sat, 6 May 2023 17:59:16 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(=E6=8E=92=E8=A1=8C=E6=A6=9C)?= =?UTF-8?q?:=20=E6=8E=92=E8=A1=8C=E6=A6=9C=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E6=9F=A5=E5=85=A8=E9=83=A8=E7=8E=A9=E5=AE=B6=E5=8F=AA=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=83=A8=E5=88=86=E7=8E=A9=E5=AE=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/rankHandler.ts | 2 +- game-server/app/services/rankService.ts | 21 +++++++++++++------ shared/pubUtils/redis.ts | 2 ++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/game-server/app/servers/role/handler/rankHandler.ts b/game-server/app/servers/role/handler/rankHandler.ts index 59c0dd6cd..03afd6dd9 100644 --- a/game-server/app/servers/role/handler/rankHandler.ts +++ b/game-server/app/servers/role/handler/rankHandler.ts @@ -94,7 +94,7 @@ export class RoleHandler { if (!redisKey) return resResult(STATUS.WRONG_PARMS); let r = new Rank(redisKey, { serverId, hid }); - let ranks = await r.getRankByRange(); + let ranks = await r.getRankByRange(200, 0); return resResult(STATUS.SUCCESS, { type, hid, ranks diff --git a/game-server/app/services/rankService.ts b/game-server/app/services/rankService.ts index 9cbf2ec08..855cd4e25 100644 --- a/game-server/app/services/rankService.ts +++ b/game-server/app/services/rankService.ts @@ -722,7 +722,7 @@ export class Rank { } public async getRankListWithMyRank(myId: myIdInter, isReverse = true) { - let ranks = await this.getRankByRange('+inf', '-inf', isReverse); + let ranks = await this.getRankByRange(1000, 0, isReverse); let newRanks = [], newMyRank: any; let myRank = ranks.find(cur => { return cur.isMyInfo(myId); @@ -745,13 +745,16 @@ export class Rank { * @param from * @param to */ - public async getRankDataByRankWithoutDetail(from: number | string = '+inf', to: number | string = '-inf') { + public async getRankDataByRankWithoutDetail(from: number | '+inf' = '+inf', to: number | '-inf' = '-inf') { let key = this.keyName.getName(); if (this.isUnion) { key = await this.generateUnionRank(); } - const rankFromDb = await redisClient().zrevrangebyscoreAsync(key, from, to, "WITHSCORES"); + const rankFromDb = (from == '+inf' && to == '-inf')? + (await redisClient().zrevrangebyscoreAsync(key, from, to, "WITHSCORES")): + (await redisClient().zrevrangeAsync(key, from, to, "WITHSCORES")) + ; let ranks: { rank: number, myId: {roleId?: string, guildCode?: string, hid?: number}, scores: number[] }[] = []; let num = 0; @@ -777,8 +780,14 @@ export class Rank { } const rankFromDb = isReverse? - (await redisClient().zrevrangebyscoreAsync(key, max, min, "WITHSCORES")): - (await redisClient().zrangebyscoreAsync(key, min, max, "WITHSCORES")); + ((max == '+inf' && min == '-inf')? + (await redisClient().zrevrangebyscoreAsync(key, max, min, "WITHSCORES")): + (await redisClient().zrevrangeAsync(key, min, max, "WITHSCORES")) + ): + ((max == '+inf' && min == '-inf')? + (await redisClient().zrangebyscoreAsync(key, min, max, "WITHSCORES")): + (await redisClient().zrangeAsync(key, min, max, "WITHSCORES")) + ) let num = 0; for (let ii = 0; ii < rankFromDb.length; ii += 2) { @@ -1244,7 +1253,7 @@ export async function getGeneralRank(role: RoleType & { rankReceived: number[] } return dic && dic.rankId == id; }); let r = new Rank(redisKey, { serverId }, false, 1); - let ranks = await r.getRankByRange('+inf', '-inf', id != RANK_TYPE.LADDER); + let ranks = await r.getRankByRange(1, 0, id != RANK_TYPE.LADDER); // if (ranks.length > 0) { let param = new GeneralRankParam(id, ranks[0], general, received); result.push({...param, general}); diff --git a/shared/pubUtils/redis.ts b/shared/pubUtils/redis.ts index 9aa2071e8..e2a92dd44 100644 --- a/shared/pubUtils/redis.ts +++ b/shared/pubUtils/redis.ts @@ -62,6 +62,8 @@ declare module 'redis' { zrevrankAsync(key: string, field: string): Promise; // 命令返回有序集中,指定区间内的成员,从大到小 zrevrangeAsync(key: string, start: number, end: number, withscores?: string): Promise; + // 命令返回有序集中,指定区间内的成员,从小到大 + zrangeAsync(key: string, start: number, end: number, withscores?: string): Promise; // 对有序集合中指定成员的分数加上增量 increment zincrbyAsync(key: string, increment: number, member: string): Promise; // 对有序集合中指定成员的分数加上增量 increment