From 3c034fb29691f607811898f42f1e1f06866951e9 Mon Sep 17 00:00:00 2001 From: dy Date: Wed, 27 Dec 2023 17:53:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=8F10=E5=88=86=E9=92=9F=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E6=8E=92=E8=A1=8C=E6=A6=9C=E5=89=8D=E4=B8=80=E5=8D=83=E5=90=8D?= =?UTF-8?q?=E7=8E=A9=E5=AE=B6=E7=9A=84=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_s2c/jjc/ApiOpen.ts | 5 ++++- src/public/jjc.ts | 39 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/api_s2c/jjc/ApiOpen.ts b/src/api_s2c/jjc/ApiOpen.ts index d9743a8..4002e1a 100644 --- a/src/api_s2c/jjc/ApiOpen.ts +++ b/src/api_s2c/jjc/ApiOpen.ts @@ -27,4 +27,7 @@ export default async function (call: ApiCall) { ...data, ...enemy }); -} + + JJCFun.checkUpdatePlayer() + +} \ No newline at end of file diff --git a/src/public/jjc.ts b/src/public/jjc.ts index 9bf4232..d571417 100644 --- a/src/public/jjc.ts +++ b/src/public/jjc.ts @@ -87,6 +87,45 @@ export class JJCFun { return rankList } + /** + * 每10分钟刷新前一千名玩家的用户数据 + * @param min + * @param max + * @param uTimeOffset + * @param isUpdate 是否更新数据 + */ + static async checkUpdatePlayer(min: number = 0, max: number = 1000, uTimeOffset: number = 600, isUpdate: boolean = true) { + // 获取指定排名用户uid + let sortInfo = await this.getRankListUid(min, max) + if (!sortInfo.length) return [] + let updateArr = [] + + let users = await G.redis.hGetAll('rank:jjc:data') + + for (let i = 0; i < sortInfo.length; i++) { + let uid = sortInfo[i] + let rankInfo = users[uid] + if (!rankInfo?.player) continue + // 比对utime,判断是否更新数据 + if (!rankInfo.player.isNpc) { + if (!rankInfo.utime || (rankInfo.utime && rankInfo.utime < (G.time - uTimeOffset))) { + updateArr.push(rankInfo) + } + } + } + // 更新数据 + if (isUpdate && updateArr.length > 0) { + let playerArrInfo = await G.mongodb.collection("user").find({uid: {$in: updateArr.map(i => i.uid)}}).toArray() + for (let i = 0; i < playerArrInfo.length; i++) { + let playerInfo = playerArrInfo[i] + let index = updateArr.findIndex(x => x.player.uid == playerInfo.uid) + updateArr[index].player = playerInfo + updateArr[index].utime = G.time + this.updatePlayerData(playerInfo.uid, updateArr[index]); + } + } + } + /** * 获取指定范围排名的用户,仅返回uid[] * @param min