fix 黑帮争霸分组定时器

This commit is contained in:
dy 2023-12-23 12:30:11 +08:00
parent 077f7a488e
commit 14daa94dba

View File

@ -1,55 +1,58 @@
/** /**
* 300 * 300
* 100 * 100
* 100 * 100
*/ */
export async function zbsGroup(){ export async function zbsGroup() {
let arr = await G.mongodb.collection("hbzb_user_cross").find( let arr = await G.mongodb.collection("hbzb_user_cross").find(
{ "jifen": { $gt: -999999 } } {"jifen": {$gt: -999999}}
).sort( ).project({
{ "data.player.cTime": -1 } uid: 1,
).project({ jifen: 1,
uid:1, 'data.player.cTime': 1
jifen:1 }).toArray();
}).toArray();
// 移除mongo查询里的排序↑会造成内存超出报错
// 在内存里按照玩家注册时间相近的排序分组
R.sort((a, b) => b.data.player.cTime - a.data.player.cTime)
//有积分的玩家总数 //有积分的玩家总数
let groups = []; let groups = [];
let currGroup = []; let currGroup = [];
arr.map((u,index)=>{ arr.map((u, index) => {
if(currGroup.length >= 300){ if (currGroup.length >= 300) {
//每300个丢一组 //每300个丢一组
groups.push( currGroup ); groups.push(currGroup);
currGroup = []; currGroup = [];
} }
currGroup.push({uid: u.uid, jifen: u.jifen}); currGroup.push({uid: u.uid, jifen: u.jifen});
}); });
//循环完毕后检查余量 //循环完毕后检查余量
if(currGroup.length > 0){ if (currGroup.length > 0) {
if(currGroup.length >= 100){ if (currGroup.length >= 100) {
//如果有100人 就自己一组 //如果有100人 就自己一组
groups.push( currGroup ); groups.push(currGroup);
}else{ } else {
//不够100 就合到前一组 //不够100 就合到前一组
groups[groups.length] = (groups[groups.length]||[]).concat(currGroup); groups[groups.length] = (groups[groups.length] || []).concat(currGroup);
} }
currGroup = []; currGroup = [];
} }
//循环groups里的数据对每一组里按jifen降序排序然后给每个玩家分组 //循环groups里的数据对每一组里按jifen降序排序然后给每个玩家分组
groups.map((group,groupIndex)=>{ groups.map((group, groupIndex) => {
group.sort((a,b)=>{ group.sort((a, b) => {
return b.jifen - a.jifen; return b.jifen - a.jifen;
}); });
for(let i=0;i<group.length;i++){ for (let i = 0; i < group.length; i++) {
G.mongodb.collection("hbzb_user_cross").updateOne( G.mongodb.collection("hbzb_user_cross").updateOne(
{ uid: group[i].uid }, {uid: group[i].uid},
{ {
$set: { $set: {
"zbsgroup": "group"+(groupIndex+1), "zbsgroup": "group" + (groupIndex + 1),
"rank":(i+1), "rank": (i + 1),
} }
} }
) )
@ -60,46 +63,46 @@ export async function zbsGroup(){
/** /**
* *
*/ */
export async function getZbsRankList(uid?: string, _zbsgroup?: string) : Promise<{ myRank: any; rankList: any[]; }> { export async function getZbsRankList(uid?: string, _zbsgroup?: string): Promise<{ myRank: any; rankList: any[]; }> {
let myData; let myData;
let zbsgroup = _zbsgroup; let zbsgroup = _zbsgroup;
if(uid){ if (uid) {
myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid:uid}); myData = await G.crossmongodb.collection("hbzb_user_cross").findOne({uid: uid});
if(!myData || !myData?.zbsgroup)return null; if (!myData || !myData?.zbsgroup) return null;
zbsgroup = myData?.zbsgroup; zbsgroup = myData?.zbsgroup;
} }
let arr = await G.crossmongodb.collection("hbzb_user_cross").find( let arr = await G.crossmongodb.collection("hbzb_user_cross").find(
{ "zbsgroup": zbsgroup } {"zbsgroup": zbsgroup}
).sort( ).sort(
{ "rank": 1 } {"rank": 1}
).limit(100).toArray(); ).limit(100).toArray();
let rank = { let rank = {
"myRank":{}, "myRank": {},
"rankList" : [] "rankList": []
} }
let myRank = -1; let myRank = -1;
arr.map((u,index)=>{ arr.map((u, index) => {
rank.rankList.push( { rank.rankList.push({
player: ((u.data) as any).player || {}, player: ((u.data) as any).player || {},
roles: ((u.data) as any).roles || {}, 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; myRank = rank.rankList.length;
rank.myRank = { rank.myRank = {
player: ((u.data) as any).player || {}, player: ((u.data) as any).player || {},
roles: ((u.data) as any).roles || {}, roles: ((u.data) as any).roles || {},
rank : (index+1), rank: (index + 1),
//兼容前端 //兼容前端
valArr: [ (index+1) ] valArr: [(index + 1)]
}; };
} }
}) })