From 14daa94dba2d9c490ffa77c75e2b556dbb5f051d Mon Sep 17 00:00:00 2001 From: dy Date: Sat, 23 Dec 2023 12:30:11 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E9=BB=91=E5=B8=AE=E4=BA=89=E9=9C=B8?= =?UTF-8?q?=E5=88=86=E7=BB=84=E5=AE=9A=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api_s2c/hbzb/zbs/fun.ts | 91 +++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/src/api_s2c/hbzb/zbs/fun.ts b/src/api_s2c/hbzb/zbs/fun.ts index f6abd0d..9c0dd83 100644 --- a/src/api_s2c/hbzb/zbs/fun.ts +++ b/src/api_s2c/hbzb/zbs/fun.ts @@ -1,55 +1,58 @@ /** * 争霸赛分组,每300个玩家分一组 * 最后一组:如果是有100人即往上人数 那就自己一组打 -* 如果不够100 就合到前一组 + * 如果不够100 就合到前一组 */ -export async function zbsGroup(){ +export async function zbsGroup() { let arr = await G.mongodb.collection("hbzb_user_cross").find( - { "jifen": { $gt: -999999 } } - ).sort( - { "data.player.cTime": -1 } - ).project({ - uid:1, - jifen:1 - }).toArray(); - + {"jifen": {$gt: -999999}} + ).project({ + uid: 1, + jifen: 1, + 'data.player.cTime': 1 + }).toArray(); + + // 移除mongo查询里的排序,↑会造成内存超出报错, + // 在内存里按照玩家注册时间相近的排序分组 + R.sort((a, b) => b.data.player.cTime - a.data.player.cTime) + //有积分的玩家总数 let groups = []; let currGroup = []; - - arr.map((u,index)=>{ - if(currGroup.length >= 300){ + + arr.map((u, index) => { + if (currGroup.length >= 300) { //每300个丢一组 - groups.push( currGroup ); + groups.push(currGroup); currGroup = []; } currGroup.push({uid: u.uid, jifen: u.jifen}); }); //循环完毕后检查余量 - if(currGroup.length > 0){ - if(currGroup.length >= 100){ + if (currGroup.length > 0) { + if (currGroup.length >= 100) { //如果有100人 就自己一组 - groups.push( currGroup ); - }else{ + groups.push(currGroup); + } else { //不够100 就合到前一组 - groups[groups.length] = (groups[groups.length]||[]).concat(currGroup); + groups[groups.length] = (groups[groups.length] || []).concat(currGroup); } currGroup = []; } //循环groups里的数据,对每一组里按jifen降序排序,然后给每个玩家分组 - groups.map((group,groupIndex)=>{ - group.sort((a,b)=>{ + groups.map((group, groupIndex) => { + group.sort((a, b) => { return b.jifen - a.jifen; }); - for(let i=0;i { +export async function getZbsRankList(uid?: string, _zbsgroup?: string): Promise<{ myRank: any; rankList: any[]; }> { let myData; let zbsgroup = _zbsgroup; - if(uid){ - myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid:uid}); - if(!myData || !myData?.zbsgroup)return null; + if (uid) { + myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid: uid}); + if (!myData || !myData?.zbsgroup) return null; zbsgroup = myData?.zbsgroup; } - + let arr = await G.crossmongodb.collection("hbzb_user_cross").find( - { "zbsgroup": zbsgroup } + {"zbsgroup": zbsgroup} ).sort( - { "rank": 1 } + {"rank": 1} ).limit(100).toArray(); - + let rank = { - "myRank":{}, - "rankList" : [] + "myRank": {}, + "rankList": [] } - + let myRank = -1; - arr.map((u,index)=>{ - rank.rankList.push( { + arr.map((u, index) => { + rank.rankList.push({ player: ((u.data) as any).player || {}, roles: ((u.data) as any).roles || {}, - rank : (index+1), + rank: (index + 1), //兼容前端 - valArr: [ (index+1) ] + valArr: [(index + 1)] }); - if(u.uid == uid){ + if (u.uid == uid) { myRank = rank.rankList.length; rank.myRank = { player: ((u.data) as any).player || {}, roles: ((u.data) as any).roles || {}, - rank : (index+1), + rank: (index + 1), //兼容前端 - valArr: [ (index+1) ] + valArr: [(index + 1)] }; } }) return rank; - + }